From 00dc753add532129ac5f288b1019c4c73d6bf86c Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 13 Sep 2024 23:26:37 +0100 Subject: [PATCH] Module bundling improved to reduce number of requests to 1 JavaScript and 1 CSS file per webpage excl. external resources such as Recaptcha --- .../pip-23.0.1.dist-info/INSTALLER | 1 - .../pip-23.0.1.dist-info/METADATA | 88 - .../site-packages/pip-23.0.1.dist-info/RECORD | 1002 -------- .../pip-23.0.1.dist-info/REQUESTED | 0 .../site-packages/pip-23.0.1.dist-info/WHEEL | 5 - .../pip-23.0.1.dist-info/entry_points.txt | 4 - .../pip-23.0.1.dist-info/top_level.txt | 1 - .../site-packages/pip-24.0.dist-info/RECORD | 6 +- .../pip/__pycache__/__init__.cpython-312.pyc | Bin 726 -> 726 bytes .../pip/__pycache__/__init__.cpython-38.pyc | Bin 667 -> 0 bytes .../pip/__pycache__/__main__.cpython-312.pyc | Bin 882 -> 882 bytes .../pip/__pycache__/__main__.cpython-38.pyc | Bin 627 -> 0 bytes .../__pip-runner__.cpython-312.pyc | Bin 2245 -> 2245 bytes .../__pycache__/__pip-runner__.cpython-38.pyc | Bin 1684 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 828 -> 828 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 788 -> 0 bytes .../__pycache__/build_env.cpython-312.pyc | Bin 14335 -> 14335 bytes .../__pycache__/build_env.cpython-38.pyc | Bin 9662 -> 0 bytes .../__pycache__/cache.cpython-312.pyc | Bin 12706 -> 12706 bytes .../__pycache__/cache.cpython-38.pyc | Bin 9256 -> 0 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 17707 -> 17707 bytes .../__pycache__/configuration.cpython-38.pyc | Bin 11313 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 33325 -> 33325 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 26179 -> 0 bytes .../__pycache__/main.cpython-312.pyc | Bin 711 -> 711 bytes .../_internal/__pycache__/main.cpython-38.pyc | Bin 653 -> 0 bytes .../__pycache__/pyproject.cpython-312.pyc | Bin 5012 -> 5012 bytes .../__pycache__/pyproject.cpython-38.pyc | Bin 3667 -> 0 bytes .../self_outdated_check.cpython-312.pyc | Bin 10593 -> 10593 bytes .../self_outdated_check.cpython-38.pyc | Bin 6614 -> 0 bytes .../__pycache__/wheel_builder.cpython-312.pyc | Bin 13690 -> 13690 bytes .../__pycache__/wheel_builder.cpython-38.pyc | Bin 9198 -> 0 bytes .../cli/__pycache__/__init__.cpython-312.pyc | Bin 319 -> 319 bytes .../cli/__pycache__/__init__.cpython-38.pyc | Bin 308 -> 0 bytes .../autocompletion.cpython-312.pyc | Bin 8506 -> 8506 bytes .../__pycache__/autocompletion.cpython-38.pyc | Bin 5333 -> 0 bytes .../__pycache__/base_command.cpython-312.pyc | Bin 10496 -> 10496 bytes .../__pycache__/base_command.cpython-38.pyc | Bin 6190 -> 0 bytes .../__pycache__/cmdoptions.cpython-312.pyc | Bin 30415 -> 30415 bytes .../cli/__pycache__/cmdoptions.cpython-38.pyc | Bin 23264 -> 0 bytes .../command_context.cpython-312.pyc | Bin 1822 -> 1822 bytes .../command_context.cpython-38.pyc | Bin 1324 -> 0 bytes .../cli/__pycache__/main.cpython-312.pyc | Bin 2339 -> 2339 bytes .../cli/__pycache__/main.cpython-38.pyc | Bin 1394 -> 0 bytes .../__pycache__/main_parser.cpython-312.pyc | Bin 4946 -> 4946 bytes .../__pycache__/main_parser.cpython-38.pyc | Bin 3049 -> 0 bytes .../cli/__pycache__/parser.cpython-312.pyc | Bin 15063 -> 15063 bytes .../cli/__pycache__/parser.cpython-38.pyc | Bin 9984 -> 0 bytes .../__pycache__/progress_bars.cpython-312.pyc | Bin 2661 -> 2661 bytes .../__pycache__/progress_bars.cpython-38.pyc | Bin 1920 -> 0 bytes .../__pycache__/req_command.cpython-312.pyc | Bin 18893 -> 18893 bytes .../__pycache__/req_command.cpython-38.pyc | Bin 13062 -> 0 bytes .../cli/__pycache__/spinners.cpython-312.pyc | Bin 7881 -> 7881 bytes .../cli/__pycache__/spinners.cpython-38.pyc | Bin 4989 -> 0 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 416 -> 416 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 387 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 4043 -> 4043 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 3195 -> 0 bytes .../__pycache__/cache.cpython-312.pyc | Bin 9752 -> 9752 bytes .../commands/__pycache__/cache.cpython-38.pyc | Bin 6272 -> 0 bytes .../__pycache__/check.cpython-312.pyc | Bin 2131 -> 2131 bytes .../commands/__pycache__/check.cpython-38.pyc | Bin 1601 -> 0 bytes .../__pycache__/completion.cpython-312.pyc | Bin 5233 -> 5233 bytes .../__pycache__/completion.cpython-38.pyc | Bin 4202 -> 0 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 13253 -> 13253 bytes .../__pycache__/configuration.cpython-38.pyc | Bin 8937 -> 0 bytes .../__pycache__/debug.cpython-312.pyc | Bin 10202 -> 10202 bytes .../commands/__pycache__/debug.cpython-38.pyc | Bin 6644 -> 0 bytes .../__pycache__/download.cpython-312.pyc | Bin 7630 -> 7630 bytes .../__pycache__/download.cpython-38.pyc | Bin 4266 -> 0 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 4397 -> 4397 bytes .../__pycache__/freeze.cpython-38.pyc | Bin 2670 -> 0 bytes .../commands/__pycache__/hash.cpython-312.pyc | Bin 3024 -> 3024 bytes .../commands/__pycache__/hash.cpython-38.pyc | Bin 2152 -> 0 bytes .../commands/__pycache__/help.cpython-312.pyc | Bin 1714 -> 1714 bytes .../commands/__pycache__/help.cpython-38.pyc | Bin 1341 -> 0 bytes .../__pycache__/index.cpython-312.pyc | Bin 6761 -> 6761 bytes .../commands/__pycache__/index.cpython-38.pyc | Bin 4577 -> 0 bytes .../__pycache__/inspect.cpython-312.pyc | Bin 4016 -> 4016 bytes .../__pycache__/inspect.cpython-38.pyc | Bin 3013 -> 0 bytes .../__pycache__/install.cpython-312.pyc | Bin 28954 -> 28954 bytes .../__pycache__/install.cpython-38.pyc | Bin 20195 -> 0 bytes .../commands/__pycache__/list.cpython-312.pyc | Bin 15441 -> 15441 bytes .../commands/__pycache__/list.cpython-38.pyc | Bin 10246 -> 0 bytes .../__pycache__/search.cpython-312.pyc | Bin 7662 -> 7662 bytes .../__pycache__/search.cpython-38.pyc | Bin 5353 -> 0 bytes .../commands/__pycache__/show.cpython-312.pyc | Bin 9769 -> 9769 bytes .../commands/__pycache__/show.cpython-38.pyc | Bin 6466 -> 0 bytes .../__pycache__/uninstall.cpython-312.pyc | Bin 4767 -> 4767 bytes .../__pycache__/uninstall.cpython-38.pyc | Bin 3363 -> 0 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 8997 -> 8997 bytes .../commands/__pycache__/wheel.cpython-38.pyc | Bin 5476 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 982 -> 982 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 831 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 2903 -> 2903 bytes .../__pycache__/base.cpython-38.pyc | Bin 1935 -> 0 bytes .../__pycache__/installed.cpython-312.pyc | Bin 1741 -> 1741 bytes .../__pycache__/installed.cpython-38.pyc | Bin 1309 -> 0 bytes .../__pycache__/sdist.cpython-312.pyc | Bin 8529 -> 8529 bytes .../__pycache__/sdist.cpython-38.pyc | Bin 5123 -> 0 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 2289 -> 2289 bytes .../__pycache__/wheel.cpython-38.pyc | Bin 1676 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 273 -> 273 bytes .../index/__pycache__/__init__.cpython-38.pyc | Bin 262 -> 0 bytes .../__pycache__/collector.cpython-312.pyc | Bin 21927 -> 21927 bytes .../__pycache__/collector.cpython-38.pyc | Bin 15319 -> 0 bytes .../package_finder.cpython-312.pyc | Bin 40776 -> 40776 bytes .../__pycache__/package_finder.cpython-38.pyc | Bin 29491 -> 0 bytes .../index/__pycache__/sources.cpython-312.pyc | Bin 12645 -> 12645 bytes .../index/__pycache__/sources.cpython-38.pyc | Bin 7227 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 16817 -> 16817 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 11125 -> 0 bytes .../__pycache__/_distutils.cpython-312.pyc | Bin 6897 -> 6897 bytes .../__pycache__/_distutils.cpython-38.pyc | Bin 4660 -> 0 bytes .../__pycache__/_sysconfig.cpython-312.pyc | Bin 8052 -> 8052 bytes .../__pycache__/_sysconfig.cpython-38.pyc | Bin 6067 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 3822 -> 3822 bytes .../locations/__pycache__/base.cpython-38.pyc | Bin 2445 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 5923 -> 5923 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 4787 -> 0 bytes .../__pycache__/_json.cpython-312.pyc | Bin 2916 -> 2916 bytes .../metadata/__pycache__/_json.cpython-38.pyc | Bin 2321 -> 0 bytes .../metadata/__pycache__/base.cpython-312.pyc | Bin 35753 -> 35753 bytes .../metadata/__pycache__/base.cpython-38.pyc | Bin 27072 -> 0 bytes .../__pycache__/pkg_resources.cpython-312.pyc | Bin 15831 -> 15831 bytes .../__pycache__/pkg_resources.cpython-38.pyc | Bin 10260 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 399 -> 399 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 353 -> 0 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 3374 -> 3374 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 2799 -> 0 bytes .../__pycache__/_dists.cpython-312.pyc | Bin 13466 -> 13466 bytes .../__pycache__/_dists.cpython-38.pyc | Bin 8901 -> 0 bytes .../__pycache__/_envs.cpython-312.pyc | Bin 11221 -> 11221 bytes .../__pycache__/_envs.cpython-38.pyc | Bin 7625 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 307 -> 307 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 296 -> 0 bytes .../__pycache__/candidate.cpython-312.pyc | Bin 1946 -> 1946 bytes .../__pycache__/candidate.cpython-38.pyc | Bin 1479 -> 0 bytes .../__pycache__/direct_url.cpython-312.pyc | Bin 11240 -> 11240 bytes .../__pycache__/direct_url.cpython-38.pyc | Bin 7441 -> 0 bytes .../format_control.cpython-312.pyc | Bin 4268 -> 4268 bytes .../__pycache__/format_control.cpython-38.pyc | Bin 2758 -> 0 bytes .../models/__pycache__/index.cpython-312.pyc | Bin 1735 -> 1735 bytes .../models/__pycache__/index.cpython-38.pyc | Bin 1272 -> 0 bytes .../installation_report.cpython-312.pyc | Bin 2313 -> 2313 bytes .../installation_report.cpython-38.pyc | Bin 1796 -> 0 bytes .../models/__pycache__/link.cpython-312.pyc | Bin 26043 -> 26043 bytes .../models/__pycache__/link.cpython-38.pyc | Bin 16982 -> 0 bytes .../models/__pycache__/scheme.cpython-312.pyc | Bin 1210 -> 1210 bytes .../models/__pycache__/scheme.cpython-38.pyc | Bin 1068 -> 0 bytes .../__pycache__/search_scope.cpython-312.pyc | Bin 5129 -> 5129 bytes .../__pycache__/search_scope.cpython-38.pyc | Bin 3579 -> 0 bytes .../selection_prefs.cpython-312.pyc | Bin 1892 -> 1892 bytes .../selection_prefs.cpython-38.pyc | Bin 1734 -> 0 bytes .../__pycache__/target_python.cpython-312.pyc | Bin 4995 -> 4995 bytes .../__pycache__/target_python.cpython-38.pyc | Bin 3472 -> 0 bytes .../models/__pycache__/wheel.cpython-312.pyc | Bin 5821 -> 5821 bytes .../models/__pycache__/wheel.cpython-38.pyc | Bin 4507 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 295 -> 295 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 284 -> 0 bytes .../network/__pycache__/auth.cpython-312.pyc | Bin 22037 -> 22037 bytes .../network/__pycache__/auth.cpython-38.pyc | Bin 12009 -> 0 bytes .../network/__pycache__/cache.cpython-312.pyc | Bin 6559 -> 6559 bytes .../network/__pycache__/cache.cpython-38.pyc | Bin 2884 -> 0 bytes .../__pycache__/download.cpython-312.pyc | Bin 8594 -> 8594 bytes .../__pycache__/download.cpython-38.pyc | Bin 5563 -> 0 bytes .../__pycache__/lazy_wheel.cpython-312.pyc | Bin 11704 -> 11704 bytes .../__pycache__/lazy_wheel.cpython-38.pyc | Bin 8397 -> 0 bytes .../__pycache__/session.cpython-312.pyc | Bin 18815 -> 18815 bytes .../__pycache__/session.cpython-38.pyc | Bin 12485 -> 0 bytes .../network/__pycache__/utils.cpython-312.pyc | Bin 2294 -> 2294 bytes .../network/__pycache__/utils.cpython-38.pyc | Bin 1477 -> 0 bytes .../__pycache__/xmlrpc.cpython-312.pyc | Bin 2990 -> 2990 bytes .../network/__pycache__/xmlrpc.cpython-38.pyc | Bin 2101 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 238 -> 238 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 232 -> 0 bytes .../__pycache__/check.cpython-312.pyc | Bin 7620 -> 7620 bytes .../__pycache__/check.cpython-38.pyc | Bin 4057 -> 0 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 10158 -> 10158 bytes .../__pycache__/freeze.cpython-38.pyc | Bin 6183 -> 0 bytes .../__pycache__/prepare.cpython-312.pyc | Bin 25788 -> 25788 bytes .../__pycache__/prepare.cpython-38.pyc | Bin 14949 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 244 -> 244 bytes .../build/__pycache__/__init__.cpython-38.pyc | Bin 238 -> 0 bytes .../__pycache__/build_tracker.cpython-312.pyc | Bin 7864 -> 7864 bytes .../__pycache__/build_tracker.cpython-38.pyc | Bin 4152 -> 0 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 1921 -> 1921 bytes .../build/__pycache__/metadata.cpython-38.pyc | Bin 1417 -> 0 bytes .../metadata_editable.cpython-312.pyc | Bin 1955 -> 1955 bytes .../metadata_editable.cpython-38.pyc | Bin 1451 -> 0 bytes .../metadata_legacy.cpython-312.pyc | Bin 3106 -> 3106 bytes .../metadata_legacy.cpython-38.pyc | Bin 2323 -> 0 bytes .../build/__pycache__/wheel.cpython-312.pyc | Bin 1725 -> 1725 bytes .../build/__pycache__/wheel.cpython-38.pyc | Bin 1237 -> 0 bytes .../wheel_editable.cpython-312.pyc | Bin 2066 -> 2066 bytes .../__pycache__/wheel_editable.cpython-38.pyc | Bin 1453 -> 0 bytes .../__pycache__/wheel_legacy.cpython-312.pyc | Bin 3970 -> 3970 bytes .../__pycache__/wheel_legacy.cpython-38.pyc | Bin 2746 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 307 -> 307 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 296 -> 0 bytes .../editable_legacy.cpython-312.pyc | Bin 1858 -> 1858 bytes .../editable_legacy.cpython-38.pyc | Bin 1477 -> 0 bytes .../install/__pycache__/legacy.cpython-38.pyc | Bin 3240 -> 0 bytes .../install/__pycache__/wheel.cpython-312.pyc | Bin 33900 -> 33900 bytes .../install/__pycache__/wheel.cpython-38.pyc | Bin 20858 -> 0 bytes .../_internal/operations/install/legacy.py | 120 - .../req/__pycache__/__init__.cpython-312.pyc | Bin 3784 -> 3784 bytes .../req/__pycache__/__init__.cpython-38.pyc | Bin 2581 -> 0 bytes .../__pycache__/constructors.cpython-312.pyc | Bin 21623 -> 21623 bytes .../__pycache__/constructors.cpython-38.pyc | Bin 12322 -> 0 bytes .../req/__pycache__/req_file.cpython-312.pyc | Bin 21502 -> 21502 bytes .../req/__pycache__/req_file.cpython-38.pyc | Bin 13566 -> 0 bytes .../__pycache__/req_install.cpython-312.pyc | Bin 38455 -> 38455 bytes .../__pycache__/req_install.cpython-38.pyc | Bin 24387 -> 0 bytes .../req/__pycache__/req_set.cpython-312.pyc | Bin 7259 -> 7259 bytes .../req/__pycache__/req_set.cpython-38.pyc | Bin 4017 -> 0 bytes .../__pycache__/req_uninstall.cpython-312.pyc | Bin 33018 -> 33018 bytes .../__pycache__/req_uninstall.cpython-38.pyc | Bin 18906 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 238 -> 238 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 232 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 1226 -> 1226 bytes .../__pycache__/base.cpython-38.pyc | Bin 1091 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 245 -> 245 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 239 -> 0 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 22480 -> 22480 bytes .../__pycache__/resolver.cpython-38.pyc | Bin 14933 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 249 -> 249 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 243 -> 0 bytes .../__pycache__/base.cpython-312.pyc | Bin 8378 -> 8378 bytes .../__pycache__/base.cpython-38.pyc | Bin 6652 -> 0 bytes .../__pycache__/candidates.cpython-312.pyc | Bin 30439 -> 30439 bytes .../__pycache__/candidates.cpython-38.pyc | Bin 18837 -> 0 bytes .../__pycache__/factory.cpython-312.pyc | Bin 32155 -> 32155 bytes .../__pycache__/factory.cpython-38.pyc | Bin 19031 -> 0 bytes .../found_candidates.cpython-312.pyc | Bin 6249 -> 6249 bytes .../found_candidates.cpython-38.pyc | Bin 4884 -> 0 bytes .../__pycache__/provider.cpython-312.pyc | Bin 10419 -> 10419 bytes .../__pycache__/provider.cpython-38.pyc | Bin 7698 -> 0 bytes .../__pycache__/reporter.cpython-312.pyc | Bin 4976 -> 4976 bytes .../__pycache__/reporter.cpython-38.pyc | Bin 3304 -> 0 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 11470 -> 11470 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 7640 -> 0 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 12392 -> 12392 bytes .../__pycache__/resolver.cpython-38.pyc | Bin 8198 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 233 -> 233 bytes .../utils/__pycache__/__init__.cpython-38.pyc | Bin 227 -> 0 bytes .../__pycache__/_jaraco_text.cpython-312.pyc | Bin 4574 -> 4574 bytes .../utils/__pycache__/_log.cpython-312.pyc | Bin 1904 -> 1904 bytes .../utils/__pycache__/_log.cpython-38.pyc | Bin 1546 -> 0 bytes .../utils/__pycache__/appdirs.cpython-312.pyc | Bin 2448 -> 2448 bytes .../utils/__pycache__/appdirs.cpython-38.pyc | Bin 1658 -> 0 bytes .../utils/__pycache__/compat.cpython-312.pyc | Bin 2251 -> 2251 bytes .../utils/__pycache__/compat.cpython-38.pyc | Bin 1540 -> 0 bytes .../compatibility_tags.cpython-312.pyc | Bin 5599 -> 5599 bytes .../compatibility_tags.cpython-38.pyc | Bin 4108 -> 0 bytes .../__pycache__/datetime.cpython-312.pyc | Bin 722 -> 722 bytes .../utils/__pycache__/datetime.cpython-38.pyc | Bin 546 -> 0 bytes .../__pycache__/deprecation.cpython-312.pyc | Bin 4224 -> 4224 bytes .../__pycache__/deprecation.cpython-38.pyc | Bin 5037 -> 0 bytes .../direct_url_helpers.cpython-312.pyc | Bin 3601 -> 3601 bytes .../direct_url_helpers.cpython-38.pyc | Bin 2148 -> 0 bytes .../__pycache__/distutils_args.cpython-38.pyc | Bin 1138 -> 0 bytes .../__pycache__/egg_link.cpython-312.pyc | Bin 3264 -> 3264 bytes .../utils/__pycache__/egg_link.cpython-38.pyc | Bin 2188 -> 0 bytes .../__pycache__/encoding.cpython-312.pyc | Bin 2196 -> 2196 bytes .../utils/__pycache__/encoding.cpython-38.pyc | Bin 1354 -> 0 bytes .../__pycache__/entrypoints.cpython-312.pyc | Bin 4031 -> 4031 bytes .../__pycache__/entrypoints.cpython-38.pyc | Bin 2734 -> 0 bytes .../__pycache__/filesystem.cpython-312.pyc | Bin 7496 -> 7496 bytes .../__pycache__/filesystem.cpython-38.pyc | Bin 4477 -> 0 bytes .../__pycache__/filetypes.cpython-312.pyc | Bin 1202 -> 1202 bytes .../__pycache__/filetypes.cpython-38.pyc | Bin 977 -> 0 bytes .../utils/__pycache__/glibc.cpython-312.pyc | Bin 2380 -> 2380 bytes .../utils/__pycache__/glibc.cpython-38.pyc | Bin 1714 -> 0 bytes .../utils/__pycache__/hashes.cpython-312.pyc | Bin 7592 -> 7592 bytes .../utils/__pycache__/hashes.cpython-38.pyc | Bin 5247 -> 0 bytes .../inject_securetransport.cpython-38.pyc | Bin 1020 -> 0 bytes .../utils/__pycache__/logging.cpython-312.pyc | Bin 13595 -> 13595 bytes .../utils/__pycache__/logging.cpython-38.pyc | Bin 9724 -> 0 bytes .../utils/__pycache__/misc.cpython-312.pyc | Bin 34159 -> 34159 bytes .../utils/__pycache__/misc.cpython-38.pyc | Bin 22445 -> 0 bytes .../utils/__pycache__/models.cpython-312.pyc | Bin 2750 -> 2750 bytes .../utils/__pycache__/models.cpython-38.pyc | Bin 2095 -> 0 bytes .../__pycache__/packaging.cpython-312.pyc | Bin 2621 -> 2621 bytes .../__pycache__/packaging.cpython-38.pyc | Bin 2117 -> 0 bytes .../setuptools_build.cpython-312.pyc | Bin 4588 -> 4588 bytes .../setuptools_build.cpython-38.pyc | Bin 4633 -> 0 bytes .../__pycache__/subprocess.cpython-312.pyc | Bin 8756 -> 8756 bytes .../__pycache__/subprocess.cpython-38.pyc | Bin 5716 -> 0 bytes .../__pycache__/temp_dir.cpython-312.pyc | Bin 12100 -> 12100 bytes .../utils/__pycache__/temp_dir.cpython-38.pyc | Bin 7309 -> 0 bytes .../__pycache__/unpacking.cpython-312.pyc | Bin 11146 -> 11146 bytes .../__pycache__/unpacking.cpython-38.pyc | Bin 6678 -> 0 bytes .../utils/__pycache__/urls.cpython-312.pyc | Bin 2443 -> 2443 bytes .../utils/__pycache__/urls.cpython-38.pyc | Bin 1647 -> 0 bytes .../__pycache__/virtualenv.cpython-312.pyc | Bin 4518 -> 4518 bytes .../__pycache__/virtualenv.cpython-38.pyc | Bin 3311 -> 0 bytes .../utils/__pycache__/wheel.cpython-312.pyc | Bin 5964 -> 5964 bytes .../utils/__pycache__/wheel.cpython-38.pyc | Bin 4521 -> 0 bytes .../pip/_internal/utils/distutils_args.py | 43 - .../_internal/utils/inject_securetransport.py | 35 - .../vcs/__pycache__/__init__.cpython-312.pyc | Bin 572 -> 572 bytes .../vcs/__pycache__/__init__.cpython-38.pyc | Bin 550 -> 0 bytes .../vcs/__pycache__/bazaar.cpython-312.pyc | Bin 5064 -> 5064 bytes .../vcs/__pycache__/bazaar.cpython-38.pyc | Bin 3556 -> 0 bytes .../vcs/__pycache__/git.cpython-312.pyc | Bin 19033 -> 19033 bytes .../vcs/__pycache__/git.cpython-38.pyc | Bin 12639 -> 0 bytes .../vcs/__pycache__/mercurial.cpython-312.pyc | Bin 7653 -> 7653 bytes .../vcs/__pycache__/mercurial.cpython-38.pyc | Bin 5095 -> 0 bytes .../__pycache__/subversion.cpython-312.pyc | Bin 12525 -> 12525 bytes .../vcs/__pycache__/subversion.cpython-38.pyc | Bin 8544 -> 0 bytes .../versioncontrol.cpython-312.pyc | Bin 29051 -> 29051 bytes .../__pycache__/versioncontrol.cpython-38.pyc | Bin 21249 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 4734 -> 4734 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 3155 -> 0 bytes .../_vendor/__pycache__/six.cpython-312.pyc | Bin 41311 -> 41311 bytes .../_vendor/__pycache__/six.cpython-38.pyc | Bin 27522 -> 0 bytes .../typing_extensions.cpython-312.pyc | Bin 122091 -> 122091 bytes .../typing_extensions.cpython-38.pyc | Bin 66181 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 944 -> 944 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 678 -> 0 bytes .../__pycache__/_cmd.cpython-312.pyc | Bin 2688 -> 2688 bytes .../__pycache__/_cmd.cpython-38.pyc | Bin 1612 -> 0 bytes .../__pycache__/adapter.cpython-312.pyc | Bin 6506 -> 6506 bytes .../__pycache__/adapter.cpython-38.pyc | Bin 3175 -> 0 bytes .../__pycache__/cache.cpython-312.pyc | Bin 3851 -> 3851 bytes .../__pycache__/cache.cpython-38.pyc | Bin 2702 -> 0 bytes .../__pycache__/compat.cpython-38.pyc | Bin 792 -> 0 bytes .../__pycache__/controller.cpython-312.pyc | Bin 16209 -> 16209 bytes .../__pycache__/controller.cpython-38.pyc | Bin 8642 -> 0 bytes .../__pycache__/filewrapper.cpython-312.pyc | Bin 4389 -> 4389 bytes .../__pycache__/filewrapper.cpython-38.pyc | Bin 2826 -> 0 bytes .../__pycache__/heuristics.cpython-312.pyc | Bin 6736 -> 6736 bytes .../__pycache__/heuristics.cpython-38.pyc | Bin 4770 -> 0 bytes .../__pycache__/serialize.cpython-312.pyc | Bin 6447 -> 6447 bytes .../__pycache__/serialize.cpython-38.pyc | Bin 4412 -> 0 bytes .../__pycache__/wrapper.cpython-312.pyc | Bin 1716 -> 1716 bytes .../__pycache__/wrapper.cpython-38.pyc | Bin 709 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 477 -> 477 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 397 -> 0 bytes .../__pycache__/file_cache.cpython-312.pyc | Bin 7752 -> 7752 bytes .../__pycache__/file_cache.cpython-38.pyc | Bin 4913 -> 0 bytes .../__pycache__/redis_cache.cpython-312.pyc | Bin 2780 -> 2780 bytes .../__pycache__/redis_cache.cpython-38.pyc | Bin 1645 -> 0 bytes .../pip/_vendor/cachecontrol/compat.py | 32 - .../__pycache__/__init__.cpython-312.pyc | Bin 360 -> 360 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 340 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 687 -> 687 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 488 -> 0 bytes .../certifi/__pycache__/core.cpython-312.pyc | Bin 2891 -> 2891 bytes .../certifi/__pycache__/core.cpython-38.pyc | Bin 1947 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 4610 -> 4610 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 3197 -> 0 bytes .../__pycache__/big5freq.cpython-312.pyc | Bin 27241 -> 27241 bytes .../__pycache__/big5freq.cpython-38.pyc | Bin 27214 -> 0 bytes .../__pycache__/big5prober.cpython-312.pyc | Bin 1429 -> 1429 bytes .../__pycache__/big5prober.cpython-38.pyc | Bin 1194 -> 0 bytes .../chardistribution.cpython-312.pyc | Bin 9680 -> 9680 bytes .../chardistribution.cpython-38.pyc | Bin 7235 -> 0 bytes .../charsetgroupprober.cpython-312.pyc | Bin 4164 -> 4164 bytes .../charsetgroupprober.cpython-38.pyc | Bin 2509 -> 0 bytes .../__pycache__/charsetprober.cpython-312.pyc | Bin 5060 -> 5060 bytes .../__pycache__/charsetprober.cpython-38.pyc | Bin 3886 -> 0 bytes .../codingstatemachine.cpython-312.pyc | Bin 3920 -> 3920 bytes .../codingstatemachine.cpython-38.pyc | Bin 3118 -> 0 bytes .../codingstatemachinedict.cpython-312.pyc | Bin 831 -> 831 bytes .../codingstatemachinedict.cpython-38.pyc | Bin 727 -> 0 bytes .../__pycache__/cp949prober.cpython-312.pyc | Bin 1438 -> 1438 bytes .../__pycache__/cp949prober.cpython-38.pyc | Bin 1201 -> 0 bytes .../chardet/__pycache__/enums.cpython-312.pyc | Bin 3038 -> 3038 bytes .../chardet/__pycache__/enums.cpython-38.pyc | Bin 2758 -> 0 bytes .../__pycache__/escprober.cpython-312.pyc | Bin 4608 -> 4608 bytes .../__pycache__/escprober.cpython-38.pyc | Bin 2858 -> 0 bytes .../chardet/__pycache__/escsm.cpython-312.pyc | Bin 15352 -> 15352 bytes .../chardet/__pycache__/escsm.cpython-38.pyc | Bin 7651 -> 0 bytes .../__pycache__/eucjpprober.cpython-312.pyc | Bin 4425 -> 4425 bytes .../__pycache__/eucjpprober.cpython-38.pyc | Bin 2678 -> 0 bytes .../__pycache__/euckrfreq.cpython-312.pyc | Bin 12124 -> 12124 bytes .../__pycache__/euckrfreq.cpython-38.pyc | Bin 12098 -> 0 bytes .../__pycache__/euckrprober.cpython-312.pyc | Bin 1432 -> 1432 bytes .../__pycache__/euckrprober.cpython-38.pyc | Bin 1202 -> 0 bytes .../__pycache__/euctwfreq.cpython-312.pyc | Bin 27246 -> 27246 bytes .../__pycache__/euctwfreq.cpython-38.pyc | Bin 27218 -> 0 bytes .../__pycache__/euctwprober.cpython-312.pyc | Bin 1432 -> 1432 bytes .../__pycache__/euctwprober.cpython-38.pyc | Bin 1202 -> 0 bytes .../__pycache__/gb2312freq.cpython-312.pyc | Bin 19168 -> 19168 bytes .../__pycache__/gb2312freq.cpython-38.pyc | Bin 19142 -> 0 bytes .../__pycache__/gb2312prober.cpython-312.pyc | Bin 1445 -> 1445 bytes .../__pycache__/gb2312prober.cpython-38.pyc | Bin 1210 -> 0 bytes .../__pycache__/hebrewprober.cpython-312.pyc | Bin 5864 -> 5864 bytes .../__pycache__/hebrewprober.cpython-38.pyc | Bin 3479 -> 0 bytes .../__pycache__/jisfreq.cpython-312.pyc | Bin 22197 -> 22197 bytes .../__pycache__/jisfreq.cpython-38.pyc | Bin 22170 -> 0 bytes .../__pycache__/johabfreq.cpython-312.pyc | Bin 83045 -> 83045 bytes .../__pycache__/johabfreq.cpython-38.pyc | Bin 37397 -> 0 bytes .../__pycache__/johabprober.cpython-312.pyc | Bin 1436 -> 1436 bytes .../__pycache__/johabprober.cpython-38.pyc | Bin 1201 -> 0 bytes .../__pycache__/jpcntx.cpython-312.pyc | Bin 39591 -> 39591 bytes .../chardet/__pycache__/jpcntx.cpython-38.pyc | Bin 37989 -> 0 bytes .../langbulgarianmodel.cpython-312.pyc | Bin 83164 -> 83164 bytes .../langbulgarianmodel.cpython-38.pyc | Bin 21849 -> 0 bytes .../langgreekmodel.cpython-312.pyc | Bin 77030 -> 77030 bytes .../__pycache__/langgreekmodel.cpython-38.pyc | Bin 20525 -> 0 bytes .../langhebrewmodel.cpython-312.pyc | Bin 77541 -> 77541 bytes .../langhebrewmodel.cpython-38.pyc | Bin 20591 -> 0 bytes .../langhungarianmodel.cpython-312.pyc | Bin 83118 -> 83118 bytes .../langhungarianmodel.cpython-38.pyc | Bin 21794 -> 0 bytes .../langrussianmodel.cpython-312.pyc | Bin 105293 -> 105293 bytes .../langrussianmodel.cpython-38.pyc | Bin 26405 -> 0 bytes .../__pycache__/langthaimodel.cpython-312.pyc | Bin 77719 -> 77719 bytes .../__pycache__/langthaimodel.cpython-38.pyc | Bin 20767 -> 0 bytes .../langturkishmodel.cpython-312.pyc | Bin 77558 -> 77558 bytes .../langturkishmodel.cpython-38.pyc | Bin 20607 -> 0 bytes .../__pycache__/latin1prober.cpython-312.pyc | Bin 7044 -> 7044 bytes .../__pycache__/latin1prober.cpython-38.pyc | Bin 3579 -> 0 bytes .../macromanprober.cpython-312.pyc | Bin 7224 -> 7224 bytes .../__pycache__/macromanprober.cpython-38.pyc | Bin 3720 -> 0 bytes .../mbcharsetprober.cpython-312.pyc | Bin 3945 -> 3945 bytes .../mbcharsetprober.cpython-38.pyc | Bin 2381 -> 0 bytes .../mbcsgroupprober.cpython-312.pyc | Bin 1630 -> 1630 bytes .../mbcsgroupprober.cpython-38.pyc | Bin 1294 -> 0 bytes .../__pycache__/mbcssm.cpython-312.pyc | Bin 38687 -> 38687 bytes .../chardet/__pycache__/mbcssm.cpython-38.pyc | Bin 18765 -> 0 bytes .../__pycache__/resultdict.cpython-312.pyc | Bin 674 -> 674 bytes .../__pycache__/resultdict.cpython-38.pyc | Bin 607 -> 0 bytes .../sbcharsetprober.cpython-312.pyc | Bin 6429 -> 6429 bytes .../sbcharsetprober.cpython-38.pyc | Bin 3741 -> 0 bytes .../sbcsgroupprober.cpython-312.pyc | Bin 2399 -> 2399 bytes .../sbcsgroupprober.cpython-38.pyc | Bin 1779 -> 0 bytes .../__pycache__/sjisprober.cpython-312.pyc | Bin 4537 -> 4537 bytes .../__pycache__/sjisprober.cpython-38.pyc | Bin 2714 -> 0 bytes .../universaldetector.cpython-312.pyc | Bin 12311 -> 12311 bytes .../universaldetector.cpython-38.pyc | Bin 7206 -> 0 bytes .../__pycache__/utf1632prober.cpython-312.pyc | Bin 10021 -> 10021 bytes .../__pycache__/utf1632prober.cpython-38.pyc | Bin 6269 -> 0 bytes .../__pycache__/utf8prober.cpython-312.pyc | Bin 3217 -> 3217 bytes .../__pycache__/utf8prober.cpython-38.pyc | Bin 2153 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 530 -> 530 bytes .../__pycache__/version.cpython-38.pyc | Bin 476 -> 0 bytes .../cli/__pycache__/__init__.cpython-312.pyc | Bin 237 -> 237 bytes .../cli/__pycache__/__init__.cpython-38.pyc | Bin 231 -> 0 bytes .../__pycache__/chardetect.cpython-312.pyc | Bin 4054 -> 4054 bytes .../cli/__pycache__/chardetect.cpython-38.pyc | Bin 3058 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 242 -> 242 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 236 -> 0 bytes .../__pycache__/languages.cpython-312.pyc | Bin 9797 -> 9797 bytes .../__pycache__/languages.cpython-38.pyc | Bin 8117 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 534 -> 534 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 514 -> 0 bytes .../colorama/__pycache__/ansi.cpython-312.pyc | Bin 3992 -> 3992 bytes .../colorama/__pycache__/ansi.cpython-38.pyc | Bin 3264 -> 0 bytes .../__pycache__/ansitowin32.cpython-312.pyc | Bin 16463 -> 16463 bytes .../__pycache__/ansitowin32.cpython-38.pyc | Bin 8422 -> 0 bytes .../__pycache__/initialise.cpython-312.pyc | Bin 3592 -> 3592 bytes .../__pycache__/initialise.cpython-38.pyc | Bin 2311 -> 0 bytes .../__pycache__/win32.cpython-312.pyc | Bin 8168 -> 8168 bytes .../colorama/__pycache__/win32.cpython-38.pyc | Bin 4535 -> 0 bytes .../__pycache__/winterm.cpython-312.pyc | Bin 9130 -> 9130 bytes .../__pycache__/winterm.cpython-38.pyc | Bin 5304 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 240 -> 240 bytes .../tests/__pycache__/__init__.cpython-38.pyc | Bin 234 -> 0 bytes .../__pycache__/ansi_test.cpython-312.pyc | Bin 5509 -> 5509 bytes .../__pycache__/ansi_test.cpython-38.pyc | Bin 2594 -> 0 bytes .../ansitowin32_test.cpython-312.pyc | Bin 18145 -> 18145 bytes .../ansitowin32_test.cpython-38.pyc | Bin 11451 -> 0 bytes .../initialise_test.cpython-312.pyc | Bin 11790 -> 11790 bytes .../initialise_test.cpython-38.pyc | Bin 6948 -> 0 bytes .../__pycache__/isatty_test.cpython-312.pyc | Bin 4946 -> 4946 bytes .../__pycache__/isatty_test.cpython-38.pyc | Bin 2627 -> 0 bytes .../tests/__pycache__/utils.cpython-312.pyc | Bin 2530 -> 2530 bytes .../tests/__pycache__/utils.cpython-38.pyc | Bin 1662 -> 0 bytes .../__pycache__/winterm_test.cpython-312.pyc | Bin 6654 -> 6654 bytes .../__pycache__/winterm_test.cpython-38.pyc | Bin 3371 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 1311 -> 1311 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 1094 -> 0 bytes .../__pycache__/compat.cpython-312.pyc | Bin 45647 -> 45647 bytes .../distlib/__pycache__/compat.cpython-38.pyc | Bin 31795 -> 0 bytes .../__pycache__/database.cpython-312.pyc | Bin 66069 -> 66069 bytes .../__pycache__/database.cpython-38.pyc | Bin 42689 -> 0 bytes .../distlib/__pycache__/index.cpython-312.pyc | Bin 24408 -> 24408 bytes .../distlib/__pycache__/index.cpython-38.pyc | Bin 17233 -> 0 bytes .../__pycache__/locators.cpython-312.pyc | Bin 60200 -> 60200 bytes .../__pycache__/locators.cpython-38.pyc | Bin 38198 -> 0 bytes .../__pycache__/manifest.cpython-312.pyc | Bin 15167 -> 15167 bytes .../__pycache__/manifest.cpython-38.pyc | Bin 10269 -> 0 bytes .../__pycache__/markers.cpython-312.pyc | Bin 7724 -> 7724 bytes .../__pycache__/markers.cpython-38.pyc | Bin 5106 -> 0 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 41841 -> 41841 bytes .../__pycache__/metadata.cpython-38.pyc | Bin 26852 -> 0 bytes .../__pycache__/resources.cpython-312.pyc | Bin 17367 -> 17367 bytes .../__pycache__/resources.cpython-38.pyc | Bin 11032 -> 0 bytes .../__pycache__/scripts.cpython-312.pyc | Bin 19622 -> 19622 bytes .../__pycache__/scripts.cpython-38.pyc | Bin 11508 -> 0 bytes .../distlib/__pycache__/util.cpython-312.pyc | Bin 88298 -> 88298 bytes .../distlib/__pycache__/util.cpython-38.pyc | Bin 51656 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 30408 -> 30408 bytes .../__pycache__/version.cpython-38.pyc | Bin 20451 -> 0 bytes .../distlib/__pycache__/wheel.cpython-312.pyc | Bin 51903 -> 51903 bytes .../distlib/__pycache__/wheel.cpython-38.pyc | Bin 27432 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 1002 -> 1002 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 1037 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 334 -> 334 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 299 -> 0 bytes .../distro/__pycache__/distro.cpython-312.pyc | Bin 53796 -> 53796 bytes .../distro/__pycache__/distro.cpython-38.pyc | Bin 42380 -> 0 bytes .../idna/__pycache__/__init__.cpython-312.pyc | Bin 923 -> 923 bytes .../idna/__pycache__/__init__.cpython-38.pyc | Bin 953 -> 0 bytes .../idna/__pycache__/codec.cpython-312.pyc | Bin 4675 -> 4675 bytes .../idna/__pycache__/codec.cpython-38.pyc | Bin 3120 -> 0 bytes .../idna/__pycache__/compat.cpython-312.pyc | Bin 929 -> 929 bytes .../idna/__pycache__/compat.cpython-38.pyc | Bin 802 -> 0 bytes .../idna/__pycache__/core.cpython-312.pyc | Bin 16324 -> 16324 bytes .../idna/__pycache__/core.cpython-38.pyc | Bin 9942 -> 0 bytes .../idna/__pycache__/idnadata.cpython-312.pyc | Bin 38424 -> 38424 bytes .../idna/__pycache__/idnadata.cpython-38.pyc | Bin 23237 -> 0 bytes .../__pycache__/intranges.cpython-312.pyc | Bin 2680 -> 2680 bytes .../idna/__pycache__/intranges.cpython-38.pyc | Bin 2033 -> 0 bytes .../__pycache__/package_data.cpython-312.pyc | Bin 258 -> 258 bytes .../__pycache__/package_data.cpython-38.pyc | Bin 247 -> 0 bytes .../__pycache__/uts46data.cpython-312.pyc | Bin 158912 -> 158912 bytes .../idna/__pycache__/uts46data.cpython-38.pyc | Bin 185462 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 1873 -> 1873 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 1458 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 2067 -> 2067 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 1888 -> 0 bytes .../msgpack/__pycache__/ext.cpython-312.pyc | Bin 8710 -> 8710 bytes .../msgpack/__pycache__/ext.cpython-38.pyc | Bin 6320 -> 0 bytes .../__pycache__/fallback.cpython-312.pyc | Bin 43618 -> 43618 bytes .../__pycache__/fallback.cpython-38.pyc | Bin 25736 -> 0 bytes .../__pycache__/__about__.cpython-312.pyc | Bin 672 -> 672 bytes .../__pycache__/__about__.cpython-38.pyc | Bin 652 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 508 -> 508 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 508 -> 0 bytes .../__pycache__/_manylinux.cpython-312.pyc | Bin 12118 -> 12118 bytes .../__pycache__/_manylinux.cpython-38.pyc | Bin 7326 -> 0 bytes .../__pycache__/_musllinux.cpython-312.pyc | Bin 6952 -> 6952 bytes .../__pycache__/_musllinux.cpython-38.pyc | Bin 4659 -> 0 bytes .../__pycache__/_structures.cpython-312.pyc | Bin 3283 -> 3283 bytes .../__pycache__/_structures.cpython-38.pyc | Bin 2839 -> 0 bytes .../__pycache__/markers.cpython-312.pyc | Bin 14100 -> 14100 bytes .../__pycache__/markers.cpython-38.pyc | Bin 9515 -> 0 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 6988 -> 6988 bytes .../__pycache__/requirements.cpython-38.pyc | Bin 4012 -> 0 bytes .../__pycache__/specifiers.cpython-312.pyc | Bin 31289 -> 31289 bytes .../__pycache__/specifiers.cpython-38.pyc | Bin 21601 -> 0 bytes .../__pycache__/tags.cpython-312.pyc | Bin 18998 -> 18998 bytes .../packaging/__pycache__/tags.cpython-38.pyc | Bin 12297 -> 0 bytes .../__pycache__/utils.cpython-312.pyc | Bin 5910 -> 5910 bytes .../__pycache__/utils.cpython-38.pyc | Bin 3653 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 19981 -> 19981 bytes .../__pycache__/version.cpython-38.pyc | Bin 13208 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 146516 -> 146516 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 100391 -> 0 bytes .../__pycache__/py31compat.cpython-38.pyc | Bin 684 -> 0 bytes .../pip/_vendor/pkg_resources/py31compat.py | 23 - .../__pycache__/__init__.cpython-312.pyc | Bin 18071 -> 18071 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 10792 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 1988 -> 1988 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 1258 -> 0 bytes .../__pycache__/android.cpython-312.pyc | Bin 9486 -> 9486 bytes .../__pycache__/android.cpython-38.pyc | Bin 4461 -> 0 bytes .../__pycache__/api.cpython-312.pyc | Bin 9714 -> 9714 bytes .../__pycache__/api.cpython-38.pyc | Bin 5318 -> 0 bytes .../__pycache__/macos.cpython-312.pyc | Bin 5679 -> 5679 bytes .../__pycache__/macos.cpython-38.pyc | Bin 3342 -> 0 bytes .../__pycache__/unix.cpython-312.pyc | Bin 12483 -> 12483 bytes .../__pycache__/unix.cpython-38.pyc | Bin 7075 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 353 -> 353 bytes .../__pycache__/version.cpython-38.pyc | Bin 326 -> 0 bytes .../__pycache__/windows.cpython-312.pyc | Bin 13041 -> 13041 bytes .../__pycache__/windows.cpython-38.pyc | Bin 6566 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 3531 -> 3531 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 2987 -> 0 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 777 -> 777 bytes .../__pycache__/__main__.cpython-38.pyc | Bin 624 -> 0 bytes .../__pycache__/cmdline.cpython-312.pyc | Bin 26648 -> 26648 bytes .../__pycache__/cmdline.cpython-38.pyc | Bin 15516 -> 0 bytes .../__pycache__/console.cpython-312.pyc | Bin 2669 -> 2669 bytes .../__pycache__/console.cpython-38.pyc | Bin 1950 -> 0 bytes .../__pycache__/filter.cpython-312.pyc | Bin 3275 -> 3275 bytes .../__pycache__/filter.cpython-38.pyc | Bin 2676 -> 0 bytes .../__pycache__/formatter.cpython-312.pyc | Bin 4612 -> 4612 bytes .../__pycache__/formatter.cpython-38.pyc | Bin 3044 -> 0 bytes .../__pycache__/lexer.cpython-312.pyc | Bin 38372 -> 38372 bytes .../pygments/__pycache__/lexer.cpython-38.pyc | Bin 24507 -> 0 bytes .../__pycache__/modeline.cpython-312.pyc | Bin 1611 -> 1611 bytes .../__pycache__/modeline.cpython-38.pyc | Bin 1222 -> 0 bytes .../__pycache__/plugin.cpython-312.pyc | Bin 3439 -> 3439 bytes .../__pycache__/plugin.cpython-38.pyc | Bin 2626 -> 0 bytes .../__pycache__/regexopt.cpython-312.pyc | Bin 4124 -> 4124 bytes .../__pycache__/regexopt.cpython-38.pyc | Bin 2988 -> 0 bytes .../__pycache__/scanner.cpython-312.pyc | Bin 4799 -> 4799 bytes .../__pycache__/scanner.cpython-38.pyc | Bin 3590 -> 0 bytes .../__pycache__/sphinxext.cpython-312.pyc | Bin 11089 -> 11089 bytes .../__pycache__/sphinxext.cpython-38.pyc | Bin 4594 -> 0 bytes .../__pycache__/style.cpython-312.pyc | Bin 6717 -> 6717 bytes .../pygments/__pycache__/style.cpython-38.pyc | Bin 4516 -> 0 bytes .../__pycache__/token.cpython-312.pyc | Bin 8185 -> 8185 bytes .../pygments/__pycache__/token.cpython-38.pyc | Bin 4571 -> 0 bytes .../__pycache__/unistring.cpython-312.pyc | Bin 33031 -> 33031 bytes .../__pycache__/unistring.cpython-38.pyc | Bin 31271 -> 0 bytes .../pygments/__pycache__/util.cpython-312.pyc | Bin 14024 -> 14024 bytes .../pygments/__pycache__/util.cpython-38.pyc | Bin 9225 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 37979 -> 37979 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 23497 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 6969 -> 6969 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 4349 -> 0 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 4258 -> 4258 bytes .../__pycache__/_mapping.cpython-38.pyc | Bin 3860 -> 0 bytes .../__pycache__/bbcode.cpython-312.pyc | Bin 4237 -> 4237 bytes .../__pycache__/bbcode.cpython-38.pyc | Bin 3097 -> 0 bytes .../__pycache__/groff.cpython-312.pyc | Bin 7307 -> 7307 bytes .../__pycache__/groff.cpython-38.pyc | Bin 4405 -> 0 bytes .../__pycache__/html.cpython-312.pyc | Bin 40615 -> 40615 bytes .../__pycache__/html.cpython-38.pyc | Bin 29144 -> 0 bytes .../__pycache__/img.cpython-312.pyc | Bin 27086 -> 27086 bytes .../formatters/__pycache__/img.cpython-38.pyc | Bin 17580 -> 0 bytes .../__pycache__/irc.cpython-312.pyc | Bin 6108 -> 6108 bytes .../formatters/__pycache__/irc.cpython-38.pyc | Bin 4488 -> 0 bytes .../__pycache__/latex.cpython-312.pyc | Bin 19997 -> 19997 bytes .../__pycache__/latex.cpython-38.pyc | Bin 13856 -> 0 bytes .../__pycache__/other.cpython-312.pyc | Bin 6927 -> 6927 bytes .../__pycache__/other.cpython-38.pyc | Bin 4804 -> 0 bytes .../__pycache__/pangomarkup.cpython-312.pyc | Bin 2973 -> 2973 bytes .../__pycache__/pangomarkup.cpython-38.pyc | Bin 2126 -> 0 bytes .../__pycache__/rtf.cpython-312.pyc | Bin 6169 -> 6169 bytes .../formatters/__pycache__/rtf.cpython-38.pyc | Bin 4160 -> 0 bytes .../__pycache__/svg.cpython-312.pyc | Bin 9109 -> 9109 bytes .../formatters/__pycache__/svg.cpython-38.pyc | Bin 6378 -> 0 bytes .../__pycache__/terminal.cpython-312.pyc | Bin 5872 -> 5872 bytes .../__pycache__/terminal.cpython-38.pyc | Bin 3991 -> 0 bytes .../__pycache__/terminal256.cpython-312.pyc | Bin 15200 -> 15200 bytes .../__pycache__/terminal256.cpython-38.pyc | Bin 9253 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 14695 -> 14695 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 8960 -> 0 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 64447 -> 64447 bytes .../__pycache__/_mapping.cpython-38.pyc | Bin 51222 -> 0 bytes .../lexers/__pycache__/python.cpython-312.pyc | Bin 42682 -> 42682 bytes .../lexers/__pycache__/python.cpython-38.pyc | Bin 31199 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 4491 -> 4491 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 3197 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 7954 -> 7954 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 7788 -> 0 bytes .../__pycache__/actions.cpython-312.pyc | Bin 8438 -> 8438 bytes .../__pycache__/actions.cpython-38.pyc | Bin 7205 -> 0 bytes .../__pycache__/common.cpython-312.pyc | Bin 13457 -> 13457 bytes .../__pycache__/common.cpython-38.pyc | Bin 10101 -> 0 bytes .../__pycache__/core.cpython-312.pyc | Bin 267751 -> 267751 bytes .../pyparsing/__pycache__/core.cpython-38.pyc | Bin 178271 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 13037 -> 13037 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 9195 -> 0 bytes .../__pycache__/helpers.cpython-312.pyc | Bin 48544 -> 48544 bytes .../__pycache__/helpers.cpython-38.pyc | Bin 35365 -> 0 bytes .../__pycache__/results.cpython-312.pyc | Bin 34153 -> 34153 bytes .../__pycache__/results.cpython-38.pyc | Bin 24896 -> 0 bytes .../__pycache__/testing.cpython-312.pyc | Bin 17231 -> 17231 bytes .../__pycache__/testing.cpython-38.pyc | Bin 12160 -> 0 bytes .../__pycache__/unicode.cpython-312.pyc | Bin 13227 -> 13227 bytes .../__pycache__/unicode.cpython-38.pyc | Bin 10954 -> 0 bytes .../__pycache__/util.cpython-312.pyc | Bin 14947 -> 14947 bytes .../pyparsing/__pycache__/util.cpython-38.pyc | Bin 8671 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 26856 -> 26856 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 16595 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 656 -> 656 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 644 -> 0 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 417 -> 417 bytes .../__pycache__/_compat.cpython-38.pyc | Bin 371 -> 0 bytes .../__pycache__/_impl.cpython-312.pyc | Bin 14768 -> 14768 bytes .../__pycache__/_impl.cpython-38.pyc | Bin 11525 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 1123 -> 1123 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 858 -> 0 bytes .../__pycache__/_in_process.cpython-312.pyc | Bin 14440 -> 14440 bytes .../__pycache__/_in_process.cpython-38.pyc | Bin 9853 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 5496 -> 5496 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 4061 -> 0 bytes .../__pycache__/__version__.cpython-312.pyc | Bin 627 -> 627 bytes .../__pycache__/__version__.cpython-38.pyc | Bin 586 -> 0 bytes .../_internal_utils.cpython-312.pyc | Bin 2067 -> 2067 bytes .../_internal_utils.cpython-38.pyc | Bin 1622 -> 0 bytes .../__pycache__/adapters.cpython-312.pyc | Bin 21323 -> 21323 bytes .../__pycache__/adapters.cpython-38.pyc | Bin 17020 -> 0 bytes .../requests/__pycache__/api.cpython-312.pyc | Bin 7247 -> 7247 bytes .../requests/__pycache__/api.cpython-38.pyc | Bin 6731 -> 0 bytes .../requests/__pycache__/auth.cpython-312.pyc | Bin 13966 -> 13966 bytes .../requests/__pycache__/auth.cpython-38.pyc | Bin 8384 -> 0 bytes .../__pycache__/certs.cpython-312.pyc | Bin 965 -> 965 bytes .../requests/__pycache__/certs.cpython-38.pyc | Bin 839 -> 0 bytes .../__pycache__/compat.cpython-312.pyc | Bin 1550 -> 1550 bytes .../__pycache__/compat.cpython-38.pyc | Bin 1407 -> 0 bytes .../__pycache__/cookies.cpython-312.pyc | Bin 25289 -> 25289 bytes .../__pycache__/cookies.cpython-38.pyc | Bin 18860 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 7090 -> 7090 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 6155 -> 0 bytes .../requests/__pycache__/help.cpython-312.pyc | Bin 4355 -> 4355 bytes .../requests/__pycache__/help.cpython-38.pyc | Bin 2901 -> 0 bytes .../__pycache__/hooks.cpython-312.pyc | Bin 1095 -> 1095 bytes .../requests/__pycache__/hooks.cpython-38.pyc | Bin 1028 -> 0 bytes .../__pycache__/models.cpython-312.pyc | Bin 35491 -> 35491 bytes .../__pycache__/models.cpython-38.pyc | Bin 24388 -> 0 bytes .../__pycache__/packages.cpython-312.pyc | Bin 815 -> 815 bytes .../__pycache__/packages.cpython-38.pyc | Bin 538 -> 0 bytes .../__pycache__/sessions.cpython-312.pyc | Bin 27800 -> 27800 bytes .../__pycache__/sessions.cpython-38.pyc | Bin 19723 -> 0 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 6002 -> 6002 bytes .../__pycache__/status_codes.cpython-38.pyc | Bin 4279 -> 0 bytes .../__pycache__/structures.cpython-312.pyc | Bin 5660 -> 5660 bytes .../__pycache__/structures.cpython-38.pyc | Bin 4487 -> 0 bytes .../__pycache__/utils.cpython-312.pyc | Bin 36312 -> 36312 bytes .../requests/__pycache__/utils.cpython-38.pyc | Bin 24206 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 677 -> 677 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 676 -> 0 bytes .../__pycache__/providers.cpython-312.pyc | Bin 6894 -> 6894 bytes .../__pycache__/providers.cpython-38.pyc | Bin 6741 -> 0 bytes .../__pycache__/reporters.cpython-312.pyc | Bin 2697 -> 2697 bytes .../__pycache__/reporters.cpython-38.pyc | Bin 2653 -> 0 bytes .../__pycache__/resolvers.cpython-312.pyc | Bin 25940 -> 25940 bytes .../__pycache__/resolvers.cpython-38.pyc | Bin 15386 -> 0 bytes .../__pycache__/structs.cpython-312.pyc | Bin 10549 -> 10549 bytes .../__pycache__/structs.cpython-38.pyc | Bin 7343 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 243 -> 243 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 237 -> 0 bytes .../collections_abc.cpython-312.pyc | Bin 463 -> 463 bytes .../collections_abc.cpython-38.pyc | Bin 413 -> 0 bytes .../rich/__pycache__/__init__.cpython-312.pyc | Bin 7058 -> 7058 bytes .../rich/__pycache__/__init__.cpython-38.pyc | Bin 6032 -> 0 bytes .../rich/__pycache__/__main__.cpython-312.pyc | Bin 10347 -> 10347 bytes .../rich/__pycache__/__main__.cpython-38.pyc | Bin 7189 -> 0 bytes .../__pycache__/_cell_widths.cpython-312.pyc | Bin 7864 -> 7864 bytes .../__pycache__/_cell_widths.cpython-38.pyc | Bin 10024 -> 0 bytes .../__pycache__/_emoji_codes.cpython-312.pyc | Bin 206019 -> 206019 bytes .../__pycache__/_emoji_codes.cpython-38.pyc | Bin 132737 -> 0 bytes .../_emoji_replace.cpython-312.pyc | Bin 1772 -> 1772 bytes .../__pycache__/_emoji_replace.cpython-38.pyc | Bin 1226 -> 0 bytes .../_export_format.cpython-312.pyc | Bin 2364 -> 2364 bytes .../__pycache__/_export_format.cpython-38.pyc | Bin 2347 -> 0 bytes .../__pycache__/_extension.cpython-312.pyc | Bin 580 -> 580 bytes .../__pycache__/_extension.cpython-38.pyc | Bin 531 -> 0 bytes .../rich/__pycache__/_fileno.cpython-312.pyc | Bin 898 -> 898 bytes .../rich/__pycache__/_inspect.cpython-312.pyc | Bin 12120 -> 12120 bytes .../rich/__pycache__/_inspect.cpython-38.pyc | Bin 8751 -> 0 bytes .../__pycache__/_log_render.cpython-312.pyc | Bin 4190 -> 4190 bytes .../__pycache__/_log_render.cpython-38.pyc | Bin 2616 -> 0 bytes .../rich/__pycache__/_loop.cpython-312.pyc | Bin 1928 -> 1928 bytes .../rich/__pycache__/_loop.cpython-38.pyc | Bin 1310 -> 0 bytes .../__pycache__/_null_file.cpython-312.pyc | Bin 3663 -> 3663 bytes .../__pycache__/_null_file.cpython-38.pyc | Bin 3801 -> 0 bytes .../__pycache__/_palettes.cpython-312.pyc | Bin 5203 -> 5203 bytes .../rich/__pycache__/_palettes.cpython-38.pyc | Bin 6259 -> 0 bytes .../rich/__pycache__/_pick.cpython-312.pyc | Bin 769 -> 769 bytes .../rich/__pycache__/_pick.cpython-38.pyc | Bin 690 -> 0 bytes .../rich/__pycache__/_ratio.cpython-312.pyc | Bin 6622 -> 6622 bytes .../rich/__pycache__/_ratio.cpython-38.pyc | Bin 5206 -> 0 bytes .../__pycache__/_spinners.cpython-312.pyc | Bin 13222 -> 13222 bytes .../rich/__pycache__/_spinners.cpython-38.pyc | Bin 12466 -> 0 bytes .../rich/__pycache__/_stack.cpython-312.pyc | Bin 1008 -> 1008 bytes .../rich/__pycache__/_stack.cpython-38.pyc | Bin 879 -> 0 bytes .../rich/__pycache__/_timer.cpython-312.pyc | Bin 908 -> 908 bytes .../rich/__pycache__/_timer.cpython-38.pyc | Bin 726 -> 0 bytes .../_win32_console.cpython-312.pyc | Bin 29019 -> 29019 bytes .../__pycache__/_win32_console.cpython-38.pyc | Bin 19302 -> 0 bytes .../rich/__pycache__/_windows.cpython-312.pyc | Bin 2533 -> 2533 bytes .../rich/__pycache__/_windows.cpython-38.pyc | Bin 1815 -> 0 bytes .../_windows_renderer.cpython-312.pyc | Bin 3616 -> 3616 bytes .../_windows_renderer.cpython-38.pyc | Bin 2091 -> 0 bytes .../rich/__pycache__/_wrap.cpython-312.pyc | Bin 2403 -> 2403 bytes .../rich/__pycache__/_wrap.cpython-38.pyc | Bin 1567 -> 0 bytes .../rich/__pycache__/abc.cpython-312.pyc | Bin 1651 -> 1651 bytes .../rich/__pycache__/abc.cpython-38.pyc | Bin 1340 -> 0 bytes .../rich/__pycache__/align.cpython-312.pyc | Bin 12365 -> 12365 bytes .../rich/__pycache__/align.cpython-38.pyc | Bin 7903 -> 0 bytes .../rich/__pycache__/ansi.cpython-312.pyc | Bin 9149 -> 9149 bytes .../rich/__pycache__/ansi.cpython-38.pyc | Bin 5605 -> 0 bytes .../rich/__pycache__/bar.cpython-312.pyc | Bin 4315 -> 4315 bytes .../rich/__pycache__/bar.cpython-38.pyc | Bin 2972 -> 0 bytes .../rich/__pycache__/box.cpython-312.pyc | Bin 11901 -> 11901 bytes .../rich/__pycache__/box.cpython-38.pyc | Bin 8535 -> 0 bytes .../rich/__pycache__/cells.cpython-312.pyc | Bin 5661 -> 5661 bytes .../rich/__pycache__/cells.cpython-38.pyc | Bin 4051 -> 0 bytes .../rich/__pycache__/color.cpython-312.pyc | Bin 26613 -> 26613 bytes .../rich/__pycache__/color.cpython-38.pyc | Bin 15406 -> 0 bytes .../__pycache__/color_triplet.cpython-312.pyc | Bin 1744 -> 1744 bytes .../__pycache__/color_triplet.cpython-38.pyc | Bin 1461 -> 0 bytes .../rich/__pycache__/columns.cpython-312.pyc | Bin 8630 -> 8630 bytes .../rich/__pycache__/columns.cpython-38.pyc | Bin 6175 -> 0 bytes .../rich/__pycache__/console.cpython-312.pyc | Bin 113836 -> 113836 bytes .../rich/__pycache__/console.cpython-38.pyc | Bin 81771 -> 0 bytes .../__pycache__/constrain.cpython-312.pyc | Bin 2301 -> 2301 bytes .../rich/__pycache__/constrain.cpython-38.pyc | Bin 1703 -> 0 bytes .../__pycache__/containers.cpython-312.pyc | Bin 9269 -> 9269 bytes .../__pycache__/containers.cpython-38.pyc | Bin 6482 -> 0 bytes .../rich/__pycache__/control.cpython-312.pyc | Bin 10972 -> 10972 bytes .../rich/__pycache__/control.cpython-38.pyc | Bin 8251 -> 0 bytes .../default_styles.cpython-312.pyc | Bin 10416 -> 10416 bytes .../__pycache__/default_styles.cpython-38.pyc | Bin 5323 -> 0 bytes .../rich/__pycache__/diagnose.cpython-312.pyc | Bin 1530 -> 1530 bytes .../rich/__pycache__/diagnose.cpython-38.pyc | Bin 1253 -> 0 bytes .../rich/__pycache__/emoji.cpython-312.pyc | Bin 4252 -> 4252 bytes .../rich/__pycache__/emoji.cpython-38.pyc | Bin 3250 -> 0 bytes .../rich/__pycache__/errors.cpython-312.pyc | Bin 1888 -> 1888 bytes .../rich/__pycache__/errors.cpython-38.pyc | Bin 1705 -> 0 bytes .../__pycache__/file_proxy.cpython-312.pyc | Bin 3620 -> 3620 bytes .../__pycache__/file_proxy.cpython-38.pyc | Bin 2263 -> 0 bytes .../rich/__pycache__/filesize.cpython-312.pyc | Bin 3125 -> 3125 bytes .../rich/__pycache__/filesize.cpython-38.pyc | Bin 2649 -> 0 bytes .../__pycache__/highlighter.cpython-312.pyc | Bin 9941 -> 9941 bytes .../__pycache__/highlighter.cpython-38.pyc | Bin 8104 -> 0 bytes .../rich/__pycache__/json.cpython-312.pyc | Bin 6078 -> 6078 bytes .../rich/__pycache__/json.cpython-38.pyc | Bin 4715 -> 0 bytes .../rich/__pycache__/jupyter.cpython-312.pyc | Bin 5252 -> 5252 bytes .../rich/__pycache__/jupyter.cpython-38.pyc | Bin 4103 -> 0 bytes .../rich/__pycache__/layout.cpython-312.pyc | Bin 20263 -> 20263 bytes .../rich/__pycache__/layout.cpython-38.pyc | Bin 14663 -> 0 bytes .../rich/__pycache__/live.cpython-312.pyc | Bin 19186 -> 19186 bytes .../rich/__pycache__/live.cpython-38.pyc | Bin 11064 -> 0 bytes .../__pycache__/live_render.cpython-312.pyc | Bin 4937 -> 4937 bytes .../__pycache__/live_render.cpython-38.pyc | Bin 3424 -> 0 bytes .../rich/__pycache__/logging.cpython-312.pyc | Bin 13597 -> 13597 bytes .../rich/__pycache__/logging.cpython-38.pyc | Bin 9921 -> 0 bytes .../rich/__pycache__/markup.cpython-312.pyc | Bin 9341 -> 9341 bytes .../rich/__pycache__/markup.cpython-38.pyc | Bin 5980 -> 0 bytes .../rich/__pycache__/measure.cpython-312.pyc | Bin 6419 -> 6419 bytes .../rich/__pycache__/measure.cpython-38.pyc | Bin 5045 -> 0 bytes .../rich/__pycache__/padding.cpython-312.pyc | Bin 7177 -> 7177 bytes .../rich/__pycache__/padding.cpython-38.pyc | Bin 4452 -> 0 bytes .../rich/__pycache__/pager.cpython-312.pyc | Bin 1863 -> 1863 bytes .../rich/__pycache__/pager.cpython-38.pyc | Bin 1469 -> 0 bytes .../rich/__pycache__/palette.cpython-312.pyc | Bin 5357 -> 5357 bytes .../rich/__pycache__/palette.cpython-38.pyc | Bin 3726 -> 0 bytes .../rich/__pycache__/panel.cpython-312.pyc | Bin 12140 -> 12140 bytes .../rich/__pycache__/panel.cpython-38.pyc | Bin 7458 -> 0 bytes .../rich/__pycache__/pretty.cpython-312.pyc | Bin 40099 -> 40099 bytes .../rich/__pycache__/pretty.cpython-38.pyc | Bin 27982 -> 0 bytes .../rich/__pycache__/progress.cpython-312.pyc | Bin 75121 -> 75121 bytes .../rich/__pycache__/progress.cpython-38.pyc | Bin 53256 -> 0 bytes .../__pycache__/progress_bar.cpython-312.pyc | Bin 10432 -> 10432 bytes .../__pycache__/progress_bar.cpython-38.pyc | Bin 6877 -> 0 bytes .../rich/__pycache__/prompt.cpython-312.pyc | Bin 14824 -> 14824 bytes .../rich/__pycache__/prompt.cpython-38.pyc | Bin 11409 -> 0 bytes .../rich/__pycache__/protocol.cpython-312.pyc | Bin 1835 -> 1835 bytes .../rich/__pycache__/protocol.cpython-38.pyc | Bin 1375 -> 0 bytes .../rich/__pycache__/region.cpython-312.pyc | Bin 610 -> 610 bytes .../rich/__pycache__/region.cpython-38.pyc | Bin 561 -> 0 bytes .../rich/__pycache__/repr.cpython-312.pyc | Bin 6669 -> 6669 bytes .../rich/__pycache__/repr.cpython-38.pyc | Bin 4135 -> 0 bytes .../rich/__pycache__/rule.cpython-312.pyc | Bin 6611 -> 6611 bytes .../rich/__pycache__/rule.cpython-38.pyc | Bin 4310 -> 0 bytes .../rich/__pycache__/scope.cpython-312.pyc | Bin 3873 -> 3873 bytes .../rich/__pycache__/scope.cpython-38.pyc | Bin 3010 -> 0 bytes .../rich/__pycache__/screen.cpython-312.pyc | Bin 2527 -> 2527 bytes .../rich/__pycache__/screen.cpython-38.pyc | Bin 1866 -> 0 bytes .../rich/__pycache__/segment.cpython-312.pyc | Bin 28204 -> 28204 bytes .../rich/__pycache__/segment.cpython-38.pyc | Bin 20577 -> 0 bytes .../rich/__pycache__/spinner.cpython-312.pyc | Bin 6107 -> 6107 bytes .../rich/__pycache__/spinner.cpython-38.pyc | Bin 4383 -> 0 bytes .../rich/__pycache__/status.cpython-312.pyc | Bin 6111 -> 6111 bytes .../rich/__pycache__/status.cpython-38.pyc | Bin 4599 -> 0 bytes .../rich/__pycache__/style.cpython-312.pyc | Bin 33557 -> 33557 bytes .../rich/__pycache__/style.cpython-38.pyc | Bin 20966 -> 0 bytes .../rich/__pycache__/styled.cpython-312.pyc | Bin 2182 -> 2182 bytes .../rich/__pycache__/styled.cpython-38.pyc | Bin 1728 -> 0 bytes .../rich/__pycache__/syntax.cpython-312.pyc | Bin 39655 -> 39655 bytes .../rich/__pycache__/syntax.cpython-38.pyc | Bin 25625 -> 0 bytes .../rich/__pycache__/table.cpython-312.pyc | Bin 43627 -> 43627 bytes .../rich/__pycache__/table.cpython-38.pyc | Bin 29724 -> 0 bytes .../terminal_theme.cpython-312.pyc | Bin 3391 -> 3391 bytes .../__pycache__/terminal_theme.cpython-38.pyc | Bin 3232 -> 0 bytes .../rich/__pycache__/text.cpython-312.pyc | Bin 59006 -> 59006 bytes .../rich/__pycache__/text.cpython-38.pyc | Bin 40550 -> 0 bytes .../rich/__pycache__/theme.cpython-312.pyc | Bin 6383 -> 6383 bytes .../rich/__pycache__/theme.cpython-38.pyc | Bin 4720 -> 0 bytes .../rich/__pycache__/themes.cpython-312.pyc | Bin 357 -> 357 bytes .../rich/__pycache__/themes.cpython-38.pyc | Bin 329 -> 0 bytes .../__pycache__/traceback.cpython-312.pyc | Bin 31591 -> 31591 bytes .../rich/__pycache__/traceback.cpython-38.pyc | Bin 19474 -> 0 bytes .../rich/__pycache__/tree.cpython-312.pyc | Bin 11482 -> 11482 bytes .../rich/__pycache__/tree.cpython-38.pyc | Bin 7285 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 27129 -> 27129 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 16367 -> 0 bytes .../__pycache__/_asyncio.cpython-312.pyc | Bin 4849 -> 4849 bytes .../__pycache__/_asyncio.cpython-38.pyc | Bin 2620 -> 0 bytes .../__pycache__/_utils.cpython-312.pyc | Bin 2358 -> 2358 bytes .../__pycache__/_utils.cpython-38.pyc | Bin 1273 -> 0 bytes .../__pycache__/after.cpython-312.pyc | Bin 1667 -> 1667 bytes .../tenacity/__pycache__/after.cpython-38.pyc | Bin 1238 -> 0 bytes .../__pycache__/before.cpython-312.pyc | Bin 1507 -> 1507 bytes .../__pycache__/before.cpython-38.pyc | Bin 1130 -> 0 bytes .../__pycache__/before_sleep.cpython-312.pyc | Bin 2345 -> 2345 bytes .../__pycache__/before_sleep.cpython-38.pyc | Bin 1414 -> 0 bytes .../tenacity/__pycache__/nap.cpython-312.pyc | Bin 1455 -> 1455 bytes .../tenacity/__pycache__/nap.cpython-38.pyc | Bin 1228 -> 0 bytes .../__pycache__/retry.cpython-312.pyc | Bin 14324 -> 14324 bytes .../tenacity/__pycache__/retry.cpython-38.pyc | Bin 9741 -> 0 bytes .../tenacity/__pycache__/stop.cpython-312.pyc | Bin 5611 -> 5611 bytes .../tenacity/__pycache__/stop.cpython-38.pyc | Bin 4288 -> 0 bytes .../__pycache__/tornadoweb.cpython-312.pyc | Bin 2629 -> 2629 bytes .../__pycache__/tornadoweb.cpython-38.pyc | Bin 1774 -> 0 bytes .../tenacity/__pycache__/wait.cpython-312.pyc | Bin 12456 -> 12456 bytes .../tenacity/__pycache__/wait.cpython-38.pyc | Bin 9417 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 427 -> 427 bytes .../tomli/__pycache__/__init__.cpython-38.pyc | Bin 391 -> 0 bytes .../tomli/__pycache__/_parser.cpython-312.pyc | Bin 26970 -> 26970 bytes .../tomli/__pycache__/_parser.cpython-38.pyc | Bin 16703 -> 0 bytes .../tomli/__pycache__/_re.cpython-312.pyc | Bin 3951 -> 3951 bytes .../tomli/__pycache__/_re.cpython-38.pyc | Bin 2874 -> 0 bytes .../tomli/__pycache__/_types.cpython-312.pyc | Bin 409 -> 409 bytes .../tomli/__pycache__/_types.cpython-38.pyc | Bin 361 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 661 -> 661 bytes .../__pycache__/_api.cpython-312.pyc | Bin 15840 -> 15840 bytes .../__pycache__/_macos.cpython-312.pyc | Bin 16705 -> 16705 bytes .../__pycache__/_openssl.cpython-312.pyc | Bin 2258 -> 2258 bytes .../_ssl_constants.cpython-312.pyc | Bin 1142 -> 1142 bytes .../__pycache__/_windows.cpython-312.pyc | Bin 15549 -> 15549 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 3448 -> 3448 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 2545 -> 0 bytes .../__pycache__/_collections.cpython-312.pyc | Bin 15974 -> 15974 bytes .../__pycache__/_collections.cpython-38.pyc | Bin 10738 -> 0 bytes .../__pycache__/_version.cpython-312.pyc | Bin 261 -> 261 bytes .../__pycache__/_version.cpython-38.pyc | Bin 250 -> 0 bytes .../__pycache__/connection.cpython-312.pyc | Bin 20450 -> 20450 bytes .../__pycache__/connection.cpython-38.pyc | Bin 13727 -> 0 bytes .../connectionpool.cpython-312.pyc | Bin 36322 -> 36322 bytes .../__pycache__/connectionpool.cpython-38.pyc | Bin 25412 -> 0 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 13536 -> 13536 bytes .../__pycache__/exceptions.cpython-38.pyc | Bin 11682 -> 0 bytes .../__pycache__/fields.cpython-312.pyc | Bin 10452 -> 10452 bytes .../urllib3/__pycache__/fields.cpython-38.pyc | Bin 8219 -> 0 bytes .../__pycache__/filepost.cpython-312.pyc | Bin 4061 -> 4061 bytes .../__pycache__/filepost.cpython-38.pyc | Bin 2806 -> 0 bytes .../__pycache__/poolmanager.cpython-312.pyc | Bin 20345 -> 20345 bytes .../__pycache__/poolmanager.cpython-38.pyc | Bin 15181 -> 0 bytes .../__pycache__/request.cpython-312.pyc | Bin 7337 -> 7337 bytes .../__pycache__/request.cpython-38.pyc | Bin 5662 -> 0 bytes .../__pycache__/response.cpython-312.pyc | Bin 34011 -> 34011 bytes .../__pycache__/response.cpython-38.pyc | Bin 22331 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 241 -> 241 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 235 -> 0 bytes .../_appengine_environ.cpython-312.pyc | Bin 1891 -> 1891 bytes .../_appengine_environ.cpython-38.pyc | Bin 1459 -> 0 bytes .../__pycache__/appengine.cpython-312.pyc | Bin 11607 -> 11607 bytes .../__pycache__/appengine.cpython-38.pyc | Bin 8309 -> 0 bytes .../__pycache__/ntlmpool.cpython-312.pyc | Bin 5762 -> 5762 bytes .../__pycache__/ntlmpool.cpython-38.pyc | Bin 3667 -> 0 bytes .../__pycache__/pyopenssl.cpython-312.pyc | Bin 24493 -> 24493 bytes .../__pycache__/pyopenssl.cpython-38.pyc | Bin 15918 -> 0 bytes .../securetransport.cpython-312.pyc | Bin 35599 -> 35599 bytes .../securetransport.cpython-38.pyc | Bin 21696 -> 0 bytes .../contrib/__pycache__/socks.cpython-312.pyc | Bin 7554 -> 7554 bytes .../contrib/__pycache__/socks.cpython-38.pyc | Bin 5673 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 258 -> 258 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 252 -> 0 bytes .../__pycache__/bindings.cpython-312.pyc | Bin 17470 -> 17470 bytes .../__pycache__/bindings.cpython-38.pyc | Bin 10770 -> 0 bytes .../__pycache__/low_level.cpython-312.pyc | Bin 14844 -> 14844 bytes .../__pycache__/low_level.cpython-38.pyc | Bin 9144 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 242 -> 242 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 236 -> 0 bytes .../packages/__pycache__/six.cpython-312.pyc | Bin 41362 -> 41362 bytes .../packages/__pycache__/six.cpython-38.pyc | Bin 27631 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 252 -> 252 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 246 -> 0 bytes .../__pycache__/makefile.cpython-312.pyc | Bin 1868 -> 1868 bytes .../__pycache__/makefile.cpython-38.pyc | Bin 1350 -> 0 bytes .../weakref_finalize.cpython-312.pyc | Bin 7374 -> 7374 bytes .../util/__pycache__/__init__.cpython-312.pyc | Bin 1189 -> 1189 bytes .../util/__pycache__/__init__.cpython-38.pyc | Bin 1145 -> 0 bytes .../__pycache__/connection.cpython-312.pyc | Bin 4799 -> 4799 bytes .../__pycache__/connection.cpython-38.pyc | Bin 3483 -> 0 bytes .../util/__pycache__/proxy.cpython-312.pyc | Bin 1595 -> 1595 bytes .../util/__pycache__/proxy.cpython-38.pyc | Bin 1389 -> 0 bytes .../util/__pycache__/queue.cpython-312.pyc | Bin 1395 -> 1395 bytes .../util/__pycache__/queue.cpython-38.pyc | Bin 1100 -> 0 bytes .../util/__pycache__/request.cpython-312.pyc | Bin 4226 -> 4226 bytes .../util/__pycache__/request.cpython-38.pyc | Bin 3393 -> 0 bytes .../util/__pycache__/response.cpython-312.pyc | Bin 3032 -> 3032 bytes .../util/__pycache__/response.cpython-38.pyc | Bin 2393 -> 0 bytes .../util/__pycache__/retry.cpython-312.pyc | Bin 21740 -> 21740 bytes .../util/__pycache__/retry.cpython-38.pyc | Bin 16313 -> 0 bytes .../util/__pycache__/ssl_.cpython-312.pyc | Bin 15146 -> 15146 bytes .../util/__pycache__/ssl_.cpython-38.pyc | Bin 11432 -> 0 bytes .../ssl_match_hostname.cpython-312.pyc | Bin 5114 -> 5114 bytes .../ssl_match_hostname.cpython-38.pyc | Bin 3305 -> 0 bytes .../__pycache__/ssltransport.cpython-312.pyc | Bin 10815 -> 10815 bytes .../__pycache__/ssltransport.cpython-38.pyc | Bin 7479 -> 0 bytes .../util/__pycache__/timeout.cpython-312.pyc | Bin 11182 -> 11182 bytes .../util/__pycache__/timeout.cpython-38.pyc | Bin 8987 -> 0 bytes .../util/__pycache__/url.cpython-312.pyc | Bin 15838 -> 15838 bytes .../util/__pycache__/url.cpython-38.pyc | Bin 10838 -> 0 bytes .../util/__pycache__/wait.cpython-312.pyc | Bin 4446 -> 4446 bytes .../util/__pycache__/wait.cpython-38.pyc | Bin 3147 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 12044 -> 12044 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 9775 -> 0 bytes .../__pycache__/labels.cpython-312.pyc | Bin 7175 -> 7175 bytes .../__pycache__/labels.cpython-38.pyc | Bin 3873 -> 0 bytes .../__pycache__/mklabels.cpython-312.pyc | Bin 2742 -> 2742 bytes .../__pycache__/mklabels.cpython-38.pyc | Bin 1969 -> 0 bytes .../__pycache__/tests.cpython-312.pyc | Bin 9294 -> 9294 bytes .../__pycache__/tests.cpython-38.pyc | Bin 5135 -> 0 bytes .../x_user_defined.cpython-312.pyc | Bin 3338 -> 3338 bytes .../__pycache__/x_user_defined.cpython-38.pyc | Bin 2703 -> 0 bytes env_web/Scripts/pip.exe | Bin 108466 -> 108466 bytes env_web/Scripts/pip3.12.exe | Bin 108466 -> 108466 bytes env_web/Scripts/pip3.8.exe | Bin 98226 -> 0 bytes env_web/Scripts/pip3.exe | Bin 108466 -> 108466 bytes node_modules/.bin/glob | 12 + node_modules/.bin/glob.cmd | 17 + node_modules/.bin/glob.ps1 | 28 + node_modules/.package-lock.json | 416 ++++ node_modules/@isaacs/cliui/LICENSE.txt | 14 + node_modules/@isaacs/cliui/README.md | 143 ++ node_modules/@isaacs/cliui/build/index.cjs | 317 +++ node_modules/@isaacs/cliui/build/index.d.cts | 43 + node_modules/@isaacs/cliui/build/lib/index.js | 302 +++ node_modules/@isaacs/cliui/index.mjs | 14 + node_modules/@isaacs/cliui/package.json | 86 + node_modules/@pkgjs/parseargs/.editorconfig | 14 + node_modules/@pkgjs/parseargs/CHANGELOG.md | 147 ++ node_modules/@pkgjs/parseargs/LICENSE | 201 ++ node_modules/@pkgjs/parseargs/README.md | 413 ++++ .../parseargs/examples/is-default-value.js | 25 + .../parseargs/examples/limit-long-syntax.js | 35 + .../@pkgjs/parseargs/examples/negate.js | 43 + .../parseargs/examples/no-repeated-options.js | 31 + .../parseargs/examples/ordered-options.mjs | 41 + .../parseargs/examples/simple-hard-coded.js | 26 + node_modules/@pkgjs/parseargs/index.js | 396 ++++ .../@pkgjs/parseargs/internal/errors.js | 47 + .../@pkgjs/parseargs/internal/primordials.js | 393 ++++ .../@pkgjs/parseargs/internal/util.js | 14 + .../@pkgjs/parseargs/internal/validators.js | 89 + node_modules/@pkgjs/parseargs/package.json | 36 + node_modules/@pkgjs/parseargs/utils.js | 198 ++ node_modules/ansi-regex/index.d.ts | 33 + node_modules/ansi-regex/index.js | 10 + node_modules/ansi-regex/license | 9 + node_modules/ansi-regex/package.json | 61 + node_modules/ansi-regex/readme.md | 60 + .../balanced-match/.github/FUNDING.yml | 2 + node_modules/balanced-match/LICENSE.md | 21 + node_modules/balanced-match/README.md | 97 + node_modules/balanced-match/index.js | 62 + node_modules/balanced-match/package.json | 48 + .../brace-expansion/.github/FUNDING.yml | 2 + node_modules/brace-expansion/LICENSE | 21 + node_modules/brace-expansion/README.md | 135 ++ node_modules/brace-expansion/index.js | 203 ++ node_modules/brace-expansion/package.json | 46 + node_modules/eastasianwidth/README.md | 32 + node_modules/eastasianwidth/eastasianwidth.js | 311 +++ node_modules/eastasianwidth/package.json | 18 + .../emoji-regex/LICENSE-MIT.txt | 2 +- node_modules/emoji-regex/README.md | 137 ++ node_modules/emoji-regex/RGI_Emoji.d.ts | 5 + node_modules/emoji-regex/RGI_Emoji.js | 6 + .../emoji-regex/es2015/RGI_Emoji.d.ts | 5 + node_modules/emoji-regex/es2015/RGI_Emoji.js | 6 + node_modules/emoji-regex/es2015/index.d.ts | 5 + node_modules/emoji-regex/es2015/index.js | 6 + node_modules/emoji-regex/es2015/text.d.ts | 5 + node_modules/emoji-regex/es2015/text.js | 6 + node_modules/emoji-regex/index.d.ts | 5 + node_modules/emoji-regex/index.js | 6 + node_modules/emoji-regex/package.json | 52 + node_modules/emoji-regex/text.d.ts | 5 + node_modules/emoji-regex/text.js | 6 + node_modules/foreground-child/LICENSE | 15 + node_modules/foreground-child/README.md | 128 ++ .../dist/commonjs/all-signals.d.ts | 3 + .../dist/commonjs/all-signals.d.ts.map | 1 + .../dist/commonjs/all-signals.js | 58 + .../dist/commonjs/all-signals.js.map | 1 + .../foreground-child/dist/commonjs/index.d.ts | 65 + .../dist/commonjs/index.d.ts.map | 1 + .../foreground-child/dist/commonjs/index.js | 123 + .../dist/commonjs/index.js.map | 1 + .../dist/commonjs/package.json | 3 + .../dist/commonjs/proxy-signals.d.ts | 7 + .../dist/commonjs/proxy-signals.d.ts.map | 1 + .../dist/commonjs/proxy-signals.js | 38 + .../dist/commonjs/proxy-signals.js.map | 1 + .../dist/commonjs/watchdog.d.ts | 11 + .../dist/commonjs/watchdog.d.ts.map | 1 + .../dist/commonjs/watchdog.js | 50 + .../dist/commonjs/watchdog.js.map | 1 + .../dist/esm/all-signals.d.ts | 3 + .../dist/esm/all-signals.d.ts.map | 1 + .../foreground-child/dist/esm/all-signals.js | 52 + .../dist/esm/all-signals.js.map | 1 + .../foreground-child/dist/esm/index.d.ts | 65 + .../foreground-child/dist/esm/index.d.ts.map | 1 + .../foreground-child/dist/esm/index.js | 115 + .../foreground-child/dist/esm/index.js.map | 1 + .../foreground-child/dist/esm/package.json | 3 + .../dist/esm/proxy-signals.d.ts | 7 + .../dist/esm/proxy-signals.d.ts.map | 1 + .../dist/esm/proxy-signals.js | 34 + .../dist/esm/proxy-signals.js.map | 1 + .../foreground-child/dist/esm/watchdog.d.ts | 11 + .../dist/esm/watchdog.d.ts.map | 1 + .../foreground-child/dist/esm/watchdog.js | 46 + .../foreground-child/dist/esm/watchdog.js.map | 1 + node_modules/foreground-child/package.json | 111 + node_modules/glob/LICENSE | 15 + node_modules/glob/README.md | 1265 +++++++++++ node_modules/glob/dist/commonjs/glob.d.ts | 388 ++++ node_modules/glob/dist/commonjs/glob.d.ts.map | 1 + node_modules/glob/dist/commonjs/glob.js | 247 ++ node_modules/glob/dist/commonjs/glob.js.map | 1 + .../glob/dist/commonjs/has-magic.d.ts | 14 + .../glob/dist/commonjs/has-magic.d.ts.map | 1 + node_modules/glob/dist/commonjs/has-magic.js | 27 + .../glob/dist/commonjs/has-magic.js.map | 1 + node_modules/glob/dist/commonjs/ignore.d.ts | 24 + .../glob/dist/commonjs/ignore.d.ts.map | 1 + node_modules/glob/dist/commonjs/ignore.js | 119 + node_modules/glob/dist/commonjs/ignore.js.map | 1 + node_modules/glob/dist/commonjs/index.d.ts | 97 + .../glob/dist/commonjs/index.d.ts.map | 1 + node_modules/glob/dist/commonjs/index.js | 68 + node_modules/glob/dist/commonjs/index.js.map | 1 + node_modules/glob/dist/commonjs/package.json | 3 + node_modules/glob/dist/commonjs/pattern.d.ts | 76 + .../glob/dist/commonjs/pattern.d.ts.map | 1 + node_modules/glob/dist/commonjs/pattern.js | 219 ++ .../glob/dist/commonjs/pattern.js.map | 1 + .../glob/dist/commonjs/processor.d.ts | 59 + .../glob/dist/commonjs/processor.d.ts.map | 1 + node_modules/glob/dist/commonjs/processor.js | 301 +++ .../glob/dist/commonjs/processor.js.map | 1 + node_modules/glob/dist/commonjs/walker.d.ts | 97 + .../glob/dist/commonjs/walker.d.ts.map | 1 + node_modules/glob/dist/commonjs/walker.js | 387 ++++ node_modules/glob/dist/commonjs/walker.js.map | 1 + node_modules/glob/dist/esm/bin.d.mts | 3 + node_modules/glob/dist/esm/bin.d.mts.map | 1 + node_modules/glob/dist/esm/bin.mjs | 270 +++ node_modules/glob/dist/esm/bin.mjs.map | 1 + node_modules/glob/dist/esm/glob.d.ts | 388 ++++ node_modules/glob/dist/esm/glob.d.ts.map | 1 + node_modules/glob/dist/esm/glob.js | 243 ++ node_modules/glob/dist/esm/glob.js.map | 1 + node_modules/glob/dist/esm/has-magic.d.ts | 14 + node_modules/glob/dist/esm/has-magic.d.ts.map | 1 + node_modules/glob/dist/esm/has-magic.js | 23 + node_modules/glob/dist/esm/has-magic.js.map | 1 + node_modules/glob/dist/esm/ignore.d.ts | 24 + node_modules/glob/dist/esm/ignore.d.ts.map | 1 + node_modules/glob/dist/esm/ignore.js | 115 + node_modules/glob/dist/esm/ignore.js.map | 1 + node_modules/glob/dist/esm/index.d.ts | 97 + node_modules/glob/dist/esm/index.d.ts.map | 1 + node_modules/glob/dist/esm/index.js | 55 + node_modules/glob/dist/esm/index.js.map | 1 + node_modules/glob/dist/esm/package.json | 3 + node_modules/glob/dist/esm/pattern.d.ts | 76 + node_modules/glob/dist/esm/pattern.d.ts.map | 1 + node_modules/glob/dist/esm/pattern.js | 215 ++ node_modules/glob/dist/esm/pattern.js.map | 1 + node_modules/glob/dist/esm/processor.d.ts | 59 + node_modules/glob/dist/esm/processor.d.ts.map | 1 + node_modules/glob/dist/esm/processor.js | 294 +++ node_modules/glob/dist/esm/processor.js.map | 1 + node_modules/glob/dist/esm/walker.d.ts | 97 + node_modules/glob/dist/esm/walker.d.ts.map | 1 + node_modules/glob/dist/esm/walker.js | 381 ++++ node_modules/glob/dist/esm/walker.js.map | 1 + node_modules/glob/package.json | 99 + .../is-fullwidth-code-point/index.d.ts | 17 + node_modules/is-fullwidth-code-point/index.js | 50 + node_modules/is-fullwidth-code-point/license | 9 + .../is-fullwidth-code-point/package.json | 42 + .../is-fullwidth-code-point/readme.md | 39 + node_modules/jackspeak/LICENSE.md | 55 + node_modules/jackspeak/README.md | 357 +++ .../jackspeak/dist/commonjs/index.d.ts | 315 +++ .../jackspeak/dist/commonjs/index.d.ts.map | 1 + node_modules/jackspeak/dist/commonjs/index.js | 1010 +++++++++ .../jackspeak/dist/commonjs/index.js.map | 1 + .../jackspeak/dist/commonjs/package.json | 3 + .../dist/commonjs/parse-args-cjs.cjs.map | 1 + .../dist/commonjs/parse-args-cjs.d.cts.map | 1 + .../jackspeak/dist/commonjs/parse-args.d.ts | 4 + .../jackspeak/dist/commonjs/parse-args.js | 50 + node_modules/jackspeak/dist/esm/index.d.ts | 315 +++ .../jackspeak/dist/esm/index.d.ts.map | 1 + node_modules/jackspeak/dist/esm/index.js | 1000 ++++++++ node_modules/jackspeak/dist/esm/index.js.map | 1 + node_modules/jackspeak/dist/esm/package.json | 3 + .../jackspeak/dist/esm/parse-args.d.ts | 4 + .../jackspeak/dist/esm/parse-args.d.ts.map | 1 + node_modules/jackspeak/dist/esm/parse-args.js | 26 + .../jackspeak/dist/esm/parse-args.js.map | 1 + node_modules/jackspeak/package.json | 95 + node_modules/minimatch/LICENSE | 15 + node_modules/minimatch/README.md | 454 ++++ .../dist/commonjs/assert-valid-pattern.d.ts | 2 + .../commonjs/assert-valid-pattern.d.ts.map | 1 + .../dist/commonjs/assert-valid-pattern.js | 14 + .../dist/commonjs/assert-valid-pattern.js.map | 1 + node_modules/minimatch/dist/commonjs/ast.d.ts | 20 + .../minimatch/dist/commonjs/ast.d.ts.map | 1 + node_modules/minimatch/dist/commonjs/ast.js | 592 +++++ .../minimatch/dist/commonjs/ast.js.map | 1 + .../dist/commonjs/brace-expressions.d.ts | 8 + .../dist/commonjs/brace-expressions.d.ts.map | 1 + .../dist/commonjs/brace-expressions.js | 152 ++ .../dist/commonjs/brace-expressions.js.map | 1 + .../minimatch/dist/commonjs/escape.d.ts | 12 + .../minimatch/dist/commonjs/escape.d.ts.map | 1 + .../minimatch/dist/commonjs/escape.js | 22 + .../minimatch/dist/commonjs/escape.js.map | 1 + .../minimatch/dist/commonjs/index.d.ts | 94 + .../minimatch/dist/commonjs/index.d.ts.map | 1 + node_modules/minimatch/dist/commonjs/index.js | 1017 +++++++++ .../minimatch/dist/commonjs/index.js.map | 1 + .../minimatch/dist/commonjs/package.json | 3 + .../minimatch/dist/commonjs/unescape.d.ts | 17 + .../minimatch/dist/commonjs/unescape.d.ts.map | 1 + .../minimatch/dist/commonjs/unescape.js | 24 + .../minimatch/dist/commonjs/unescape.js.map | 1 + .../dist/esm/assert-valid-pattern.d.ts | 2 + .../dist/esm/assert-valid-pattern.d.ts.map | 1 + .../dist/esm/assert-valid-pattern.js | 10 + .../dist/esm/assert-valid-pattern.js.map | 1 + node_modules/minimatch/dist/esm/ast.d.ts | 20 + node_modules/minimatch/dist/esm/ast.d.ts.map | 1 + node_modules/minimatch/dist/esm/ast.js | 588 +++++ node_modules/minimatch/dist/esm/ast.js.map | 1 + .../minimatch/dist/esm/brace-expressions.d.ts | 8 + .../dist/esm/brace-expressions.d.ts.map | 1 + .../minimatch/dist/esm/brace-expressions.js | 148 ++ .../dist/esm/brace-expressions.js.map | 1 + node_modules/minimatch/dist/esm/escape.d.ts | 12 + .../minimatch/dist/esm/escape.d.ts.map | 1 + node_modules/minimatch/dist/esm/escape.js | 18 + node_modules/minimatch/dist/esm/escape.js.map | 1 + node_modules/minimatch/dist/esm/index.d.ts | 94 + .../minimatch/dist/esm/index.d.ts.map | 1 + node_modules/minimatch/dist/esm/index.js | 1001 ++++++++ node_modules/minimatch/dist/esm/index.js.map | 1 + node_modules/minimatch/dist/esm/package.json | 3 + node_modules/minimatch/dist/esm/unescape.d.ts | 17 + .../minimatch/dist/esm/unescape.d.ts.map | 1 + node_modules/minimatch/dist/esm/unescape.js | 20 + .../minimatch/dist/esm/unescape.js.map | 1 + node_modules/minimatch/package.json | 80 + node_modules/minipass/LICENSE | 15 + node_modules/minipass/README.md | 825 +++++++ .../minipass/dist/commonjs/index.d.ts | 549 +++++ .../minipass/dist/commonjs/index.d.ts.map | 1 + node_modules/minipass/dist/commonjs/index.js | 1028 +++++++++ .../minipass/dist/commonjs/index.js.map | 1 + .../minipass/dist/commonjs/package.json | 3 + node_modules/minipass/dist/esm/index.d.ts | 549 +++++ node_modules/minipass/dist/esm/index.d.ts.map | 1 + node_modules/minipass/dist/esm/index.js | 1018 +++++++++ node_modules/minipass/dist/esm/index.js.map | 1 + node_modules/minipass/dist/esm/package.json | 3 + node_modules/minipass/package.json | 82 + .../package-json-from-dist/LICENSE.md | 63 + node_modules/package-json-from-dist/README.md | 95 + .../dist/commonjs/index.d.ts | 89 + .../dist/commonjs/index.d.ts.map | 1 + .../dist/commonjs/index.js | 124 + .../dist/commonjs/index.js.map | 1 + .../dist/commonjs/package.json | 3 + .../dist/esm/index.d.ts | 89 + .../dist/esm/index.d.ts.map | 1 + .../package-json-from-dist/dist/esm/index.js | 119 + .../dist/esm/index.js.map | 1 + .../dist/esm/package.json | 3 + .../package-json-from-dist/package.json | 68 + node_modules/path-scurry/LICENSE.md | 55 + node_modules/path-scurry/README.md | 636 ++++++ .../path-scurry/dist/commonjs/index.d.ts | 1115 +++++++++ .../path-scurry/dist/commonjs/index.d.ts.map | 1 + .../path-scurry/dist/commonjs/index.js | 2016 +++++++++++++++++ .../path-scurry/dist/commonjs/index.js.map | 1 + .../path-scurry/dist/commonjs/package.json | 3 + node_modules/path-scurry/dist/esm/index.d.ts | 1115 +++++++++ .../path-scurry/dist/esm/index.d.ts.map | 1 + node_modules/path-scurry/dist/esm/index.js | 1981 ++++++++++++++++ .../path-scurry/dist/esm/index.js.map | 1 + .../path-scurry/dist/esm/package.json | 3 + .../node_modules/lru-cache/LICENSE | 15 + .../node_modules/lru-cache/README.md | 331 +++ .../lru-cache/dist/commonjs/index.d.ts | 1277 +++++++++++ .../lru-cache/dist/commonjs/index.d.ts.map | 1 + .../lru-cache/dist/commonjs/index.js | 1546 +++++++++++++ .../lru-cache/dist/commonjs/index.js.map | 1 + .../lru-cache/dist/commonjs/index.min.js | 2 + .../lru-cache/dist/commonjs/index.min.js.map | 7 + .../lru-cache/dist/commonjs/package.json | 3 + .../lru-cache/dist/esm/index.d.ts | 1277 +++++++++++ .../lru-cache/dist/esm/index.d.ts.map | 1 + .../node_modules/lru-cache/dist/esm/index.js | 1542 +++++++++++++ .../lru-cache/dist/esm/index.js.map | 1 + .../lru-cache/dist/esm/index.min.js | 2 + .../lru-cache/dist/esm/index.min.js.map | 7 + .../lru-cache/dist/esm/package.json | 3 + .../node_modules/lru-cache/package.json | 115 + node_modules/path-scurry/package.json | 88 + node_modules/signal-exit/LICENSE.txt | 16 + node_modules/signal-exit/README.md | 74 + .../signal-exit/dist/cjs/browser.d.ts | 12 + .../signal-exit/dist/cjs/browser.d.ts.map | 1 + node_modules/signal-exit/dist/cjs/browser.js | 10 + .../signal-exit/dist/cjs/browser.js.map | 1 + node_modules/signal-exit/dist/cjs/index.d.ts | 48 + .../signal-exit/dist/cjs/index.d.ts.map | 1 + node_modules/signal-exit/dist/cjs/index.js | 279 +++ .../signal-exit/dist/cjs/index.js.map | 1 + .../signal-exit/dist/cjs/package.json | 3 + .../signal-exit/dist/cjs/signals.d.ts | 29 + .../signal-exit/dist/cjs/signals.d.ts.map | 1 + node_modules/signal-exit/dist/cjs/signals.js | 42 + .../signal-exit/dist/cjs/signals.js.map | 1 + .../signal-exit/dist/mjs/browser.d.ts | 12 + .../signal-exit/dist/mjs/browser.d.ts.map | 1 + node_modules/signal-exit/dist/mjs/browser.js | 4 + .../signal-exit/dist/mjs/browser.js.map | 1 + node_modules/signal-exit/dist/mjs/index.d.ts | 48 + .../signal-exit/dist/mjs/index.d.ts.map | 1 + node_modules/signal-exit/dist/mjs/index.js | 275 +++ .../signal-exit/dist/mjs/index.js.map | 1 + .../signal-exit/dist/mjs/package.json | 3 + .../signal-exit/dist/mjs/signals.d.ts | 29 + .../signal-exit/dist/mjs/signals.d.ts.map | 1 + node_modules/signal-exit/dist/mjs/signals.js | 39 + .../signal-exit/dist/mjs/signals.js.map | 1 + node_modules/signal-exit/package.json | 106 + node_modules/string-width-cjs/index.d.ts | 29 + node_modules/string-width-cjs/index.js | 47 + node_modules/string-width-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/README.md | 73 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../node_modules/emoji-regex/index.d.ts | 23 + .../node_modules/emoji-regex/index.js | 6 + .../node_modules/emoji-regex/package.json | 50 + .../node_modules/emoji-regex/text.js | 6 + .../node_modules/strip-ansi/index.d.ts | 17 + .../node_modules/strip-ansi/index.js | 4 + .../node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 54 + .../node_modules/strip-ansi/readme.md | 46 + node_modules/string-width-cjs/package.json | 56 + node_modules/string-width-cjs/readme.md | 50 + node_modules/string-width/index.d.ts | 29 + node_modules/string-width/index.js | 54 + node_modules/string-width/license | 9 + node_modules/string-width/package.json | 59 + node_modules/string-width/readme.md | 67 + node_modules/strip-ansi-cjs/index.d.ts | 17 + node_modules/strip-ansi-cjs/index.js | 4 + node_modules/strip-ansi-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + node_modules/strip-ansi-cjs/package.json | 54 + node_modules/strip-ansi-cjs/readme.md | 46 + node_modules/strip-ansi/index.d.ts | 15 + node_modules/strip-ansi/index.js | 14 + node_modules/strip-ansi/license | 9 + node_modules/strip-ansi/package.json | 57 + node_modules/strip-ansi/readme.md | 41 + node_modules/wrap-ansi-cjs/index.js | 216 ++ node_modules/wrap-ansi-cjs/license | 9 + .../node_modules/ansi-regex/index.d.ts | 37 + .../node_modules/ansi-regex/index.js | 10 + .../node_modules/ansi-regex/license | 9 + .../node_modules/ansi-regex/package.json | 55 + .../node_modules/ansi-regex/readme.md | 78 + .../node_modules/ansi-styles/index.d.ts | 345 +++ .../node_modules/ansi-styles/index.js | 163 ++ .../node_modules/ansi-styles/license | 9 + .../node_modules/ansi-styles/package.json | 56 + .../node_modules/ansi-styles/readme.md | 152 ++ .../node_modules/color-convert/CHANGELOG.md | 54 + .../node_modules/color-convert/LICENSE | 21 + .../node_modules/color-convert/README.md | 68 + .../node_modules/color-convert/conversions.js | 839 +++++++ .../node_modules/color-convert/index.js | 81 + .../node_modules/color-convert/package.json | 48 + .../node_modules/color-convert/route.js | 97 + .../node_modules/color-name/LICENSE | 8 + .../node_modules/color-name/README.md | 11 + .../node_modules/color-name/index.js | 152 ++ .../node_modules/color-name/package.json | 28 + .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + .../node_modules/emoji-regex/README.md | 73 + .../node_modules/emoji-regex/es2015/index.js | 6 + .../node_modules/emoji-regex/es2015/text.js | 6 + .../node_modules/emoji-regex/index.d.ts | 23 + .../node_modules/emoji-regex/index.js | 6 + .../node_modules/emoji-regex/package.json | 50 + .../node_modules/emoji-regex/text.js | 6 + .../node_modules/string-width/index.d.ts | 29 + .../node_modules/string-width/index.js | 47 + .../node_modules/string-width/license | 9 + .../node_modules/string-width/package.json | 56 + .../node_modules/string-width/readme.md | 50 + .../node_modules/strip-ansi/index.d.ts | 17 + .../node_modules/strip-ansi/index.js | 4 + .../node_modules/strip-ansi/license | 9 + .../node_modules/strip-ansi/package.json | 54 + .../node_modules/strip-ansi/readme.md | 46 + node_modules/wrap-ansi-cjs/package.json | 62 + node_modules/wrap-ansi-cjs/readme.md | 91 + node_modules/wrap-ansi/index.d.ts | 41 + node_modules/wrap-ansi/index.js | 214 ++ node_modules/wrap-ansi/license | 9 + .../node_modules/ansi-styles/index.d.ts | 236 ++ .../node_modules/ansi-styles/index.js | 223 ++ .../node_modules/ansi-styles/license | 9 + .../node_modules/ansi-styles/package.json | 54 + .../node_modules/ansi-styles/readme.md | 173 ++ node_modules/wrap-ansi/package.json | 69 + node_modules/wrap-ansi/readme.md | 91 + package-lock.json | 417 ++++ package.json | 1 + static/css/main.css | 18 +- static/css/pages/core/home.css | 11 +- static/dist/css/admin_home.css | 8 + static/dist/css/contact.css | 27 + static/dist/css/core_admin_home.css | 8 + static/dist/css/core_contact.css | 27 + static/dist/css/core_home.css | 34 + static/dist/css/core_services.css | 38 + static/dist/css/home.css | 26 + static/dist/css/legal_license.css | 9 + static/dist/css/license.css | 9 + static/dist/css/services.css | 38 + static/dist/css/store_home.css | 2 + static/dist/css/store_product_categories.css | 63 + .../dist/css/store_product_permutations.css | 62 + static/dist/css/store_stock_items.css | 41 + static/dist/js/admin_home.bundle.js | 2 + .../dist/js/admin_home.bundle.js.LICENSE.txt | 1 + static/dist/js/contact.bundle.js | 2 + static/dist/js/contact.bundle.js.LICENSE.txt | 1 + static/dist/js/core_admin_home.bundle.js | 2 + .../js/core_admin_home.bundle.js.LICENSE.txt | 1 + static/dist/js/core_contact.bundle.js | 2 + .../js/core_contact.bundle.js.LICENSE.txt | 1 + static/dist/js/core_home.bundle.js | 2 + .../dist/js/core_home.bundle.js.LICENSE.txt | 1 + static/dist/js/core_services.bundle.js | 2 + .../js/core_services.bundle.js.LICENSE.txt | 1 + static/dist/js/home.bundle.js | 2 + static/dist/js/home.bundle.js.LICENSE.txt | 1 + static/dist/js/legal_license.bundle.js | 2 + .../js/legal_license.bundle.js.LICENSE.txt | 1 + static/dist/js/license.bundle.js | 2 + static/dist/js/license.bundle.js.LICENSE.txt | 1 + static/dist/js/services.bundle.js | 2 + static/dist/js/services.bundle.js.LICENSE.txt | 1 + static/dist/js/store_home.bundle.js | 2 + .../dist/js/store_home.bundle.js.LICENSE.txt | 1 + .../js/store_product_categories.bundle.js | 2 + ...e_product_categories.bundle.js.LICENSE.txt | 1 + .../js/store_product_permutations.bundle.js | 2 + ...product_permutations.bundle.js.LICENSE.txt | 1 + static/dist/js/store_stock_items.bundle.js | 2 + .../store_stock_items.bundle.js.LICENSE.txt | 1 + static/js/app.js | 20 + .../common/buttons/_buttons_save_cancel.html | 2 +- templates/pages/core/_admin_home.html | 1 + templates/pages/core/_contact.html | 12 +- templates/pages/core/_home.html | 1 + templates/pages/core/_services.html | 1 + .../pages/legal/_accessibility_statement.html | 4 +- templates/pages/legal/_license.html | 1 + templates/pages/legal/_privacy_notice.html | 1 + .../pages/legal/_retention_schedule.html | 1 + templates/pages/store/_basket.html | 1 + templates/pages/store/_checkout_success.html | 1 + .../pages/store/_product_categories.html | 1 + .../pages/store/_product_permutations.html | 1 + templates/pages/store/_products.html | 1 + templates/pages/store/_stock_items.html | 1 + templates/pages/store/_supplier.html | 1 + webpack.config.js | 55 +- 1490 files changed, 45316 insertions(+), 1372 deletions(-) delete mode 100644 env_web/Lib/site-packages/pip-23.0.1.dist-info/INSTALLER delete mode 100644 env_web/Lib/site-packages/pip-23.0.1.dist-info/METADATA delete mode 100644 env_web/Lib/site-packages/pip-23.0.1.dist-info/RECORD delete mode 100644 env_web/Lib/site-packages/pip-23.0.1.dist-info/REQUESTED delete mode 100644 env_web/Lib/site-packages/pip-23.0.1.dist-info/WHEEL delete mode 100644 env_web/Lib/site-packages/pip-23.0.1.dist-info/entry_points.txt delete mode 100644 env_web/Lib/site-packages/pip-23.0.1.dist-info/top_level.txt delete mode 100644 env_web/Lib/site-packages/pip/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/__pycache__/__main__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/main.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/debug.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/legacy.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/operations/install/legacy.py delete mode 100644 env_web/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/distutils_args.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/inject_securetransport.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/distutils_args.py delete mode 100644 env_web/Lib/site-packages/pip/_internal/utils/inject_securetransport.py delete mode 100644 env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/cachecontrol/compat.py delete mode 100644 env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py delete mode 100644 env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-38.pyc delete mode 100644 env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-38.pyc delete mode 100644 env_web/Scripts/pip3.8.exe create mode 100644 node_modules/.bin/glob create mode 100644 node_modules/.bin/glob.cmd create mode 100644 node_modules/.bin/glob.ps1 create mode 100644 node_modules/@isaacs/cliui/LICENSE.txt create mode 100644 node_modules/@isaacs/cliui/README.md create mode 100644 node_modules/@isaacs/cliui/build/index.cjs create mode 100644 node_modules/@isaacs/cliui/build/index.d.cts create mode 100644 node_modules/@isaacs/cliui/build/lib/index.js create mode 100644 node_modules/@isaacs/cliui/index.mjs create mode 100644 node_modules/@isaacs/cliui/package.json create mode 100644 node_modules/@pkgjs/parseargs/.editorconfig create mode 100644 node_modules/@pkgjs/parseargs/CHANGELOG.md create mode 100644 node_modules/@pkgjs/parseargs/LICENSE create mode 100644 node_modules/@pkgjs/parseargs/README.md create mode 100644 node_modules/@pkgjs/parseargs/examples/is-default-value.js create mode 100644 node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js create mode 100644 node_modules/@pkgjs/parseargs/examples/negate.js create mode 100644 node_modules/@pkgjs/parseargs/examples/no-repeated-options.js create mode 100644 node_modules/@pkgjs/parseargs/examples/ordered-options.mjs create mode 100644 node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js create mode 100644 node_modules/@pkgjs/parseargs/index.js create mode 100644 node_modules/@pkgjs/parseargs/internal/errors.js create mode 100644 node_modules/@pkgjs/parseargs/internal/primordials.js create mode 100644 node_modules/@pkgjs/parseargs/internal/util.js create mode 100644 node_modules/@pkgjs/parseargs/internal/validators.js create mode 100644 node_modules/@pkgjs/parseargs/package.json create mode 100644 node_modules/@pkgjs/parseargs/utils.js create mode 100644 node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/ansi-regex/index.js create mode 100644 node_modules/ansi-regex/license create mode 100644 node_modules/ansi-regex/package.json create mode 100644 node_modules/ansi-regex/readme.md create mode 100644 node_modules/balanced-match/.github/FUNDING.yml create mode 100644 node_modules/balanced-match/LICENSE.md create mode 100644 node_modules/balanced-match/README.md create mode 100644 node_modules/balanced-match/index.js create mode 100644 node_modules/balanced-match/package.json create mode 100644 node_modules/brace-expansion/.github/FUNDING.yml create mode 100644 node_modules/brace-expansion/LICENSE create mode 100644 node_modules/brace-expansion/README.md create mode 100644 node_modules/brace-expansion/index.js create mode 100644 node_modules/brace-expansion/package.json create mode 100644 node_modules/eastasianwidth/README.md create mode 100644 node_modules/eastasianwidth/eastasianwidth.js create mode 100644 node_modules/eastasianwidth/package.json rename env_web/Lib/site-packages/pip-23.0.1.dist-info/LICENSE.txt => node_modules/emoji-regex/LICENSE-MIT.txt (93%) create mode 100644 node_modules/emoji-regex/README.md create mode 100644 node_modules/emoji-regex/RGI_Emoji.d.ts create mode 100644 node_modules/emoji-regex/RGI_Emoji.js create mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.d.ts create mode 100644 node_modules/emoji-regex/es2015/RGI_Emoji.js create mode 100644 node_modules/emoji-regex/es2015/index.d.ts create mode 100644 node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/emoji-regex/es2015/text.d.ts create mode 100644 node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/emoji-regex/index.js create mode 100644 node_modules/emoji-regex/package.json create mode 100644 node_modules/emoji-regex/text.d.ts create mode 100644 node_modules/emoji-regex/text.js create mode 100644 node_modules/foreground-child/LICENSE create mode 100644 node_modules/foreground-child/README.md create mode 100644 node_modules/foreground-child/dist/commonjs/all-signals.d.ts create mode 100644 node_modules/foreground-child/dist/commonjs/all-signals.d.ts.map create mode 100644 node_modules/foreground-child/dist/commonjs/all-signals.js create mode 100644 node_modules/foreground-child/dist/commonjs/all-signals.js.map create mode 100644 node_modules/foreground-child/dist/commonjs/index.d.ts create mode 100644 node_modules/foreground-child/dist/commonjs/index.d.ts.map create mode 100644 node_modules/foreground-child/dist/commonjs/index.js create mode 100644 node_modules/foreground-child/dist/commonjs/index.js.map create mode 100644 node_modules/foreground-child/dist/commonjs/package.json create mode 100644 node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts create mode 100644 node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts.map create mode 100644 node_modules/foreground-child/dist/commonjs/proxy-signals.js create mode 100644 node_modules/foreground-child/dist/commonjs/proxy-signals.js.map create mode 100644 node_modules/foreground-child/dist/commonjs/watchdog.d.ts create mode 100644 node_modules/foreground-child/dist/commonjs/watchdog.d.ts.map create mode 100644 node_modules/foreground-child/dist/commonjs/watchdog.js create mode 100644 node_modules/foreground-child/dist/commonjs/watchdog.js.map create mode 100644 node_modules/foreground-child/dist/esm/all-signals.d.ts create mode 100644 node_modules/foreground-child/dist/esm/all-signals.d.ts.map create mode 100644 node_modules/foreground-child/dist/esm/all-signals.js create mode 100644 node_modules/foreground-child/dist/esm/all-signals.js.map create mode 100644 node_modules/foreground-child/dist/esm/index.d.ts create mode 100644 node_modules/foreground-child/dist/esm/index.d.ts.map create mode 100644 node_modules/foreground-child/dist/esm/index.js create mode 100644 node_modules/foreground-child/dist/esm/index.js.map create mode 100644 node_modules/foreground-child/dist/esm/package.json create mode 100644 node_modules/foreground-child/dist/esm/proxy-signals.d.ts create mode 100644 node_modules/foreground-child/dist/esm/proxy-signals.d.ts.map create mode 100644 node_modules/foreground-child/dist/esm/proxy-signals.js create mode 100644 node_modules/foreground-child/dist/esm/proxy-signals.js.map create mode 100644 node_modules/foreground-child/dist/esm/watchdog.d.ts create mode 100644 node_modules/foreground-child/dist/esm/watchdog.d.ts.map create mode 100644 node_modules/foreground-child/dist/esm/watchdog.js create mode 100644 node_modules/foreground-child/dist/esm/watchdog.js.map create mode 100644 node_modules/foreground-child/package.json create mode 100644 node_modules/glob/LICENSE create mode 100644 node_modules/glob/README.md create mode 100644 node_modules/glob/dist/commonjs/glob.d.ts create mode 100644 node_modules/glob/dist/commonjs/glob.d.ts.map create mode 100644 node_modules/glob/dist/commonjs/glob.js create mode 100644 node_modules/glob/dist/commonjs/glob.js.map create mode 100644 node_modules/glob/dist/commonjs/has-magic.d.ts create mode 100644 node_modules/glob/dist/commonjs/has-magic.d.ts.map create mode 100644 node_modules/glob/dist/commonjs/has-magic.js create mode 100644 node_modules/glob/dist/commonjs/has-magic.js.map create mode 100644 node_modules/glob/dist/commonjs/ignore.d.ts create mode 100644 node_modules/glob/dist/commonjs/ignore.d.ts.map create mode 100644 node_modules/glob/dist/commonjs/ignore.js create mode 100644 node_modules/glob/dist/commonjs/ignore.js.map create mode 100644 node_modules/glob/dist/commonjs/index.d.ts create mode 100644 node_modules/glob/dist/commonjs/index.d.ts.map create mode 100644 node_modules/glob/dist/commonjs/index.js create mode 100644 node_modules/glob/dist/commonjs/index.js.map create mode 100644 node_modules/glob/dist/commonjs/package.json create mode 100644 node_modules/glob/dist/commonjs/pattern.d.ts create mode 100644 node_modules/glob/dist/commonjs/pattern.d.ts.map create mode 100644 node_modules/glob/dist/commonjs/pattern.js create mode 100644 node_modules/glob/dist/commonjs/pattern.js.map create mode 100644 node_modules/glob/dist/commonjs/processor.d.ts create mode 100644 node_modules/glob/dist/commonjs/processor.d.ts.map create mode 100644 node_modules/glob/dist/commonjs/processor.js create mode 100644 node_modules/glob/dist/commonjs/processor.js.map create mode 100644 node_modules/glob/dist/commonjs/walker.d.ts create mode 100644 node_modules/glob/dist/commonjs/walker.d.ts.map create mode 100644 node_modules/glob/dist/commonjs/walker.js create mode 100644 node_modules/glob/dist/commonjs/walker.js.map create mode 100644 node_modules/glob/dist/esm/bin.d.mts create mode 100644 node_modules/glob/dist/esm/bin.d.mts.map create mode 100644 node_modules/glob/dist/esm/bin.mjs create mode 100644 node_modules/glob/dist/esm/bin.mjs.map create mode 100644 node_modules/glob/dist/esm/glob.d.ts create mode 100644 node_modules/glob/dist/esm/glob.d.ts.map create mode 100644 node_modules/glob/dist/esm/glob.js create mode 100644 node_modules/glob/dist/esm/glob.js.map create mode 100644 node_modules/glob/dist/esm/has-magic.d.ts create mode 100644 node_modules/glob/dist/esm/has-magic.d.ts.map create mode 100644 node_modules/glob/dist/esm/has-magic.js create mode 100644 node_modules/glob/dist/esm/has-magic.js.map create mode 100644 node_modules/glob/dist/esm/ignore.d.ts create mode 100644 node_modules/glob/dist/esm/ignore.d.ts.map create mode 100644 node_modules/glob/dist/esm/ignore.js create mode 100644 node_modules/glob/dist/esm/ignore.js.map create mode 100644 node_modules/glob/dist/esm/index.d.ts create mode 100644 node_modules/glob/dist/esm/index.d.ts.map create mode 100644 node_modules/glob/dist/esm/index.js create mode 100644 node_modules/glob/dist/esm/index.js.map create mode 100644 node_modules/glob/dist/esm/package.json create mode 100644 node_modules/glob/dist/esm/pattern.d.ts create mode 100644 node_modules/glob/dist/esm/pattern.d.ts.map create mode 100644 node_modules/glob/dist/esm/pattern.js create mode 100644 node_modules/glob/dist/esm/pattern.js.map create mode 100644 node_modules/glob/dist/esm/processor.d.ts create mode 100644 node_modules/glob/dist/esm/processor.d.ts.map create mode 100644 node_modules/glob/dist/esm/processor.js create mode 100644 node_modules/glob/dist/esm/processor.js.map create mode 100644 node_modules/glob/dist/esm/walker.d.ts create mode 100644 node_modules/glob/dist/esm/walker.d.ts.map create mode 100644 node_modules/glob/dist/esm/walker.js create mode 100644 node_modules/glob/dist/esm/walker.js.map create mode 100644 node_modules/glob/package.json create mode 100644 node_modules/is-fullwidth-code-point/index.d.ts create mode 100644 node_modules/is-fullwidth-code-point/index.js create mode 100644 node_modules/is-fullwidth-code-point/license create mode 100644 node_modules/is-fullwidth-code-point/package.json create mode 100644 node_modules/is-fullwidth-code-point/readme.md create mode 100644 node_modules/jackspeak/LICENSE.md create mode 100644 node_modules/jackspeak/README.md create mode 100644 node_modules/jackspeak/dist/commonjs/index.d.ts create mode 100644 node_modules/jackspeak/dist/commonjs/index.d.ts.map create mode 100644 node_modules/jackspeak/dist/commonjs/index.js create mode 100644 node_modules/jackspeak/dist/commonjs/index.js.map create mode 100644 node_modules/jackspeak/dist/commonjs/package.json create mode 100644 node_modules/jackspeak/dist/commonjs/parse-args-cjs.cjs.map create mode 100644 node_modules/jackspeak/dist/commonjs/parse-args-cjs.d.cts.map create mode 100644 node_modules/jackspeak/dist/commonjs/parse-args.d.ts create mode 100644 node_modules/jackspeak/dist/commonjs/parse-args.js create mode 100644 node_modules/jackspeak/dist/esm/index.d.ts create mode 100644 node_modules/jackspeak/dist/esm/index.d.ts.map create mode 100644 node_modules/jackspeak/dist/esm/index.js create mode 100644 node_modules/jackspeak/dist/esm/index.js.map create mode 100644 node_modules/jackspeak/dist/esm/package.json create mode 100644 node_modules/jackspeak/dist/esm/parse-args.d.ts create mode 100644 node_modules/jackspeak/dist/esm/parse-args.d.ts.map create mode 100644 node_modules/jackspeak/dist/esm/parse-args.js create mode 100644 node_modules/jackspeak/dist/esm/parse-args.js.map create mode 100644 node_modules/jackspeak/package.json create mode 100644 node_modules/minimatch/LICENSE create mode 100644 node_modules/minimatch/README.md create mode 100644 node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts create mode 100644 node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map create mode 100644 node_modules/minimatch/dist/commonjs/assert-valid-pattern.js create mode 100644 node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map create mode 100644 node_modules/minimatch/dist/commonjs/ast.d.ts create mode 100644 node_modules/minimatch/dist/commonjs/ast.d.ts.map create mode 100644 node_modules/minimatch/dist/commonjs/ast.js create mode 100644 node_modules/minimatch/dist/commonjs/ast.js.map create mode 100644 node_modules/minimatch/dist/commonjs/brace-expressions.d.ts create mode 100644 node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map create mode 100644 node_modules/minimatch/dist/commonjs/brace-expressions.js create mode 100644 node_modules/minimatch/dist/commonjs/brace-expressions.js.map create mode 100644 node_modules/minimatch/dist/commonjs/escape.d.ts create mode 100644 node_modules/minimatch/dist/commonjs/escape.d.ts.map create mode 100644 node_modules/minimatch/dist/commonjs/escape.js create mode 100644 node_modules/minimatch/dist/commonjs/escape.js.map create mode 100644 node_modules/minimatch/dist/commonjs/index.d.ts create mode 100644 node_modules/minimatch/dist/commonjs/index.d.ts.map create mode 100644 node_modules/minimatch/dist/commonjs/index.js create mode 100644 node_modules/minimatch/dist/commonjs/index.js.map create mode 100644 node_modules/minimatch/dist/commonjs/package.json create mode 100644 node_modules/minimatch/dist/commonjs/unescape.d.ts create mode 100644 node_modules/minimatch/dist/commonjs/unescape.d.ts.map create mode 100644 node_modules/minimatch/dist/commonjs/unescape.js create mode 100644 node_modules/minimatch/dist/commonjs/unescape.js.map create mode 100644 node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts create mode 100644 node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map create mode 100644 node_modules/minimatch/dist/esm/assert-valid-pattern.js create mode 100644 node_modules/minimatch/dist/esm/assert-valid-pattern.js.map create mode 100644 node_modules/minimatch/dist/esm/ast.d.ts create mode 100644 node_modules/minimatch/dist/esm/ast.d.ts.map create mode 100644 node_modules/minimatch/dist/esm/ast.js create mode 100644 node_modules/minimatch/dist/esm/ast.js.map create mode 100644 node_modules/minimatch/dist/esm/brace-expressions.d.ts create mode 100644 node_modules/minimatch/dist/esm/brace-expressions.d.ts.map create mode 100644 node_modules/minimatch/dist/esm/brace-expressions.js create mode 100644 node_modules/minimatch/dist/esm/brace-expressions.js.map create mode 100644 node_modules/minimatch/dist/esm/escape.d.ts create mode 100644 node_modules/minimatch/dist/esm/escape.d.ts.map create mode 100644 node_modules/minimatch/dist/esm/escape.js create mode 100644 node_modules/minimatch/dist/esm/escape.js.map create mode 100644 node_modules/minimatch/dist/esm/index.d.ts create mode 100644 node_modules/minimatch/dist/esm/index.d.ts.map create mode 100644 node_modules/minimatch/dist/esm/index.js create mode 100644 node_modules/minimatch/dist/esm/index.js.map create mode 100644 node_modules/minimatch/dist/esm/package.json create mode 100644 node_modules/minimatch/dist/esm/unescape.d.ts create mode 100644 node_modules/minimatch/dist/esm/unescape.d.ts.map create mode 100644 node_modules/minimatch/dist/esm/unescape.js create mode 100644 node_modules/minimatch/dist/esm/unescape.js.map create mode 100644 node_modules/minimatch/package.json create mode 100644 node_modules/minipass/LICENSE create mode 100644 node_modules/minipass/README.md create mode 100644 node_modules/minipass/dist/commonjs/index.d.ts create mode 100644 node_modules/minipass/dist/commonjs/index.d.ts.map create mode 100644 node_modules/minipass/dist/commonjs/index.js create mode 100644 node_modules/minipass/dist/commonjs/index.js.map create mode 100644 node_modules/minipass/dist/commonjs/package.json create mode 100644 node_modules/minipass/dist/esm/index.d.ts create mode 100644 node_modules/minipass/dist/esm/index.d.ts.map create mode 100644 node_modules/minipass/dist/esm/index.js create mode 100644 node_modules/minipass/dist/esm/index.js.map create mode 100644 node_modules/minipass/dist/esm/package.json create mode 100644 node_modules/minipass/package.json create mode 100644 node_modules/package-json-from-dist/LICENSE.md create mode 100644 node_modules/package-json-from-dist/README.md create mode 100644 node_modules/package-json-from-dist/dist/commonjs/index.d.ts create mode 100644 node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map create mode 100644 node_modules/package-json-from-dist/dist/commonjs/index.js create mode 100644 node_modules/package-json-from-dist/dist/commonjs/index.js.map create mode 100644 node_modules/package-json-from-dist/dist/commonjs/package.json create mode 100644 node_modules/package-json-from-dist/dist/esm/index.d.ts create mode 100644 node_modules/package-json-from-dist/dist/esm/index.d.ts.map create mode 100644 node_modules/package-json-from-dist/dist/esm/index.js create mode 100644 node_modules/package-json-from-dist/dist/esm/index.js.map create mode 100644 node_modules/package-json-from-dist/dist/esm/package.json create mode 100644 node_modules/package-json-from-dist/package.json create mode 100644 node_modules/path-scurry/LICENSE.md create mode 100644 node_modules/path-scurry/README.md create mode 100644 node_modules/path-scurry/dist/commonjs/index.d.ts create mode 100644 node_modules/path-scurry/dist/commonjs/index.d.ts.map create mode 100644 node_modules/path-scurry/dist/commonjs/index.js create mode 100644 node_modules/path-scurry/dist/commonjs/index.js.map create mode 100644 node_modules/path-scurry/dist/commonjs/package.json create mode 100644 node_modules/path-scurry/dist/esm/index.d.ts create mode 100644 node_modules/path-scurry/dist/esm/index.d.ts.map create mode 100644 node_modules/path-scurry/dist/esm/index.js create mode 100644 node_modules/path-scurry/dist/esm/index.js.map create mode 100644 node_modules/path-scurry/dist/esm/package.json create mode 100644 node_modules/path-scurry/node_modules/lru-cache/LICENSE create mode 100644 node_modules/path-scurry/node_modules/lru-cache/README.md create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/package.json create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map create mode 100644 node_modules/path-scurry/node_modules/lru-cache/dist/esm/package.json create mode 100644 node_modules/path-scurry/node_modules/lru-cache/package.json create mode 100644 node_modules/path-scurry/package.json create mode 100644 node_modules/signal-exit/LICENSE.txt create mode 100644 node_modules/signal-exit/README.md create mode 100644 node_modules/signal-exit/dist/cjs/browser.d.ts create mode 100644 node_modules/signal-exit/dist/cjs/browser.d.ts.map create mode 100644 node_modules/signal-exit/dist/cjs/browser.js create mode 100644 node_modules/signal-exit/dist/cjs/browser.js.map create mode 100644 node_modules/signal-exit/dist/cjs/index.d.ts create mode 100644 node_modules/signal-exit/dist/cjs/index.d.ts.map create mode 100644 node_modules/signal-exit/dist/cjs/index.js create mode 100644 node_modules/signal-exit/dist/cjs/index.js.map create mode 100644 node_modules/signal-exit/dist/cjs/package.json create mode 100644 node_modules/signal-exit/dist/cjs/signals.d.ts create mode 100644 node_modules/signal-exit/dist/cjs/signals.d.ts.map create mode 100644 node_modules/signal-exit/dist/cjs/signals.js create mode 100644 node_modules/signal-exit/dist/cjs/signals.js.map create mode 100644 node_modules/signal-exit/dist/mjs/browser.d.ts create mode 100644 node_modules/signal-exit/dist/mjs/browser.d.ts.map create mode 100644 node_modules/signal-exit/dist/mjs/browser.js create mode 100644 node_modules/signal-exit/dist/mjs/browser.js.map create mode 100644 node_modules/signal-exit/dist/mjs/index.d.ts create mode 100644 node_modules/signal-exit/dist/mjs/index.d.ts.map create mode 100644 node_modules/signal-exit/dist/mjs/index.js create mode 100644 node_modules/signal-exit/dist/mjs/index.js.map create mode 100644 node_modules/signal-exit/dist/mjs/package.json create mode 100644 node_modules/signal-exit/dist/mjs/signals.d.ts create mode 100644 node_modules/signal-exit/dist/mjs/signals.d.ts.map create mode 100644 node_modules/signal-exit/dist/mjs/signals.js create mode 100644 node_modules/signal-exit/dist/mjs/signals.js.map create mode 100644 node_modules/signal-exit/package.json create mode 100644 node_modules/string-width-cjs/index.d.ts create mode 100644 node_modules/string-width-cjs/index.js create mode 100644 node_modules/string-width-cjs/license create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/string-width-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/README.md create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/index.js create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/package.json create mode 100644 node_modules/string-width-cjs/node_modules/emoji-regex/text.js create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/index.js create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/license create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/package.json create mode 100644 node_modules/string-width-cjs/node_modules/strip-ansi/readme.md create mode 100644 node_modules/string-width-cjs/package.json create mode 100644 node_modules/string-width-cjs/readme.md create mode 100644 node_modules/string-width/index.d.ts create mode 100644 node_modules/string-width/index.js create mode 100644 node_modules/string-width/license create mode 100644 node_modules/string-width/package.json create mode 100644 node_modules/string-width/readme.md create mode 100644 node_modules/strip-ansi-cjs/index.d.ts create mode 100644 node_modules/strip-ansi-cjs/index.js create mode 100644 node_modules/strip-ansi-cjs/license create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/strip-ansi-cjs/package.json create mode 100644 node_modules/strip-ansi-cjs/readme.md create mode 100644 node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/strip-ansi/index.js create mode 100644 node_modules/strip-ansi/license create mode 100644 node_modules/strip-ansi/package.json create mode 100644 node_modules/strip-ansi/readme.md create mode 100644 node_modules/wrap-ansi-cjs/index.js create mode 100644 node_modules/wrap-ansi-cjs/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-convert/CHANGELOG.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-convert/LICENSE create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-convert/README.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-convert/conversions.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-convert/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-convert/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-convert/route.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-name/LICENSE create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-name/README.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-name/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/color-name/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json create mode 100644 node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md create mode 100644 node_modules/wrap-ansi-cjs/package.json create mode 100644 node_modules/wrap-ansi-cjs/readme.md create mode 100644 node_modules/wrap-ansi/index.d.ts create mode 100644 node_modules/wrap-ansi/index.js create mode 100644 node_modules/wrap-ansi/license create mode 100644 node_modules/wrap-ansi/node_modules/ansi-styles/index.d.ts create mode 100644 node_modules/wrap-ansi/node_modules/ansi-styles/index.js create mode 100644 node_modules/wrap-ansi/node_modules/ansi-styles/license create mode 100644 node_modules/wrap-ansi/node_modules/ansi-styles/package.json create mode 100644 node_modules/wrap-ansi/node_modules/ansi-styles/readme.md create mode 100644 node_modules/wrap-ansi/package.json create mode 100644 node_modules/wrap-ansi/readme.md create mode 100644 static/dist/css/admin_home.css create mode 100644 static/dist/css/contact.css create mode 100644 static/dist/css/core_admin_home.css create mode 100644 static/dist/css/core_contact.css create mode 100644 static/dist/css/core_home.css create mode 100644 static/dist/css/core_services.css create mode 100644 static/dist/css/home.css create mode 100644 static/dist/css/legal_license.css create mode 100644 static/dist/css/license.css create mode 100644 static/dist/css/services.css create mode 100644 static/dist/css/store_home.css create mode 100644 static/dist/css/store_product_categories.css create mode 100644 static/dist/css/store_product_permutations.css create mode 100644 static/dist/css/store_stock_items.css create mode 100644 static/dist/js/admin_home.bundle.js create mode 100644 static/dist/js/admin_home.bundle.js.LICENSE.txt create mode 100644 static/dist/js/contact.bundle.js create mode 100644 static/dist/js/contact.bundle.js.LICENSE.txt create mode 100644 static/dist/js/core_admin_home.bundle.js create mode 100644 static/dist/js/core_admin_home.bundle.js.LICENSE.txt create mode 100644 static/dist/js/core_contact.bundle.js create mode 100644 static/dist/js/core_contact.bundle.js.LICENSE.txt create mode 100644 static/dist/js/core_home.bundle.js create mode 100644 static/dist/js/core_home.bundle.js.LICENSE.txt create mode 100644 static/dist/js/core_services.bundle.js create mode 100644 static/dist/js/core_services.bundle.js.LICENSE.txt create mode 100644 static/dist/js/home.bundle.js create mode 100644 static/dist/js/home.bundle.js.LICENSE.txt create mode 100644 static/dist/js/legal_license.bundle.js create mode 100644 static/dist/js/legal_license.bundle.js.LICENSE.txt create mode 100644 static/dist/js/license.bundle.js create mode 100644 static/dist/js/license.bundle.js.LICENSE.txt create mode 100644 static/dist/js/services.bundle.js create mode 100644 static/dist/js/services.bundle.js.LICENSE.txt create mode 100644 static/dist/js/store_home.bundle.js create mode 100644 static/dist/js/store_home.bundle.js.LICENSE.txt create mode 100644 static/dist/js/store_product_categories.bundle.js create mode 100644 static/dist/js/store_product_categories.bundle.js.LICENSE.txt create mode 100644 static/dist/js/store_product_permutations.bundle.js create mode 100644 static/dist/js/store_product_permutations.bundle.js.LICENSE.txt create mode 100644 static/dist/js/store_stock_items.bundle.js create mode 100644 static/dist/js/store_stock_items.bundle.js.LICENSE.txt diff --git a/env_web/Lib/site-packages/pip-23.0.1.dist-info/INSTALLER b/env_web/Lib/site-packages/pip-23.0.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e3..00000000 --- a/env_web/Lib/site-packages/pip-23.0.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/env_web/Lib/site-packages/pip-23.0.1.dist-info/METADATA b/env_web/Lib/site-packages/pip-23.0.1.dist-info/METADATA deleted file mode 100644 index 984f9ad3..00000000 --- a/env_web/Lib/site-packages/pip-23.0.1.dist-info/METADATA +++ /dev/null @@ -1,88 +0,0 @@ -Metadata-Version: 2.1 -Name: pip -Version: 23.0.1 -Summary: The PyPA recommended tool for installing Python packages. -Home-page: https://pip.pypa.io/ -Author: The pip developers -Author-email: distutils-sig@python.org -License: MIT -Project-URL: Documentation, https://pip.pypa.io -Project-URL: Source, https://github.com/pypa/pip -Project-URL: Changelog, https://pip.pypa.io/en/stable/news/ -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Topic :: Software Development :: Build Tools -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: 3.11 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=3.7 -License-File: LICENSE.txt - -pip - The Python Package Installer -================================== - -.. image:: https://img.shields.io/pypi/v/pip.svg - :target: https://pypi.org/project/pip/ - -.. image:: https://readthedocs.org/projects/pip/badge/?version=latest - :target: https://pip.pypa.io/en/latest - -pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes. - -Please take a look at our documentation for how to install and use pip: - -* `Installation`_ -* `Usage`_ - -We release updates regularly, with a new version every 3 months. Find more details in our documentation: - -* `Release notes`_ -* `Release process`_ - -In pip 20.3, we've `made a big improvement to the heart of pip`_; `learn more`_. We want your input, so `sign up for our user experience research studies`_ to help us do it right. - -**Note**: pip 21.0, in January 2021, removed Python 2 support, per pip's `Python 2 support policy`_. Please migrate to Python 3. - -If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms: - -* `Issue tracking`_ -* `Discourse channel`_ -* `User IRC`_ - -If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms: - -* `GitHub page`_ -* `Development documentation`_ -* `Development IRC`_ - -Code of Conduct ---------------- - -Everyone interacting in the pip project's codebases, issue trackers, chat -rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. - -.. _package installer: https://packaging.python.org/guides/tool-recommendations/ -.. _Python Package Index: https://pypi.org -.. _Installation: https://pip.pypa.io/en/stable/installation/ -.. _Usage: https://pip.pypa.io/en/stable/ -.. _Release notes: https://pip.pypa.io/en/stable/news.html -.. _Release process: https://pip.pypa.io/en/latest/development/release-process/ -.. _GitHub page: https://github.com/pypa/pip -.. _Development documentation: https://pip.pypa.io/en/latest/development -.. _made a big improvement to the heart of pip: https://pyfound.blogspot.com/2020/11/pip-20-3-new-resolver.html -.. _learn more: https://pip.pypa.io/en/latest/user_guide/#changes-to-the-pip-dependency-resolver-in-20-3-2020 -.. _sign up for our user experience research studies: https://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html -.. _Python 2 support policy: https://pip.pypa.io/en/latest/development/release-process/#python-2-support -.. _Issue tracking: https://github.com/pypa/pip/issues -.. _Discourse channel: https://discuss.python.org/c/packaging -.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa -.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev -.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md diff --git a/env_web/Lib/site-packages/pip-23.0.1.dist-info/RECORD b/env_web/Lib/site-packages/pip-23.0.1.dist-info/RECORD deleted file mode 100644 index af445f64..00000000 --- a/env_web/Lib/site-packages/pip-23.0.1.dist-info/RECORD +++ /dev/null @@ -1,1002 +0,0 @@ -../../Scripts/pip.exe,sha256=QOekK_X69rprtL03MiCaIDDAHDnWj-uxU2pvwy9BF9Q,98226 -../../Scripts/pip3.8.exe,sha256=QOekK_X69rprtL03MiCaIDDAHDnWj-uxU2pvwy9BF9Q,98226 -../../Scripts/pip3.exe,sha256=QOekK_X69rprtL03MiCaIDDAHDnWj-uxU2pvwy9BF9Q,98226 -pip-23.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pip-23.0.1.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093 -pip-23.0.1.dist-info/METADATA,sha256=POh89utz-H1e0K-xDY9CL9gs-x0MjH-AWxbhJG3aaVE,4072 -pip-23.0.1.dist-info/RECORD,, -pip-23.0.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip-23.0.1.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92 -pip-23.0.1.dist-info/entry_points.txt,sha256=w694mjHYSfmSoUVVSaHoQ9UkOBBdtKKIJbyDRLdKju8,124 -pip-23.0.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -pip/__init__.py,sha256=5yroedzc2dKKbcynDrHX8vBoLxqU27KmFvvHmdqQN9w,357 -pip/__main__.py,sha256=mXwWDftNLMKfwVqKFWGE_uuBZvGSIiUELhLkeysIuZc,1198 -pip/__pip-runner__.py,sha256=EnrfKmKMzWAdqg_JicLCOP9Y95Ux7zHh4ObvqLtQcjo,1444 -pip/__pycache__/__init__.cpython-38.pyc,, -pip/__pycache__/__main__.cpython-38.pyc,, -pip/__pycache__/__pip-runner__.cpython-38.pyc,, -pip/_internal/__init__.py,sha256=nnFCuxrPMgALrIDxSoy-H6Zj4W4UY60D-uL1aJyq0pc,573 -pip/_internal/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/__pycache__/build_env.cpython-38.pyc,, -pip/_internal/__pycache__/cache.cpython-38.pyc,, -pip/_internal/__pycache__/configuration.cpython-38.pyc,, -pip/_internal/__pycache__/exceptions.cpython-38.pyc,, -pip/_internal/__pycache__/main.cpython-38.pyc,, -pip/_internal/__pycache__/pyproject.cpython-38.pyc,, -pip/_internal/__pycache__/self_outdated_check.cpython-38.pyc,, -pip/_internal/__pycache__/wheel_builder.cpython-38.pyc,, -pip/_internal/build_env.py,sha256=1ESpqw0iupS_K7phZK5zshVE5Czy9BtGLFU4W6Enva8,10243 -pip/_internal/cache.py,sha256=C3n78VnBga9rjPXZqht_4A4d-T25poC7K0qBM7FHDhU,10734 -pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132 -pip/_internal/cli/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/cli/__pycache__/autocompletion.cpython-38.pyc,, -pip/_internal/cli/__pycache__/base_command.cpython-38.pyc,, -pip/_internal/cli/__pycache__/cmdoptions.cpython-38.pyc,, -pip/_internal/cli/__pycache__/command_context.cpython-38.pyc,, -pip/_internal/cli/__pycache__/main.cpython-38.pyc,, -pip/_internal/cli/__pycache__/main_parser.cpython-38.pyc,, -pip/_internal/cli/__pycache__/parser.cpython-38.pyc,, -pip/_internal/cli/__pycache__/progress_bars.cpython-38.pyc,, -pip/_internal/cli/__pycache__/req_command.cpython-38.pyc,, -pip/_internal/cli/__pycache__/spinners.cpython-38.pyc,, -pip/_internal/cli/__pycache__/status_codes.cpython-38.pyc,, -pip/_internal/cli/autocompletion.py,sha256=wY2JPZY2Eji1vhR7bVo-yCBPJ9LCy6P80iOAhZD1Vi8,6676 -pip/_internal/cli/base_command.py,sha256=t1D5x40Hfn9HnPnMt-iSxvqL14nht2olBCacW74pc-k,7842 -pip/_internal/cli/cmdoptions.py,sha256=0OHXkgnppCtC4QyF28ZL8FBosVUXG5pWj2uzO1CgWhM,29497 -pip/_internal/cli/command_context.py,sha256=RHgIPwtObh5KhMrd3YZTkl8zbVG-6Okml7YbFX4Ehg0,774 -pip/_internal/cli/main.py,sha256=ioJ8IVlb2K1qLOxR-tXkee9lURhYV89CDM71MKag7YY,2472 -pip/_internal/cli/main_parser.py,sha256=laDpsuBDl6kyfywp9eMMA9s84jfH2TJJn-vmL0GG90w,4338 -pip/_internal/cli/parser.py,sha256=tWP-K1uSxnJyXu3WE0kkH3niAYRBeuUaxeydhzOdhL4,10817 -pip/_internal/cli/progress_bars.py,sha256=So4mPoSjXkXiSHiTzzquH3VVyVD_njXlHJSExYPXAow,1968 -pip/_internal/cli/req_command.py,sha256=ypTutLv4j_efxC2f6C6aCQufxre-zaJdi5m_tWlLeBk,18172 -pip/_internal/cli/spinners.py,sha256=hIJ83GerdFgFCdobIA23Jggetegl_uC4Sp586nzFbPE,5118 -pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116 -pip/_internal/commands/__init__.py,sha256=5oRO9O3dM2vGuh0bFw4HOVletryrz5HHMmmPWwJrH9U,3882 -pip/_internal/commands/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/commands/__pycache__/cache.cpython-38.pyc,, -pip/_internal/commands/__pycache__/check.cpython-38.pyc,, -pip/_internal/commands/__pycache__/completion.cpython-38.pyc,, -pip/_internal/commands/__pycache__/configuration.cpython-38.pyc,, -pip/_internal/commands/__pycache__/debug.cpython-38.pyc,, -pip/_internal/commands/__pycache__/download.cpython-38.pyc,, -pip/_internal/commands/__pycache__/freeze.cpython-38.pyc,, -pip/_internal/commands/__pycache__/hash.cpython-38.pyc,, -pip/_internal/commands/__pycache__/help.cpython-38.pyc,, -pip/_internal/commands/__pycache__/index.cpython-38.pyc,, -pip/_internal/commands/__pycache__/inspect.cpython-38.pyc,, -pip/_internal/commands/__pycache__/install.cpython-38.pyc,, -pip/_internal/commands/__pycache__/list.cpython-38.pyc,, -pip/_internal/commands/__pycache__/search.cpython-38.pyc,, -pip/_internal/commands/__pycache__/show.cpython-38.pyc,, -pip/_internal/commands/__pycache__/uninstall.cpython-38.pyc,, -pip/_internal/commands/__pycache__/wheel.cpython-38.pyc,, -pip/_internal/commands/cache.py,sha256=muaT0mbL-ZUpn6AaushVAipzTiMwE4nV2BLbJBwt_KQ,7582 -pip/_internal/commands/check.py,sha256=0gjXR7j36xJT5cs2heYU_dfOfpnFfzX8OoPNNoKhqdM,1685 -pip/_internal/commands/completion.py,sha256=H0TJvGrdsoleuIyQKzJbicLFppYx2OZA0BLNpQDeFjI,4129 -pip/_internal/commands/configuration.py,sha256=NB5uf8HIX8-li95YLoZO09nALIWlLCHDF5aifSKcBn8,9815 -pip/_internal/commands/debug.py,sha256=AesEID-4gPFDWTwPiPaGZuD4twdT-imaGuMR5ZfSn8s,6591 -pip/_internal/commands/download.py,sha256=LwKEyYMG2L67nQRyGo8hQdNEeMU2bmGWqJfcB8JDXas,5289 -pip/_internal/commands/freeze.py,sha256=gCjoD6foBZPBAAYx5t8zZLkJhsF_ZRtnb3dPuD7beO8,2951 -pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703 -pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132 -pip/_internal/commands/index.py,sha256=cGQVSA5dAs7caQ9sz4kllYvaI4ZpGiq1WhCgaImXNSA,4793 -pip/_internal/commands/inspect.py,sha256=2wSPt9yfr3r6g-s2S5L6PvRtaHNVyb4TuodMStJ39cw,3188 -pip/_internal/commands/install.py,sha256=3vT9tnHOV-p6dPMaKDqzivqmcq_kPAI-jVkxOEwN5C4,32389 -pip/_internal/commands/list.py,sha256=Fk1TSxB33NlRS4qlLQ0xwnytnF9-zkQJbKQYv2xc4Q4,12343 -pip/_internal/commands/search.py,sha256=sbBZiARRc050QquOKcCvOr2K3XLsoYebLKZGRi__iUI,5697 -pip/_internal/commands/show.py,sha256=t5jia4zcYJRJZy4U_Von7zMl03hJmmcofj6oDNTnj7Y,6419 -pip/_internal/commands/uninstall.py,sha256=OIqO9tqadY8kM4HwhFf1Q62fUIp7v8KDrTRo8yWMz7Y,3886 -pip/_internal/commands/wheel.py,sha256=mbFJd4dmUfrVFJkQbK8n2zHyRcD3AI91f7EUo9l3KYg,7396 -pip/_internal/configuration.py,sha256=uBKTus43pDIO6IzT2mLWQeROmHhtnoabhniKNjPYvD0,13529 -pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858 -pip/_internal/distributions/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/distributions/__pycache__/base.cpython-38.pyc,, -pip/_internal/distributions/__pycache__/installed.cpython-38.pyc,, -pip/_internal/distributions/__pycache__/sdist.cpython-38.pyc,, -pip/_internal/distributions/__pycache__/wheel.cpython-38.pyc,, -pip/_internal/distributions/base.py,sha256=jrF1Vi7eGyqFqMHrieh1PIOrGU7KeCxhYPZnbvtmvGY,1221 -pip/_internal/distributions/installed.py,sha256=NI2OgsgH9iBq9l5vB-56vOg5YsybOy-AU4VE5CSCO2I,729 -pip/_internal/distributions/sdist.py,sha256=SQBdkatXSigKGG_SaD0U0p1Jwdfrg26UCNcHgkXZfdA,6494 -pip/_internal/distributions/wheel.py,sha256=m-J4XO-gvFerlYsFzzSXYDvrx8tLZlJFTCgDxctn8ig,1164 -pip/_internal/exceptions.py,sha256=cU4dz7x-1uFGrf2A1_Np9tKcy599bRJKRJkikgARxW4,24244 -pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30 -pip/_internal/index/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/index/__pycache__/collector.cpython-38.pyc,, -pip/_internal/index/__pycache__/package_finder.cpython-38.pyc,, -pip/_internal/index/__pycache__/sources.cpython-38.pyc,, -pip/_internal/index/collector.py,sha256=3OmYZ3tCoRPGOrELSgQWG-03M-bQHa2-VCA3R_nJAaU,16504 -pip/_internal/index/package_finder.py,sha256=rrUw4vj7QE_eMt022jw--wQiKznMaUgVBkJ1UCrVUxo,37873 -pip/_internal/index/sources.py,sha256=SVyPitv08-Qalh2_Bk5diAJ9GAA_d-a93koouQodAG0,6557 -pip/_internal/locations/__init__.py,sha256=Dh8LJWG8LRlDK4JIj9sfRF96TREzE--N_AIlx7Tqoe4,15365 -pip/_internal/locations/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/locations/__pycache__/_distutils.cpython-38.pyc,, -pip/_internal/locations/__pycache__/_sysconfig.cpython-38.pyc,, -pip/_internal/locations/__pycache__/base.cpython-38.pyc,, -pip/_internal/locations/_distutils.py,sha256=cmi6h63xYNXhQe7KEWEMaANjHFy5yQOPt_1_RCWyXMY,6100 -pip/_internal/locations/_sysconfig.py,sha256=jyNVtUfMIf0mtyY-Xp1m9yQ8iwECozSVVFmjkN9a2yw,7680 -pip/_internal/locations/base.py,sha256=RQiPi1d4FVM2Bxk04dQhXZ2PqkeljEL2fZZ9SYqIQ78,2556 -pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340 -pip/_internal/metadata/__init__.py,sha256=84j1dPJaIoz5Q2ZTPi0uB1iaDAHiUNfKtYSGQCfFKpo,4280 -pip/_internal/metadata/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/metadata/__pycache__/_json.cpython-38.pyc,, -pip/_internal/metadata/__pycache__/base.cpython-38.pyc,, -pip/_internal/metadata/__pycache__/pkg_resources.cpython-38.pyc,, -pip/_internal/metadata/_json.py,sha256=BTkWfFDrWFwuSodImjtbAh8wCL3isecbnjTb5E6UUDI,2595 -pip/_internal/metadata/base.py,sha256=vIwIo1BtoqegehWMAXhNrpLGYBq245rcaCNkBMPnTU8,25277 -pip/_internal/metadata/importlib/__init__.py,sha256=9ZVO8BoE7NEZPmoHp5Ap_NJo0HgNIezXXg-TFTtt3Z4,107 -pip/_internal/metadata/importlib/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/metadata/importlib/__pycache__/_compat.cpython-38.pyc,, -pip/_internal/metadata/importlib/__pycache__/_dists.cpython-38.pyc,, -pip/_internal/metadata/importlib/__pycache__/_envs.cpython-38.pyc,, -pip/_internal/metadata/importlib/_compat.py,sha256=GAe_prIfCE4iUylrnr_2dJRlkkBVRUbOidEoID7LPoE,1882 -pip/_internal/metadata/importlib/_dists.py,sha256=BUV8y6D0PePZrEN3vfJL-m1FDqZ6YPRgAiBeBinHhNg,8181 -pip/_internal/metadata/importlib/_envs.py,sha256=7BxanCh3T7arusys__O2ZHJdnmDhQXFmfU7x1-jB5xI,7457 -pip/_internal/metadata/pkg_resources.py,sha256=WjwiNdRsvxqxL4MA5Tb5a_q3Q3sUhdpbZF8wGLtPMI0,9773 -pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63 -pip/_internal/models/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/models/__pycache__/candidate.cpython-38.pyc,, -pip/_internal/models/__pycache__/direct_url.cpython-38.pyc,, -pip/_internal/models/__pycache__/format_control.cpython-38.pyc,, -pip/_internal/models/__pycache__/index.cpython-38.pyc,, -pip/_internal/models/__pycache__/installation_report.cpython-38.pyc,, -pip/_internal/models/__pycache__/link.cpython-38.pyc,, -pip/_internal/models/__pycache__/scheme.cpython-38.pyc,, -pip/_internal/models/__pycache__/search_scope.cpython-38.pyc,, -pip/_internal/models/__pycache__/selection_prefs.cpython-38.pyc,, -pip/_internal/models/__pycache__/target_python.cpython-38.pyc,, -pip/_internal/models/__pycache__/wheel.cpython-38.pyc,, -pip/_internal/models/candidate.py,sha256=6pcABsaR7CfIHlbJbr2_kMkVJFL_yrYjTx6SVWUnCPQ,990 -pip/_internal/models/direct_url.py,sha256=f3WiKUwWPdBkT1xm7DlolS32ZAMYh3jbkkVH-BUON5A,6626 -pip/_internal/models/format_control.py,sha256=DJpMYjxeYKKQdwNcML2_F0vtAh-qnKTYe-CpTxQe-4g,2520 -pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030 -pip/_internal/models/installation_report.py,sha256=Hymmzv9-e3WhtewYm2NIOeMyAB6lXp736mpYqb9scZ0,2617 -pip/_internal/models/link.py,sha256=nfybVSpXgVHeU0MkC8hMkN2IgMup8Pdaudg74_sQEC8,18602 -pip/_internal/models/scheme.py,sha256=3EFQp_ICu_shH1-TBqhl0QAusKCPDFOlgHFeN4XowWs,738 -pip/_internal/models/search_scope.py,sha256=iGPQQ6a4Lau8oGQ_FWj8aRLik8A21o03SMO5KnSt-Cg,4644 -pip/_internal/models/selection_prefs.py,sha256=KZdi66gsR-_RUXUr9uejssk3rmTHrQVJWeNA2sV-VSY,1907 -pip/_internal/models/target_python.py,sha256=qKpZox7J8NAaPmDs5C_aniwfPDxzvpkrCKqfwndG87k,3858 -pip/_internal/models/wheel.py,sha256=YqazoIZyma_Q1ejFa1C7NHKQRRWlvWkdK96VRKmDBeI,3600 -pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50 -pip/_internal/network/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/network/__pycache__/auth.cpython-38.pyc,, -pip/_internal/network/__pycache__/cache.cpython-38.pyc,, -pip/_internal/network/__pycache__/download.cpython-38.pyc,, -pip/_internal/network/__pycache__/lazy_wheel.cpython-38.pyc,, -pip/_internal/network/__pycache__/session.cpython-38.pyc,, -pip/_internal/network/__pycache__/utils.cpython-38.pyc,, -pip/_internal/network/__pycache__/xmlrpc.cpython-38.pyc,, -pip/_internal/network/auth.py,sha256=MQVP0k4hUXk8ReYEfsGQ5t7_TS7cNHQuaHJuBlJLHxU,16507 -pip/_internal/network/cache.py,sha256=hgXftU-eau4MWxHSLquTMzepYq5BPC2zhCkhN3glBy8,2145 -pip/_internal/network/download.py,sha256=HvDDq9bVqaN3jcS3DyVJHP7uTqFzbShdkf7NFSoHfkw,6096 -pip/_internal/network/lazy_wheel.py,sha256=PbPyuleNhtEq6b2S7rufoGXZWMD15FAGL4XeiAQ8FxA,7638 -pip/_internal/network/session.py,sha256=BpDOJ7_Xw5VkgPYWsePzcaqOfcyRZcB2AW7W0HGBST0,18443 -pip/_internal/network/utils.py,sha256=6A5SrUJEEUHxbGtbscwU2NpCyz-3ztiDlGWHpRRhsJ8,4073 -pip/_internal/network/xmlrpc.py,sha256=AzQgG4GgS152_cqmGr_Oz2MIXsCal-xfsis7fA7nmU0,1791 -pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/operations/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/operations/__pycache__/check.cpython-38.pyc,, -pip/_internal/operations/__pycache__/freeze.cpython-38.pyc,, -pip/_internal/operations/__pycache__/prepare.cpython-38.pyc,, -pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/operations/build/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/operations/build/__pycache__/build_tracker.cpython-38.pyc,, -pip/_internal/operations/build/__pycache__/metadata.cpython-38.pyc,, -pip/_internal/operations/build/__pycache__/metadata_editable.cpython-38.pyc,, -pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-38.pyc,, -pip/_internal/operations/build/__pycache__/wheel.cpython-38.pyc,, -pip/_internal/operations/build/__pycache__/wheel_editable.cpython-38.pyc,, -pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-38.pyc,, -pip/_internal/operations/build/build_tracker.py,sha256=vf81EwomN3xe9G8qRJED0VGqNikmRQRQoobNsxi5Xrs,4133 -pip/_internal/operations/build/metadata.py,sha256=9S0CUD8U3QqZeXp-Zyt8HxwU90lE4QrnYDgrqZDzBnc,1422 -pip/_internal/operations/build/metadata_editable.py,sha256=VLL7LvntKE8qxdhUdEJhcotFzUsOSI8NNS043xULKew,1474 -pip/_internal/operations/build/metadata_legacy.py,sha256=o-eU21As175hDC7dluM1fJJ_FqokTIShyWpjKaIpHZw,2198 -pip/_internal/operations/build/wheel.py,sha256=sT12FBLAxDC6wyrDorh8kvcZ1jG5qInCRWzzP-UkJiQ,1075 -pip/_internal/operations/build/wheel_editable.py,sha256=yOtoH6zpAkoKYEUtr8FhzrYnkNHQaQBjWQ2HYae1MQg,1417 -pip/_internal/operations/build/wheel_legacy.py,sha256=C9j6rukgQI1n_JeQLoZGuDdfUwzCXShyIdPTp6edbMQ,3064 -pip/_internal/operations/check.py,sha256=WsN7z0_QSgJjw0JsWWcqOHj4wWTaFv0J7mxgUByDCOg,5122 -pip/_internal/operations/freeze.py,sha256=mwTZ2uML8aQgo3k8MR79a7SZmmmvdAJqdyaknKbavmg,9784 -pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51 -pip/_internal/operations/install/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/operations/install/__pycache__/editable_legacy.cpython-38.pyc,, -pip/_internal/operations/install/__pycache__/legacy.cpython-38.pyc,, -pip/_internal/operations/install/__pycache__/wheel.cpython-38.pyc,, -pip/_internal/operations/install/editable_legacy.py,sha256=ee4kfJHNuzTdKItbfAsNOSEwq_vD7DRPGkBdK48yBhU,1354 -pip/_internal/operations/install/legacy.py,sha256=cHdcHebyzf8w7OaOLwcsTNSMSSV8WBoAPFLay_9CjE8,4105 -pip/_internal/operations/install/wheel.py,sha256=CxzEg2wTPX4SxNTPIx0ozTqF1X7LhpCyP3iM2FjcKUE,27407 -pip/_internal/operations/prepare.py,sha256=BeYXrLFpRoV5XBnRXQHxRA2plyC36kK9Pms5D9wjCo4,25091 -pip/_internal/pyproject.py,sha256=QqSZR5AGwtf3HTa8NdbDq2yj9T2r9S2h9gnU4aX2Kvg,6987 -pip/_internal/req/__init__.py,sha256=rUQ9d_Sh3E5kNYqX9pkN0D06YL-LrtcbJQ-LiIonq08,2807 -pip/_internal/req/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/req/__pycache__/constructors.cpython-38.pyc,, -pip/_internal/req/__pycache__/req_file.cpython-38.pyc,, -pip/_internal/req/__pycache__/req_install.cpython-38.pyc,, -pip/_internal/req/__pycache__/req_set.cpython-38.pyc,, -pip/_internal/req/__pycache__/req_uninstall.cpython-38.pyc,, -pip/_internal/req/constructors.py,sha256=ypjtq1mOQ3d2mFkFPMf_6Mr8SLKeHQk3tUKHA1ddG0U,16611 -pip/_internal/req/req_file.py,sha256=N6lPO3c0to_G73YyGAnk7VUYmed5jV4Qxgmt1xtlXVg,17646 -pip/_internal/req/req_install.py,sha256=X4WNQlTtvkeATwWdSiJcNLihwbYI_EnGDgE99p-Aa00,35763 -pip/_internal/req/req_set.py,sha256=j3esG0s6SzoVReX9rWn4rpYNtyET_fwxbwJPRimvRxo,2858 -pip/_internal/req/req_uninstall.py,sha256=ZFQfgSNz6H1BMsgl87nQNr2iaQCcbFcmXpW8rKVQcic,24045 -pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/resolution/__pycache__/base.cpython-38.pyc,, -pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583 -pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/legacy/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/resolution/legacy/__pycache__/resolver.cpython-38.pyc,, -pip/_internal/resolution/legacy/resolver.py,sha256=9em8D5TcSsEN4xZM1WreaRShOnyM4LlvhMSHpUPsocE,24129 -pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/base.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-38.pyc,, -pip/_internal/resolution/resolvelib/base.py,sha256=u1O4fkvCO4mhmu5i32xrDv9AX5NgUci_eYVyBDQhTIM,5220 -pip/_internal/resolution/resolvelib/candidates.py,sha256=6kQZeMzwibnL4lO6bW0hUQQjNEvXfADdFphRRkRvOtc,18963 -pip/_internal/resolution/resolvelib/factory.py,sha256=OnjkLIgyk5Tol7uOOqapA1D4qiRHWmPU18DF1yN5N8o,27878 -pip/_internal/resolution/resolvelib/found_candidates.py,sha256=hvL3Hoa9VaYo-qEOZkBi2Iqw251UDxPz-uMHVaWmLpE,5705 -pip/_internal/resolution/resolvelib/provider.py,sha256=Vd4jW_NnyifB-HMkPYtZIO70M3_RM0MbL5YV6XyBM-w,9914 -pip/_internal/resolution/resolvelib/reporter.py,sha256=3ZVVYrs5PqvLFJkGLcuXoMK5mTInFzl31xjUpDBpZZk,2526 -pip/_internal/resolution/resolvelib/requirements.py,sha256=B1ndvKPSuyyyTEXt9sKhbwminViSWnBrJa7qO2ln4Z0,5455 -pip/_internal/resolution/resolvelib/resolver.py,sha256=nYZ9bTFXj5c1ILKnkSgU7tUCTYyo5V5J-J0sKoA7Wzg,11533 -pip/_internal/self_outdated_check.py,sha256=pnqBuKKZQ8OxKP0MaUUiDHl3AtyoMJHHG4rMQ7YcYXY,8167 -pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_internal/utils/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/utils/__pycache__/_log.cpython-38.pyc,, -pip/_internal/utils/__pycache__/appdirs.cpython-38.pyc,, -pip/_internal/utils/__pycache__/compat.cpython-38.pyc,, -pip/_internal/utils/__pycache__/compatibility_tags.cpython-38.pyc,, -pip/_internal/utils/__pycache__/datetime.cpython-38.pyc,, -pip/_internal/utils/__pycache__/deprecation.cpython-38.pyc,, -pip/_internal/utils/__pycache__/direct_url_helpers.cpython-38.pyc,, -pip/_internal/utils/__pycache__/distutils_args.cpython-38.pyc,, -pip/_internal/utils/__pycache__/egg_link.cpython-38.pyc,, -pip/_internal/utils/__pycache__/encoding.cpython-38.pyc,, -pip/_internal/utils/__pycache__/entrypoints.cpython-38.pyc,, -pip/_internal/utils/__pycache__/filesystem.cpython-38.pyc,, -pip/_internal/utils/__pycache__/filetypes.cpython-38.pyc,, -pip/_internal/utils/__pycache__/glibc.cpython-38.pyc,, -pip/_internal/utils/__pycache__/hashes.cpython-38.pyc,, -pip/_internal/utils/__pycache__/inject_securetransport.cpython-38.pyc,, -pip/_internal/utils/__pycache__/logging.cpython-38.pyc,, -pip/_internal/utils/__pycache__/misc.cpython-38.pyc,, -pip/_internal/utils/__pycache__/models.cpython-38.pyc,, -pip/_internal/utils/__pycache__/packaging.cpython-38.pyc,, -pip/_internal/utils/__pycache__/setuptools_build.cpython-38.pyc,, -pip/_internal/utils/__pycache__/subprocess.cpython-38.pyc,, -pip/_internal/utils/__pycache__/temp_dir.cpython-38.pyc,, -pip/_internal/utils/__pycache__/unpacking.cpython-38.pyc,, -pip/_internal/utils/__pycache__/urls.cpython-38.pyc,, -pip/_internal/utils/__pycache__/virtualenv.cpython-38.pyc,, -pip/_internal/utils/__pycache__/wheel.cpython-38.pyc,, -pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015 -pip/_internal/utils/appdirs.py,sha256=swgcTKOm3daLeXTW6v5BUS2Ti2RvEnGRQYH_yDXklAo,1665 -pip/_internal/utils/compat.py,sha256=ACyBfLgj3_XG-iA5omEDrXqDM0cQKzi8h8HRBInzG6Q,1884 -pip/_internal/utils/compatibility_tags.py,sha256=ydin8QG8BHqYRsPY4OL6cmb44CbqXl1T0xxS97VhHkk,5377 -pip/_internal/utils/datetime.py,sha256=m21Y3wAtQc-ji6Veb6k_M5g6A0ZyFI4egchTdnwh-pQ,242 -pip/_internal/utils/deprecation.py,sha256=OLc7GzDwPob9y8jscDYCKUNBV-9CWwqFplBOJPLOpBM,5764 -pip/_internal/utils/direct_url_helpers.py,sha256=6F1tc2rcKaCZmgfVwsE6ObIe_Pux23mUVYA-2D9wCFc,3206 -pip/_internal/utils/distutils_args.py,sha256=bYUt4wfFJRaeGO4VHia6FNaA8HlYXMcKuEq1zYijY5g,1115 -pip/_internal/utils/egg_link.py,sha256=ZryCchR_yQSCsdsMkCpxQjjLbQxObA5GDtLG0RR5mGc,2118 -pip/_internal/utils/encoding.py,sha256=qqsXDtiwMIjXMEiIVSaOjwH5YmirCaK-dIzb6-XJsL0,1169 -pip/_internal/utils/entrypoints.py,sha256=YlhLTRl2oHBAuqhc-zmL7USS67TPWVHImjeAQHreZTQ,3064 -pip/_internal/utils/filesystem.py,sha256=RhMIXUaNVMGjc3rhsDahWQ4MavvEQDdqXqgq-F6fpw8,5122 -pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716 -pip/_internal/utils/glibc.py,sha256=tDfwVYnJCOC0BNVpItpy8CGLP9BjkxFHdl0mTS0J7fc,3110 -pip/_internal/utils/hashes.py,sha256=1WhkVNIHNfuYLafBHThIjVKGplxFJXSlQtuG2mXNlJI,4831 -pip/_internal/utils/inject_securetransport.py,sha256=o-QRVMGiENrTJxw3fAhA7uxpdEdw6M41TjHYtSVRrcg,795 -pip/_internal/utils/logging.py,sha256=U2q0i1n8hPS2gQh8qcocAg5dovGAa_bR24akmXMzrk4,11632 -pip/_internal/utils/misc.py,sha256=XLtMDOmy8mWiNLuPIhxPdO1bWIleLdN6JnWDZsXfTgE,22253 -pip/_internal/utils/models.py,sha256=5GoYU586SrxURMvDn_jBMJInitviJg4O5-iOU-6I0WY,1193 -pip/_internal/utils/packaging.py,sha256=5Wm6_x7lKrlqVjPI5MBN_RurcRHwVYoQ7Ksrs84de7s,2108 -pip/_internal/utils/setuptools_build.py,sha256=4i3CuS34yNrkePnZ73rR47pyDzpZBo-SX9V5PNDSSHY,5662 -pip/_internal/utils/subprocess.py,sha256=0EMhgfPGFk8FZn6Qq7Hp9PN6YHuQNWiVby4DXcTCON4,9200 -pip/_internal/utils/temp_dir.py,sha256=aCX489gRa4Nu0dMKRFyGhV6maJr60uEynu5uCbKR4Qg,7702 -pip/_internal/utils/unpacking.py,sha256=SBb2iV1crb89MDRTEKY86R4A_UOWApTQn9VQVcMDOlE,8821 -pip/_internal/utils/urls.py,sha256=AhaesUGl-9it6uvG6fsFPOr9ynFpGaTMk4t5XTX7Z_Q,1759 -pip/_internal/utils/virtualenv.py,sha256=S6f7csYorRpiD6cvn3jISZYc3I8PJC43H5iMFpRAEDU,3456 -pip/_internal/utils/wheel.py,sha256=lXOgZyTlOm5HmK8tw5iw0A3_5A6wRzsXHOaQkIvvloU,4549 -pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596 -pip/_internal/vcs/__pycache__/__init__.cpython-38.pyc,, -pip/_internal/vcs/__pycache__/bazaar.cpython-38.pyc,, -pip/_internal/vcs/__pycache__/git.cpython-38.pyc,, -pip/_internal/vcs/__pycache__/mercurial.cpython-38.pyc,, -pip/_internal/vcs/__pycache__/subversion.cpython-38.pyc,, -pip/_internal/vcs/__pycache__/versioncontrol.cpython-38.pyc,, -pip/_internal/vcs/bazaar.py,sha256=j0oin0fpGRHcCFCxEcpPCQoFEvA-DMLULKdGP8Nv76o,3519 -pip/_internal/vcs/git.py,sha256=mjhwudCx9WlLNkxZ6_kOKmueF0rLoU2i1xeASKF6yiQ,18116 -pip/_internal/vcs/mercurial.py,sha256=Bzbd518Jsx-EJI0IhIobiQqiRsUv5TWYnrmRIFWE0Gw,5238 -pip/_internal/vcs/subversion.py,sha256=vhZs8L-TNggXqM1bbhl-FpbxE3TrIB6Tgnx8fh3S2HE,11729 -pip/_internal/vcs/versioncontrol.py,sha256=KUOc-hN51em9jrqxKwUR3JnkgSE-xSOqMiiJcSaL6B8,22811 -pip/_internal/wheel_builder.py,sha256=8cObBCu4mIsMJqZM7xXI9DO3vldiAnRNa1Gt6izPPTs,13079 -pip/_vendor/__init__.py,sha256=fNxOSVD0auElsD8fN9tuq5psfgMQ-RFBtD4X5gjlRkg,4966 -pip/_vendor/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/__pycache__/six.cpython-38.pyc,, -pip/_vendor/__pycache__/typing_extensions.cpython-38.pyc,, -pip/_vendor/cachecontrol/__init__.py,sha256=hrxlv3q7upsfyMw8k3gQ9vagBax1pYHSGGqYlZ0Zk0M,465 -pip/_vendor/cachecontrol/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/adapter.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/cache.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/compat.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/controller.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/serialize.cpython-38.pyc,, -pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-38.pyc,, -pip/_vendor/cachecontrol/_cmd.py,sha256=lxUXqfNTVx84zf6tcWbkLZHA6WVBRtJRpfeA9ZqhaAY,1379 -pip/_vendor/cachecontrol/adapter.py,sha256=ew9OYEQHEOjvGl06ZsuX8W3DAvHWsQKHwWAxISyGug8,5033 -pip/_vendor/cachecontrol/cache.py,sha256=Tty45fOjH40fColTGkqKQvQQmbYsMpk-nCyfLcv2vG4,1535 -pip/_vendor/cachecontrol/caches/__init__.py,sha256=h-1cUmOz6mhLsjTjOrJ8iPejpGdLCyG4lzTftfGZvLg,242 -pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-38.pyc,, -pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-38.pyc,, -pip/_vendor/cachecontrol/caches/file_cache.py,sha256=GpexcE29LoY4MaZwPUTcUBZaDdcsjqyLxZFznk8Hbr4,5271 -pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=mp-QWonP40I3xJGK3XVO-Gs9a3UjzlqqEmp9iLJH9F4,1033 -pip/_vendor/cachecontrol/compat.py,sha256=LNx7vqBndYdHU8YuJt53ab_8rzMGTXVrvMb7CZJkxG0,778 -pip/_vendor/cachecontrol/controller.py,sha256=bAYrt7x_VH4toNpI066LQxbHpYGpY1MxxmZAhspplvw,16416 -pip/_vendor/cachecontrol/filewrapper.py,sha256=X4BAQOO26GNOR7nH_fhTzAfeuct2rBQcx_15MyFBpcs,3946 -pip/_vendor/cachecontrol/heuristics.py,sha256=8kAyuZLSCyEIgQr6vbUwfhpqg9ows4mM0IV6DWazevI,4154 -pip/_vendor/cachecontrol/serialize.py,sha256=_U1NU_C-SDgFzkbAxAsPDgMTHeTWZZaHCQnZN_jh0U8,7105 -pip/_vendor/cachecontrol/wrapper.py,sha256=X3-KMZ20Ho3VtqyVaXclpeQpFzokR5NE8tZSfvKVaB8,774 -pip/_vendor/certifi/__init__.py,sha256=bK_nm9bLJzNvWZc2oZdiTwg2KWD4HSPBWGaM0zUDvMw,94 -pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255 -pip/_vendor/certifi/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/certifi/__pycache__/__main__.cpython-38.pyc,, -pip/_vendor/certifi/__pycache__/core.cpython-38.pyc,, -pip/_vendor/certifi/cacert.pem,sha256=LBHDzgj_xA05AxnHK8ENT5COnGNElNZe0svFUHMf1SQ,275233 -pip/_vendor/certifi/core.py,sha256=ZwiOsv-sD_ouU1ft8wy_xZ3LQ7UbcVzyqj2XNyrsZis,4279 -pip/_vendor/chardet/__init__.py,sha256=57R-HSxj0PWmILMN0GFmUNqEMfrEVSamXyjD-W6_fbs,4797 -pip/_vendor/chardet/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/big5freq.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/big5prober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/chardistribution.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/charsetprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/cp949prober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/enums.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/escprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/escsm.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/eucjpprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/euckrfreq.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/euckrprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/euctwfreq.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/euctwprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/gb2312freq.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/gb2312prober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/hebrewprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/jisfreq.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/johabfreq.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/johabprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/jpcntx.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/langthaimodel.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/latin1prober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/macromanprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/mbcssm.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/resultdict.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/sjisprober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/universaldetector.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/utf1632prober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/utf8prober.cpython-38.pyc,, -pip/_vendor/chardet/__pycache__/version.cpython-38.pyc,, -pip/_vendor/chardet/big5freq.py,sha256=ltcfP-3PjlNHCoo5e4a7C4z-2DhBTXRfY6jbMbB7P30,31274 -pip/_vendor/chardet/big5prober.py,sha256=lPMfwCX6v2AaPgvFh_cSWZcgLDbWiFCHLZ_p9RQ9uxE,1763 -pip/_vendor/chardet/chardistribution.py,sha256=13B8XUG4oXDuLdXvfbIWwLFeR-ZU21AqTS1zcdON8bU,10032 -pip/_vendor/chardet/charsetgroupprober.py,sha256=UKK3SaIZB2PCdKSIS0gnvMtLR9JJX62M-fZJu3OlWyg,3915 -pip/_vendor/chardet/charsetprober.py,sha256=L3t8_wIOov8em-vZWOcbkdsrwe43N6_gqNh5pH7WPd4,5420 -pip/_vendor/chardet/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/chardet/cli/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-38.pyc,, -pip/_vendor/chardet/cli/chardetect.py,sha256=zibMVg5RpKb-ME9_7EYG4ZM2Sf07NHcQzZ12U-rYJho,3242 -pip/_vendor/chardet/codingstatemachine.py,sha256=K7k69sw3jY5DmTXoSJQVsUtFIQKYPQVOSJJhBuGv_yE,3732 -pip/_vendor/chardet/codingstatemachinedict.py,sha256=0GY3Hi2qIZvDrOOJ3AtqppM1RsYxr_66ER4EHjuMiMc,542 -pip/_vendor/chardet/cp949prober.py,sha256=0jKRV7fECuWI16rNnks0ZECKA1iZYCIEaP8A1ZvjUSI,1860 -pip/_vendor/chardet/enums.py,sha256=TzECiZoCKNMqgwU76cPCeKWFBqaWvAdLMev5_bCkhY8,1683 -pip/_vendor/chardet/escprober.py,sha256=Kho48X65xE0scFylIdeJjM2bcbvRvv0h0WUbMWrJD3A,4006 -pip/_vendor/chardet/escsm.py,sha256=AqyXpA2FQFD7k-buBty_7itGEYkhmVa8X09NLRul3QM,12176 -pip/_vendor/chardet/eucjpprober.py,sha256=5KYaM9fsxkRYzw1b5k0fL-j_-ezIw-ij9r97a9MHxLY,3934 -pip/_vendor/chardet/euckrfreq.py,sha256=3mHuRvXfsq_QcQysDQFb8qSudvTiol71C6Ic2w57tKM,13566 -pip/_vendor/chardet/euckrprober.py,sha256=hiFT6wM174GIwRvqDsIcuOc-dDsq2uPKMKbyV8-1Xnc,1753 -pip/_vendor/chardet/euctwfreq.py,sha256=2alILE1Lh5eqiFJZjzRkMQXolNJRHY5oBQd-vmZYFFM,36913 -pip/_vendor/chardet/euctwprober.py,sha256=NxbpNdBtU0VFI0bKfGfDkpP7S2_8_6FlO87dVH0ogws,1753 -pip/_vendor/chardet/gb2312freq.py,sha256=49OrdXzD-HXqwavkqjo8Z7gvs58hONNzDhAyMENNkvY,20735 -pip/_vendor/chardet/gb2312prober.py,sha256=KPEBueaSLSvBpFeINMu0D6TgHcR90e5PaQawifzF4o0,1759 -pip/_vendor/chardet/hebrewprober.py,sha256=96T_Lj_OmW-fK7JrSHojYjyG3fsGgbzkoTNleZ3kfYE,14537 -pip/_vendor/chardet/jisfreq.py,sha256=mm8tfrwqhpOd3wzZKS4NJqkYBQVcDfTM2JiQ5aW932E,25796 -pip/_vendor/chardet/johabfreq.py,sha256=dBpOYG34GRX6SL8k_LbS9rxZPMjLjoMlgZ03Pz5Hmqc,42498 -pip/_vendor/chardet/johabprober.py,sha256=O1Qw9nVzRnun7vZp4UZM7wvJSv9W941mEU9uDMnY3DU,1752 -pip/_vendor/chardet/jpcntx.py,sha256=uhHrYWkLxE_rF5OkHKInm0HUsrjgKHHVQvtt3UcvotA,27055 -pip/_vendor/chardet/langbulgarianmodel.py,sha256=vmbvYFP8SZkSxoBvLkFqKiH1sjma5ihk3PTpdy71Rr4,104562 -pip/_vendor/chardet/langgreekmodel.py,sha256=JfB7bupjjJH2w3X_mYnQr9cJA_7EuITC2cRW13fUjeI,98484 -pip/_vendor/chardet/langhebrewmodel.py,sha256=3HXHaLQPNAGcXnJjkIJfozNZLTvTJmf4W5Awi6zRRKc,98196 -pip/_vendor/chardet/langhungarianmodel.py,sha256=WxbeQIxkv8YtApiNqxQcvj-tMycsoI4Xy-fwkDHpP_Y,101363 -pip/_vendor/chardet/langrussianmodel.py,sha256=s395bTZ87ESTrZCOdgXbEjZ9P1iGPwCl_8xSsac_DLY,128035 -pip/_vendor/chardet/langthaimodel.py,sha256=7bJlQitRpTnVGABmbSznHnJwOHDy3InkTvtFUx13WQI,102774 -pip/_vendor/chardet/langturkishmodel.py,sha256=XY0eGdTIy4eQ9Xg1LVPZacb-UBhHBR-cq0IpPVHowKc,95372 -pip/_vendor/chardet/latin1prober.py,sha256=p15EEmFbmQUwbKLC7lOJVGHEZwcG45ubEZYTGu01J5g,5380 -pip/_vendor/chardet/macromanprober.py,sha256=9anfzmY6TBfUPDyBDOdY07kqmTHpZ1tK0jL-p1JWcOY,6077 -pip/_vendor/chardet/mbcharsetprober.py,sha256=Wr04WNI4F3X_VxEverNG-H25g7u-MDDKlNt-JGj-_uU,3715 -pip/_vendor/chardet/mbcsgroupprober.py,sha256=iRpaNBjV0DNwYPu_z6TiHgRpwYahiM7ztI_4kZ4Uz9A,2131 -pip/_vendor/chardet/mbcssm.py,sha256=hUtPvDYgWDaA2dWdgLsshbwRfm3Q5YRlRogdmeRUNQw,30391 -pip/_vendor/chardet/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/chardet/metadata/__pycache__/languages.cpython-38.pyc,, -pip/_vendor/chardet/metadata/languages.py,sha256=FhvBIdZFxRQ-dTwkb_0madRKgVBCaUMQz9I5xqjE5iQ,13560 -pip/_vendor/chardet/resultdict.py,sha256=ez4FRvN5KaSosJeJ2WzUyKdDdg35HDy_SSLPXKCdt5M,402 -pip/_vendor/chardet/sbcharsetprober.py,sha256=-nd3F90i7GpXLjehLVHqVBE0KlWzGvQUPETLBNn4o6U,6400 -pip/_vendor/chardet/sbcsgroupprober.py,sha256=gcgI0fOfgw_3YTClpbra_MNxwyEyJ3eUXraoLHYb59E,4137 -pip/_vendor/chardet/sjisprober.py,sha256=aqQufMzRw46ZpFlzmYaYeT2-nzmKb-hmcrApppJ862k,4007 -pip/_vendor/chardet/universaldetector.py,sha256=xYBrg4x0dd9WnT8qclfADVD9ondrUNkqPmvte1pa520,14848 -pip/_vendor/chardet/utf1632prober.py,sha256=pw1epGdMj1hDGiCu1AHqqzOEfjX8MVdiW7O1BlT8-eQ,8505 -pip/_vendor/chardet/utf8prober.py,sha256=8m08Ub5490H4jQ6LYXvFysGtgKoKsHUd2zH_i8_TnVw,2812 -pip/_vendor/chardet/version.py,sha256=lGtJcxGM44Qz4Cbk4rbbmrKxnNr1-97U25TameLehZw,244 -pip/_vendor/colorama/__init__.py,sha256=wePQA4U20tKgYARySLEC047ucNX-g8pRLpYBuiHlLb8,266 -pip/_vendor/colorama/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/colorama/__pycache__/ansi.cpython-38.pyc,, -pip/_vendor/colorama/__pycache__/ansitowin32.cpython-38.pyc,, -pip/_vendor/colorama/__pycache__/initialise.cpython-38.pyc,, -pip/_vendor/colorama/__pycache__/win32.cpython-38.pyc,, -pip/_vendor/colorama/__pycache__/winterm.cpython-38.pyc,, -pip/_vendor/colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522 -pip/_vendor/colorama/ansitowin32.py,sha256=vPNYa3OZbxjbuFyaVo0Tmhmy1FZ1lKMWCnT7odXpItk,11128 -pip/_vendor/colorama/initialise.py,sha256=-hIny86ClXo39ixh5iSCfUIa2f_h_bgKRDW7gqs-KLU,3325 -pip/_vendor/colorama/tests/__init__.py,sha256=MkgPAEzGQd-Rq0w0PZXSX2LadRWhUECcisJY8lSrm4Q,75 -pip/_vendor/colorama/tests/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-38.pyc,, -pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-38.pyc,, -pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-38.pyc,, -pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-38.pyc,, -pip/_vendor/colorama/tests/__pycache__/utils.cpython-38.pyc,, -pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-38.pyc,, -pip/_vendor/colorama/tests/ansi_test.py,sha256=FeViDrUINIZcr505PAxvU4AjXz1asEiALs9GXMhwRaE,2839 -pip/_vendor/colorama/tests/ansitowin32_test.py,sha256=RN7AIhMJ5EqDsYaCjVo-o4u8JzDD4ukJbmevWKS70rY,10678 -pip/_vendor/colorama/tests/initialise_test.py,sha256=BbPy-XfyHwJ6zKozuQOvNvQZzsx9vdb_0bYXn7hsBTc,6741 -pip/_vendor/colorama/tests/isatty_test.py,sha256=Pg26LRpv0yQDB5Ac-sxgVXG7hsA1NYvapFgApZfYzZg,1866 -pip/_vendor/colorama/tests/utils.py,sha256=1IIRylG39z5-dzq09R_ngufxyPZxgldNbrxKxUGwGKE,1079 -pip/_vendor/colorama/tests/winterm_test.py,sha256=qoWFPEjym5gm2RuMwpf3pOis3a5r_PJZFCzK254JL8A,3709 -pip/_vendor/colorama/win32.py,sha256=YQOKwMTwtGBbsY4dL5HYTvwTeP9wIQra5MvPNddpxZs,6181 -pip/_vendor/colorama/winterm.py,sha256=XCQFDHjPi6AHYNdZwy0tA02H-Jh48Jp-HvCjeLeLp3U,7134 -pip/_vendor/distlib/__init__.py,sha256=acgfseOC55dNrVAzaBKpUiH3Z6V7Q1CaxsiQ3K7pC-E,581 -pip/_vendor/distlib/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/compat.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/database.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/index.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/locators.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/manifest.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/markers.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/metadata.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/resources.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/scripts.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/util.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/version.cpython-38.pyc,, -pip/_vendor/distlib/__pycache__/wheel.cpython-38.pyc,, -pip/_vendor/distlib/compat.py,sha256=tfoMrj6tujk7G4UC2owL6ArgDuCKabgBxuJRGZSmpko,41259 -pip/_vendor/distlib/database.py,sha256=o_mw0fAr93NDAHHHfqG54Y1Hi9Rkfrp2BX15XWZYK50,51697 -pip/_vendor/distlib/index.py,sha256=HFiDG7LMoaBs829WuotrfIwcErOOExUOR_AeBtw_TCU,20834 -pip/_vendor/distlib/locators.py,sha256=wNzG-zERzS_XGls-nBPVVyLRHa2skUlkn0-5n0trMWA,51991 -pip/_vendor/distlib/manifest.py,sha256=nQEhYmgoreaBZzyFzwYsXxJARu3fo4EkunU163U16iE,14811 -pip/_vendor/distlib/markers.py,sha256=TpHHHLgkzyT7YHbwj-2i6weRaq-Ivy2-MUnrDkjau-U,5058 -pip/_vendor/distlib/metadata.py,sha256=g_DIiu8nBXRzA-mWPRpatHGbmFZqaFoss7z9TG7QSUU,39801 -pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820 -pip/_vendor/distlib/scripts.py,sha256=BmkTKmiTk4m2cj-iueliatwz3ut_9SsABBW51vnQnZU,18102 -pip/_vendor/distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792 -pip/_vendor/distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784 -pip/_vendor/distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032 -pip/_vendor/distlib/util.py,sha256=31dPXn3Rfat0xZLeVoFpuniyhe6vsbl9_QN-qd9Lhlk,66262 -pip/_vendor/distlib/version.py,sha256=WG__LyAa2GwmA6qSoEJtvJE8REA1LZpbSizy8WvhJLk,23513 -pip/_vendor/distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648 -pip/_vendor/distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448 -pip/_vendor/distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888 -pip/_vendor/distlib/wheel.py,sha256=Rgqs658VsJ3R2845qwnZD8XQryV2CzWw2mghwLvxxsI,43898 -pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981 -pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64 -pip/_vendor/distro/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/distro/__pycache__/__main__.cpython-38.pyc,, -pip/_vendor/distro/__pycache__/distro.cpython-38.pyc,, -pip/_vendor/distro/distro.py,sha256=UZO1LjIhtFCMdlbiz39gj3raV-Amf3SBwzGzfApiMHw,49330 -pip/_vendor/idna/__init__.py,sha256=KJQN1eQBr8iIK5SKrJ47lXvxG0BJ7Lm38W4zT0v_8lk,849 -pip/_vendor/idna/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/idna/__pycache__/codec.cpython-38.pyc,, -pip/_vendor/idna/__pycache__/compat.cpython-38.pyc,, -pip/_vendor/idna/__pycache__/core.cpython-38.pyc,, -pip/_vendor/idna/__pycache__/idnadata.cpython-38.pyc,, -pip/_vendor/idna/__pycache__/intranges.cpython-38.pyc,, -pip/_vendor/idna/__pycache__/package_data.cpython-38.pyc,, -pip/_vendor/idna/__pycache__/uts46data.cpython-38.pyc,, -pip/_vendor/idna/codec.py,sha256=6ly5odKfqrytKT9_7UrlGklHnf1DSK2r9C6cSM4sa28,3374 -pip/_vendor/idna/compat.py,sha256=0_sOEUMT4CVw9doD3vyRhX80X19PwqFoUBs7gWsFME4,321 -pip/_vendor/idna/core.py,sha256=1JxchwKzkxBSn7R_oCE12oBu3eVux0VzdxolmIad24M,12950 -pip/_vendor/idna/idnadata.py,sha256=xUjqKqiJV8Ho_XzBpAtv5JFoVPSupK-SUXvtjygUHqw,44375 -pip/_vendor/idna/intranges.py,sha256=YBr4fRYuWH7kTKS2tXlFjM24ZF1Pdvcir-aywniInqg,1881 -pip/_vendor/idna/package_data.py,sha256=C_jHJzmX8PI4xq0jpzmcTMxpb5lDsq4o5VyxQzlVrZE,21 -pip/_vendor/idna/uts46data.py,sha256=zvjZU24s58_uAS850Mcd0NnD0X7_gCMAMjzWNIeUJdc,206539 -pip/_vendor/msgpack/__init__.py,sha256=NryGaKLDk_Egd58ZxXpnuI7OWO27AXz7S6CBFRM3sAY,1132 -pip/_vendor/msgpack/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/msgpack/__pycache__/exceptions.cpython-38.pyc,, -pip/_vendor/msgpack/__pycache__/ext.cpython-38.pyc,, -pip/_vendor/msgpack/__pycache__/fallback.cpython-38.pyc,, -pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081 -pip/_vendor/msgpack/ext.py,sha256=TuldJPkYu8Wo_Xh0tFGL2l06-gY88NSR8tOje9fo2Wg,6080 -pip/_vendor/msgpack/fallback.py,sha256=OORDn86-fHBPlu-rPlMdM10KzkH6S_Rx9CHN1b7o4cg,34557 -pip/_vendor/packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661 -pip/_vendor/packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497 -pip/_vendor/packaging/__pycache__/__about__.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/_manylinux.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/_musllinux.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/_structures.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/markers.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/requirements.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/tags.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/utils.cpython-38.pyc,, -pip/_vendor/packaging/__pycache__/version.cpython-38.pyc,, -pip/_vendor/packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488 -pip/_vendor/packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378 -pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431 -pip/_vendor/packaging/markers.py,sha256=AJBOcY8Oq0kYc570KuuPTkvuqjAlhufaE2c9sCUbm64,8487 -pip/_vendor/packaging/requirements.py,sha256=NtDlPBtojpn1IUC85iMjPNsUmufjpSlwnNA-Xb4m5NA,4676 -pip/_vendor/packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110 -pip/_vendor/packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699 -pip/_vendor/packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200 -pip/_vendor/packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665 -pip/_vendor/pkg_resources/__init__.py,sha256=NnpQ3g6BCHzpMgOR_OLBmYtniY4oOzdKpwqghfq_6ug,108287 -pip/_vendor/pkg_resources/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-38.pyc,, -pip/_vendor/pkg_resources/py31compat.py,sha256=CRk8fkiPRDLsbi5pZcKsHI__Pbmh_94L8mr9Qy9Ab2U,562 -pip/_vendor/platformdirs/__init__.py,sha256=9iY4Z8iJDZB0djln6zHHwrPVWpB54TCygcnh--MujU0,12936 -pip/_vendor/platformdirs/__main__.py,sha256=ZmsnTxEOxtTvwa-Y_Vfab_JN3X4XCVeN8X0yyy9-qnc,1176 -pip/_vendor/platformdirs/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/platformdirs/__pycache__/__main__.cpython-38.pyc,, -pip/_vendor/platformdirs/__pycache__/android.cpython-38.pyc,, -pip/_vendor/platformdirs/__pycache__/api.cpython-38.pyc,, -pip/_vendor/platformdirs/__pycache__/macos.cpython-38.pyc,, -pip/_vendor/platformdirs/__pycache__/unix.cpython-38.pyc,, -pip/_vendor/platformdirs/__pycache__/version.cpython-38.pyc,, -pip/_vendor/platformdirs/__pycache__/windows.cpython-38.pyc,, -pip/_vendor/platformdirs/android.py,sha256=GKizhyS7ESRiU67u8UnBJLm46goau9937EchXWbPBlk,4068 -pip/_vendor/platformdirs/api.py,sha256=MXKHXOL3eh_-trSok-JUTjAR_zjmmKF3rjREVABjP8s,4910 -pip/_vendor/platformdirs/macos.py,sha256=-3UXQewbT0yMhMdkzRXfXGAntmLIH7Qt4a9Hlf8I5_Y,2655 -pip/_vendor/platformdirs/unix.py,sha256=P-WQjSSieE38DXjMDa1t4XHnKJQ5idEaKT0PyXwm8KQ,6911 -pip/_vendor/platformdirs/version.py,sha256=qaN-fw_htIgKUVXoAuAEVgKxQu3tZ9qE2eiKkWIS7LA,160 -pip/_vendor/platformdirs/windows.py,sha256=LOrXLgI0CjQldDo2zhOZYGYZ6g4e_cJOCB_pF9aMRWQ,6596 -pip/_vendor/pygments/__init__.py,sha256=5oLcMLXD0cTG8YcHBPITtK1fS0JBASILEvEnWkTezgE,2999 -pip/_vendor/pygments/__main__.py,sha256=p0_rz3JZmNZMNZBOqDojaEx1cr9wmA9FQZX_TYl74lQ,353 -pip/_vendor/pygments/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/__main__.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/cmdline.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/console.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/filter.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/formatter.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/lexer.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/modeline.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/plugin.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/regexopt.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/scanner.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/sphinxext.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/style.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/token.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/unistring.cpython-38.pyc,, -pip/_vendor/pygments/__pycache__/util.cpython-38.pyc,, -pip/_vendor/pygments/cmdline.py,sha256=rc0fah4eknRqFgn1wKNEwkq0yWnSqYOGaA4PaIeOxVY,23685 -pip/_vendor/pygments/console.py,sha256=hQfqCFuOlGk7DW2lPQYepsw-wkOH1iNt9ylNA1eRymM,1697 -pip/_vendor/pygments/filter.py,sha256=NglMmMPTRRv-zuRSE_QbWid7JXd2J4AvwjCW2yWALXU,1938 -pip/_vendor/pygments/filters/__init__.py,sha256=b5YuXB9rampSy2-cMtKxGQoMDfrG4_DcvVwZrzTlB6w,40386 -pip/_vendor/pygments/filters/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pygments/formatter.py,sha256=6-TS2Y8pUMeWIUolWwr1O8ruC-U6HydWDwOdbAiJgJQ,2917 -pip/_vendor/pygments/formatters/__init__.py,sha256=YTqGeHS17fNXCLMZpf7oCxBCKLB9YLsZ8IAsjGhawyg,4810 -pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/groff.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/html.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/img.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/irc.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/latex.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/other.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/svg.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-38.pyc,, -pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-38.pyc,, -pip/_vendor/pygments/formatters/_mapping.py,sha256=fCZgvsM6UEuZUG7J6lr47eVss5owKd_JyaNbDfxeqmQ,4104 -pip/_vendor/pygments/formatters/bbcode.py,sha256=JrL4ITjN-KzPcuQpPMBf1pm33eW2sDUNr8WzSoAJsJA,3314 -pip/_vendor/pygments/formatters/groff.py,sha256=xrOFoLbafSA9uHsSLRogy79_Zc4GWJ8tMK2hCdTJRsw,5086 -pip/_vendor/pygments/formatters/html.py,sha256=QNt9prPgxmbKx2M-nfDwoR1bIg06-sNouQuWnE434Wc,35441 -pip/_vendor/pygments/formatters/img.py,sha256=h75Y7IRZLZxDEIwyoOsdRLTwm7kLVPbODKkgEiJ0iKI,21938 -pip/_vendor/pygments/formatters/irc.py,sha256=iwk5tDJOxbCV64SCmOFyvk__x6RD60ay0nUn7ko9n7U,5871 -pip/_vendor/pygments/formatters/latex.py,sha256=thPbytJCIs2AUXsO3NZwqKtXJ-upOlcXP4CXsx94G4w,19351 -pip/_vendor/pygments/formatters/other.py,sha256=PczqK1Rms43lz6iucOLPeBMxIncPKOGBt-195w1ynII,5073 -pip/_vendor/pygments/formatters/pangomarkup.py,sha256=ZZzMsKJKXrsDniFeMTkIpe7aQ4VZYRHu0idWmSiUJ2U,2212 -pip/_vendor/pygments/formatters/rtf.py,sha256=abrKlWjipBkQvhIICxtjYTUNv6WME0iJJObFvqVuudE,5014 -pip/_vendor/pygments/formatters/svg.py,sha256=6MM9YyO8NhU42RTQfTWBiagWMnsf9iG5gwhqSriHORE,7335 -pip/_vendor/pygments/formatters/terminal.py,sha256=NpEGvwkC6LgMLQTjVzGrJXji3XcET1sb5JCunSCzoRo,4674 -pip/_vendor/pygments/formatters/terminal256.py,sha256=4v4OVizvsxtwWBpIy_Po30zeOzE5oJg_mOc1-rCjMDk,11753 -pip/_vendor/pygments/lexer.py,sha256=ZPB_TGn_qzrXodRFwEdPzzJk6LZBo9BlfSy3lacc6zg,32005 -pip/_vendor/pygments/lexers/__init__.py,sha256=8d80-XfL5UKDCC1wRD1a_ZBZDkZ2HOe7Zul8SsnNYFE,11174 -pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-38.pyc,, -pip/_vendor/pygments/lexers/__pycache__/python.cpython-38.pyc,, -pip/_vendor/pygments/lexers/_mapping.py,sha256=zEiCV5FPiBioMJQJjw9kk7IJ5Y9GwknS4VJPYlcNchs,70232 -pip/_vendor/pygments/lexers/python.py,sha256=gZROs9iNSOA18YyVghP1cUCD0OwYZ04a6PCwgSOCeSA,53376 -pip/_vendor/pygments/modeline.py,sha256=gIbMSYrjSWPk0oATz7W9vMBYkUyTK2OcdVyKjioDRvA,986 -pip/_vendor/pygments/plugin.py,sha256=5rPxEoB_89qQMpOs0nI4KyLOzAHNlbQiwEMOKxqNmv8,2591 -pip/_vendor/pygments/regexopt.py,sha256=c6xcXGpGgvCET_3VWawJJqAnOp0QttFpQEdOPNY2Py0,3072 -pip/_vendor/pygments/scanner.py,sha256=F2T2G6cpkj-yZtzGQr-sOBw5w5-96UrJWveZN6va2aM,3092 -pip/_vendor/pygments/sphinxext.py,sha256=F8L0211sPnXaiWutN0lkSUajWBwlgDMIEFFAbMWOvZY,4630 -pip/_vendor/pygments/style.py,sha256=RRnussX1YiK9Z7HipIvKorImxu3-HnkdpPCO4u925T0,6257 -pip/_vendor/pygments/styles/__init__.py,sha256=iZDZ7PBKb55SpGlE1--cx9cbmWx5lVTH4bXO87t2Vok,3419 -pip/_vendor/pygments/styles/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pygments/token.py,sha256=vA2yNHGJBHfq4jNQSah7C9DmIOp34MmYHPA8P-cYAHI,6184 -pip/_vendor/pygments/unistring.py,sha256=gP3gK-6C4oAFjjo9HvoahsqzuV4Qz0jl0E0OxfDerHI,63187 -pip/_vendor/pygments/util.py,sha256=KgwpWWC3By5AiNwxGTI7oI9aXupH2TyZWukafBJe0Mg,9110 -pip/_vendor/pyparsing/__init__.py,sha256=ZPdI7pPo4IYXcABw-51AcqOzsxVvDtqnQbyn_qYWZvo,9171 -pip/_vendor/pyparsing/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/actions.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/common.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/core.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/exceptions.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/helpers.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/results.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/testing.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/unicode.cpython-38.pyc,, -pip/_vendor/pyparsing/__pycache__/util.cpython-38.pyc,, -pip/_vendor/pyparsing/actions.py,sha256=wU9i32e0y1ymxKE3OUwSHO-SFIrt1h_wv6Ws0GQjpNU,6426 -pip/_vendor/pyparsing/common.py,sha256=lFL97ooIeR75CmW5hjURZqwDCTgruqltcTCZ-ulLO2Q,12936 -pip/_vendor/pyparsing/core.py,sha256=AzTm1KFT1FIhiw2zvXZJmrpQoAwB0wOmeDCiR6SYytw,213344 -pip/_vendor/pyparsing/diagram/__init__.py,sha256=KW0PV_TvWKnL7jysz0pQbZ24nzWWu2ZfNaeyUIIywIg,23685 -pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pyparsing/exceptions.py,sha256=3LbSafD32NYb1Tzt85GHNkhEAU1eZkTtNSk24cPMemo,9023 -pip/_vendor/pyparsing/helpers.py,sha256=QpUOjW0-psvueMwWb9bQpU2noqKCv98_wnw1VSzSdVo,39129 -pip/_vendor/pyparsing/results.py,sha256=HgNvWVXBdQP-Q6PtJfoCEeOJk2nwEvG-2KVKC5sGA30,25341 -pip/_vendor/pyparsing/testing.py,sha256=7tu4Abp4uSeJV0N_yEPRmmNUhpd18ZQP3CrX41DM814,13402 -pip/_vendor/pyparsing/unicode.py,sha256=fwuhMj30SQ165Cv7HJpu-rSxGbRm93kN9L4Ei7VGc1Y,10787 -pip/_vendor/pyparsing/util.py,sha256=kq772O5YSeXOSdP-M31EWpbH_ayj7BMHImBYo9xPD5M,6805 -pip/_vendor/pyproject_hooks/__init__.py,sha256=kCehmy0UaBa9oVMD7ZIZrnswfnP3LXZ5lvnNJAL5JBM,491 -pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-38.pyc,, -pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-38.pyc,, -pip/_vendor/pyproject_hooks/_compat.py,sha256=by6evrYnqkisiM-MQcvOKs5bgDMzlOSgZqRHNqf04zE,138 -pip/_vendor/pyproject_hooks/_impl.py,sha256=61GJxzQip0IInhuO69ZI5GbNQ82XEDUB_1Gg5_KtUoc,11920 -pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=9gQATptbFkelkIy0OfWFEACzqxXJMQDWCH9rBOAZVwQ,546 -pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-38.pyc,, -pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=m2b34c917IW5o-Q_6TYIHlsK9lSUlNiyrITTUH_zwew,10927 -pip/_vendor/requests/__init__.py,sha256=64HgJ8cke-XyNrj1ErwNq0F9SqyAThUTh5lV6m7-YkI,5178 -pip/_vendor/requests/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/__version__.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/_internal_utils.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/adapters.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/api.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/auth.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/certs.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/compat.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/cookies.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/exceptions.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/help.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/hooks.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/models.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/packages.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/sessions.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/status_codes.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/structures.cpython-38.pyc,, -pip/_vendor/requests/__pycache__/utils.cpython-38.pyc,, -pip/_vendor/requests/__version__.py,sha256=h48zn-oFukaXrYHocdadp_hIszWyd_PGrS8Eiii6aoc,435 -pip/_vendor/requests/_internal_utils.py,sha256=aSPlF4uDhtfKxEayZJJ7KkAxtormeTfpwKSBSwtmAUw,1397 -pip/_vendor/requests/adapters.py,sha256=GFEz5koZaMZD86v0SHXKVB5SE9MgslEjkCQzldkNwVM,21443 -pip/_vendor/requests/api.py,sha256=dyvkDd5itC9z2g0wHl_YfD1yf6YwpGWLO7__8e21nks,6377 -pip/_vendor/requests/auth.py,sha256=h-HLlVx9j8rKV5hfSAycP2ApOSglTz77R0tz7qCbbEE,10187 -pip/_vendor/requests/certs.py,sha256=PVPooB0jP5hkZEULSCwC074532UFbR2Ptgu0I5zwmCs,575 -pip/_vendor/requests/compat.py,sha256=IhK9quyX0RRuWTNcg6d2JGSAOUbM6mym2p_2XjLTwf4,1286 -pip/_vendor/requests/cookies.py,sha256=kD3kNEcCj-mxbtf5fJsSaT86eGoEYpD3X0CSgpzl7BM,18560 -pip/_vendor/requests/exceptions.py,sha256=FA-_kVwBZ2jhXauRctN_ewHVK25b-fj0Azyz1THQ0Kk,3823 -pip/_vendor/requests/help.py,sha256=FnAAklv8MGm_qb2UilDQgS6l0cUttiCFKUjx0zn2XNA,3879 -pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733 -pip/_vendor/requests/models.py,sha256=dDZ-iThotky-Noq9yy97cUEJhr3wnY6mv-xR_ePg_lk,35288 -pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695 -pip/_vendor/requests/sessions.py,sha256=KUqJcRRLovNefUs7ScOXSUVCcfSayTFWtbiJ7gOSlTI,30180 -pip/_vendor/requests/status_codes.py,sha256=FvHmT5uH-_uimtRz5hH9VCbt7VV-Nei2J9upbej6j8g,4235 -pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912 -pip/_vendor/requests/utils.py,sha256=0gzSOcx9Ya4liAbHnHuwt4jM78lzCZZoDFgkmsInNUg,33240 -pip/_vendor/resolvelib/__init__.py,sha256=UL-B2BDI0_TRIqkfGwLHKLxY-LjBlomz7941wDqzB1I,537 -pip/_vendor/resolvelib/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/resolvelib/__pycache__/providers.cpython-38.pyc,, -pip/_vendor/resolvelib/__pycache__/reporters.cpython-38.pyc,, -pip/_vendor/resolvelib/__pycache__/resolvers.cpython-38.pyc,, -pip/_vendor/resolvelib/__pycache__/structs.cpython-38.pyc,, -pip/_vendor/resolvelib/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-38.pyc,, -pip/_vendor/resolvelib/compat/collections_abc.py,sha256=uy8xUZ-NDEw916tugUXm8HgwCGiMO0f-RcdnpkfXfOs,156 -pip/_vendor/resolvelib/providers.py,sha256=roVmFBItQJ0TkhNua65h8LdNny7rmeqVEXZu90QiP4o,5872 -pip/_vendor/resolvelib/reporters.py,sha256=fW91NKf-lK8XN7i6Yd_rczL5QeOT3sc6AKhpaTEnP3E,1583 -pip/_vendor/resolvelib/resolvers.py,sha256=2wYzVGBGerbmcIpH8cFmgSKgLSETz8jmwBMGjCBMHG4,17592 -pip/_vendor/resolvelib/structs.py,sha256=IVIYof6sA_N4ZEiE1C1UhzTX495brCNnyCdgq6CYq28,4794 -pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090 -pip/_vendor/rich/__main__.py,sha256=TT8sb9PTnsnKhhrGuHkLN0jdN0dtKhtPkEr9CidDbPM,8478 -pip/_vendor/rich/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/__main__.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_cell_widths.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_emoji_codes.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_emoji_replace.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_export_format.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_extension.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_inspect.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_log_render.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_loop.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_null_file.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_palettes.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_pick.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_ratio.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_spinners.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_stack.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_timer.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_win32_console.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_windows.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_windows_renderer.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/_wrap.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/abc.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/align.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/ansi.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/bar.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/box.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/cells.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/color.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/color_triplet.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/columns.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/console.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/constrain.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/containers.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/control.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/default_styles.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/diagnose.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/emoji.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/errors.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/file_proxy.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/filesize.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/highlighter.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/json.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/jupyter.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/layout.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/live.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/live_render.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/logging.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/markup.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/measure.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/padding.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/pager.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/palette.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/panel.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/pretty.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/progress.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/progress_bar.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/prompt.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/protocol.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/region.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/repr.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/rule.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/scope.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/screen.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/segment.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/spinner.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/status.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/style.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/styled.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/syntax.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/table.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/terminal_theme.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/text.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/theme.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/themes.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/traceback.cpython-38.pyc,, -pip/_vendor/rich/__pycache__/tree.cpython-38.pyc,, -pip/_vendor/rich/_cell_widths.py,sha256=2n4EiJi3X9sqIq0O16kUZ_zy6UYMd3xFfChlKfnW1Hc,10096 -pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235 -pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064 -pip/_vendor/rich/_export_format.py,sha256=nHArqOljIlYn6NruhWsAsh-fHo7oJC3y9BDJyAa-QYQ,2114 -pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265 -pip/_vendor/rich/_inspect.py,sha256=oZJGw31e64dwXSCmrDnvZbwVb1ZKhWfU8wI3VWohjJk,9695 -pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225 -pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236 -pip/_vendor/rich/_null_file.py,sha256=cTaTCU_xuDXGGa9iqK-kZ0uddZCSvM-RgM2aGMuMiHs,1643 -pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063 -pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423 -pip/_vendor/rich/_ratio.py,sha256=2lLSliL025Y-YMfdfGbutkQDevhcyDqc-DtUYW9mU70,5472 -pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919 -pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351 -pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417 -pip/_vendor/rich/_win32_console.py,sha256=P0vxI2fcndym1UU1S37XAzQzQnkyY7YqAKmxm24_gug,22820 -pip/_vendor/rich/_windows.py,sha256=dvNl9TmfPzNVxiKk5WDFihErZ5796g2UC9-KGGyfXmk,1926 -pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783 -pip/_vendor/rich/_wrap.py,sha256=xfV_9t0Sg6rzimmrDru8fCVmUlalYAcHLDfrJZnbbwQ,1840 -pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890 -pip/_vendor/rich/align.py,sha256=FV6_GS-8uhIyViMng3hkIWSFaTgMohK1Oqyjl8I8mGE,10368 -pip/_vendor/rich/ansi.py,sha256=THex7-qjc82-ZRtmDPAYlVEObYOEE_ARB1692Fk-JHs,6819 -pip/_vendor/rich/bar.py,sha256=a7UD303BccRCrEhGjfMElpv5RFYIinaAhAuqYqhUvmw,3264 -pip/_vendor/rich/box.py,sha256=FJ6nI3jD7h2XNFU138bJUt2HYmWOlRbltoCEuIAZhew,9842 -pip/_vendor/rich/cells.py,sha256=zMjFI15wCpgjLR14lHdfFMVC6qMDi5OsKIB0PYZBBMk,4503 -pip/_vendor/rich/color.py,sha256=GTITgffj47On3YK1v_I5T2CPZJGSnyWipPID_YkYXqw,18015 -pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054 -pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131 -pip/_vendor/rich/console.py,sha256=w3tJfrILZpS359wrNqaldGmyk3PEhEmV8Pg2g2GjXWI,97992 -pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288 -pip/_vendor/rich/containers.py,sha256=aKgm5UDHn5Nmui6IJaKdsZhbHClh_X7D-_Wg8Ehrr7s,5497 -pip/_vendor/rich/control.py,sha256=DSkHTUQLorfSERAKE_oTAEUFefZnZp4bQb4q8rHbKws,6630 -pip/_vendor/rich/default_styles.py,sha256=WqVh-RPNEsx0Wxf3fhS_fCn-wVqgJ6Qfo-Zg7CoCsLE,7954 -pip/_vendor/rich/diagnose.py,sha256=an6uouwhKPAlvQhYpNNpGq9EJysfMIOvvCbO3oSoR24,972 -pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501 -pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642 -pip/_vendor/rich/file_proxy.py,sha256=4gCbGRXg0rW35Plaf0UVvj3dfENHuzc_n8I_dBqxI7o,1616 -pip/_vendor/rich/filesize.py,sha256=9fTLAPCAwHmBXdRv7KZU194jSgNrRb6Wx7RIoBgqeKY,2508 -pip/_vendor/rich/highlighter.py,sha256=3WW6PACGlq0e3YDjfqiMBQ0dYZwu7pcoFYUgJy01nb0,9585 -pip/_vendor/rich/json.py,sha256=TmeFm96Utaov-Ff5miavBPNo51HRooM8S78HEwrYEjA,5053 -pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252 -pip/_vendor/rich/layout.py,sha256=RFYL6HdCFsHf9WRpcvi3w-fpj-8O5dMZ8W96VdKNdbI,14007 -pip/_vendor/rich/live.py,sha256=emVaLUua-FKSYqZXmtJJjBIstO99CqMOuA6vMAKVkO0,14172 -pip/_vendor/rich/live_render.py,sha256=zElm3PrfSIvjOce28zETHMIUf9pFYSUA5o0AflgUP64,3667 -pip/_vendor/rich/logging.py,sha256=uB-cB-3Q4bmXDLLpbOWkmFviw-Fde39zyMV6tKJ2WHQ,11903 -pip/_vendor/rich/markup.py,sha256=xzF4uAafiEeEYDJYt_vUnJOGoTU8RrH-PH7WcWYXjCg,8198 -pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305 -pip/_vendor/rich/padding.py,sha256=kTFGsdGe0os7tXLnHKpwTI90CXEvrceeZGCshmJy5zw,4970 -pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828 -pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396 -pip/_vendor/rich/panel.py,sha256=wGMe40J8KCGgQoM0LyjRErmGIkv2bsYA71RCXThD0xE,10574 -pip/_vendor/rich/pretty.py,sha256=dAbLqSF3jJnyfBLJ7QjQ3B2J-WGyBnAdGXeuBVIyMyA,37414 -pip/_vendor/rich/progress.py,sha256=eg-OURdfZW3n3bib1-zP3SZl6cIm2VZup1pr_96CyLk,59836 -pip/_vendor/rich/progress_bar.py,sha256=cEoBfkc3lLwqba4XKsUpy4vSQKDh2QQ5J2J94-ACFoo,8165 -pip/_vendor/rich/prompt.py,sha256=x0mW-pIPodJM4ry6grgmmLrl8VZp99kqcmdnBe70YYA,11303 -pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391 -pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166 -pip/_vendor/rich/repr.py,sha256=eJObQe6_c5pUjRM85sZ2rrW47_iF9HT3Z8DrgVjvOl8,4436 -pip/_vendor/rich/rule.py,sha256=V6AWI0wCb6DB0rvN967FRMlQrdlG7HoZdfEAHyeG8CM,4773 -pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843 -pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591 -pip/_vendor/rich/segment.py,sha256=6XdX0MfL18tUCaUWDWncIqx0wpq3GiaqzhYP779JvRA,24224 -pip/_vendor/rich/spinner.py,sha256=7b8MCleS4fa46HX0AzF98zfu6ZM6fAL0UgYzPOoakF4,4374 -pip/_vendor/rich/status.py,sha256=gJsIXIZeSo3urOyxRUjs6VrhX5CZrA0NxIQ-dxhCnwo,4425 -pip/_vendor/rich/style.py,sha256=odBbAlrgdEbAj7pmtPbQtWJNS8upyNhhy--Ks6KwAKk,26332 -pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258 -pip/_vendor/rich/syntax.py,sha256=W1xtdBA1-EVP-weYofKXusUlV5zghCOv1nWMHHfNmiY,34995 -pip/_vendor/rich/table.py,sha256=-WzesL-VJKsaiDU3uyczpJMHy6VCaSewBYJwx8RudI8,39684 -pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370 -pip/_vendor/rich/text.py,sha256=andXaxWW_wBveMiZZpd5viQwucWo7SPopcM3ZCQeO0c,45686 -pip/_vendor/rich/theme.py,sha256=GKNtQhDBZKAzDaY0vQVQQFzbc0uWfFe6CJXA-syT7zQ,3627 -pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102 -pip/_vendor/rich/traceback.py,sha256=6LkGguCEAxKv8v8xmKfMeYPPJ1UXUEHDv4726To6FiQ,26070 -pip/_vendor/rich/tree.py,sha256=BMbUYNjS9uodNPfvtY_odmU09GA5QzcMbQ5cJZhllQI,9169 -pip/_vendor/six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549 -pip/_vendor/tenacity/__init__.py,sha256=rjcWJVq5PcNJNC42rt-TAGGskM-RUEkZbDKu1ra7IPo,18364 -pip/_vendor/tenacity/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/_asyncio.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/_utils.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/after.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/before.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/before_sleep.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/nap.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/retry.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/stop.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-38.pyc,, -pip/_vendor/tenacity/__pycache__/wait.cpython-38.pyc,, -pip/_vendor/tenacity/_asyncio.py,sha256=HEb0BVJEeBJE9P-m9XBxh1KcaF96BwoeqkJCL5sbVcQ,3314 -pip/_vendor/tenacity/_utils.py,sha256=-y68scDcyoqvTJuJJ0GTfjdSCljEYlbCYvgk7nM4NdM,1944 -pip/_vendor/tenacity/after.py,sha256=dlmyxxFy2uqpLXDr838DiEd7jgv2AGthsWHGYcGYsaI,1496 -pip/_vendor/tenacity/before.py,sha256=7XtvRmO0dRWUp8SVn24OvIiGFj8-4OP5muQRUiWgLh0,1376 -pip/_vendor/tenacity/before_sleep.py,sha256=ThyDvqKU5yle_IvYQz_b6Tp6UjUS0PhVp6zgqYl9U6Y,1908 -pip/_vendor/tenacity/nap.py,sha256=fRWvnz1aIzbIq9Ap3gAkAZgDH6oo5zxMrU6ZOVByq0I,1383 -pip/_vendor/tenacity/retry.py,sha256=Cy504Ss3UrRV7lnYgvymF66WD1wJ2dbM869kDcjuDes,7550 -pip/_vendor/tenacity/stop.py,sha256=sKHmHaoSaW6sKu3dTxUVKr1-stVkY7lw4Y9yjZU30zQ,2790 -pip/_vendor/tenacity/tornadoweb.py,sha256=E8lWO2nwe6dJgoB-N2HhQprYLDLB_UdSgFnv-EN6wKE,2145 -pip/_vendor/tenacity/wait.py,sha256=tdLTESRm5E237VHG0SxCDXRa0DHKPKVq285kslHVURc,8011 -pip/_vendor/tomli/__init__.py,sha256=JhUwV66DB1g4Hvt1UQCVMdfCu-IgAV8FXmvDU9onxd4,396 -pip/_vendor/tomli/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/tomli/__pycache__/_parser.cpython-38.pyc,, -pip/_vendor/tomli/__pycache__/_re.cpython-38.pyc,, -pip/_vendor/tomli/__pycache__/_types.cpython-38.pyc,, -pip/_vendor/tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633 -pip/_vendor/tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943 -pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254 -pip/_vendor/typing_extensions.py,sha256=VKZ_nHsuzDbKOVUY2CTdavwBgfZ2EXRyluZHRzUYAbg,80114 -pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333 -pip/_vendor/urllib3/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/_collections.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/_version.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/connection.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/connectionpool.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/exceptions.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/fields.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/filepost.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/poolmanager.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/request.cpython-38.pyc,, -pip/_vendor/urllib3/__pycache__/response.cpython-38.pyc,, -pip/_vendor/urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811 -pip/_vendor/urllib3/_version.py,sha256=JWE--BUVy7--9FsXILONIpQ43irftKGjT9j2H_fdF2M,64 -pip/_vendor/urllib3/connection.py,sha256=8976wL6sGeVMW0JnXvx5mD00yXu87uQjxtB9_VL8dx8,20070 -pip/_vendor/urllib3/connectionpool.py,sha256=vS4UaHLoR9_5aGLXSQ776y_jTxgqqjx0YsjkYksWGOo,39095 -pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957 -pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc,, -pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632 -pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922 -pip/_vendor/urllib3/contrib/appengine.py,sha256=VR68eAVE137lxTgjBDwCna5UiBZTOKa01Aj_-5BaCz4,11036 -pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528 -pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=hDJh4MhyY_p-oKlFcYcQaVQRDv6GMmBGuW9yjxyeejM,17081 -pip/_vendor/urllib3/contrib/securetransport.py,sha256=yhZdmVjY6PI6EeFbp7qYOp6-vp1Rkv2NMuOGaEj7pmc,34448 -pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097 -pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217 -pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579 -pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440 -pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/urllib3/packages/__pycache__/six.cpython-38.pyc,, -pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc,, -pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417 -pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665 -pip/_vendor/urllib3/poolmanager.py,sha256=0KOOJECoeLYVjUHvv-0h4Oq3FFQQ2yb-Fnjkbj8gJO0,19786 -pip/_vendor/urllib3/request.py,sha256=ZFSIqX0C6WizixecChZ3_okyu7BEv0lZu1VT0s6h4SM,5985 -pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641 -pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155 -pip/_vendor/urllib3/util/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/connection.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/proxy.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/queue.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/request.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/response.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/retry.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/timeout.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/url.cpython-38.pyc,, -pip/_vendor/urllib3/util/__pycache__/wait.cpython-38.pyc,, -pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901 -pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605 -pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498 -pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997 -pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510 -pip/_vendor/urllib3/util/retry.py,sha256=4laWh0HpwGijLiBmdBIYtbhYekQnNzzhx2W9uys0RHA,22003 -pip/_vendor/urllib3/util/ssl_.py,sha256=X4-AqW91aYPhPx6-xbf66yHFQKbqqfC_5Zt4WkLX1Hc,17177 -pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758 -pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895 -pip/_vendor/urllib3/util/timeout.py,sha256=QSbBUNOB9yh6AnDn61SrLQ0hg5oz0I9-uXEG91AJuIg,10003 -pip/_vendor/urllib3/util/url.py,sha256=HLCLEKt8D-QMioTNbneZSzGTGyUkns4w_lSJP1UzE2E,14298 -pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403 -pip/_vendor/vendor.txt,sha256=3i3Zr7_kRDD9UEva0I8YOMroCZ8xuZ9OWd_Q4jmazqE,476 -pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579 -pip/_vendor/webencodings/__pycache__/__init__.cpython-38.pyc,, -pip/_vendor/webencodings/__pycache__/labels.cpython-38.pyc,, -pip/_vendor/webencodings/__pycache__/mklabels.cpython-38.pyc,, -pip/_vendor/webencodings/__pycache__/tests.cpython-38.pyc,, -pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-38.pyc,, -pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979 -pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305 -pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563 -pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307 -pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286 diff --git a/env_web/Lib/site-packages/pip-23.0.1.dist-info/REQUESTED b/env_web/Lib/site-packages/pip-23.0.1.dist-info/REQUESTED deleted file mode 100644 index e69de29b..00000000 diff --git a/env_web/Lib/site-packages/pip-23.0.1.dist-info/WHEEL b/env_web/Lib/site-packages/pip-23.0.1.dist-info/WHEEL deleted file mode 100644 index 57e3d840..00000000 --- a/env_web/Lib/site-packages/pip-23.0.1.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.38.4) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/env_web/Lib/site-packages/pip-23.0.1.dist-info/entry_points.txt b/env_web/Lib/site-packages/pip-23.0.1.dist-info/entry_points.txt deleted file mode 100644 index ab909c9b..00000000 --- a/env_web/Lib/site-packages/pip-23.0.1.dist-info/entry_points.txt +++ /dev/null @@ -1,4 +0,0 @@ -[console_scripts] -pip = pip._internal.cli.main:main -pip3 = pip._internal.cli.main:main -pip3.9 = pip._internal.cli.main:main diff --git a/env_web/Lib/site-packages/pip-23.0.1.dist-info/top_level.txt b/env_web/Lib/site-packages/pip-23.0.1.dist-info/top_level.txt deleted file mode 100644 index a1b589e3..00000000 --- a/env_web/Lib/site-packages/pip-23.0.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/env_web/Lib/site-packages/pip-24.0.dist-info/RECORD b/env_web/Lib/site-packages/pip-24.0.dist-info/RECORD index 20f2b849..6b0096c6 100644 --- a/env_web/Lib/site-packages/pip-24.0.dist-info/RECORD +++ b/env_web/Lib/site-packages/pip-24.0.dist-info/RECORD @@ -1,6 +1,6 @@ -../../Scripts/pip.exe,sha256=yvCgcP6EQt-uo5lWR_zzEOnqZYGa4Up2dp2KOnV43EU,108466 -../../Scripts/pip3.12.exe,sha256=yvCgcP6EQt-uo5lWR_zzEOnqZYGa4Up2dp2KOnV43EU,108466 -../../Scripts/pip3.exe,sha256=yvCgcP6EQt-uo5lWR_zzEOnqZYGa4Up2dp2KOnV43EU,108466 +../../Scripts/pip.exe,sha256=7KCjYWwfvyLMUgMfdltxTkMa72EtgC26d69nCx2Waqw,108466 +../../Scripts/pip3.12.exe,sha256=7KCjYWwfvyLMUgMfdltxTkMa72EtgC26d69nCx2Waqw,108466 +../../Scripts/pip3.exe,sha256=7KCjYWwfvyLMUgMfdltxTkMa72EtgC26d69nCx2Waqw,108466 pip-24.0.dist-info/AUTHORS.txt,sha256=SwXm4nkwRkmtnO1ZY-dLy7EPeoQNXMNLby5CN3GlNhY,10388 pip-24.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 pip-24.0.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093 diff --git a/env_web/Lib/site-packages/pip/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/__pycache__/__init__.cpython-312.pyc index f79c231e6b0dfdccc351a766e6004b37e37e9ad6..0e5dd1cc9d6942a93abfb7e28196b1de2bfe4843 100644 GIT binary patch delta 20 acmcb{dX1I)G%qg~0}#}8KH129nh5|tkp?9I delta 20 acmcb{dX1I)G%qg~0}z~b*|(AVG!p0uoRmMAZrjscIwAf)uT^a@Nz-V%KYVya`*C z6P$PfF1!GDo@TF{cm+<3gFqd5Mq_(^zHjWa?d=gG`SQb^183}K*j$$$ZC;Y%gp6W} zm#pG*UPbeWGZoEawFMDy=N6BvT@Hkvax5RGXz&FkmgyO$Mtu+rxzLp zEop={9vpQL`_tE=Hf1X+kj9Ji+KC21ELvf;y@#S+8&T8->kfFDtJJnurc^W4hz(%+ zc32lpMHMicx_aqkRcW)#-fC=U3Nzm*U5m-?WRgwy-<;0!cd*C^Oa^9^ugO2siww1g z2UZsE_zyf?w9fzl diff --git a/env_web/Lib/site-packages/pip/__pycache__/__main__.cpython-312.pyc b/env_web/Lib/site-packages/pip/__pycache__/__main__.cpython-312.pyc index 668476284ed70ef1ca2cb944d51ff81dab7d654b..2b1c96e7d4aae344a924a7a20a13a573c3492700 100644 GIT binary patch delta 20 acmeyw_KA)AG%qg~0}#}8KH12f&I|xT76tqO delta 20 acmeyw_KA)AG%qg~0}z~b*|(89of!Z@;|1UV diff --git a/env_web/Lib/site-packages/pip/__pycache__/__main__.cpython-38.pyc b/env_web/Lib/site-packages/pip/__pycache__/__main__.cpython-38.pyc deleted file mode 100644 index d2073e109a0bd96307d16c2912868b412a4c223c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmYjNJ&zMH5VgG@S?-b?pwkH&bZwAWP|6cRAW|YY5ss50ODo@cviP#=UD=!DLQ984 zM?sk_X{h)$ZmIYSG%&k45Vkz_ym_8^GiQUr9>MkTyP1FU3Hi}F|E~a@r+DlaG?GY~ zliBX3GuruV#(-XWlH4Vd0onQunX^S`PFi#uNYYSBAe3yuj0A#M@7hKUZRpJFcsC>g zuVKjClO8fZ1H0UpKJ;ZE!%rSP+#`i0cE<~nu#^V(jt4cj$E=olWS!p&dEK0e|VMLwZ{vF+NthCOv8|$LA zFd9Ev=U1YB=fVu?bS<4%m6h91l3ixNay_Yx76r5l<|=QYP-zRMZjm;E$Pgnnn14xc zPoOe@LQvBAu97>dR23&mBTtJwPIDEvs!R_%bV1jh^WjR>Ux~ScSZ97+JwM@RSj}>f zn4Z7VFfnQcd{U;%0(5QpsVOrfilUvvTVctrbt6dckai+rClg8O&q G_1PbZa=fGf diff --git a/env_web/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc b/env_web/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc index 3f1553f4a98c0430bbc43a8c8b977d56cec45b78..c94da7472e68c41d4643a2f03e1e099c29fc5a88 100644 GIT binary patch delta 20 acmX>qcvO)4G%qg~0}#}8KH12qcvO)4G%qg~0}z~b*|(8<7Y6`6Yz6cH diff --git a/env_web/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-38.pyc b/env_web/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-38.pyc deleted file mode 100644 index e9fc39c5dca1813560cb885b6c75aab50f170087..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmZ`(&2J+$6t_LoX7bTAZ5JdK3C&>dgs0O6>MIOZh8UCf;>;Vz%MMqNkXW0w;?{}Xu+337teGcm^tH}m4Hn+b+9 znc!QPKjK_Yp<95}3%#h=En+LX7?z@Pw~Ub}!&jN$3GOa@g?NdVuMsa#NVf{w7H?`C zi|Pd365w3ol@p?0nq|IVC5yuG3a|1CU*xr49FR&nsJ?XhvUwqbp%K2gV1WrozB!WG z50Z4`Cw)Ja>8gJ&;a}`CpUZwR&!~U5(>}hGlTFQbG zHW0c8x%h-qplfOv$3jusNJm+5b0A`Ik*ckl^}z3(w7V53W z8)k6FJx*i{YhlKj`!gj)kdl?}Nm#V9ZLknl3qbGe{_=}F@iVp=TzsAg06}7WJxpy@ z{d8oGlGuN7<$tWi=};=T-}?N;RlNbqOKoP3zLYT+%9_HZviJ$Cru)OX^%$mp2t**L zGt?!*fl9MEw$vSJ_HpgI*nR%<_P)6VX} z-gdJ?_jY&pv+5HKATf}Trc#LlLtQPxe&+RuVQ5{>+!P{_%^Ri$!oV%a`Bz5N3aI%I zrp}ua@vuv3xP~tu{lCwRH%5WEEl}%GYSmGil_;IoA?z!Zo&qjsH{~E?T1Nu%#&f0j z46&eB79VN}$RlfwjjD$U&i_~i5tA{cm!EF4*a89I>i-A0wnH$$NxWvc{i!8t8AR56KJ5+nio**{-E+2wl%}T*q^lA&M@pq4`(j Sm0R?11y@MLsg`Sy=f44LrO68b diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc index a0c495a855f94d8912e32e8aaa3ccf5d05603abd..2508bdc6fc83b471a858530fa34395a344a7a5a1 100644 GIT binary patch delta 20 acmdnPwug=TG%qg~0}#}8KH11^$P55ErUhC6 delta 20 acmdnPwug=TG%qg~0}z~b*|(9~kQo3ua|J#C diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index ef88a9b4e5bd2d25640777ee22a78cd78ca17d77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmZuvPixgc5Z_Jm()6{0pqHN9>l00+2x?JLT0BT;i)|Gifv_(-&0Ec%Wp>l@q+ZmM zpFu>A-u*PWdh#oHa`q|GLx;@lOm=tX_nX<{D_6#h&iDqdn*tChh&3oFj!U5=Rl2A{BblLtKg7L zl3$dMO@blX)z%HkzHz#1WxY4yLsZmV<+mhOc8C#Nk8R2Qg?~awnb&Pnd!3BpgoKd2 zw>b4pS67ACQ(s@QHq*D4XVxhoEUE5p20*JYD#%^U}NNZ+87X`x#ONbN{_LSs{C9WG2qe=V-~I{}VpS^D1@ zu9E-z{q|OVOeAd%>P%w3-@*>+Q^wj%fz3Ua{|K{!TLuefiA+>8+e%YT3#=rO>dDwKSui>$uflbI<4HCW{CE*|Acit=j diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc index 59780dd4274b07408f1f335a95cf38cf69806335..b2483f3c23125aa8ecd821a5f704346a69241b89 100644 GIT binary patch delta 20 acmeyL|39DmG%qg~0}#}8KH13q#T)=s76+*S delta 20 acmeyL|39DmG%qg~0}z~b*|(AVi#Y&O;|GlZ diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-38.pyc deleted file mode 100644 index 56ea652548b428899348d984d80658b6371d5f9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9662 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 diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc index 415965e4c77d9b2aacf3a8c4a9e72a26ea3145d9..621b550fda7706bd77ab92ce6e9ae402eb9ce1a7 100644 GIT binary patch delta 20 acmZ3KyeOIbG%qg~0}#}8KH11U-4Fmn*ama} delta 20 acmZ3KyeOIbG%qg~0}z~b*|(8K(5Ijkn|})P6mSHZew@z`@WhdMFSqWi&fRt z_4uB@?<;@2xL7vu`}IG{?fph-8j%@UiP<#yuhq2puidoy zuhVq!*G}Ay*Yr#p>m-Fvv03btnx#&;S?(+}7dn+@h2Oc!VyD`yc9xn;om#WTeO|KM zS!u3ty^x&htTtDT8qbG~_=>kG++&c)_Mu2+&j=se$i zzVkx!1#T}Ue&@yJi>4v$!?1kZP5|kto$tzdZTXU&fPHEsk^y-y}O?~H{w>7JGWw$<;6R_ zEKa*&lH2!0R=0Eee%Q`yaW@mPCk4u&8+Jr~YPRQ*kP07R-sM)?-Wb%FQVEu=~F3wjfoLpM{!- zXAO_Kj3P63%^^!1N!8cRftgu{_Ru_ZBIn3FG7sG&1GIGqS3cs|{LoifxRnTB?SyZ= z^~Zj?jjjmvBqGZF#{IhWoq6>;^BPE5QmM>>hhkslWhHu{46{_Kydt`)FGUclRvhOp z|EYVqLtD??sNdZu_wq4wP` z*RE}TtiYR15$%O?^G;XXkntn2c_VH0NgmYZU75CJ*y+UG_U6xH)ejT@Ue=G|)PL*E zx8B;kd;O#P_kssvYcuTiHbwVQu!s7scxzL|nRvYywjM&X)MhX4y%DfPKyuz_k=QkQ z`*}H_Z3je-3q)a3ZNpkImc9W~Tnqaq9_yg|y|w1p#F;R)xQ5m}M_jq{bU z4Ks>$GQke`}ncqr6rTo|Zo=hLbkx)J#8k{GI zhU}qdJC%MEW}&|=(~h4&npL@6_VK$$yzl5wKplC_zYjf?X_}GzWT-Oc z_2Zh4&7@nqSd2cI)1A@YvJ`7};*2MuRkvbDByDU&cIZ^thoV)tp~`ByU8q3XPa-HpDn(t) z{%9>9W}+`toxk0vJ9&xeKqShm^90D3j_psLhSaoJ!bWmL@??)5bsv??cw!uyM}}z( zP5FFg?b?UV5K66{&)hG}q1k&mGKNOr4K0*~p^dUgPG-kCaE8Wi@vt<65g0lTEp?Z^ zh{zP!8_-EUQ|{@5*2}r8`aL1@VgRLxvmnT=ROJrYr`(Mdgeb3GSI|td66;c?QeMIS z^nx`s(1vb%e+9RQnimyDHE8sxR*WpFwH@%n z0o_Z3citD74^7g-NEHZFnE9Q)${^!@sv1P`#%>ySMda_r+0InuavNS^Bd@6b)>vov zWeLZVgigLC3Vch#^evseUdUH5JfJDkeim%Yuub+8)|c!XJ4A=7`RUpDCgY|Pv*oM1 z@{cg9d>chxf9QO6;UB+Si_?-6wnEyV)Ryq7MEtl zAU?{AZRiEwnTOWUIx<;zNYkJ@>TP=0HV)jOap;on9eA0yTR1EZy(3fhG7mb2+706u zD+h(4dsrS8hTb-2F^$hRhweS&sku>KnCe4*ijH>N6tD_a*dHlaNN7^NOyihrup(Rcz_Q1 z2^I6C$ZZ_DgMLkl(x5aUMSX=F0~rlChH?;e(x{(My%GeU1A&d+6oMd1Tj;g{IV72I zS)hWfx?G}ylu@ozVN>xD6~qBaHcOJaN|LU8apW9YB1y&$f_M8<8p4dbjM|HM)I}6U z(^;?#%kWI=ceTpui)U&z&mzZRTHi|=*}^mTqn*%C{T#({=*FPUo&jy1D2$+(25d#N z8N`V)fi_V9Y;(r2jiJ~gd^`4uR4Q51BIapXJzh~M>gU)n60PQhWrWM0%((0Wkz6PHsw?I%`|1| zGGU2ZLp)jx%)zk=baR1Kw4Z#vC{0HdZk5K#>vXQWBfJ$)jJ<$sL&<;`)!Eo*NERDnNzMpmx_e4;q ztNxxCLt&rdAB}?dCz=CYY;iD(**aj%RR)7-bbTON)lWvgd-5eM)%BA!MReEp`@P9b zdYYX$Q;q3fAHdrajs(X6s<35zMAi(;VvW(#P=7S`{hja;Hk;sZF$Hd;;B~S~Oqo`sU5Xn~g?;UgC(@Ee*+-z)UO} z&0HofU5O@JgNFlQeUJeZCNe3QBt6m>k3fA*FwlVzJ2py@1G+^7XA#X%e-zG;_~=N6 zYP2z)l;ndCqT>fpN&$-{$%rdj{-)tV?&+Sor%fAc)*nLn<O|mI)tb8lM`U`=1(J>l2!xxa&N@ zw-0UE&D=u|5Zfc`bL0T__`~8Mf)RkH0qPE*5(Oe?V@zQie|e0f{+4%B9%80V`=CVY zXA4;+TimT4E)k46!akocBG?!__^{nYlnTa=M1+a%zoP9Y{(#x=l~IZS4|vB%$cNaE z_$eOu0IA>_iLWx=>Jz;3$!Fo~M!hB%Kp^dlYE-MB$Q_2rUXr%k2#efEZ1vknhm765 zyiJ3aM{UGRk$4C=Jg`x=!fM^?R>KKE;P--x*wUcxUIAA~Ma3(aW7vwVLlPf6l<@LKCtlthEe6YTL zD_Fa}_Q5)WY1%1e9j1<+VLi6VCWrTWf}{Ue+9g>F10n)Z`CZW+oIOUbiND7#P7;Wz zEc_t1dsyIKXepu$aa&T)GaM$Gy^Du2-I&7y*|f++t_%@5GF@&&v9z0)nV0Lxz3$_X z9GI4o!BEg~#JMe+YW$-`=~=_0-bDdRWdyK-D3KCDX=O;A>>6a#cHPXoz+vHG;mDBh zWNf<*%SQ(67e*4UlJ8>@1a-8ke1szRbn;e`B;+MZGjZsadkA?c?5^GU=)?Cv+z5Vl z@6JZBasBo>(xHs%<)Z!q3AcdLrzOgAft`=DIn>UpoYAWgpJCA`Ys{<6DA>!iBht%% z$D_!S87{$K&s;H)Lpe1i+Jvhc@LR{&N?1L2w$e1w*!>dP#~10N@89sSuPWMPP$c!W z@XYL*^YVTuN>?!}4 zN-$J;#)dF@3w=T-Kxs^B4fyU8g5b8!8)~10G-=z{sl>20Td!c;I^1dcfNnEf32PpLAETsC9~e$45KjSk`# z{bi4WXu^0{lvRo@4y??C;X3f(0W385ZLI7fOLPSiJ>}IzqMwaRNG<79YcvCC1!+5>pCh0P zt<9GFOZ4k#^kb@BniQ;54BAW|}e$?V$&}!^PPgp#Ej#khln#&0N z&&-BiI<}z`hCd4wiQV)tVSH3{zy{N3AK8?*WC1u&KyB#kPKlK-(T-Rq1K2mY&$e(j zO(-Y$CSRBxcZ{rrVEzw}qTt`~s<2WHa=r6snZveoTPEnlmYa|)HXWH?^R|a3lDwCJ zWgT)GU*mR>9qvh^Zt*BbkBX46t9yfgnkHt}NblIq=zQ#tN!9qNoWv{}h>99~Tf$WE znOaa$Trp{^p@R;}X8C)-uyZOrb!e0Ma7DwM6%sdJJmoYJ86`-kq`zM`*+1RH)r6LB zqBq-VNfP%145N!jCz?b;qJ3Q)n6h;}z75evE&n=o2YrZu&KhMEgQNb=LM9LQ< zK&&K%w~M<-OP)sGoZgVjra*{glM+@4JB%l0X2LxqZE$G8J-?Sxp4K{a$vsmpmoU|? zhp^`r8?i;B4gCKEI>%%n(OWdDHj=%FDe#yMVv50wGn_tohPt^? zUp^S+U!5~7)$E!(4nHc3y5@afxoDY^zN^2kgCCN7Nf}3^-Vqvt@Eqdh1v1OH?bZO$ z%l3Qp%BImI#`+X|&;pvx^AL_kfQ&_yN?iHS9R|iXIEPGzaC-gHym0bR1hI+Y$TdI9 zBgS{x4e_`oSjLo&WM7znjodAgj*TgV)Cly_iKFyw!T1W7nUtS9aU`J-j(c-`w#jxz z>+MnaB`Mg;FV0WECuvOLmuZ}H>|A;rFt3snTIVHrpj#ZCYtbTgV6D*+>MPW|OvPtZ zP`sh--mj=O6@9L~jJ~}1j?QcU83f)?4HOP=hW=MEFIu>(;;Rn2?x^6JqhggU$3E*- MKdIfURjSqh2Wtl|3;+NC diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc index 2a2ddd0d5cc1804a6c8946a7ff836c0115f40c20..141a65af930729b3b79f7f79081516359b9da30b 100644 GIT binary patch delta 22 ccmZ48#kjhQk^3|+FBbz4)O9}D$gSWC08N$#a{vGU delta 22 ccmZ48#kjhQk^3|+FBbz4oORi^kz2tP08L{CR{#J2 diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-38.pyc deleted file mode 100644 index 160d70442d1c1fe525a7ea4d776a70700bef066a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11313 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 Jq<)&u{eO)Fqn-c& diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc index fd3c4961020c983573351499feb63813ebdd7349..7cdbd6474cb3a0f01ee9936db06660a50ffb4fd7 100644 GIT binary patch delta 20 acmX@kdYqN}G%qg~0}#}8KH12fm4~*uMS3)~)BoC^^-VMpqdR{%M~tGbcV@|VgA3w-JqSi~&&2|GPtFw#V!>nAD2wY(NzB-f5V{+O;UDgGP+0dBykWrM0IjVhX& zni3QhXq_kJ*V?N}?-Y4kmTCbCVF?IzVe8dUv00xE_v8(i(8k#RlPUvV+maqB0#Ix3 z9UW!a%KCM?NQ>?-Y;jz=j2fYHygO-~K zvr5}Kb-S(?NSKNOh~!>`;n|Gj`6%fUzjNFb!%xGQp^M357qg;$)Lz0ZxEn$SFRRA1 NB^-w}QAoWX{{te3v9SOE diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc index 9ce3a0c4150b83dacf505bcb8a0aa7569ae6a522..0da8491146b1ca0b2d89e6e2b2b5c700320e23c2 100644 GIT binary patch delta 20 acmbQDK1H4TG%qg~0}#}8KH13KDGUHP8U?ff delta 20 acmbQDK1H4TG%qg~0}z~b*|(9qQy2g^=LMJm diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-38.pyc deleted file mode 100644 index fac5a89c0e737c1727009eb5d21542e180c9389d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3667 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 a(#^T4G0VUu*?0Aelv`LZ7WZZS^8W!^!sc`U diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc index ace6e0e2fa066e3c07168b6caa135a7d37451f83..0276c5793c958ec4e5aec7457d8dcec192d4947f 100644 GIT binary patch delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc index 509a2dab4a1888e91893a32b888796e292f98f70..2ddf12d06b496c589192ad101afa48a784fc1a20 100644 GIT binary patch delta 20 acmZn&Y6#*!&CAQh00ecNPd0LY)c^oJ8wO(l delta 20 acmZn&Y6#*!&CAQh00d`U_HE?;ssR8z=mtjs diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-38.pyc deleted file mode 100644 index 4bd2596c52bb1763c543cfbcd60e9f56fa886e50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6190 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 delta 22 ccmX^Amht>sM()$Ryj%=GaMoqtM(!hJ0AsZXIsgCw diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-38.pyc deleted file mode 100644 index 3cd72e9d9e53c5ec9c1b3af8cf7eaa1c61683d1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23264 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 diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc index 13f7946c492698a820831a1576e0435e15a364cf..9f1473fd87afbd221e0ed39ca89ddd0b44576a6b 100644 GIT binary patch delta 20 acmbQoH;<3|G%qg~0}#}8KH11E%nkrH8U+*p delta 20 acmbQoH;<3|G%qg~0}z~b*|(8fm>mE$=LGlw diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-38.pyc deleted file mode 100644 index 36065b5958fff4e966aac5142eaf8f0579948166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 zcmZuwOK%iM5bo}I?9Q-jOfU&ZJ~+oY1S3niAQXj|ha!;;;Kf9vky_*Fwl!p4sqQtl zB&c72DjPqbMa zE^dCtX?{VYnBoO1dCW@@3r>4cIHeoAr5AgpAN!nXUpdNE-a8Qw9y8^u!6{RN6A=&9 zaEnF3e;9{Fq75D%q{c}3k$rx*c{h1sG?+xI*C`~wSNZ|u`#O10XR}gQ)+A4% z-h;F(^J*{I&dn?>*0$_S<@MUeosEs;>HX)^E%{RKBx%zmy4shoas4FUNlb3_4-NJa zduNg+Z`Kj1)lj9ydRFA?Sx?j)_U+~nMu>b!WcX+p54q2eRxcs+_PqMYnM@}C<21m_ z)O2$f%`tn$Ahi5%-f_x~R?#E=8Iel2k?EK0NA`?8XMc1nC6I4icZ@re>7&SjF-B>Z z?i=LE=5_TDpaxh%CtM|S{i|7_gQLY>&{acKF%b%%3qIs4;%M!%k`}MwGgv~%V(NL+TE0s!o?;P_F9EHOtk=qpkH}Fu0yd7h2HO#q>1T539 z@5o%N2X3N|rs-Y{55>{)tc#|ka7XrH9A6s19h7&7*fuVf8z)XQy j1>I-sl9S^4ycBOCQAbDD+2Osuj-Tk=b`o92ZjPKUH&j2u diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc index 92949fb32264cb46119624eae74b786b9971fb0f..4bfc061f868a957c1021321be8017e4d35f857a3 100644 GIT binary patch delta 20 acmZ21v{;DyG%qg~0}#}8KH11E!3h92bOkK{ delta 20 acmZ21v{;DyG%qg~0}z~b*|(8ff)fBYK?M;2 diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-38.pyc deleted file mode 100644 index 98040c3f19e3c9c7eefba9f945bff1d9eecf63a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1394 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 diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc index 9de7fdc6cd5543c697fbf43924fb3a603fa8b0da..b9bf4f650dd3c97eb97f70c292b6113738e25b4a 100644 GIT binary patch delta 20 acmca!dcBnUG%qg~0}#}8KH129#tHyVu?Ii^ delta 20 acmca!dcBnUG%qg~0}z~b*|(AVj1>S*eg`A~ diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-38.pyc deleted file mode 100644 index dcd0c1c2323fc0ad12703fba62dcc3791e473c0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9984 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 delta 20 acmaDV@>GQTG%qg~0}z~b*|(89iVFZi+6CMI diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-38.pyc deleted file mode 100644 index 1e639fcd013054a096726a1e1d5d031aa441941b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 zcmYjS-ESL35Z~SV@Y%7Q&!!1Q)u{rh7Ohi7;-x}`l9UPwwIxnlbhxtCw`=E;`(k%5 zA;A_B?h_~=@!Wr)Z#?jb_(S%Ur~U`1NWkpbZnM$M&dkkjW@mmge%xr(5Ud}67lYp_ z2>oT0iwkV%6Cn8qFoqb8QDAlwvcx13Pg7CvgKesRR{lzFV=ERD)_#3u?(i zu#nV)deR6QNi%3Bi@{>D6f7mn!E&+^td#zCyqc^9YZ!6DZGLGJ4Ka7jJ|LSYSfASX zWxl~Jeu-g*2i7KH&I_Bltn%CrHo@k-z~JHXjZMVYS@ng*YHZ=T8@$7C2es<2;05SG z%hlcvjbqx6xvt*lDHl{_LVKSpkc@FEm9~euin5f(+SxDin73-W`Y9DVSzIKkZti9$ zX`E3u*FTG5-iglmO!pp%Y$&*tx;d9-UmBe}O5q>R)Y?A(R?Xz){V3u0Vwy`nzjxJ` z_IN_0G)jjvztw#~Q#s(Glk>S}3+u%pSG_1@JXO?$-m>nxwa*Qsa?TU zA<__=#K0mz9#9o11d@LO8$qs*h+I-o^9lX|kBGdZFta9jY$?L*304+!Ocl&>_diL(PGO9d5pgD()k*k`c$^^6KIl<_gU!S56(U)iseFZ3lsxLm! zBume3?jJwH$gHsdlB zQ3-};-zh4OE?UOgj-!+hAz85g{us*ONK+MUaYglt-~&LxK`-Z`CwZ8q?A29pe2x8A zCga9kWs1fiR46;9X~}3sb1-cD1;2p>SgTf5TtAaL+%o>u}557!?yYR$MtN`N*Tlc+O9V721p)|xCtj( zxJ*gQx{w}opJ|G6nYtNrfOdeS4{QX}@rZ~Gg$}VIBhxwL-0C0&#DH4%+4uLk@@eX4 z{X-rq03KC-2>Kk1D)R-0?iEu^&gP3he^iO!|anm~EKJq%cQ>`Nh$jQ1o{1 z7;=$`wyAANt_#pK`r0buYCc>n+a diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc index fd57bb23cb57d98f7974adc9b063033bd7e332e2..2da689cc28865cbfaa65baa7afd47da5db165b81 100644 GIT binary patch delta 22 ccmX>*nepsoM()$Ryj%=GP}linBljUs09CICZvX%Q delta 22 ccmX>*nepsoM()$Ryj%=GaMoqtM(#tN09AYkQvd(} diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-38.pyc deleted file mode 100644 index bec4aad8ed14a20d059344836397c193080ee5d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13062 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 W`ox~v<%!1#oEbkf^3@}?L;nk|bQmxI diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc index 358d6045ceb895dde066cab5c0fbe8b34a6030ad..5ea25ca4bf2034e895841822d65d6c47f6eb932b 100644 GIT binary patch delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc index 8882011022441f3f1990bcb375997a1d733d60ec..3ee794d0b96177a13567daeed329b91994bd3141 100644 GIT binary patch delta 20 acmZ3$ynvbeG%qg~0}#}8KH11Ul@S0n*adz7 delta 20 acmZ3$ynvbeG%qg~0}z~b*|(8wIT#O2zv0)YY$rKQADgw#9-Z&Y&M0kuxztySa@|#$9H` z7VE`5b^wiGf2SSBu3gx5T69}jElxGS@Sy2KG@ZH-Ha#~8{GhQBcmnaQf)Nz4zUawm$WPukG|2BgLh{ zoNcJYe$E{!)*L%UQfEA`6rRgsC25w4e1#*SYMKsURWnfx##iGpo=<`hk_BI4T9%mS zYqHVvOf0by6~8EH@=8}+;Zl?%BJzsMoTj5B6(d#As#YW^7+06&TXT4m6|7GAZTlV7 Je%vzu@*6@LY%%}< diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc index 649f99b2b0eaa570ad3c2fd9d986b2911e9bf049..5985cfaac2932d75cd285874e6ca81a2c706241e 100644 GIT binary patch delta 20 acmX>te_EdVG%qg~0}#}8KH129fFA%rjs`^l delta 20 acmX>te_EdVG%qg~0}z~b*|(AV06zdgTLvir diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 9ca047ebea99e2d70d079409c3c8fe1d1055df93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3195 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 diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc index c6fa0931eae55cc695530c1103808c82f3859fbe..c136ee54df1dac93021d0e793de39ae229410f47 100644 GIT binary patch delta 20 acmeyU@lk{OG%qg~0}#}8KH12fCISFP#|BOS delta 20 acmeyU@lk{OG%qg~0}z~b*|(89O#}c&lm;>Y diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/completion.cpython-38.pyc deleted file mode 100644 index 93ea58add910c3a9c2f138a0c0506b7e130855cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4202 zcmb7HOLH5?5#ARTAPADOB-?UgyT%j~W1TE$%9n%@Ri;47r3x*w2+AshU~QI|0l3t@ zG&3M6kT_9QsY;a&x$8h4bI-5YQ>t?EU+~50UVwNIpzSPb2fedB-96o3_w+uWnaL|~ z{o~)f@!2g!`7b^UUm1A#8g9X1pbAxerP}>ht13Kez82_JUBx-wH-bzxlhTH72H9#h zr89mmn5s^twCU%A>FPAl*=m92=oHP5~bo|nt(l?sr#CX-Igqh@<8f1ku&OislC^ZgE~ zM?vf}=|v$C(&h40)VUYS&W&6wq8OSMG{WqtleG+-go8NA2uWxO9 zzfvR%#q`m6vAMlgS(#rrJ;k@($K5aXI-Pk^8(Dm%t@odDmvQyV!hrtyHCs=&oYm($ zn+`76Sl?M+St1Kd5hhCSp*b=N1y5vPLG@vpC+5YAjm?A3br_1KGgIAKNXznGEzy7R8Ta!KNG(2%|g+GQ49`X($ zfpss72=IZ(fpOj1(vAJ#gg#$_l0Hg@V`~vF&TJrA4~vOkr+; z7e_%oa0kNr%G5D`lBH4mB=^E55wY({QX{Eab_CEF(zUy^HxQ0FdzC)}C^uX(Uv$RZ zXU!A4K7!@H>qF`8HAu0z!-TZA&;d_+&|a?XxcloTu^S2~CKj>5!Nd+DN&eQ?jW$eN zI-C~lv0H!HiUDrd%EvYf-GJFoB@1rQIs%`boWAm*bnd6)u*t;*#KRxSg6|6X0{iWzkp3o-4X*)fuSVjgQqxOad#%z23!4x>`x?0V ztH)5dGKxZEEdIWS6YEOsm?hgRh>m(u8@2z}v8ML_BI}s3BP)hNk5)5ZFbu*Z5Kltl zbs(aQ`{aoW=fyr?mB87_PT=^(q?GPHJoK_)#0Xq9K|0_K%TOP6BWs2X?~#^~82hd` zNc1)g2G+hLA4kWGrw4i+JA>iNfQPT)7Jq_)DcGM>HL6y1s#OiDQ{$aVGt_)zR5Q$E zS(f`qVN*2wPRBk3X7f~sjw7GESME0oKw&SZ;+b*Sh43+Wu(Ww?ce;Y>MH4ppjB4Xs2QY4)wDUd>~dq(h&Sflg_7 zz5xA_PG@0$Ze;!zeGleu!~C88ymq0}yQt?rrH~18?->f?2E7->783%`paGd#)Z(CyJ#=@-9s&h+JaE zE*Fd^ci^mJTp|NZJ53%zt%m+nFu(CHh2H}iKfWz5*Pa8Hs4;r%^4ey|*0^`XYHLxw z6|hi>+7@(5+zkTAnc8=rXu;`KkuB;)mH9%nol!i1}dXnurNhF5Ln}QcWYaNc#{$&D%uu4JS20|(q>ZQ`r5%zBssh#QP z>Y8${c8oLiP(RaOn!GBFiwy9YI79VI?Jz5I=L$96s+VdfBd28kFng9s-)7!w=c=m6 z>53u?hcg$m)V#>j?8V%faS7a)y>~PR(4T7CThLZWLF54&gLc$Nr<)K&_)x%4hmq{n zz;>)O6}ZJ+7@Cl$dxZ{En=|!8<)7Ls15~JhM>|D`r6pSFOFj#n>2r7Z2p*ICLmx^h z2Jn$UX(-lIG^K5gdz-hy(!;cC7LS0qT9<&T#K2x0^qAcbnp9W&-um|T=JqoAK5CJm zB_xSmA;@Vb-!=#otY_A(3=Wt1pf>fFyDr}r-Mskm=ZXzXgT$^npX|=gP#oju4-te zItx_${fVx$rjwlGV2|ZEN#1dSh_-yB3y$*&614Xw>o_#3!}J}m8De?l>{ZKye}Kjj z{|(xMaNr1Z*rnu&4qo7kI5)61r7+-p8isG+7FZ2)V5FhVE~K;89RCAy{0@dB2f5TO zK`1>jxM4Ih+LSg8zyFwj{vRiRX$1fP diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc index c34fe79479f7add4c1f6c17f5bc7b428774348f7..e6a01d7f86b5bce76b43604ec3e1a3dbaa280aa9 100644 GIT binary patch delta 20 acmX?_el(r?G%qg~0}#}8KH12<%NPJj;s)mc delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc index d38c48a72d3ffd4cfcafdcf58389ffe382fba8af..87e622c52eb57ce53b4113320b1f52af994348d7 100644 GIT binary patch delta 20 acmX?Sea@QuG%qg~0}#}8KH129SQY?91O}7< delta 20 acmX?Sea@QuG%qg~0}z~b*|(AVuq*&X(FS+` diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-38.pyc deleted file mode 100644 index 4a0711f934b0cee5717f149bdf9f6918fcde8fab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4266 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 diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc index 0feb0457cb8ec76a869704c7a16e371c665f6154..eefa76080bf3d6f8c271e3c587e87ab15dcfd8b2 100644 GIT binary patch delta 20 acmca0enFi3G%qg~0}#}8KH129lp6p*G6p~Z delta 20 acmca0enFi3G%qg~0}z~b*|(AVC^rB<{{|!g diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-38.pyc deleted file mode 100644 index 1c07462609d4e46b27475efc9767e4e37bf44c9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2152 zcmZuyOK%iM5T2g*zHAc`ywcpMMC)l9M-2O_xzf^=9Hh1Tu9aIVm1*y>YD2A>e;HVzN&rPYSlFuzx=`XezP_0 zPh89o6Bc)1iZ>vrMoFUi(>L)+wbp$d-g;uBrf(8FGZHJceY?`l#7SM>t#m7?rFFla zHvC4lwv%Ss@>}VGzfi56WHDXxm(nx-8KN;V`G}o8A^ykrHR{sZD~;Bedu;fhuw{H` z{f$8zwE4>P&r#CT+O5C9Lv5=~l>H=3N+v)vAI3t$+u6v|G|XsQSJq~?yWLez@A1aQ zX0Hc3t#9r=+3tS3vl%?N+k2o|y`Ap%*8OU+iRTT@LK;NFGJ7sm^N`1q1$ilpQbzcT z^Wzk)Td>PCLGwW$Ms+st7ut9`1mI&~qM8m+@_gPIUcLp2_R zVmR}A^t$fBfED~I^FnV3XI{PsT9QX$;uT@^JRHCYkB0FJ)~Q$aJ3}Uz7loO(%e+!B z>K(>%=&h|)*W(PXb9PY1oTV(2!rO}z=E>ZnIqVlKl;Li|sxQTvkYSRDPPH1HUoCh( z@P5b(8RwaJ=H0@px4llMvr}b&Gg=p+Yx~+hp@izxkUBM`L9K~N z?TIDz6LLbR^V%V3WltRHqV7My4Ff_QEoe${ez!;21;ORc@5h z0Ad%a9@0t!TkgUkcR(n6FXw3pm-h2GQ+5$@!MHjLATloTBA5pQo|gr3RIp_4ca47r zH~;y0W4-?vtVEyD!;ts4Gj@+dLi_jfsH~FIe+0<$FiqoZ(0>w(60+ZuC5?0M#`POF z`j75*cY487w%ZSjqR+Ay!6E1mo}-pgh)(q46Ae(gkYhTcf2_ zv0k5&{A*BGMZ3n)ebp#9L>!a?N<|ssCFEI1$~fof1#h9icBonb;t=F}0rHwdW7OIf zM;!PC6kno1b7dBx99FrTiqCP=;AM6Nlo@CySsOqj^v`kQM2EhTOd3NFi0nH=Wwx)5MjRzU9J(yK;@B(tqzd#3d6o@s%D!DQs zcD{;xNVPeEKJx~MMVJBsaEa-d;Pb*lwcj@QCA6sksxpY5em4-i8q6w#cR-O)w3Hm{ zzg{`gC7I}BDCQ$WLiUacGYRM;E(Q1M%d$ z3a0S@3Uu1?Fee?Q^WCP>cK`u3TXIwA>LPWy_ZZ zo>fV>043KsExAsV#GTzxuwYhu9REDj2aKTe%2I$Cw5Tajk&o*9e?M2s7}_%i16J6D zs(z$aK4g`~BC1fDvb{E7@*zY4g>bp@8bg8wQi5MafdS8fQ}L%_x_fKN(%aY>#WDyN SXzl_`O@M0&AH8lYUH%t~**84^ diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc index 97b243dee33eb3c32b71a001925a73c3ef9bcef7..12843bc5aadc464e8ca22556c3b7f981470238ba 100644 GIT binary patch delta 20 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 QYofes!mFrP{fvhBZ*c$E^8f$< diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc index 9df8e577f9de2f4c76da1be19e02e72b14cecc8f..b5cb11be3ffba2d036e605940fa4e154d7445d09 100644 GIT binary patch delta 20 acmdlWzd@e+G%qg~0}#}8KH12*Rt59` delta 20 acmdlWzd@e+G%qg~0}z~b*|(85R-VWQEce7634ZE86vX#6S_B7wjR`YA&HO>3kTD~5x=hwsQy5Gt+@(;of zG~do{|2ll|;132*(updH$MWza6`om=5;O7@NZ%D=&OW3Nw?^HrQpnCM%| zdRUw)dpAv_vLB~H!r&TZqj-|Zh!rO(FN>TNDE2F!7BV^#WdXfb6rC_G(z1vm987Xr zRuZ}bdhSk{=W#)i-G9Eb^ZWh%zNvb@iv`<-J$QOBK~=RfX7BIP5|U==K~x=&aivxj z%fm>P(S&CSTEF~U#^f1DnGq6dgeE1SMa|HrR@k66ZM-4Wq3$a?bePLL*4#9hPrWx5 zZBiekE!Jio)@0q0xoObW8urlB9eGZzN(kOfIuNbpcl zj)FLNdMXdgB3SZV0DcH6UeZazK!LNWh_qR*xq`Wplvg8n%8 z%iN(~>xgkCC%j0=k^_);q3u8udq8H!k#R&Qp(eHP?5}OIkbw`h)T7PUjaqs^q5~*Z^zO8J^0C8*J9lnm_Iui6; z-%%c*HUcjT<;PTWfJ)wkLDfWqBSfEas+i;cYp@C95+@++$Gn_W-x6gDmW{qO_|IY5 zf4%=Baa9e$v(Zc7AEyUHJki#|U&AV`?naQ1j2CfsH>nd&+yxsEu7m1S zwcedc+ydjo9UumAh>5Rhe&;mjJodkH+#Z?Ud~^lwgQX=PK<*ro%8vP1@KsnYv2fA( z(||8FlnG2qXF$9kzJ_H~0vJ>i175SXI8G}?KD&}9=G-gs|Q~| zUtmFU4AYo?^qw2}q!?^#i^T(A7Lx#;?!1aZrAwU!fY>CXPN)mSB>1f#V($2MJae-U8BZ za6}LPC6ZqOQ4Ms6P)?nRwNtcv0vxsA#P@&^H-Q+$hu4PJ`Jdw;`g+9vujBe;dhN%K z>YMx%m{X$*L$`R)B1F~>G;sn1P=pOI^u|0xe3@s~%%a9|lYcU^u(ZugYHl0FuVD;u z1SrC>J=vJqfIPrjN&sPItpz&HnMNi*m^DD=Y~$)K=RiH^yU;fQf8HKo!poVAF&5$K zf{W0Zx`6pK<&cDUX(^A920sA zj(*nD>)>L2)3E0s1NRV`_y~w$LSVml9EW(MYXLPK(=^N<%$fedx5^1 zV?E_XQ4!}Xij*HkIoy^R^6e;k0R?hC;zkiI6A-VZ;{tCZ^ci>>(xy03jfsGZg#Q9e z;s_g#l?YHRxw4>6^3PEQzjg-4H06jSeUhcqy*pwLMs>Ns2_CU+IHc8G-&o~1(!ZnJ ztQ?P_gewnfVtqm2rpl406^QHQ^+sq$cpI{NfOgW759%5YT7x|1$8cHbWK+Fm9iAqK zI{lOdVx5xVs#aLk{6UhXbs4A^UzQKRGtvA`;P_*!?)+%(07`^3 zVeK_tRBm3?fZw=G46p#kb?s0$eo6sQFEkoe6aM%fgXb9MUut)u8=-?<{i#4GZ@UJ= Y1H7_zHStKBteb7p#-`sMQq#Bo53eso5dZ)H diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc index 5c24b21835563ca179db633baada01e5511383fe..a5ad85bb51d7ff27fdc31b09d990a53717aeec58 100644 GIT binary patch delta 22 ccmbRBh;h~09YIc00000 diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-38.pyc deleted file mode 100644 index d7c561747079359ae6da3f15e054da22dcbef276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20195 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 Z9&*G2Cwb<_*;C0FTp%7~4|Ng8{{#GMI2ix{ diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc index a860a920b0b2722befdafdc4f6a6e31df2b243f0..8f79c43b3d140e4972d00e82ecc9acaf2f1b8592 100644 GIT binary patch delta 20 acmcauaj}B?G%qg~0}#}8KH13aW&;3CF9x;% delta 20 acmcauaj}B?G%qg~0}z~b*|(9~%?1EW{05o; diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/list.cpython-38.pyc deleted file mode 100644 index 293c502d6a63f4604ebac563b3a838a724d46894..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10246 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 delta 20 acmaE7{mz>EG%qg~0}z~b*|(AVu`B>d(FWK6 diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/search.cpython-38.pyc deleted file mode 100644 index 19509cf2b6f79249321c636317f70c0429062cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5353 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 diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc index ec6394168d567a99b96aa99725207ddc5877d30c..18ae8778acb99d9e8008bd7b2389dfd000eed3c1 100644 GIT binary patch delta 20 acmbQQI$xFhG%qg~0}#}8KH11UMF;>oi3QLA delta 20 acmbQQI$xFhG%qg~0}z~b*|(8Gpc; z`LpisvE$YHh1?Uu67L+6{RZ#%z-PFR(62o44GE?Cw-a58(|{>vhOQaASuOWM&x~uC zpVz~>8GBhH55mBV{cJ98hRwVcw#>Yq&F2f@f*CimcD@)cnsJaV<;&r+8P8?6@|AEU zza8E-^Jey~d^KFn?}T@V#jT5X_}xnqzWXzawb=X@7Mte*Z@zNF_ZZo-It%}V=&k1+ zqP@@Jtl|43eCc1C^EqF7=<3c^((6W9#KDE+wcZ znqQLI-hj2=U5p zU>-oQG?g^o%{Wyht*$)Kyp)Pg+;MhoMt@$ECk5p%6F#mVjRoHrJ6oeKD#0m(!dEKI zCVpJRPC1qm0VSW?%?!l!OqV2=*fPX?3>^y&3Jsw=`P=g)X}1(Iae`@ zRgAGR4mHT3c3=@Jx|e2L(i08=OvCOPH*0h&5$QnD6A=#vT*&JMbocZv!7zTzvvRPr zGqxXYPojAMCGOMTO&a%ex;aVaN3`1=FQxS6nl(W;XFJfuX$%Zp1SCKd3DjwN;kW_! z6SySLB>*2w5QvndD+UM8x&Y%ULYtq7~`{^++ z=&UP~g)XI^?nCp9^GSgxpwhIGV3=2#N(b1JX%4;GscDySsUU&`(WHIG_hMM1ee8(i zSZH^jX9M_z(_w9G?UYOHpa`TY1&@@d_;CGcS$wEyEDz~kDQHp_d#T6`I%&B#)B22O z+)z`uuL$CXH^j`0AS!`muG`2?5qyP+Cc)kh(>hvGhy{C8LnIt6!D=6DH_m)jANeCP za+q`OfaZgvz>W7v7wEc!O+13}Y%0mxu<%^-AISb&AuihJ>0gbl6Qfpt1_v+zye_K`nS=cZT=@iHqcpGLVaPti6k+g?x`cQIC@8iaUkflTW zen&eng}7U0%RGhV#a(m^Hd{C2N|n(Bui6JN?Us^j7f%J9+j_arRW#v)XcCfWVt}oy zG(_MR4Dee7?zY;?%6^{L`%NJAt^5V@#U(5Jd+>xCp6{5q#OTzaM~JJD}Hfq*#ns2iND2 zaB;dc8pLWJc27eLWAUA_aaBBqf&2{!iv+ey>IRPP|2)?tZJ67R{a?=uP;0^8>%hU0 z``U9nvP9rHx%JwudBn4A;=T6VCg{Km*t;YkO#t}t*7nso;R?QRGV9FgdSniGQKW+i zb6#Z}#?2@?0wTh%ftepgtW01~t0Wvm!~=*^*eDR-+L20V2dGE<7|? zz4}dW*C#L2rTRvs@FLU4H+_S?3lM_rRtfBh(jde%`^^`aEOhf!CNs_70FXU1m=T*8 p{yGXQ#7uEatxOlzH^;^Q2)9d#D5*o^G;R2U-!_i%*KOAV=l`S;;GF;f diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc index 6e86ec55633c05265471c024471f140c8a595c81..3956f4daad848ee903fd2363de1b0a7631f0803b 100644 GIT binary patch delta 20 acmZ4Lw$zRLG%qg~0}#}8KH11Er3?T+E(Ns! delta 20 acmZ4Lw$zRLG%qg~0}z~b*|(8fN*Mq?`vsW* diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-38.pyc deleted file mode 100644 index 11f30c7dc074ea79e5b36dfc544fbfbc084d073b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5476 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 Xm{dA!e_luL3rxI4CT*`v;phJgTYn={ diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc index f16378274b0948bb3b4113d5e24863ef90b3eff3..9a93e9e3c00ff9f724c8908399354dc867224c53 100644 GIT binary patch delta 20 acmX@hdzP2`G%qg~0}#}8KH129hz$TfO$HtS delta 20 acmX@hdzP2`G%qg~0}z~b*|(AV5E}qK8U_LY diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-38.pyc deleted file mode 100644 index 022221939b263081d2b9f88d207d31f3dfd22400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1309 zcmaJ>OHUL*5boZYon4TZ36hv-GV!(t7lRjLi~&K7i9rHBlFcNYp6Oa>m>1nM;1W;5 z!Fcn|AMoy4#5 zwGYrJrg+Q}KH!}ER@_RQfm8cV>?Z9&o3rOkxvG7_R2%rQGw_tR#d@8exSREOHNO(t z!pNvt)A*~yvd~$I@#zg2?a6I;rc(t519MNLh4G|_zA!%8I9bNmE};Q7;ED}eiVqxc zRqK>1N4Y2NpbZ{$prhK#J9Sk@burdeZNxND-FT7OLdG$u@q>;&Z9;CqLRwf~roKK; z^795`e{#~t@p?yFUu9tZG%NfRKw%%e3Xi<;%jfA`M`GBF4Etdu=53$;Fy2p zO$=$a){hnlAlAG@uA{$vdQRmav}(#CB0JQeL^!HuR;&d>@Shr!krb|lc=(l>Yk1VJ zFRKrOH<(}pP>0e4uToeu`T&BpEGiSKS+HTUZ6lLJr`y3>ZShopt0w8wI7I)Y4g;$TxO-M)8{|4)6gn-yq%vMqWBpH zqx)Br`|p0d0$m|enSc=0q!3A_%9#8qA@)(Wvz3kzDvN|L#KBNajf19g!z_ypff$2b z6Cmt{?kCm662&fey&12?>*sg9w%+ShK8oDG5V=3Do$ZJC4`7I1b?0&#N%Fpb)+nM; gsDZR_Iq|$H8sr4%Dx_8SQN#Q(sbvZC6vxN;1Dxn{ZvX%Q diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc index 6b111f8a840a32f3e55cca71de60a53fe2d1bd66..8114b4c50bc565486c6bdb081db4636261b3405e 100644 GIT binary patch delta 20 acmccUbkT|XG%qg~0}#}8KH13arU(E4}~ zJ+JNQd?~KD8wRVe>SqS4 za&O;muQ7AOXfFK+`!LpqMA*%)MEFLVgDgrD)UUpo$SjQGkjk$MkqT5UUk$t0!)^YXC}Er`>X$>w?-}{9 z7$gZ7!ObY!31mOgg&vm@1G}`v`KN@!t9a!UE(e; z^D-+j_m0EL%tM{WU6d<#ELLSpC|7uuFP(vYg%++aGv4>NQsHMi80{yVGwJtu7P2r4iw3`+i(dL! z>ThyA(Kd&i!;G_YK8LWm@CPzVw*9NGU-h4V_7^^;%q!65$9y~N?)e`|o(=k~{+`db zw}U9zNZGSd{t~FI>FXxq9iHYa7A)e6thw`yHO#2yP<(R@dBS|02p^twBQBfEVi~(v$Ky0)L4U6=(p}!o zf-LRDsydK7=<_~MsZItt`1w>U)5+9hx!5=hIEyl(uRw-Llhx%_ z=scch06v8-@<}8{xoX!;$F6!+t7;)K~lGY2|0rkkzI^ zOW`5XCfI7oeu<2Rl{vOXmWJ9|X5BI~dtcWFj&5~!0aLV_%wqO!c*VSS;_7c%!_fxJ zZP5n&JcgWxqa!}gDu8E+`caK8xvV@{%4*qiwlZ?|&3)^@q&5vwZ(Wts8(hTU-msxn zzkt(kz);s=uER4^nmqsfvoHE`(C?=LRO-)TWBA_1l8i)fPrfuh}|F(^&fC zPt!r>(+VX$sCi7AoFF`jM=2rAh{uqqwZd5D_beW#rW5m3u+QASgimd5oNjM(p~@iZ zgpld%rct8oUf5R-e3nqI)N*Q;=FqP<@D#?2vy>3?AA(pQcrt#CSGJHCHlS%$37qgN z_}z6;P8cjqirdBS3pJe=K+{8w)Mr)d<}}Mx)I9>KgC^4DOrboC@t3 zX3u60=+Vl_^s6(#r!{d8jQ6p{=Z!xa?-+ky$ZzPn4^Wr4eozqP@QF8gmO*k0K+;Z| ze1m^;hx52u&J{<{aq@GGKA!~jVHNXQmQ+98|3Z+QMFv>&0XVy5oB ztn6Y^jrkp9a?Fb-_1DV36Z^oR90daALOt z7Ds4KfjP0bX57-cIEnR?o1~%_#>2HK?iP4gG|{D5&4UE5IDtCZ=b{&7hdy89P^yQg zj4bCuiDHoW6{Zruq(oZ~v6`kY@iSUuj+s<-hH@z$NKg-B)OEb_3=*T{-nA_Ed&~B| zvr1LVGaK-q+M7-ZYk2l3H5Gh&xFBv~^*JZ6FGPzqFurL-NQ6~9MB*M^tw=%_GspJG z-X(>aBRJ5B7XN2PW{<3W^NO*Ln2?ojLunb}#C`J?Zc&KV-1T95Bkdtv)66p;tZ7&E z$($b;`^8SRpYcB_iWL8l=NZ4`f5N!zil|SK)wuPobuck0_In5>KLQ6+I5|A&M-q;-oA&y+3nApoS6|om1o>I53#u}eEN9BS86v=E z_gY)!Wx5G{+!wEWPHWR99Lv2seBmfP-4pD!UXIgl7|T~$vq`Y-(wu0-CCsOm<__O1 zA>t>fXE}|ZM+b3{k}{G4e>6;7MxvJU&H-Jp;Zm15U8fPn=_~O)htW9x6r&`ClsLy- z3%-!NVilltzjM9e6F=fuh~2a+zAtto;mp8w0R?~yaa#^9f>vf{PKH=5kE#%>fekWu zWY1vbtPd~!cvyvk`_teS2%6@`EkWSMCVz{M-YIzaca*0)gwO(|&536zITWpv2Oauo zzo(|RC|M+5@l(`&g;%a1F)T&Ev`of+XzmAW+pH=%s9c`$(W_ zLGTf7sMD5m5U{ix1cIVr(V&E6tDH?lY~pDuQ}82*rj-r#=cJ|Si%3V1*$YxhPG7Y1 zxzp%#(LF#=EJLT!cIBClyHbMVpx=LMPuG9a@EXO6A|SEt#}s@nepW>kcR diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc index 5de021e1a8bd877cbe2d8ab0b1aa1fd350dc6949..979bdf16923c95f4e485f60ecc3c1a087476cab2 100644 GIT binary patch delta 20 acmew;_)(DiG%qg~0}#}8KH13qi~|5fe+HBQ delta 20 acmew;_)(DiG%qg~0}z~b*|(AV83zDFOa^!W diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-38.pyc deleted file mode 100644 index bd1bfd6f3097c535764988a548f986ec6677541e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1676 zcmaJ>O>ZPM5N%KQd?ZYg34{m)NEWwQV1jZ)XtiO(a*0B;*=42HNS3Evlj+^=_QZB4 z%xJlgJt6o9d*a5OU*jt${sLU6a+BQ|@!_Z|WlyxddN`V>1e(;5~uo~od9^?hsg>_IqnE@1j{{o!2CReDHY#E)uI@&n7ho3z}15wIU zl(rO0V@Oo%B~!6VUL__ zTE%E{ljC?a%Pm(LEU&cV6@cQhT5#MtmqrqJE^V{jawLpT0Mi)AT(RJFHAhxJjY2A9 zsbj#^rpg!sxg9NZsGIlkvv<)vkDf+PnH@O9c*DMDVIEtK^A^or(nQ>_@0e>pXRgyk z+_0M#qK%h7pJ=Hteg?b*CzW)PPmM0aN`rKYt>Ag(G)9!#ED)69O>sy^D3{Q$GKRaQ z#9H`%XdQeur34Gfh#abEXh#~yFSMBey7l=QbC}^T)LUxKC%`Jb>~ZCwDAdrn+}p| zx@3s+Vaq2Lim7jhx_^nx09XI`>HcTq$GF*!L0wBT{LyDd-fodG@38`yL3lxySR2u-o$Ec4^7k_umS6{_^A?#s zGH;V1ejBrkp8ue^M6ibH71sAL#8RK4&hp@&!2WkH-uRvfFP0E~Q;1Tl8l@q8Ux-U= z7pVbfT_KdtgfR5L7~<0q5}!=8F3dj7UzZ#_s@o9fef%t8?6IW1-EXn*_hG%qg~0}#}8KH134#s~m1Tm;Vm delta 20 acmbQpG?9t>G%qg~0}z~b*|(9KjS&DcDFm|s diff --git a/env_web/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/index/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index c7e854205f6110a9718ae64488fae30437dbab04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmYjMu}T9$5Zy~-2&7IY*QU^uD}#t)8bLI8MnMLK&F**%-t8{Cdx`o5;-A>(Yts4& zc2@4C^1*vEZ{We3<#;?237=d4e3<5UZ~h}o<~%VBlW6fIbXJM!;C*ssG`;3*B6+DI zTazoRX>>Eqb_a;sD#S102Pw6e-;c`~ECcxfq&L#Tt)aQ+HNo7ft|b!#EWE9~Y+E)p zJaFh_lUK3RZ1eJ@EMakRcVFQntw1^lWY)Mz`!%m1aHJzA)r+htfMZwSzL=3s!F|sH X(}5%6v3uJMPg|?IhR*umeiFqW?@dm8 diff --git a/env_web/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc index 542095446b4884f538a8fac95bf3b44a53df849d..8063f79bbf6ae6f646a86bd39ec121271f9ab17a 100644 GIT binary patch delta 22 ccmZ3!nsNDRM()$Ryj%=GP}linBlnz808;@6IRF3v delta 22 ccmZ3!nsNDRM()$Ryj%=GaMoqtM(#PG08-8e9RL6T diff --git a/env_web/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/index/__pycache__/collector.cpython-38.pyc deleted file mode 100644 index 8ea5a826436935a617f928e1c3665cd5509e1381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15319 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 ZCSzXS`B8q<`Z1m?TwmnJcAlP0{a;~Y4R-(l diff --git a/env_web/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc index f0c38a359406bfb11eff244f771fa009c7369414..5d32cf9e6664f1ca0db59865dcb6992a2a4933f7 100644 GIT binary patch delta 22 ccmX@HkLkodChpU`yj%=GP}linBe(5*09xP&jsO4v delta 22 ccmX@HkLkodChpU`yj%=GaMoqtMsC~r09vgFasU7T diff --git a/env_web/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-38.pyc deleted file mode 100644 index 9a945667add53dc4cfc10d7a267b471d061f82a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29491 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 diff --git a/env_web/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc index a412ccd17b1d87b7bf6b02308c3663546561c26e..c4b26661051e1c135f9a152b424412cbe27f6f3a 100644 GIT binary patch delta 20 acmaEw^fZb4G%qg~0}#}8KH10}We5OGEC#y( delta 20 acmaEw^fZb4G%qg~0}z~b*|(89$`Ald`39c= diff --git a/env_web/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-38.pyc deleted file mode 100644 index 447f608da5a55dfdecd0cf2edb9cb775cdf49802..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7227 zcmc&(TW=f372aJgmrIJeTCy!Uan_gAU~AE?dyR5)AjgecS228R!75l$+>yNYlFQ64 z9gCn*pbF5SXrB657nS-D!0!dx=l+a+?Nj>?+O%%JZ=x1DpDbG|uq zbZdOPpyBz&@8!mC<~8llYz#hmG%n(e&g+`yX`UWvmGoDy=&Eg04E39-WbkVQW<6WU z)~$+F&sB1DyJG8{p9%8yLZzVUW-wMSR*I^g4aVyem5KUfWm2`RV5&Y{nbtL-?aYWn zyLx3-SfVhmRp#(p#P4B|6~#?G?cFfYbEMmIRJG>6r+GQg{#f(uZKJXvj)|jQ{*mDo zys?kX%1an6dgB-!7Yo~&%FAd^c#~*Ps`hcTr@U#jr&aqEv}e3SXdhB-2kRXX^WrG} zY>^Yk<~5WH^BQS;vyUuq&N~b`Cp`UzRyy(*>T;!ICiZeQ2&(IWNbD=IkZJAxX6%QJ zYLH}awwi$`>B-!cMig@<2bQZ1&-bb^2h6K}<6g-~#+udmjvI$=O9sgp3f9?&IhG%> zyGELWkBP=bywO`IgvNcV7$PG~kp<8CBi%E+%*W=oUa>?@wM{Pz8ElbPEz8THRq$*` zlurue* zcdp;O;r>XhuU4DQRnfTbeuVl}e|2;0-AcQX8@725kghY`j*qI%82T!Hk_)g-GPkITokkG zy_-M0>TLJ{)FvlDTu!l|e$wI)YRP01Vz{+E(~1_*neuA17Y2A8n)U_QKFd`GIF6d4 z=5MGy?s6PCo-ai$4z`}fX@R1+)LC?VfXTT5Ci^p1N@I!bx{YdGxNcH#-FoP?@VT25 zUH3z5c6Y>X%CIS9yd~)sGRI;TMKXDr8t!Xcaubt+>Qw^C!<^gKrm9h;atsC6h-?(L zZs@b-gsFPru(sk6ZYjqxdO(fjLiq_-kF~pc2OjAepTZ;Io8~DOXO z&uZsm@gP2TC$0w|k+1u85pOj`loU2wB8pr#O1gX*QwKO!`#W2 z(v2sx?qvYpC1nz!+)A;f{W-Pnq^{+pHslNC0&8oFiyQE~MP(arzCrj~jKf73)mv+8 z8Nu0mqVTdg5f{H2UQ!7Mw9`YVb$D;m59f9)l4rUCUZ}`{hyF zUEZ53i-R^j=qh*hem96jBPzS{b8Y_?POz%tzG?HF!vq~zYhyNCQCW_HLR56aEwS; zha^fQ8F;huIQbPc6%IY_>QgB@L&WHVjlvls(i?cynX2g%dQm6Zv`>!|ZpeZU$Vp8q zIlqa@fSjjC$tfXc3?tgsZx2alDe2@Q7EzMPGHb+=6kN}-HY5nKZW-^eAg_!Rq!03? zNqL0J9c6)N6-sqoFRTIOXZpx}8P0MIzLIismUDT?4FSG9#y+Z4zQp3G=zbETXYfW8 z!q&}#0i7HFDB8gJ%tTIdoO;~%P`MZJMlT4P48#UuGcO7QusJ4*1F$*Xh0Q7VYFMiV zmjUA`WLB5qCL_Tyl#8$@fTI&i0Mg>(PjGz5>f#3~e&JXbMSBywD0*eXsXDi=Uv&Vc zQLEVu0Ko{-VyE7UVrN}oG{v_itc`hPM}0w*82rSELxqM!;!p*>Y7s07T)vOv7>F8& zT~ZsqjN-DR0Q^eXMK^TXTwq7Z3e0s8YEBf9)HdPW6Zxn#jF{>m& zX*3|6skfa2+&v59$SAi-F-jNjGb+1`-c@MUXD>6%-YCup6dQO4IXiZMvp#4&o)`ix z`E`6PFR)PI=MX|Ml6+xs`UWQd0Ph|+jqL-ctmHTquZaZ6q8`Sgk5BDC4ujKkK`EUu7}EWJ5CN8Z3d%|*l*Qez2E3PtasVNe z-(m_M)_Vv+dl^KC4!pxf%B1U_rA&$wlPbP*`%BYFK(-%Zy^fBQ;0Ww!VKB8w%hC~K zEgaDPmxK?=FzTt`@l%qesG89}e30bx(F16q@ME`+9>CGj=#i0(eo{0e@{Ht)z_E>Y z&^=Ea_FC8S^hlT_3OdlGOafUFrdxrKO zBgGP!3dk7or5DEN#^*%@Gzes}k~0oq#s4CZnRBl&jWT=z{KK;XmGruY90G1yLzg~8 z6)~(1KRsCyNn7v2!7euJ0BO~0nXh7CkZG4GMcyC5qhkd8x| zWo=DGO=Vu9@g3q8hBY+x^vbs)8By0VDE1!Kdw}rNkU@S6)8uzpjPUSZp}!v;93QE( z|B8?QnuNPPzA&2Xv;ABlV9(F@u1I}nQeuxfYU#_r?NQg;ua2hvBEG!5r@b@_xiX;P zQIyH@?*=G4qbc`YS-ytZ1BBY(-I*agSKy_O)jBr;f}|#Y@>)9Eo$;Idpk%P+_UAnXFSZsxgEQc!%7D5FoSRp z>tpPbIFCclhzlL7gV+K2tL&$lhc;UF2C_Vg{#YjqI)Cb9 zHiM?{;l9brU^fp{b0Ta;U6f14$_f%~??BZ!$WP%%_KxY2 zk#?NsV7E^2ZNL3IUK%}S$UHbAU;V^VX-bwzi3=x|;x$UM3I+W0K*rHWkVVoKB(v{{ z1w_MjILRS1-T;Crq*t+LlJz5|Bu;WJ4UzvtAWaoGmh$p#4)n#k$R>qVwB>o!l1x3? zL~>H4zy}ELJRiGGYi%bN)2nY^&{0%`@+Ov5ⅇFnMeS=92{uTad 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 diff --git a/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc index d3cd8d11d1d48fc959fb51367cffeecd7b4cd013..14a4277394f26d54cd9443262cfd2cf5c5da39ce 100644 GIT binary patch delta 20 acmexp`q7m8G%qg~0}#}8KH13qObP%=p$6^% delta 20 acmexp`q7m8G%qg~0}z~b*|(AVnG^s?ZU)i- diff --git a/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-38.pyc deleted file mode 100644 index 87b4abee9f2b1ccf7273113a60afc548eba6971e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4660 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 diff --git a/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc index 1632955c00924eccdf736d4a23638d0ebf9f8d0c..056559f6082ca9a0f28f2290a0b6d4b462286a23 100644 GIT binary patch delta 20 acmaDS`%aeoG%qg~0}#}8KH13qm=6F&y#}cO delta 20 acmaDS`%aeoG%qg~0}z~b*|(AVF&_X$iUy4U diff --git a/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-38.pyc deleted file mode 100644 index 0d484521aad4945936d9dd852c704cc41a45b962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2445 zcmZuy&u<$y7A9v#KV!>^-6nRL7DUj(6*g76S+oU;?4p6=qCs0Lwd~DS5HJ`GDSPA* zM@w=n+qExE7g!YN9`?FjKtA@~Kcy#Ld&<41qQLHZ965D@j5M6bN503$kMDilU0kda zc)tBn4S%Z<@-ucWKUL^_1h4)Dnq9&Przz{Ioi*^=eKI()##H?+PWNHe2AObJ|-J!K}f{AT5cexXLT{h-mWa_mtOo{hOe- z3|jc{E8qKkfiHq)Wj@~EOVE4euG> z$xWp)1&Tymkp!$g@pN`*YM{v?^$$|P4JO$K&RCq{&mC_aex z1R9o=Fu9U3E_C_vptAw5UVw(v5ixY+{fj_Q-ifF)c($D(Gy8&#qfw^b87DGR>`*8T zF|usvhT>c)Aq{(UZ1zDLX%;bU6oh)4iS}OGxw`eI_6N5Z7=!S~cW)KSlhRjb?XS*S zzAXpwR>?C)w=zAyMRQvHq;4^(m}`VX==A43qj z|43zfDjGwid;PyA8X#g_lk+5Fci+8xxBuw=_D(l^ECzi*wh!oqQ;oeS9d z0O=iA-v}k6^iG<^?pXAlL8L`{a%`{f2@^U{LI+AXk9h?FMPx}yHK2vPRi&7QD$9(m zP9n1}qp?t!__3RYQ{f5VEyL>$lXn+-D=%XAyPw?|nb-@fpBn_aBfDzc{od8wv}1~-WTpWs3X4ViiXXMcIc zi{)4(IcBV6=olwK$3^U03jbbUdtnYzf$P=Pgk%(r#2}UIjd45LZ z`zP1tIyx(#16iRKc=wHfmYcIi;lFUT0G~CFjVr{uZ!{ickK$19Udb zQXo-woaHQ1f{7y$!@)pCK;0MT7(0|%ngPa&4bTLLx815MELHU?HV%CNr z8Mq;ya$D(i9go{U93=+0e4r6|pyWCP5*D*xM6`j#^84@y;8-J(5L%|o0OK_Pwi&25 zalu*+To@v8;Z-q?j&yP&o&y*SF1# zw_dlkVJ>3>&b0&31{k{oPqko%Et}&BoPu42V`x94-?li4#RRWK?UJ*%^8BzXDdnSs zH(oN*{{5hjG-)AMi825RX40T8#SX#fBK diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc index 50a538524a91127ee4a9032633632fec44e119d4..0a69cf12d6d186fcdaed91e88604de2fec441b5e 100644 GIT binary patch delta 20 acmZ3iw^)z+G%qg~0}#}8KH11EAr1gLas_h$ delta 20 acmZ3iw^)z+G%qg~0}z~b*|(8fLL2})KLu9+ diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 20a91a71b14ac2d2d7fede1782a6741e42f7a53c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4787 zcmcIoO>-2-8J?N_)JnVh03(D1ZYNG)2?!g9#8HR~5Q0z!p;*E=TdErMZnvZn^Remf zmAo!EiBnRk9CGDgDktA_$WKUB{=r;x;uoYUl~m<I=bJo}q# zhDkm<88d@&MchN$<-hGu9OuUCSCfrr0{=GMZ;c~r@R@Z*L zvg9xRa%u6?2g~=<{KG(-wEVbjf+Xf)nqTX-WtwksZR&11qKz_1GfBcXK-}?{9X`B-PJ}$Pq(EE)6qvVN>n#{DA*s&U0zX%Nm@y$ zh*CwYt5GV(sHmbyr?;f>h1}$w(D-tA33@TyaE2Q8Xfjw$bq2=AGrZi(D#W>1wDG;;L0voi+Pi~G5KVxq+V=s6BRFxyfwldz7K40X1# z5k&1onJ{S1N78V?4d2*ciNc%qvn^jqope-7YBctaGheANTz9&x2htVR4%#%MK5@F3 zt#r+H60?uyKm71VR~V0lo#eKBIu3@zE_VF@% zd=!lyHUk?YejrBQIgycr<579?06oq-^**NBQMu8G}75`;ic}q z$-yt)kb~Y+^=ewdA&vZ!Y&I?HPP+{w)oJ-t*xuVa_~9_kN+=DH4yyxNA6@GYs=LC!U7*GL83yw=~;H6Lw(@%{OBH@)EN?W7Y5 z9~Ak6t@{1G=doc;YUk8y?)z@V&AVk!UBq*X8iy|e{}yijLln}XNZ0V5I5H>mh!O?i z-lTfb*1emEY*3nfTDp_TUOIM2u}7B)pDfQf0}&y<_Mw+v(jZBt!B@nhUNkD}s^xwZuwT#ERYI`~Q+Iwn-n zp<^!6i0defv+t-mNT(ONk@v!Z5a&$(xwG#R;nL8#}wLrhFjar#4EaE9!}#O+C5$)D)e?woYL-h z+^@aY2oZIcBjIrF_k6S`*3c>P7uckQlEHJW3%5E-p>f!2dqQtjIE!Bz!p(+wWPw$i zmSmeMiL!aN6HGpc70__mj}um9jvbvDEXjPc6NDz4ZDRvIIu8xphCU-;u!whU+-mXG zHr&Wg2R+f-T*-r-K>mzmyw!q=l8lC-&ZMTEQ-rCyj3O=d;21*P8k04larC&0TNAcU zsqUo(+J;uA@Yo_9>R(hJm`@E4eFC04uPN@j{9=y+eiV2F3DQxxdOwF@x-DD5W*`NH zILI%p35m{P+jpS>bRb4C#9u6Faod7A#Vk_?W*4GJ0Q@uGWl={PO9sW3O&HAf0m1_d z8jyg28SFTeHHk39a)WqAE=zHgmPfqY?8Gf{V+y*&j}*rcR3VG| zp6)E;K457?1PXZbL%qbMi5{1qrNbSHjX>WZ!Uon=K&)Nz0q~M53j$DXf^0 zc=a!;Q^d7&kyH-T_1t?+;oaqb8zPL1@Tgyyr-?WSKJ@is zsepHGyahmCNqaoK^?rdZ_BKb{aCUg(djZ5NMl&7y3Vk6V*F^@bb_W?RIp1;DZot{f z(hB>@jgK>mdpqd!vB2o#)fz=V99v|qTK2bjfO9XNeHU}1>5s9tSt}O(6@A*@z=ipfB#mWpsoI%n#NB$Vj}_)b*<)T_6yWl zG~G4=j3NiCpy$SifB!~mZTMk!J=D~F0)FD*2?_*S%s8gk7+Mv<0p zW*P1$a2`kBLQ!_Jzd3KroAdH+&CBO3G#Nly`Hy_HHa$_OxD%CHPG%qg~0}#}8KH10}$qfKPE(Q7k delta 20 acmaDN_C$>PG%qg~0}z~b*|(89k{bX)`vu+r diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-38.pyc deleted file mode 100644 index 2a7b4f273f4a4dbdbaa68edfc86d6c140c29c843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2321 zcmb7FOK)366rP#;w4H~WwjrS}LyLq_otChvAXJ1nRcVtnij%fjuB;o+#JTl-WoDdU z>t>Zm6vPIJ6=KmWyG4i}Gg~Ai{z5l!<~k1-y5U;q_?&a+an5%hcVl!kkKpp{dLHa1 zwWv)U>e3v|(*hl#qjZdp(;_`bC+K;4fnKDO^c^}yr|G-&6207>t{2z{8=+TzA@nM} zc4*c|nZ;bNIa_2J(Gu9-qwj-#j9#yy@{Pa1KU6l9eV=)haWzU=E2gZuJx~jw*Evzj zSUJl~2(Qh`rZVQEo-(U`ODc287gAXpksn88(l0JE=}}L5mB)+=u-z*YWv+N3(}FW( zbgI3`3;otQ*xl8@lUp$lLFrG_x=9jq$!KNBtejdm3_ae{=M<_;w78$h!3F)PA-%E? zN0LRdvffLwOWlX8w-<9NU}ryfKMq+XfiSc-QjPbbAogfwV{J(vY|nS)cFePP1F^zF z&kyvw{Icgq5{PB*i)ZTD8fVFGu}Eb1<`)7_2!G3GT!%Hf#&)_sXQEOC#I$An)Uw)x zTQyYubEme&ZzSW97wDCRRUSWQEvenq`WWcDK83Sj75B2^PfaJsk3HHHalqu+jmiRN z0;+7zWS2)Rtn+{TXxRi>01`!DDSC;H&`V4)B}W9x#aMZbD+)IO3M+{Bpk5r#lE7=R zGUgXy$1B7y!Qbl_3!gSN1f;*g=$^+Lk0Ms({w`}&<5o9>)QAQ++vZ*v`cb>_*cV+d zDAi<_`f+LY_Uvq9b$)HV)_lS?8(xw$ShU;R19{2cYzSZK^tC#WLD5M3`sk^yxq zJTARk&F3PHW|E%DX`u;a#y-$t5nu@OE5IQLBNS~u3Gy2_IAE}V3?T74Fo`6VL^qHm z6hjLUY8;y1As_8yX;jg(v_baCzLAm?bsRpsQ<7#%4)DI28vNkC?gDW z4WN30qA3$evyNn4)}!I>-lk#5w9 zpnEHKHhtN*x^k;>N7*n&{OIGdtMb0^BO$%0#kfv8*ZEZTV8E#f7*~4IRkL}w$a&0_ z4W-5+sth4H*MXKzel6S7+J?J?vNn6rOUh*tY=y$jihaN?>viM8i+t&elaYB7jA9BH z!g*}sB6cw$dEjHfi+BY0Z$Je$WjrX?xgc(Nfw(*KuVdb*P92K&?L3gU0IUsF^lW4w zLp1?JKaw4@Ht534u~$TqncE8QzQVi=tB1VJ&jm1sboTFlsSneq+L)mJwYNHTwpzKJ z<9YfT-+ZfcS#=CM2RVgNGUOb5O)P-fPxwctUg^=nHIRG;*h8R!PlzB@fKhic@5?!^ zOK^}?-PUS+d2xNdI=?>Oy!X}OQni*fxN_P|HoYKF1_*Fn68KUTv@!8|dghlMepPRW zX(+mZ%tn~9LJ)mrK#a=T^@1)_&hh#IcoltjmhZw4P#RqEAuwc26-~%3ansHe3Lor%VD~|F7Sl=GCJ45Bq#q ANB{r; diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc index 466433c18ec83ffd8aa446e5a1e4740a3d1d9cfe..7ea07285cb15c874b61f92d9de55eeeeba0cfd4f 100644 GIT binary patch delta 22 ccmZ2EooVHCChpU`yj%=GP}linBlo;+08pj}PXGV_ delta 22 ccmZ2EooVHCChpU`yj%=GaMoqtM(%mt08n!WGXMYp diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-38.pyc deleted file mode 100644 index 527d94a2c87db4e26f554a177fe13fec2783586b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27072 zcmdUYd5|2}dEa!;xr@bOu~>k(NH&)Mfd#Px5+ng?2~q&D00jwLLO4ij2xzuAxI) z9LLAYn3;@|ag0W$qQ8xbDZjIotbFGxIr+|4^737%6y&>DDav=LQo^^{7-|kzhMOBI z8=51Pk>h+} zw###_v7@=Ova`9XvP*vF8@rniS00whLv#l~aJ$;zZWml}^Z_f+;Y z_g41G@1e#M&3%=9&Ha`A&8fzS?l$*P z*IG1pWGbJ)^Nd@#_JaI6=H~Cd=)QE%sC@F3j5F?Rc_-s+agW}~R*t({-5Fhwqq`S^Rp$c@)1M zmA9wx+j1Vm@5kIzsC^p0C!NRf`*HdGiep^JOzrsrX=83`V_=?nE!cSRbLUP~Pk!pu z$Ti4N_f3>=(+RduB>d7w* zrBwH-jdl%S8Er+g((jC5*s~Yis{6LDY=UV;HL8AFUjD!U!kE|emY8?V6G)cMskYy) zwHq}eH2oJZ_?MCEW-5l0shDoo%{j(SbRUD4x-BaubiB@dF1yYxTU~yw<<6@5P51I_ySBo5-epXD zN!iV2y|r}t^}4rWH>?Z(ic@b}ho3rp`0}|E=PzEUzTqxhwwISLyRDnmTX;TOU${)H zPe+t+dAYuPsEXOR3WR#78IsMR1x&TPyc*O20X;!PjaJAZO zJ1Y%7k5sES0QK-qX<4@)VO~rt-w;sy#?PfsZ$Wq-2=JSXO`J zO&JR_4@4{Apx#<+t0z#ZCP=^o|M*NI7ead-4{I4Uy9UX&1JdcbiDyGuYlf2ze;>ee z?r7$=(Hg;1-pPImJovVO8U-gW&zTz_R^Pa0t|9kZ=FevCkXIJ%|B9}_0&ik^mTfhJ z@mTei=i6YB&h%ov;d*8NZQtU0#|yu00ZO1K3w-6Z^Rtp)9v-&vck!wlwSY-AZQt_1 zJzY=Ac$RV-U@bRY3vKu)%Bfq9u%5PBJ!sv!iq7~(8Vh^*Fb#zSZ>e_MKWMq-rE=U# z*Mdko3kN*2Y-5>Of{GdI9A}6e-?Q3_;RyTTAce~^#IQQ&F{n0J<#hKPyFid0b=aO} zIo^ywvZk@(I(mHJkWaUjwcvWbRckkalKMiuQTJD^TXl@xTWyjxdj~Q2x@S3UfWFoC zEeHf_e%@a2h{OF;^Yd0)$pq%-Ip;D^)Nb5#`R1Utu;N?3s-r5$X`{17}7f z`{}avh9GQyUO<9Y0W1Pf#xg%&F0(lZ!ZuM3d_yjRk=f1m3V0krEU=b=fOsfMFiHY! ze*Oikz8L?oFc-JE?1Mz42Mb)!Z8>0$D8gQZUR~SKP&{0=J`El&UHZ2o3Tv$Dw~GAx zzF98+;79nIGSu_xkBazIYMX3R7a4jjxtHsx^T6Jt09uWWkX7- z%8C)O_6lkU1ITP0GscWzbHo@m)QiaN6KGjv9%pfKf=HlU%4l(QOn;lo8;hhp*vOy)92lxvGZBS_1>bk4urt<1(G_4LZd4`EhbyKx!w?HBy^1W&`HNk|L zk!!p7cm*WGMhX8E^ZI7N_s8+^-o$*OS;!o~x!yCo1ara7L0n@d??E^_1ucx-tW%WS z5;VpkXIOGe$k_m~KH_YI200Y|8g(||*RZ?69dUEuf-EuSY?c}uyKBXQ0_XIgR|jdRM* zA<41goTr?pCFij?=dkmPy&d^-aLml3GQEUJ|($FkgK72#`(1597WFaQu8y;S;_f?Q-eJNs==6F zK&x|@=WEWnck-2E$cd=wv(9;p`9<_0a}RsJ;9NxROFg-loY#^2$)4OdoHvns9Q99x zwLj-nkn?h?m$#hD$T^wHx#D~tIkO=ws?Iz{XFChXJLOcd?ww$as?#h?5>*GcrrBWz zL$M$otW6A3Td4tz|jeW9{0zVXhao3>~gy0xdF%-?<+3ZL} zBc3DvZ_SDJh^b_24NuL2kEFPfu-j2FH{#wJWHr>3GKJ2gy&x%fmz~N5o1>|aY5R~_ zUQi;lrji$oK*hTTb4Zjy4MFN((I21Jg`oZS@#+CUr0k2jq}a2q$P%;Ie<;`q&x;h> z_zwab7-?Je$ds_oojPY7dG2{@Vbxl4VXT5-L;Ts+q<0mHTKm={@B^iwy}(HTnb5sz zb}NSMf~(tvHU)_cX)k0WlDZ9f@3e2V8lVEUN&RA_-jHXG+^+c)+tU21>!(H=V!scp zvHBuF9ynu8mVaRr5gKN!(^LV85sO1*|I)Fj6r$8by(M%Lwvk5Qj5Wt5LM<+QgVv}N z5lqTm1{6pFNi!k&<eq(|=W65@)6A|gK~Dj(%FRgQHI4yMY%6@&a6 zS6#P3+u#--w4EWQ0mNzi$LIA)@h2Zling@`1-u1S8y)ncQnF{P6C~Fflu=g~v>bP_ z-l~(+B=8EsPF$tY7Q(!*17+7e=#-&1LZcOvRdF zR%hI|Ycunm`m(H^mu;s~UnbqmTX^A$UxteZH1A(kpzPF`!%5i60ePgUbIRK4-HKb*XbHfWL!tuB}W(%QdSevS)fZ}vWJF-g@$CNUq%^CG9#T` zgGolpsl6!JXChPUI>{DxBU#H_%lrzoEqojJHt}uZJNwN7cztf}zF~DtYyW*?3S?GN z_ATLeK@m6*S5t}38{&DO5f59LE2mohI=d6jYjk$>4LB;*H&T+WjC8zjq~FX^7R{+S zyn)7j4qxiCOa?g?%W11}~kux*lV zsyC|*KBz3Oy`s=+C`E0xP=|uAR!O3kt!h`Xu)Q)YBDx6Y=i~O8uHAwy7jn|5KMoWt z+{Oxk^)%gtm8M`J#kFSJG7k)<-KxW%2k)fjpL&|YkHyfQpAW62GL5CQDOtA8EXM5# z@0E20BXyzOsMjo-sxbP&W9$}0R@)MutU_Zkb{4RC0K~uLx~;gmI-C_P;DUg~`1_`p zEP1^e2a%CF5Ayltn1n_KP;#^yx@d@0OxhPprfJAE2VaY!9$7Q)8uwsi`S7w_%hJQr zn(%XYpTA?=HrGsb7|&RV;-@w{|KuXD5=p11FA;pMQ}^kE7I78f48ke~K%^;XywZ^i z{E=IOc$ZhhHp_my*`Pr8;L2Qv%TJRrR=6A5%EGTeFEqCYkqBuyHf;&$cwltTq@X-i z42HF0R)u3X*c|zRt5F4I0a8I0FBSQeUg5;RR8~F7j7xmKvCF;OD|UB8ja4II9|7%G zQP~?qk|`C891PTv+^~_$7L3k;KEAMSBVAY~msp=u`~qGPd1)T8&$A|DSWRL9YfjpW zH1BGArQw8HTm$?8i`~Yu?ebL3&!g!OtK~>7jFG=Wk1%S^&$It>)Dzt;S^^3Ug}yuo z0=Cg!hPoYkD8PgCPQk&rK}|P(&5>M46`J!vDR9V_^t2Aj0*scmG!Qq(I?(Lt|KcLY zWVle#S{E!_sA2T5g9Am4vcq`az_Ip&;OHZ&*H#*~0NHZeDHgq2EqmuseAAvj$q1m$`pdu}_{1)J`Muc7I^$KEz5OKUmesEmi#s9z_c{6sXp+lPK4Qb}%4|3s*h+)nzTwHR0a|3gA)(fy~AQ^7|1L}Rl3 zr!m=%b{-i(wyC0B6iZ6a;&YPqBUO=N%NwOQ@{PL?TK9~**?ZW{nlkN2v@(RXOgjt< zGtKL`P~#P%*JZ?RK;SSg8y!jLyCR*p0l*>6+`Kc{^H*v=fbHYAB9*kDi}w=etmLKMa0t*h3KgOG_zaUL;9G zf~XE}Jhh4edgd)ujweh+?r%4+ePo5JJHcjqamsRSZ#8nIr{LVlQI^0gpuP~4;QRMT zG7*rO+p8*!#eG(7uZr6L8HF@>i_{PR-p3vQUR`H>z|txi3|McstS0krR#sC^R#Vpg z*B@~;r9`OS5$Rt}KOP3O45dEUy_h5)SO#`1>>Ee;q4p@RsGx9_O^1k^#{PorD>qiB zn|2G42Tm7zo@>KB+8b-N{~tk}wjuHg(a-2<^gsL+h8^oJMy{OWFpEF#_z6 zjzS-En!IGyU<0uc?r?_KmBu}*2@@YoDsCr1g|%NcM&VFeS;9sr-9nU5ns6JdQwOe%K^C}=v`u@6-hmg=K_vanhkmOA{XaIIWlg2yd%{J@$Q-GcRG6Q3UPs7;9iNI24c zV>&RZp(8CQ!fV$6eGT%01Y433#?4dr)230Ov!{<#22|*RSr%YoaMVeBybhAi=vwA3 zG|YR(ZR3qhYg;bko7acc9s|T=WIiYEkT)}(5kGr3N2&P+=m}-=e&JftFD+(K);BV@ zO(WCU?GN1@c1)iR&JAnky_}JG11)?TkzaJH+%~^pzKP#0q|AYm^S##=7~coD&PGvg zdT&eQ66rkhucVN1UMy43qAzWrZ{#Y3O$(-(UjOuYlo_=)A9JL{xCWLO%+Oa-RA})s zCwQCd?2?!uQ&G~H)irqXCk?QCFlPe7HbtgdTqA0Gwn4+le zX^L_pirNioF?`d{3auQ7=?W|K%?woD+`Y_f=E`=u;O^${Wo~EJvg+BjtO@G7kh$@! zBP)3>7&W_VV060yOZ)Wrum5KlRy5r!HJPHH-L{%XmGIF@V%=tRT|Jb{F08Y;Og5ABuN=heXId~ctOnmTl(f~S@N7F1FWGvH<`^lfUo zP-;Ydz-9!UnOt|eVc36d<^My!TMTuzT9lGkv!qcuIA`IN()K2q@oQ9*L; z8UiDwP-@k!?PjfrmCxo((1Kh;1&jK?LVMmUu^IC0RKgA445Wz^pl4)1 zTY@IKbbuLby-|Gxc@i*D9H{#?z#S2q7PYeLNBe|-VRLR^nZ^Zh93%JVqPa zgf3482>&lNmp&AHZ2%op?%s?+T^uNKLM7-!QSt{{Cz}O#vJR`ujQ{r-M-go;Pxf;! z(nz}a$25-7YP6cF4E_0HY7qSaPTgfCf)!^dicR}%4@PF!h`M~gWRKJbpa(&Vz6%fV zJ;Q*O6bokcGbj;ktJ;neJ0M_&$f*_&;!1R!QZ&*YE)cpZ#<0in^40KI11+X5F-{d4Jco*~jtP&WuD}+~edd+vGjpe3 zOD!hx420VidS^LAStc>9A3N|lhx3GJ@05p>m#9C zn*$nfx-BD~iz7$GAZ^sSqfg^v8VUjY==F|lX2)Sy;YQJ75(xLvQ38)Mc$wa|j>i1| zC_YRzNqi9YgOCzzjK&YSQ}e%(LQnq&Pgl`C9A(jkXx#J_ie3j-g;x7Jvtqz-nM}SK zu9@lAb==PkoowB!C+g=QVH{Isxii*V7Yu!SbDWg4qGgptp42 z9Ak}^`~A@z@vR*)X6HaM&p8ICtv|PNkYfqhwt|{pKzm~B4w{ApEc|Lb^8A366YX7g zjW~}+W7BmxHDWqLa8}2J7QWLr??6a(#%RK>K?`TJ2plEHVbq?5g! z^YeELYm6x=u4V5bmvsx;2?EQ;F>hzTkd0g*Ycy+Wi=E`enmawBod*Y#OP9Sg+>0ex;G=3wcQk5;lX9K``7EUdGsXP|SP>2q3D zxArQF-WN0;b=Ol?TqUIxPB#;=Jnx`LGU^5s#pE0koQ$AAlLK8isE3U|#Sl&iQqA*w z<=du65>}T5gug+Wm_Ut8k#>5)FioEJ$laS6VJI7-XGlsw}0egEctx^Q%K2yGDKIC~kMlSR`p7AIqP&qALB2~iVb_v`VH z1g~LiWVk!}4Z^+Kh(Y9#=-;VX{dTkO=AsYUdcT_j-rhc198{wVepDQ(bBRph znV%lV8(q0Zmn#>146aum!3AgHCMcb6_l#NXZOP3A1$}O?uN!KJ9zPb6HG1m|9#~{l zf|J>SChi!o1D7{U@#~s$j%!ZMpfFaCS$-(BjtpF;;!HIMZ25g~J6)irJR(M^DR|#S@=-8~s7BMld98N^pKzyU zu4Um&&0Ndf&aGv|v-IW~PIW=1U8d~mOlWC^uo6lu<7<#pt?i(h5@_bD+D*G=7T~Za z)qFK`ZOHpN>wP7&XyD{(_MOt28B$JhuCpa}10=^%yXHn}klTB{CC46cSHt z3=$vkro4x*z*z1f9Q7?^{}JI&vLwmmJ}S}Zc$fi1a~f7!>AEW{%j+9I@x$|Z9#uvx zgPqATxQCchz$kmi?3oK3Up!Tq+HTIv(Mt6lBPM-g8$@eC1gi0z7(4Y)q|I(mr11z7+y`#n$}q zD0Bw031Kb}5_%h0yiAewb6m|kw1eeil)~%<;pdRG+Jy$m9LwVQdCgAelbt6qg31a2BENz+rnNV`Vo6M74?v;H9G9*1CHf=DpV7@oeRmRqFqVsbV>#45^%=x zM7SJnf}BkTo>EX|v?hoXC{XSM)|dn;Mw1UgEqm?jZOz5g5$}^Wm9banV&DinO1gz# zo<9fhlyqnZtebC>aKFdo0Fxd*zICA7_-~|NvX0CMRKh>$Jkcj_23G4LN>(SQuHoZ- z9mxlBYH&`--fRwArQpgCowDuqCU|p>VSW5oNAR3;a`y~%{)T?e><|V7Z{&nYlC5b?<6KD>^JWT|c}}Ag%8qRwqWehd6jd_UZ#@C#PKB@ zQZGmLGJuV3BHY=4w-+=V7?K5EW&3f1;tFoIJ)e=qSd<>jU+rm1Em8CrZg-&+`-N@{ zod{}j{U*3yqRn?k(%7C;H$kNLjmPgBZ{0Vpbj-J|+&5-mTz?YT>Nt}VNTy1?a;C#q zUt+?bsbGk*OAedKDRXSZihV|*p0uLY`12~0o&~v6D@4)As-VM2oBI)00NJ z_2%j*6s!qI7}MxH*|$>HZ?9{)X3;G5%Njo3^GF=yDoy+hB?)$)_i*?58chD{1@*{{ zQ7%vZ7T+trWl72ABw`l!z2f?sYD0cZ>s7R*BkJq*0|KY%oM+%m&zHNxA8lN+J!Z= z_f5^KO3V`wmz*NRdCC47=13@~t>0wD(wY@PxDMb`OSH|XRdN6c*a)NEv1;J#LikU7 zrAopK;{86zOj{22KKIn~@e1u{4rS}Cj+0-X5cSO+7%R4$xq1=j5jVI#yO40l^*I80 zoP*iDjT69)goWMW*tqD%Kf<|7gz4h$g5H5cJ8gmsfl_ z;*67Ca_I~a(GMG8-Pqs@kBVxBj``zi6jev?OAH0TdJztK^dd#2bD~}!#Rzp1%r+ig zeCkGXK;^n-3>qXr(_w%KBfW3z?~F}B0^+V0 zkyS6gXieTXCOgB)Pg(1oto4G$%RJ%*FFaK}ilrrdHeC98v6J2Qvd3LLi#Dc9ko;p@ z_q3Zb8%MC>cSFOTz^7y~UV6eDu;=-J#^yrDaKA@OTj8NoVHUlC7fN)BXK8&K+;W6V z8J53sEOP_P9Pbgd?j6T_t<;P#hKKG`yg%&l@Mx}cWp@~XTV;AB7ECbU|jueLiBGT2}6BC*EfKuMN>C>RX>Z8#}Z~b zEX)u%bmSD9R3a*@fi zOvu%>VJC4n65}C<6n=^?KF`Ev;xKWUFce9=;=vYzC)#`ucMkL+-D@nfg9%UZsV^}3 zGfck7XUfENr<-2$hYyLiF?1~-~S%n3>{n{YE2zQ>@GjG@dJe}}h)jUkF|Vn_Hc${WJ(JU?T(@zU7Pcy>HHY)r7^ zuxV_^XCjBU1$@SLmc~olO53(>8ynv-J~X~dafCH|y8a0Ab(GF#XY*p-9dkFcb$s)mE<65S!P(+W;ChyEXDe3vwqO&Lv{Ok4 z7M4E4XyTA8@@#IAQV&lHczCsWiojQG`uY9x-~;v068oZIVz<$Lyu=3UDSV}9K>Qj- zT$5n0H2gCrV2KaZr_Mt?BQ1wzz#M;#O+10*Lq&&l55Uv|kS2uwVj>Lmy#nHcc{Mc< z2^~y`TI=Hty31hd4U;s|+&g*|izaT>JS*KzDQ&hFlPklFUYZj5|B zO)#I0Az08`IcW&?7Vgq~NkoGPNx&w73%$;y4+A79cf$54$CCZC7%+MZ!&_Mp;h+sW zeZht{4P#K~;2+#tVO@gmN^!WnvcN<6P~T+#CB^9_)|`WbXFJrl;&$Smq3Jp}vyO4$ zt{4OmqbV%4ri}xh@xh-oU{M~rDvalPe@xH;(qRu~wrEYGtBKFW$SLXrylLbNDBp#j zEIKLRLvHBJB8e@NBk;J=&rOR2F_G7Dj`=REjWyGIp5APS_6a{l?!MlDWf9sHIk2XD z=jC3sQc+w7wc;G({W~}}La!Yl4~|vtOnrX;TPLO~PfdT~%3AagewVA$R}MsZQ+wb_ z&M!9XC9kvh%o5fM8D6w2nuZmE$F2PcAjgfD>K|jWfvMae4~3|9Rm=9_Gq23O23O(< zL^~(@qvugHGA46uFBr%EQhZNRRq)q~s%=6+n0D7n@)n4#-Dogljz}0dl*%6#@WhaC zKIb6Rw2_&{72Ye=j78l z;l756eGO>`6jQVhp}X^%SHfBZkhzV!4#jkFOfUodw*XP-@X&R*bo&4=>sQ>csU;dy zTfCIpa&ZoB5Sfcl?u9MJW9dd{+^$ftTGDsd#_eHf2Vn6W2(NtvH+awhqdQS}NL+7Y zC+r-;e6hZ?!aJ|vjDm$EIEKZoLwC7r8%os_c*5(65)zS^D~ZhBAIV_&kwFKMpbDp{ zdx@tZ4Ma9WPZYS@x+&o?baFpw?2joZT1V zanPF`j$7U%@-?}bIqk6y`|Mi@GJiSjh_KssYoFYL1s`I3rAO*6tgwylr4s`%1{+vKqcYX$+@DhV76B^fF&0H@Im=$_kjCuns z|2dyyWm%B@jdXv*RPO&73QZNY+xhocL2CUzpZ*1te~Bb8as84s^oPt617P=q$l?~e znLydhcAn-L?fPifN}t?Yhr;Hjw)DCKa3z-0uHojbzr)e|112L(hM7p{(?8_XKVl*l zH?;s!{AIRk7k~Z~6Oz3Om?SD#0EJ8oP#h-^3fl zLdn0v|5B`1!>8+ym^_Zpdbi%@uN4yW6aR;XJmh6TeFinO3u7;yx(I$frMt^`8n}%& zj1&LijdI`O^zecH-WkIU3AiXPc}WH8X%65p6Oy5Z?#p-zieU>uv7&FJQ~#C)2Emb& z_!V|U4+ZYjHDy}sLx^oera5lOg)RakTg>uG&Ly1kFsQ{82b^eQl!8sCxo<4jj>#*T>cTteVaXT9wn>?#hgA|^6hbaJd#d=OSn|>aEK72*$|^} zv0N*qFgg@sbi=E1Oa=Bso!SO=G!9A z(!wayp*g?HeD)X={MBV<%V>xw?Wq)pq%dIdUeYnAx%DugHZU1svXRLsl3)@y5tI>F z-E!KhtTkeqkg1&#PduCzURf}pApKzSza{Z>Z0u$9{hG?QDEVp|Tad$tk9HSf{A$C)l?YS{dG1=yL2KtT zw|0Y_-Q{J_WgU#U}Fde>zcbICfsU4Kg;o1~&mj7M;9D>j3tQ^nQ#C?MW_b_>p ziFm6|^67V&h@>Ph5{gYNX5rzQeIElr@&CMdiK5fv!sqqw>3_$@Mi6y{53a8tGbZxf s8RG8|a|FA?qh=1@qvmjSY|}7zihnrr$XH?QCo}x_`O!;b#j(==1=aUL82|tP diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc index ebee8486da258bcd797f2c46a8726c94fffe8e5a..7ccc8c76b5b11bc9247324ea3bd2fd3fe9b09c55 100644 GIT binary patch delta 20 acmca!eZ89dG%qg~0}#}8KH129#uflij0aBu delta 20 acmca!eZ89dG%qg~0}z~b*|(AVj4c39SqC!! diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-38.pyc deleted file mode 100644 index 56da5e509747c26eb53ced6cb100ecb03f743fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10260 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 diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index f4e8afcfc42ce8948d06e5cc640ca0db2622c1aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmYjMJ5B>J5MA$P1A^oZDQHr_qLc_B5TQdPA_SzBCCeL|)hPbS_9o&A^c;eo)1;;1 z3RH|!G19zwZ@!x4aCnrVy?^=FHOB8G{#%aX8a6?)CKZF^xC}c ziE@#R`#%I*$7DB{LWmxkE`l|vkMGO|yfs>y=+j4Tfy`ak=eV|foxu-KDrye$vPVK5o%LAQz+j_1wn3g_6=(rj!Vkf|k zCg+n0o!>k@E!c}}D0hzHIkrW94-E|v<*DPVHE(604qU~+MClDzm6nkU9(e`YSsxWN b6~ih-#?IW^?(kAu(J6VA-VZ&50U6|fA#G!D diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc index c1b66f69cbb628550473f2328e7ff5a880aa2eb6..cd8bfb3b2a1604d720022fbbd48dd35292d7ca7b 100644 GIT binary patch delta 20 acmZ1{wN8rrG%qg~0}#}8KH12v%nJZIPz7QD delta 20 acmZ1{wN8rrG%qg~0}z~b*|(8fnHK;$9R)@J diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-38.pyc deleted file mode 100644 index a963fd3ae2e076567dc7bd251dca42d5cdc437ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2799 zcmb7G%WfP+6z%Hnd3a(IlLQFw5)veX!XyM%2qE&|C5VX#0ckW+yQZsbx6|F#RMprS z%WN z@FxwHpBRJp@v{{g8Az4~Lxy*lheb4uig*|otzoNZ58EvGD3FnizYk=rI!Dp4i*ZY~ zF>b3C#w&{L_I6LHSgkx8$j*aMcIC?V@o;rEzb1Q_J0({!_k?73g8tfH@EUCN<2t%l zPV4UHmCJM~^16H5Xs1)1*KsPWOKIEkvk3bNW|a?l7^-MD-fgM2WHNjZ`B39w2jkWQ zCfl+Dw_WeHTc5fvb)VRcDwH!)=z&RjCQBm8K513$Zt=8zo* zNpKjV1z>lAW43V|8ekllE*dgwRlfCb<~T5GSor(r8}E$nT4n4=$$eo)pO@;U$@bLf zrcNh?DxDqS^xH-hMOJQ)zRK)GVeGQjk5F+1<&tf;hcc{aYBq`Iht8&tqP!OqMjNgFX* z!Z%=Tc5rS9sKI>8F*7SzPYIX#L;V(h9-pVtk-%p+_!U&bo8cY()vFG&h5 zCpq<3ljIxVI9pj+U{H7Gk<_aeVowpu}a0nD!u?=Fvoyn8tWQn zHaE!{STZ2Do10ve(p%cxJjkl8ELXFIOSHoG6)%;NT)=Np=#q~SFh>B~O)JHBKtszf z-Yo$wml{q=?Yy~tZSLXgJm)qmQw6_|n&*hyX$|Z9-khEoo_kVr3z=5^CwQ+ol&_tc<~xgx16`GGOom@`=WH|1mE>a$pA_#Pgt z%{efjmH*|}yg&{f=cQc@%L)}E4=5D|7aXFr$nYqFE+X*@ z(Ecz3|J;sh=#QjRp9=b1%NOj!aw9VXb!ao4(dOf8H$Hu*QHN1^hD?K?CxrnM6^gWQ zM9_qkL5gsV3pL$cVIaX{h^^hKT4m3s+nq zlF2yF(gD8?HlxNPwp2^iC=Ql%4jBRxn4#Ti4lP{r(ZM+wED0g6DlYbPCi#xog9ym8 zQTqm0h!%Z9rGitpJWLyXR(G~> z^#H3rGp`_pOWg3a{Yfn2^4Zc!u2Vt9mv%L*Uoo$u-=AHqCvF|O2^REt4FeZA+&f3% zZul*8(IIp3QD|Rrt%fu|h2OD5`r{ED{Qi*w)+dPqK2!PRB(X(hp`_Eqa?UAdzLbbP zk>z5Xqn?)h_SEel*KZBpyuwlYa)4t7{A(o8C=ZJh2FE41)qRmV07`|WsZ6(~)pSuD z`Mpx_dte(p4_?g5J&_|_i((Dknkm0PkzD|`{%=Ry(2ZmW7_Y{qcgonQS2rSjFD diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc index 88df5350c22a013bbc6c7c38fd7e8d5e1edebfed..cde64547884fab3553df5d92e8781b563bc90802 100644 GIT binary patch delta 20 acmbQ0IV+RGffV(F5+#j(SQ2arlC@51YgchuwzON`UDJvr%iakcXozW& z1I++X&rlLk;3hG(vDb+!wdK>++7+rQ7ga7fY*nr~<&a}?NNO%Qe6&%nzYc;c$iG+*;YsJVjw z>u!Pn8?M3sP1ofAmTTd^9u_0pwWBF_Dk{09Xxg2Q%5FKDac826TZs<12L#Pm2&>Vo zJIi$=oQn>+2cvm+p5M*zP;}Tm!gVV=8ZEdB(J}WJzZb*f(W1K;op4V?C*70LDfd+5 zxDNN(;pym%dxq;%;o0b%dyea+@TKUyd!Fml;f3g;doilHHN2PonegT475A0sl6y&L zKi2$;f8d$sACQIC5Wr=1!% zgJzQ2ZzocDE1?|Jl8#D??|9vA&|XXJce_ODg{gg4KH8A&rc8~d7bi85PTxUGpkyT5 zNli~HOC1$?VbGKQk{8Kzw&}Gy?V!m`jW(Jv#_W13mY^=b-F}Q7|NV6-!?gNdJKpGa zJ1UV`OU+EHZ+fx38N`VSRyLU53bov7Cu;L{Cuk?>!O`CPQpL0=`|b8>=eC!urzX#h zk5<|_XN@j8UWl|5d#kb`pC-yf|I9rZb#G!NO{{$r%uO?wjVH|8Q6)V;t2ZKf+^XNGIbDOqYw%d#xP4y`W?zv$b~jBVl0$cj8b^b49l^@Z-2{AtivK{+eS zXe*;_#;>4l&evfD2hv#<$*9=8FR_XnZRf#*AR_sP!Ad<}Wqp+J!2^c`;jF4oxUWF{u^noZeFV$k=3E{U>EL=PTZ;^_kPfSHgD%OlM@LF^=* zj&mmTdYfmQ)sAwyLH9!Jw59Z8=i(FTz}PM%&O<4?PO>f?H|YKd^YVP_UfU0))9K1K z52b#XEcES!!KzGx2%W1ujC7Zqo6}io!6IsdMc!Kn6BBGnZ%wLjlLZ3~cjwI|==ix+ zIWX7`kuXbHjKjkGd&Lo_ydr6&XmuiL7Bq7D=OaR+%gq$N%jKJ$<_2y1c=@*KtSK*w;4GH!2l0j%I(L%| zKj=8uu3o#geEY_odv_b}%avs~lx5j|+<1ce&w`cZI7sB>uGf4B8OF;{=amLTBo%zk zm0WyRhBkSHw^dy4Zl-nvghA41Tm_3U`F+i_MDN%h)2`=)H6zt~tEoXgD7AC(snZzQ z5oh`zq9FYCY3wv3OpRpAR?e`bFocEoe-rnW7%%#Q_Hu~(nj zeUn?PMBgd&3!iAu^{rxG>s$TeHtjxhsYwna|B;gDgWtmwe;-9(`|#?P=!+fg6YaMM zIbZ6}h0^;X5j!Y%IEX#heYl9{VpYGd3GETw1SU4V7FX19%<$E>_$^_zr8x0a5`U_El!w4FmGqdi|=ZVKf|}&GrSGW%aA`XicZCugSK2+EuT= zf!COPn4#;U`c3cEy%Hzq(8%}nb&_-#zg{2CFeU(!GR=07rd>o4kO=0N^)0cb_jSk~ zw!5u=u0JyFX7*SU>KN#11@$WarS|GZ7}Dy}qLN$z!A10pa9_IaBgQp5QTO#*=wbFP z-TGG7de?q$_J>o{47I>tCQAy*SJdfqS5P3d7Mfw4eV@dsUM5P>ppciW$Ge-0xvS~w z8WAzOEa&p5?8qMCITTv4B1*dTjb)Z}{Ts_Di{8oa=KF=78uZ1?yvfS)AJxgc*)Sck=Beb7mlik%m(0Y}=zGL_h!d3xP zKLM2qs%HXwUTD2bn8|7tw@hE}o7k9zzJb!{3zX)U#Vsqb`xXi6eeDl0k>%p}vf1(BFP+@Yaa8K*KX7^mLW0vX9a?E^isd^ZbNi=q zlcz{6ou#yF-V zjZJE4ijfbI-oeoLFbYlRVqR2)jsF!<#s8z?nCKnftGD6U+Cg&Jq_;*REj1cZ$KMF4 zUT!oVAzlo6ij9WfX*L>)e8R}0&6Q0AMRftK>2x#n;uvCE@AzqP;Ahg}AlR$dY2**7 zAfKX4D&C}m%tO6H#jYK4jdq?oiGto@axS(o%4J~){eR20Uci6)`=83e!`K_>ZsHmH z5w~yPiPz!Wb4&*`ZnR7ZL{^iQGXBqΝrOTVehOIY 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 C&4Mog diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc index 124ad523c3a2a6ae4061da0cf11f9aa91d1fe523..f86c95ef4bf0d40baa34eceb9284a33087e26fd3 100644 GIT binary patch delta 20 acmcZ_el?u?G%qg~0}#}8KH129N*e%58V2tG delta 20 acmcZ_el?u?G%qg~0}z~b*|(AVlr{iK=LXXN diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-38.pyc deleted file mode 100644 index 9dcb1ba3de66edd869624b2191bbb16c365ccbd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7625 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 diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc index c05a19888f3bdde08ab4bd3fd9fe44eb19b5e891..64dc636b58f16da34c2d73a08bc7d2b852933aab 100644 GIT binary patch delta 20 acmdnYw3&(fG%qg~0}#}8KH12v!3Y31tOYdy delta 20 acmdnYw3&(fG%qg~0}z~b*|(8fgAo8Xc?B5& diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index c2663300cd876617a1786d16f317b51b44b44275..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmYjMF-`+95cH)Xij+UNO+gM_g%AQFQX+^r0uoxua?Z=K;?A~gUn2Mc{Dhv@q~!^8 zRBT9!j5NDDQ;cTk!{IZ-2gfC#hT>Y&?}Yz_AmJKe}Kb%vZQj*0?iliRyeJ>UYg_keb(R(xO40wN_m m-1Uv%$>)k}!eDiiZwu#&9ZE`#{p-4a%4XN#+2;EnruYNng&z(^u#Nh+Fp6n(GsE0(g(_sgIP(~y!ch-5N2Au>?mv7bgV+$Bl$ z2Sk&Ex}X)>C~(;QqTYx5<*(G?=fWtt)l~3KeO>%m)H&{69l>H@cEC|2rIMtcq^U1G z=}Wffr%VNKg))%gOZJ>hsElOqWRONGkZUig?8^%$EbT2;1384%+H=B4+6R0icje34 zSW%Y37EQe+YFS8O)zK$As@2M<+L~CzZDYYJL>XVtms_sKlSaqIO7z&VT2#tK2TB__ z&9M@4-AsxkA9tSh> zn85U4`V-%VlK#|H1~T%t6VLhk>d=j(niO?W@A148#w1Y(!wtJi@CC*dRDqecO1mEC z5M?>nNPfZ`Gpd}tmcl7@YkYn#=cnY)7h5;8hX&Hllzbv|_D!ws>Eb|T_nLfKA&c1q z-Rx;mRRAdat}s&|bJtE~(Zrh{Z*FD}?(TfM%fDBTGSRk~st@=R@b4FoGE-RfQ7iI& zv8PPd7VQQAv`W{a+^8C3*8H}VqBl%F2c>#X$JKB$uTjw5rUnu7lL>yVgEy` zeha>!FP)jU!NZbhkR#{sz{+%eOWFMT>;F@lhrC%X*AQ-eMr(XyA(!~+vshTLiAE|k z0(u>7#JRBmcKsZ%>*rDg{C5$_1xyuth;!HH9I87l(I0UB0|;jE20kF093F!NP1#rj zt`7%j?47Rs`d##{f^oxzOmkJ1K;tWBFX9%Yx6?T`XUA-hGOzDl?T@1F`F7Gv*Fke* zXqZ|ydOQ~*h(#!MXRkjZ1Nk=i(gWPoRV5-v9UesVz#g*rl=eyDzRl?7+?y TaBI%RZB(Pd-^sum(1HICy@z?x diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc index d71788ca78afe416484bc5efd75e2a00f4672d8d..0a333dcb2dd8f96fc6ffe9daa58aa35d39b340ee 100644 GIT binary patch delta 20 acmaD6{vw?FG%qg~0}#}8KH129R~rCL5(g*% delta 20 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 B9!>xN diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc index fcef342acac8f0a8200d79b9c5730b5f8f71951c..fecf86cad6eaddab733273b5fa0441d29a8027fc 100644 GIT binary patch delta 20 acmZ3ZxJHrtG%qg~0}#}8KH12+igsQCtF&@eG*mJBUZJcb@ zFW3|*UibrkupjfzkD=z3C;mbT3c58}A0%=~R<~L`t?sY8_vZL`lfd}(ceVOQgOERw zI5`|3uE5lnVG%^olw`C+GuC05({U*BSn6h8$FqAU^|M;1M#*PHxWd~b!rNt?y6~4t zSo;ffkkBa`*Hkf(`LZ-+{d&(NMINQ417t|csW{4uJc*+;8AzT-nFMBQvBCTn7BpNf_k2dX8nv2K9?6&~R2f1$QPv z1~p8Jr-7OhE_mRXa{OAMvdAnJxlu(r_~dh$_M{3{3l+cvqqQVoLjpu}u&RnI*j`WK z^&kp*QM?(g$pG9FtjHkAwTaSHigww^3%-)%k-A%s6?uC15wR3HstyiO5LQz9N}9gP zV~po$;GV%;gsCsUG6c_U*42a|yJUwBnWfHIiVf+IaNxlT{AKch!Usx6OLP1cV7OYQ ztH+!NL`{I=hrcZ@bZ=^@bXSV)NOiC0@~TR1%kI@8?q@PLx_d(vYbwez@Id!gqWe)A zEStVaieUcY{CxMu$KQOr%)gT>-Kf{=%KSFphW*#cN>?XF&OUOF?)H-298Yp16@Y3k zD}+q-T;)+7S6*-T?v`~9LW$vg93S6;g?M%9Q<%)BgPBudYLA3NR(ge5mr7yQ#OS=y zz`Y9-ovIgLG2}kEPdDf;)02iRv{3t7Mn%!b#{Z zU5hEG7!B0z!F&g%ei@b_`TqGG3SXc@(2rlj|C{U^|Px#OpZfyohC3}kVSK!_wt6l1YH{E|9hgBsSx}|qJ zO8c_(O{5@VRfsIc5Kp6l?>Kr37P}!ifcG3yb=FY9cIi)$qz8bfL%QP#cj#>T>c=5F za1H?%LwfYz749Jgjw4_mct{EF8S*pxkO&`c)zmpm@vU=1z~uMyJMPdG{w7m{k&Z24 z{2>%RIAI61VWo{8fE?=G5_mhTEj^^OgAZnB^J2EDPr+O;JBuZ1L>IRB2TE@B6D4)< zb^y<}^`QNbUU=v&06-T0!VnJp1!xO$A*`28sC>%k?Zm7rEd8aYdud`yFHU8o08~Ph zUXlxWN1?OInn-jUDG_=Kv8^zHtbSO{xUM%llv(}a?Ne@!~gsse%(vz)=Jr&0Q3rI4BvM@`Sd?D6V?D8RW0Q?J4z zAl~b2$Cl*{0&zYMkpLe0Kfi*-dV>M?UCRZ80QW6{Xh+#EPsmPNF3SFJENh%0pvhLE z(tp%jd|mWaEY)l9_0Y9lMPbvh8BsQ%SwTyOb^vY1)|QKKhHXdpQ}ciKJ_Q)(5Zhu~ z3SQ-z{s`ptG%UpWt_2<)%_beZblQ_oxPPi*K9==Wroj8HXAbQT7n}9fdmJ?fA3jcQ z^&*lM567UG0w7tVs}7q;{S`c-qp(?m(qk3eT$ZaJ6i54jrlwK;vbL z^DV$yRc6W>=c0(AmSFKy7@85*upY7%#Tv9cj!Q@Sffk*aej5g@+>>0y#MlV-gT z)w8gFsP}MrAD8229lcG}-~fLuXtb*i6}Ij|&G?4_&H?Fvx5g(M6CR`IXQo?Lb}4K? zvAWxXZmq2PBNIC>Knrg3+cFo0YFB+3q}qLxq`Jz;XRXAjNw*=pq%8#6=CjrRBqPiE SrOI2EF}xacf10&e%lQxTpPL&1 diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc index c9132fd8d94e4e0935bbf05f45b5a2e4dd1562c2..301ec63984d3c53812b404660b4a8e3322eb7877 100644 GIT binary patch delta 20 acmX@kdz_d1G%qg~0}#}8KH12BtgG(wnTY zw=5ck4vn`7?%HN5uJztBrNBd;6xPy!r$Gt`hX-#2q5g0)PZAd}CCxVIKiiqGXE0|;=6p@JEvmyXI5J`_iK~G3N{1fuXagBC&MK_N9 z0f2-%1u2-IMSwSN?wdzNC?gr+jUR${WJbkMjIPom?xVLpFp-M!Ragw(k&qM#yte1l zX;r_f=JIJPg@>@Q#D=m#rI9IK5ocC4v7&>UwsgHDJtn>-ERyWES6x@%oEk5fE*OfanD3*!Q zU^98(Lo1uv=k`8PKjge_Dr-6aME?5q@q_ZEmByA*ysk|7td&oUI+x{>u3jxsjdE(b zxv7>*)y~VGlwDO#cH&k-b=lF^M@QxK;qw1H8DW*)<~x4}5Fpx40rA^?3DFi(&3(2U{4?1AwEAaDT#)RUAma|cfj(0uW)*++zz zA+Y^(bp7RjE8Eo}AEJtFwUnIu5$DkE3g(Xcl=EMJ!JCr-hY_qH44T-cbD)V2tTR0w z{d=JAMy*;l4NS!6lI~(jeO=p*Epn02knOR9)L?Xd=gc{6A511VVTYZWPu2(c2Uy_T zoptS5XPp#ykkfu*)(6`RC#{38wrO9XfB%1SBcDR|Fr~Vm_GH%3rI$^ eQ-9wH*6)*VHuQW;!RrSg3HJ6=$|xi3?|%T(I#5Oc diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc index 7f992f08371d66cc064c54fd1cbb1e3f8a11945a..55dfcbd381c41a5b5fb2e9399e882b54adfde299 100644 GIT binary patch delta 20 acmeAa>J;KW&CAQh00ecNPd0M@;{X6PV+Gy- delta 20 acmeAa>J;KW&CAQh00d`U_HE?;#{mE}Fa^Q@ diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-38.pyc deleted file mode 100644 index 467db71e12f46b7ac79414e53577a8c68f73c7e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1796 zcmZ`(&1)n@6tAl8>FN23Yc{LwiZBSW4B}+XO$lMcMnsV@Bw3ZFrRa3kjGgqyq^c${ zVfNxIxOfx186i3D-M^-;p1gVRo>?al3+nZ&>Q}FR@AuxTr=3od!1(buHT)2? z-*K@#99TStsXqfDh@dISXh1U-u*?Y@ihC?|vszFqbtm<*dQdNQH}$hd(4gcKB5J~W zPJ}mOK~vQCNzeZS{E?nxo$dVGx;sg1tiLZ$CNhs@kJ`IJ4x>qGxXe!zRpgn>4Q#hK zKb1-+Mb0@aS3k|QiPCfr4kk*XQH*| z?3x${G{_yu+LT^-*W{=!*rof7;f^{0>8k_NFiq5E6fB_*Hp!F$`|jZ4-k|7;;w(># zNI($7qB|^9x98fR{Y;ujL?*I#UTt#uol%kQwbbi?-L7nF z$QPE($4V8-)=dG9z>RxY6sheLDj6j}F;A2H*mfph%=KhEP80M$k_N1`v7N6qVqN&?QFR9##1!4k2kMwcOsDRG5Y&(#$gpZe{{=asJ7h);n_&~WkdE5G(hqL< zz*0gVcVX%`K#a(ge6#Y5z93gn7T5GAb^<5M5COwGU;(AY`j1KuUQ*S9oh1UAo5)vO zWaF*((4`B)ql{eiZwYkHPk%El;waTypeznUebndAlWjq#EZ!pkJj8+B zp)efvE(&buO2ZVWH$gmvsaHS{#wepr>i*+4+`ld!{6D-wuZ{heN15c@HaUk@ousI@ zIX{8!ul^_uRn<|Tf7^=FNNXsnZwsL?Mb^09#E5#Q*>R delta 22 ccmdmensN7OM()$Ryj%=GaMoqtM(z!%09zUdsQ>@~ diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-38.pyc deleted file mode 100644 index d9a8ef176c6aefb85dc77478d7e88273739e253b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16982 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 diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc index 4ecbd7bd27b90386fdd26d6df561add3c46c7c69..fabe2351a42012750b4e3c4a61be807e1568d989 100644 GIT binary patch delta 20 acmaFD_k@r8G%qg~0}#}8KH10}$qoQP3I*l> delta 20 acmaFD_k@r8G%qg~0}z~b*|(89k{tj**9FP| diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-38.pyc deleted file mode 100644 index e5705bdb1fef0714c478de1a0a4417a3594b4767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1734 zcmZ`(Pmdcl6rcZ_4M}@x5j`MTMM4D8ELw>Js|vN+ZMdK`>QX92BU#S)C2MxZp4y%b zslth#IPn4a0^IpDbLGTGpj>#KNp=&l^~i7h?>#^Nen0zVzu)z+{Q9S!n*-1L%XM~3 zh@B@`&F5&i$Nk(Z{HgD|c8~`}I1PR8TaSl4dh7A%mtY$4_}m*Lf8%;@;Mbk!r4>rD z9NYbo(gm}pN?NV*%&pih9qc^8YMcRY>T_=zaDN)|z{Te=PZlx8??H@T0tXMg<{v-s zc!wYUp71XJ;B7qZ@D66sukW2h4w>71qG1jiWCrF9?-DG}WX4KU<;;R1_5w)8Bo`dJ z#B9AtdE-XrN)xV@GFOZXxoCo*3lY*-mghJ`<{}3(Y-Z{nj;SSGF?k8RzTfuHQjDo_ z17^U~cQ7d8L9-T+y5DX{XF@W)sy`G9sWeaxuPdR!&~jxjlpKu*iH;E>oj8N6dD=mz z57E?#23u*Fxw&m|?Evd3Rx?Dij=6u?(LEmg9IySgN4<4`)?bHcgLQ;9T*qi5?jw{T zTcZ1^1_uu#x4}x(>_^0U*lmvQ5I!lHW(C>B;e@=p00djNP?3UZM29d#TAavdLN;U= zkOr4t=I!YQsuP#!fc-fS-`3WKWWtQxN2O ztRxJ{OVjSKVQ4QUrXdhcF7hft0U49c{8%S07)m}2KV-EmtgXlDoSR>EZ^tu;fsxcA59toKXj>82oSQ}o|BxxoFOK76%`q=+`vs9 z)aYyWdVvQY2HG6!?JFcr(mxvjWRJG(K!czK?yOnp)c=tMf6eNE8z4`dIdp6v94WiK)UxGsy zN3sGat-F-sc2(}$JxX8W2{tnalya5f@FArpSJq%NnkkiQ_blkp8J9tW)sE@Au?UTO zLCmLUFvBG9H{ZX}UC(d6cR}FBlD7WS_>2c}o!C{0csASApCB~DYiNcoG{gNX+2-Q5 a+)2YRs9i2~=W%<&Z+z?-x2zZR!v6s5SLm1k diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc index 4f3942a3d3ce462685821f0f0b89682fc02a276d..7f7ddde54c2280dc90d2642561fb5c6af664732d 100644 GIT binary patch delta 20 acmZoxZ&v3%&CAQh00ecNPd0K_2m=5%as`0^ delta 20 acmZoxZ&v3%&CAQh00d`U_HE>@5C#A?KLup~ diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/target_python.cpython-38.pyc deleted file mode 100644 index 62e778d03871691a7e88dafdcfdbe6ab87b4b54a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3472 zcmcImO>f-B8RiVRT<&TmJBjVaX&cO;XuPOGr%HPfTq9|mwgCcJh!qFeZop7GvnyI$ zl9}O3Sz&dOdnwTVfuukR^wN8O4X-`sH=}i7Bh#VNoV|7N=F? zU{a*2%PRLE9(8%OIZ|b0CPk6!QpxJ(iP8o$qa+*VQJF_sF7p!8Z)Le2$7yn=qSYw_ z`p@ds#K${$%o&7odQ3V!E?Li&T)NVe4YE}Rqh`;Ouc(IdRr9uU+d(T(E!iIO`PZ@^ zC*d@@4dF$`(9uqv{;Q8k^gnmPdJZ z_C;IZdOsV)g_)#rsf;L(lqhswC|xG_%!eWt^=y%3rP75~kRs2NNHE)KOR|wwG|V+- z7xCaY9$`2$Wt^tlLguGgn#XcmsB#e6nboaml$@w6DyD0mtGxIyG1XQwMm)wUD`SdK z)hb{dw2w{IUaqLFE!#FU)kbuJXvnCHM`kbVHuNU^t&wkz-XPI|sC?{TqO(B*AD5Sp z1_kLoJZ1fjH+`P`WdI!Oju9uf4KS`ZP~^GFiB$kwa@*|u6YB=yuO*@*ACj$>Uyk=QL_9goFgx4Yt9ks?(o45rlZGa{nJ z9=sol4~Dj}EsTow;0VEjhZd?x-8>Q$)VLI}R$`IU;&5t1J(y?>Hw!a0r5cCgA>yx3 z6Qj1pX_BUE>V`=sujm}anK)G9aFV1jGOM%aGFF&tjFL!%P#nNMwWe)h9Q_At(hT4&j+OV{%Zj?F|qFMm-|^^=d0;YMhM z95-+Z+)ck+vwB_%^J>Qe%1WE0qRhp_C~-%HqfmSXhlZ<|@WxVTQr{K_*b9ex*zXqx&@NB zPJjR1j}9J1pQyurToiqkokXW-f0!KhO;V~iFKeY=B*k4o9S|6_b$6Ugm72RX2m?w9 z(-Fifh%hH9qlm0Cw;-HbJ`dP+9`IMW&*ry#c5{^t!pl`%reDI60i%WUi=0e=X#ui_ zhGge}u_t&RxAe~>|C$k#J$0z>fpftCgG>VSp70@;{)|C3@#W$j;O!0h$OC}3u&!;_ z@p=_lYUAv|B2#~7%gf@5C5&y6<=LAAfFdqyXsCgYpaQtLQu%xO71+793rZ2%iJ^!5 zGIKuNI%lObV;AhP!<^5#bYKD7gAZUuVsHTF@8RUYl=Y5)Tw2O9VUQ;ZFs-*zcvfEUggXCB?( z_`c7tfXn5|uD6G)yG0vyS^e>*b8H diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc index de3654f08e7b18b1df8b73fe6798e1da1b64c39f..44ffe3dabbf9c94503813b3dc398a9889d4ed735 100644 GIT binary patch delta 20 acmdn1yH}U{G%qg~0}#}8KH12}N|b9CMNyOjN938AbIzR0cMd;a zSZFd_zx%Ts99d-Suk=#BY`lDkTm1?{z`88pffeyC$G;s}BfD#loUSvfbSs?ZoTxgg zb!+Ci64ghIZiBO5vY;B&p0J>HV0D{;wZYo;@o#R5R0<{HOu4?hyCp>A4#G&dejK=| zOm@ORV5Z*}O1W9$W?RDD@nx87D>wBeb|nKMHe-Jz@Ze|emcJw1k?`X%9(J04gU0N7 z+t$vNu%GGrwMz;0~$q2{a&vecD{U9K3vpTYZf| zFc^S!t$=rJ;XJDZmT>M@pIhCUs0Vi7d}9Tbp!&q=Hbhg@PvhX<@Sq+vKsf|T>ogM! zK@+PE1uf7PC$z(&B^CyjnO*qC4i1bYqQ9u_NSq@x1=!y`EaR``)GY3Xy0kr<}diZa3Y@wY+R*H@CwmSnma2-dnj# z^Op=YeLUM$@bNdpS2(AUpUp^9&b`j=RNDuDU8kwk_kn z1p^lsg&$d-{?!W%PuYF;jPLR1eBau$)H|8A$Nz}H`;&FRzXJU!^XxtAnG;ygIs5`& zJhwor8d_zJRx`BfbJ|lk&o#_9g1VtJ4W&_{95R$Gx!6Q^VF@=>ZkWfUJ4j@a9aDDWcWFhOWSB9LTXH^GvZEbi zQ0{%pSF{bE>56fvt{4w$-qAMvrX6xspTn%hMYgWvK8{;mz_7*k*xluQoa;Wj!tS2g zhc)kWJRRA$$@Y8Jo_%2d!FhP<;o?JQgS}*waA2+=4BVBhfJ@uaR_B7|k2HU*`S>N* zjuO#8l9+G5zP#G|TnVXqBG~n1@3UB3k>QT$T}k@eBf^K?4Vet3KN=ygd$&Wi?MLoL zwjG3td-1}>i@h5k-MqEo-4UBTKTUfg-tl(v{Asw^Q(-1nQosMe9}3k=!}Pot#=wEt zkIs*hKt$@iL7q1#{&0_y;D}IvzNLndf!ZqNMLfYP~bv zcfGx+7Ysj-eCbJ{D5l3{gaD3k3}*Q9`X`a%-?>Kc5c!X(xW<0mikhq|KD zD9m)zxQr&1Tp})S(T0ZMk7cTD%kL4{FmL9v`kAddU+w}?dRU$JHxDhac;9O-AE>@j6NrVR^NzqN(BO({~dB*l2<2K{$p%pMh z9=}eQ4i+yhNz1eiIk_1q&T=y})`lV$k5akbA$An+4jeqbke_%cG7q+c)1X%FL{hfo z>tZ{gtD0*se?;7krH!1Ku#<0KcaB6Gn6t*;|F?o6#UTZ9`kDQoiR1qT4lTJVN_GW&62^ge zlo!_|7L$sb!wvjc1fh$p*$iVpqbQxil;7V9QGp1{jQ5Ag>3HVq?KI7uZw%a=ZuhQLDKEg}Ae81DMg@wqbMzFud9iUXbY_xQ z(N_2)!(r7dzj5`3`~JnB=JARaq`xKl56p~-WY-`1VN4ux!bAp0=Aw+!|8AIVxuXQq z(dP_=ln8XAOKlxDgo}ZQ%ry z`Y-Zmm7<(s3l={EkUB+C^SJx?2yQ+O#S;XD-j zFOajP6f2k(S@lY&Kr})PUF{oUVd`00SWZCn%>Q}fx!VeeYhv2uXPImHUO|}uHqU3tG~-aV(JBN_ z%;XMaVvvLspLaAo3VkMaoF0b&BeyBcM0T8kM#+vvBRR`}{|j7Dt)W0SaPbZv02e3r zO}9-z@f4N#GyZIj9stdx=^~`p)n?-SptIU>hy3r(2%)5DofdrsjD;(g)c>GhCxX zqe$!8?W;FG{%qr_q+pU~X;`L#kW`+hfxa5FO)7psucU-rqk-a3JDW)oNvbm?<)BcPxinw)1zVcI3n{XX!YK61V=*ddsY9ACeRVlH91P*<%8^TpUR<8g<{s zheO9h_Yx$slYdQMRfjy3D|*T-D84K@;!$6urWwi`f70i5it74WZnkymrWJh(ICh;c JSuLw&{}VZS#i#%P diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc index fc96543f0efa5cd79d668ebce929026bf04be641..1db7a6730b3fd241575e4448c71a7c94f8c3067b 100644 GIT binary patch delta 20 acmZ3^w490iG%qg~0}#}8KH11E!w3L1%monu delta 20 acmZ3^w490iG%qg~0}z~b*|(8fh7kZYnFRF! diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index eff1e9b6f1d221156c5e8f0a03ee35c42599cc09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmYk1&q@O^5XQ5;SPFfIT#K|TdlV6+J&G3BT9AQ|ZpLM3HVOIDr9ML6#Jf+^tB>H# zlc{*{gYTR9&0&~XjmIOFb@=eFRj!{W_^%?vO?DXOQ0#@NqGpr9+xgs@D9Hrwl1IJg z24ipicA7y(R6Iq}6bZv@bU!JMXF@332=UJRAaDAO@5B5ORsnqgRK4`@U~u7Shp@0s z>d?dhOK)2*yN*l?&lHl>ypBnc<<&)1!SeR;sTOP8fOHPf>_ngYJK8{?h*Kwf|M()$Ryj%=GP}linBR5wV08b+Zh5!Hn delta 22 ccmbQbhH>f|M()$Ryj%=GaMoqtMsBV!08a1*Y5)KL diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/auth.cpython-38.pyc deleted file mode 100644 index 1f281239a732d7d50a63ba87f38dd1dfb7138ea6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12009 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 diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc index 255fc612d33dd81cecb3bda3cb38233bf3724b35..6b3b592a3c5a50954506af7373ce3820cf9d7a0e 100644 GIT binary patch delta 20 acmbPlJl~l6G%qg~0}#}8KH11UMG^o!hz0Wi delta 20 acmbPlJl~l6G%qg~0}z~b*|(8~?+E6Ih1#ywNxKKbKgb<}%C6tz?w6Lb6RYCfArt4IabO3J32TFO&ySz_^5)I!ejLSH;3rv`LI$~xbW-F!?{5Ub*1Nn~ zj*DEwk2;I;XcJ`Ds+wOw4l>e(tQyx!GLKR;YykCLlO1yId}z^#dkX@aLbqS3l@~t3awgh`mVmujTNmOm?CF zX%UZz5Y@jfi%l72S(0z|ZzXCJrT&Hm(2Nk<$l#pRQT}39YST{z_?t+5dp1Z zI3xj$Nxk@BIvS;V5rwfQ_$|iSZI-V&NXm{UpXE5`?0c45-yuavk2T)?YUu9)Mn8W= z`%xT&QohDSFy|pDpDp{_Bc*+{layu+N${gw_@yjpkLTkf;fE0@t^7#&$#8DA7b$WM zc{E5t^o%K`RQ=kS?0R6HBOT zidED$Q17AM60Q4=Xp7}TH&`+r$%t!?@L`v@rvOkqbR;oxeXIzGvE=ssEZR5j@04C6FX3YV!oCFO*C0*9CIRVKQ;gYh3)#vyEfz#`#0;?Dfqu#+}o{7I!jf9JT3%O zPMRoPS%s>cGSXX>vt1aTc~msfGi6td&- z3w->{8OW!t5xKns`~MA`I-Y5iH&B?cBaEj3j`6+sK4*pieqh~u;f_7AkL+XY9u|9- zeZy|BKTgRTM)w`+rmNUbrnFR+9CRH?VKS9jIYkM1J0}k)8g|uRD5_Ayp3os z&vgqB@qx*Q~Q-p_XRGKw!>oN_SqrRZTz&8a_cM zvl6E8j@M2HcWTr{E|;lE5MyCjd106pVw95H3d0}p_MNTN!%!44s%@pE=@HWqP!d$` zU|(ZayhgH(m#%yZCHXc@+p`uELzL`Y+5e+78AxKgs_Fd_FG)#sOFB#NEZ+RR5WBi4WG|-9Nqc0GPA8HYO7-0T z8!6Lof~OX(POjY^5(KG|b@DU)*va3F-bg2@>e0oc_LYWAQVyErtDZ2v&RAxNicS7j w&Y&n#^WVeNvq8R)iw~pQ_;4Dak2tzk)T#b2mk;8 diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc index 34498f2377fa644e978bbdbde2600d4d5a4edebd..cd7c96caf45022fcbe936887970e4a6b90dc943f 100644 GIT binary patch delta 20 acmbQ_Jjt2+G%qg~0}#}8KH13Kt_T1;$OZHO delta 20 acmbQ_Jjt2+G%qg~0}z~b*|(9qT@e60l?B)U diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-38.pyc deleted file mode 100644 index 78b0de16e667a490c214c969d23a348d70783853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5563 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 diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc index e38469ab74c2b0890dabad8b014a6271576fd2fc..c65752ea912b36ce1ce709c9b314c52486af353b 100644 GIT binary patch delta 22 ccmexAiShp=M()$Ryj%=GP}linBX@}>09@_|g8%>k delta 22 ccmexAiShp=M()$Ryj%=GaMoqtM(z?%09?BVX8-^I diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-38.pyc deleted file mode 100644 index a257f5ffd3eccecd28ce4931c520423b7f0893bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12485 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 HeCEFZFA(6b diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc index 883f59bb74a10616be5a770f5f76d8113c77c9f8..22ddce40e8b88b16a29d220ab5021cf13617c2ab 100644 GIT binary patch delta 20 acmew+_)U=eG%qg~0}#}8KH13qngakuM+Tz+ delta 20 acmew+_)U=eG%qg~0}z~b*|(AVH3tAi6b6R? diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-38.pyc deleted file mode 100644 index e60a534b3ff703f610809a2fd3526a366be9ad07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1477 zcmZ8h&2Jk;6rY*>@JAfmifEb!74~Y0I3)-vjVjb&o0fvys!p2JGFmn}<7BWs>&(n1 z#Bw-5B_yOu9JsYe<;aZ#e*g#min(&3cTOBy-mK#)VpjWR=6%e}d%xez?&4w*LHpr% z*?(C<=r23D+;T9v4ZoUz*hLgkJVYbh#Us)s*v`q&8M$3|H%ntx7cffk>*-38|MG4oi75w-}HT;I8d=)!Y{mgwRWuUn?M z4yu)3!v3g6jN9a~HibJ(Fd6AYf@-O8zrE9H?}UxJyY0`y&Zpg$$vQde~{(9VIMfe93ew zMU3q^E}8><9{vXW>Q4|9pJR=t=qs$rcSJTPRXcv+Q1S~tCwu7lo{O|QD9YOy+3&*Y zSnFf3?jzw_-8rEy^qz|xG{Evp>J5RjYr7s6Qnjb1?Itp`X2TEH_E$DS}cjv<;egsqU|BPKsP5Ynz)N-dua1{|Kq` ze?UwsL1W0FQbAV7tzc3N`iTruIot~PKFK^fOr9_~_W%^~wu~7fc>~LGp>!l-W(yms zL>TYjOfzMC$^Z>!mUacVgJw3(HZltkqEi)S4i0Q5eJFa(kp<{X`AF+=$SkzsNFB;D zD1Sxr3UvQ|-`MKyDkfEr(bGuw?hDqG{Dk$INt})#71etnlS3JeMnHt#Bd*eD7<6<> zc@k{g*x2Yj*nYUv3HR7RFB*?~Oq_(LF#en$^c2@@Z5+je=#Z)2n2*;(E;N%O8m@~O z^VU<%hpIk4GgTRJ#X=}oI7{X_98bLi0$~@IJc6sZjNc+YStZM_UDrzDx>#NX56H9x zohimgsThQcPnfjVH-?hGX>(G>piw&@CIP??q?%%iDS1ko=!@bxnUY69z~iMoBb7z1(F@7OlcL&uiSgVSSBZM zmjZpn0vhQk$PTRPp8yZaGk^g^D3Z|anrj>xof=#In^^=KKn0o87eeTMKdt@iDnd{w}VTaM>wAp$V4nf~8h5zCIfRU2(;sx3O delta 20 acmZ1{zD}I`G%qg~0}z~b*|(8d^$(@Y7yOYkXwzHRL z7NKrM5fcBP54#dC<(XgOSDyF_+{*DJ-4>`5pE<`qp7?y{J12KqEg!-7;TOL8!a?X) zZM;4#Fg}GTz5_u~h$yB;ibGsKjnJ&0R%pZ1Or6XP-OLL;to^LCk@=xt>vlSqHN$4D zJ83Ixhi#0Q%PIJ|sg=!#^I0eCz#85=#1{5(c=!gQ9&J29w88Ark;KFFBYp7QL{_-`lc=Oug7oRQNPVGQ6d;wEjSVI?y-P(HptCF$o_W8 zREvBWaj_nyX*5h(tbg_O;m!>4IVcPPa40k=2H={^Vm5QANv&trQ?!byO`RvL(4{Tv z!k)(*)}Y==0N|NTeLDBV4*jRdLg5^M&{hj@%X>8r2N+ClFY{s}p)81k2XDaW!GAys zHj+rYzKZvOAHXPvBS55A>(`gMmTDw9Wm{y-Q{{>&GO9TSRA?lbOfse%&g7Wqu_nyR zVS{4MrZ^9ZM7wAYSLQy(NE#z^&#Le~-mxlcWLJndl>ySF2;##_T~FC!Tr#daLXtd@ zgeV7Y09jXd379kGfjQM25wAn?l}l!dM`riz+R73vUFDkSd`^odh;VKi5*(M}Ifjgq zIE{oLVx;Oj(;qcm8N zW11AfBbxH2d-1&UUk z9a};U_ngXxd^(d4p{$Jr@3`RSj=ajL%*xeF|IymkJ@olc80|DLn!H^#Ms4w}{zW;z*P*tyM~5nB-^A!Kx{E%5U*Bnb)3}H3qujU$ z7I4Q|nlz!RB_!&CuF;7n*_PC(_PeICfU^+*!XgS8R*sOIMcL%+&3=D5V7dha?}%V? zJxN)x#-xM{!$NmK`H4t!XaRZ5lnJL)`-%YQ4mt-v0x z9Y-;+Piz4zYo63)u=<_p~=+^r#H=_&aGBo$L4>1wZQT{VEL zw`#KR_w?dPhLG%qg~0}#}8KAFh<7yvr_215V< delta 19 ZcmaFI_>PhLG%qg~0}z~b**B5=hO~h`FaR^$447 zWKX0Y{;T>w`kPLtErNb;d}!{Y!Mmam#=-6*AQzeFMf0oRrhei7GW~>&Lw11qSurd$ zrc5V<)a>gDwRf;&Q?RNk(gl2zt5w;}e4Uf&Cc`9wUsl73jc{jU{Q1tW_Bsi>y2u?P3{P@=^}$&%O0knY=D>)Xe+~7Ei~qLva8A diff --git a/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc index eb377add71e751fb1080e27394a3276f11a45bd5..347ed54e3c9de4af7c12c069381f6db7a181c662 100644 GIT binary patch delta 20 acmX?NeZ-pkG%qg~0}#}8KH12wVC*s;o*fvV)v>i|Cx=E#`_0*L;v16wkbx?@Alp*1R zT7Y(}0W+PkXVPZI=U#k}j=uK~=%Ihb9(w7i=iYj7`g;pfqLY@KUA%q!iMPM^dk>$^ z&3O#Jul}kA))Hg?q{i&eMdL%1{BzEjU_BTGYK9O{K9V6G{g=Dd}XyitGGFj>^8Mzt1 zku3L?Ig|Y0lstXNdn>;j+~Qc2G$Deos~_Z@)BA$dd{0s zHF<7@ncfSN_W4QsB1T`37fqiJ`KTC^{8KH=T?*#+S>>dDejGi&^K-mX}K`g_FY-%n$dQ-Zha#6Mv;<jv z8Eo(3J{)0PXTpX}9X)@ivf8>V!YIyl{ZX}{ZqJ(67&9<08U)%4f+Q28SVC?G!QLp0 z$pk^5=CQ3l5d>kHW`((^99joj)kO7@sZ%6V^`EcSKG^&;$8MWaJPy_7?NqL-=#ku9 z&-x=WMZS4QW!oxDk|^EYydUM*$G=;QM3nhg-@AHs^Ug<~+`Ah*kXxJKaJUI029F`% zinccMsF3eW@vu3JhVSAU3aN0>?`A`(s-wNze<=IAtHUR%g99z1XV;(`|nS#JLZ2`&aT0Q0{GXTWSub(C1+JBg{+jnmgor z{>X0(mb61B)C*?LEZ&Uy)dDS8zkSynL3{B2k*s7l&bGIu(sckQ#kt_?t;uxK`fEcVAQ=$-0|G!~q1Yum zV22FA`THh71E6q#$~ASpVJd)K za%J+1tt^XWn68>}_cnA*eqN|hGa~*WZcCy!mpPjDu6)v+(={NJz=ZP}04ef+^)@Q) zCZXB|6dUpp@CgWMI~1bAZZjXsel&=v8}A5)O>^z$nJT2fVuk9q4O-OqX{CA+<>X|# zg|UMe0gD>#DI)1T^!&6X3}5T^WDY{fFxQ=#iIv8N!%okM)n#?CZ-Rfp5aBHL-^YRS z_fWAWz;1Ocm%CP*Tb9Q?y8-xnyn}k4TQ*6Ha0zNJTIwUrAtouZsq0kWN9uI+BbKG4 z%0|h5f{K_EaOY#I;KXH5t+8DIIwbuWZ2+8q$p(g3pEZbC4XB)b`7t=ioSxVT*eV_( z1(_xWPke-r;Y0s1xgz1^7-)Vt08tUxz=tM4(*oOwKj~{EXCTs_Jv_HdHbIngPrd6s8;wgo!0nD@2wO5K7MRCu)2w+WEQk1()?lGE@> z^d#!Lj@##@4MIcYJFpJfxCXMbL4yvSwE}VTpiXfV(UX@h$j3TpAVP8wnO9OAYli)iXR4WjJ9IJ~+* z(nYF%gsNLVHh^wUHiG9jNThsF&xKpSM%YIxNFaHOW)iD>!$H-rp({{w+KSa&xFG#q ze%fkVrWeNk4Z12i`Bt>4(JYi1W0#bMz70?6qM~d@Jmb-XA+~LT3jT zVR|pa%uZ=y01VyUyNuB=wxU(LwaQ?GhhuiE%uqW%nqHU?SRRCff$W0_)lX^4{} z4h`_sP3XQvsX%5oEP7`Pv34Hx)38i`mv3~tx*h}~>mwblQ({20=@w6hcq;N#MLbhw zp=1O_uv3ITMeeIFAwOIV;P@g_tJU!^b9FY=G1+VH?EfB!R6ouYeL|WS*VV9TzPUR4 zL6BE~S~d$EjhI5qWKfe`zSX(9g^*+t?B4m;r{kb>*eL_36ZBF|VD^?tk`xh@x9{1#TOC9jNcQp~`w2C Qcb498nZ?~#?WOAZUxffY9{>OV diff --git a/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc index ef247c7b2d598bd0ebdff7156829b071f5c1ec40..52145200ff6a2c0240cf29ea7d1723529486eab3 100644 GIT binary patch delta 20 acmZ4Izs{fgG%qg~0}#}8KH12 delta 20 acmZ4Izs{fgG%qg~0}z~b*|(8_vB<{0n^ax$V>Xq=>!wVslNdzpS3YgHVKLFomq_ ztg6hcs{AthPNPv(@cHY17VAHHPf`ApItM>>bUw!~IjbrPQ40^&%eu}9~UDp>CHu1t@ldSo5$vMqu!Jm4e zv1vB*wc)&rzAgK+Y!3Z1SnC*@$6E6{n)4o0Zz-+C@5qNMEi12Fj-%A`BQA2|ir-1| z$`>3RFO5ZReVKw<3wUl^_mecQu6QA5w|iZ1tgpJMA4gu0>$iB?QuC>f7sZj^@dCfk z-3XFkmhWj#Yk81NA9|aLzgo@l{(HHc@)4bC{exq)lYwVb>+5u^D260m@jxI zb$cRky~OSE?)mc{xg)0F>s;`t!#m`kgC8B8&+$v%LBka~TaI=|;W{^%dO_hOj$Hw* zUBDTFhmE}9ULC3SWwajWHE7(!(qu?(b>ImQ$x6%2EmykBb@Qt0hB4~}9CY1vAN9O| z9EqL|x8#$q>qSwVO1CAhD@^F}ts+j~pKM!Lsg>YSa!ISHAXWYhqtE|l^vCQLe^9N zqH!P##=jFYs#MC`c3lcddfmqR@2Y>(!cYPb2*RCotw!MeCj z?RDnDB6<*v z*lBF154nBk=5->y$Fa}A@Dm$xD}o}e{-vAy5%YiwodU2D%>IE5q_9UZ$vz`&3@4>V z3UKxvk^-gwgM$;DN$^<45@v_JAoYP}cIt;bkrwu~5A6OAPoK7LL%H=h2;wK?l>^>@ zhQJ6LMsa4ZZQF>1b`kVG?a*@L57Ff3TlgiE#AM2*GE{fL_*Pv3mKhY=^Ac9z0>Gp` z-4EpAEy(BAg}@8fnD^P=qW53;DgA{}c)cLwX7btcSOgR3TYS4^i%A-K0>N4!KFf{Z z4EVN>t4Tg}O~id39dJutkzh(;1wV!Mf<$Q___x#GD;nc zfQB0YgD5Z2dfmJV1w@)W@zaNh)df$7>vBDSkQqphXhLN%Ma?uRuP41V@dKjFAl}%Z z)Wipb3UXpz9-WWe1VG^)h$Z5dU~ib@#%Ane+9VbP8s=j!=<%dAC$XluqjWumO%0uV zL1-@TtUYxbJ72{u9B~6`BwbwKcWHn7S|JN{Slv%=D zdVR#5P>tW4*0eT_IZhf)jDZZk%~zIbstZ_C+<<1^YU0oEPrQrf$km{P>N0-GM`(b~ z%BGrXJ3v`b`md456X(~;H%O*N9BrS|(pUQ0#fyFY;>C+dwW@w1U53OhFF!6)PC+RE zcEWoyN=6G^_Hw1-ip{$?SD}|uDkxK}(dd65%_zN6V9c~C?tnUE0@WRK9;FGt!Ci-P z$^hv_GLfo(2~#%pp&{E+Mv$WpH017DfXZW_ht|LdD}xe1t~9J>8lIY&$@DEtq-iY! z2qIyr4;#z?2x=01Cy=z1vN9ZFexq-wto%&7r2y^#^_$Is)t}DH;Z#O0n%>n0m3vC` zI|C`tR#p6~3XlWLjpwDAkosVz%4oh)F`udYIbst=8CzAr=Sfu=R8^(_qwg7s)Cl8i z-;`J#Dbft+2DH*hD^t0LdHxC7F?~?|MfE;yQq!U@C7!R+IWD|aaB={Pe8vCm? z-S?_CJ}5-Gy%a$_VhHV&LE1&Eu+QR_eqfK&^A;dL*b?v}Iq*o}T;7YDXIslsL{Q*w z>G{k}9>ytOiPLLwFJiLHIl#P<SX*A9s?K{vWTz_T9_3up*@8y5l%}5Pj@-&Lr;u z!2qtJ|G{bd>Il-um}gU{1qj-sgA7xmRK$UO_NCftX+2tD$q`%6Cutk1BeB*17cNyR?|SD0t=^KSB>d{ z)|y)VmG*kcYL3v$0H!q|ds3_8OXH2#BET9QTIk@1s>;vtOa2tixaenf6#Xdsi;|yd zOn*^g1}ouJjLFN~!b>Fc1wtXSzBYDLr^0nsd7;YJJ%&?d2#l?UIEM+P{VT0f;bd}+ zI8P1T&H^(_pvE7fDV>yngEwJH2848#6p*t+lt#hd)iWKfkr`-9RHKMLf@sSu)*!$V zA5(L9wN@!N5+1C7uO@FGCf-)~k)OKme_$S&*D7UGW)r5`Upg8e$Kv8=knfNM;}5|r z{iH=JATkvY3OmF?VHIjRePBfIZYTo-&$K}a_4)Z!&j6{L#txoFRtg$$39E?*>orue z>N5jg)>cs8kTYSvbS&+0UfqBHBWA#m$6nqTyo%8~K~kJ^IY4?zZbwX#hdm+w1U!0= zmQd2FXeN%=gk~TmGPDWZ()!1bI%5wkpxKeEhmoIG z-IowZEHn!2qHXRk9<^#D3!7+`R!znju>e{uQX?~TV=ayYLH3CV4a$hXOOlYM4`U`K zh)wIzX;uzm#&8 zj!HsW7A!@X_1<9tY0mQg?QkFR0C?I4dwg=_Rvk+ zk8ua~b5z$BZ#h4sOey&s4TW?|J*(AGxHMIK4Wg=g)0DYuku$2w|7bXYwC6=@s`dY_ KZ#T{6rT+s8yKd|N diff --git a/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc index 2ab623ccadd40c98c70d915b69d3abedf5f033c8..448a925f96aea193b6ad5a0729e24858d9f0bfe0 100644 GIT binary patch delta 22 ccmdmUl5x*TM()$Ryj%=GP}linBlpG>09z>s!vFvP delta 22 ccmdmUl5x*TM()$Ryj%=GaMoqtM(&L%09y73rvLx| diff --git a/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-38.pyc deleted file mode 100644 index db58717da7367dfb2947aedfc0cbe7cde6fb31ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14949 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 diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc index 21e036ac134c5d3aeb3d897e3e1f428c17551b9a..b20506c33413ccc8bc76de8fe307b0cc6d14c3c0 100644 GIT binary patch delta 19 Zcmeyu_=S=CG%qg~0}#}8KAFh<5&%2e22}t6 delta 19 Zcmeyu_=S=CG%qg~0}z~b**B5+3a1~~u# diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 609825b42ca664f2b96b357a5c33ec2890079ff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmYk0F>V4e5JindfsnWZZ3IPr({l@tF0T=;!Ge#CZ=YI^$l_4oXJ-#o3=Dh$6r z{#|a|XfXCK8od2;Fu02+|0kM=MLc2c;?3LKjIFk1-geu@+e)0S+jcqau@kRbYL~ix z+wYd!8V6SUTEtgbYx3Wa zfi1VVu04@qN34gPohSP}(ekvj7LB9}O$|IjK{e#cVl1sl4w`wrWk9aJLr4C~L?$2faLbKcPOhThQH@#SmU`%AW) zD0k>7@4(9ctV)02SS@HIFJRnN_J%LFd~Id9E{XJIEVER5+4?qw)^4msH`o3bV*jC( z&}JphW71UG5!%j`)b)FLE+lE#Y-p8a4MJ;Ag>n<>zMN)hAok*1L8C!8lsiJ|Y9786 zQSdTM`p}}2hFzh{sd!b)=z1pO%@`Id#&4MXHc0;GFAr|7J;h!5nuuP7a_!4hEXw$$ zSX<0GeKJ_S_E=_{GVFHabaU-locF_|xvKh6oHZ9dSXfwld~fB+YVcgFuZ6wd8e|P# zp}!QbujP>QW)EHz!mew*xOXdvQzayrxRv$DlOSMzYrP*QQPBnpjt61pd;9uYzZZo{ z1Vpiu;oKgHnu3_1`0c4@@S zjE{APW;j#jaV2tx?9f7gV#p5o*VU0Vw2s~Dw`_&IFpgIA$Z1;MvYveW=y7oW>7%8^ z;K|Cp2VXo~8Ptr5ZXPLz0&FKvqZXIn2cLuHqcm1=n8X7SHO$?1KFIKAxs?jyrTgYQ=%L&@=^g^{|^r*cg+l2PD8;SM)ru;6J zp<730nbLMg?dj4HhsL#v<~u}V5_blMvtt9dFr5=q%&PJVtThGuRjmq_w=j3cFto|V za~DtkH#C9~w6-l_M?A6sc6Q{vcG?ag)dj?PQ3)egc%mfyIX1`8!y9cGAjkoaP63bY zikJY62~em;HJqu68rJI=6Er&Q`pI}Qn!@-JR_TVz(KJR4F}Xb@YT|Nq1$61uOmx+N z>$HK>S)(98n|vQk7Y=8kcl@J1rH==Aj57m2SilrNV0c^PauH^>jRP6yu$BjN52Qd) zoUyZzx5>z^c7wtcIV|iWZj_8gE`J32^2cZZvQ93Nje;MF{@^Y% z@H+2I<$y$kn+A8Vn$w*Ofj^iz$LP_fmZN>K*9jD5s1o&nklHg->xESe2_l0Z^~o~E zDpholS=b>m0$IQS55lk1Nko|Tdo8En@Tb@(NpbQMYA&i4SPj+Q#bRz;z`LNt4PUE-ZYc zr~5JqUd3uF>#JZxhMR=+P)gd#B4mv%u@}X_Y*pX}1*>+pvp6m6Vi!{Xf~GwpEu!-> zPZ;;x4+uPdg?&e6n&yMqvu47*ve*XMZ7FsyicZd0#$!zK4|E_l%PWc_>9Vm!BVe>O zXexVX0cGnb2Mk`197^NIIGawR1aMIT{JJOskosqls`(g+dz%fNLu=%!($GC1x)gZ+ zPATuvEku`)9>{KgJ#DC$Rb|Kz49=h4L1)Gj!vg)Q;~LPP=+qBwxQ_?_FAd(m7e&o5 z1!SKujG8Jt2j268_r4l6NKhxh@FO2}jlK=2s)lUk%*8+PL`%T+%nT!}{Pl zu0VX<$j?y}vUx);w=PMto4iU5X;eE%#VJr6SLn&l;zTTG>a(n$Mn!GnZDg_=Dm}53 zWjpr~6&}cEHAlgR1_m7Ny(NcKLkM|kRV9K(z=2)98e)11iBIg-7M-S)UO7?F3RX)#RQQ22;}6))R41E`ry&E z`(Z8~?sbIu){oyy4b863XM&f2)4OXYl@klJ8rRZjcm9x$}ywgo=` delta 20 acmZqVZ{+7b&CAQh00d`U_HE=YV+Q~-g9Rf1 diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-38.pyc deleted file mode 100644 index afe0274575dd8eac99de266a9d2798bd01bec156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1417 zcmZux&2Qv16t|O1GBcZLrwAFy{}l!@ILw~igz zPD@8K9DoyI*#lP&+aq`Wnp`>YFK|FSXFj$o;m9w3AGY6nzxVv8(`h3ZKmVyte{CT2 zmt}4akfD!ZY666yAtIPK91k)4UGC)W(8X5faW8KS8}+)u{X7^3d2`sTd7roP_OM;A z1AZ$HhapC^L0#IR9n$>WBQ4VY$s2AE=Lq#~P2c;9nv|p_jmA_^l^P~R#O0V}(Wz9C zmZi#QM3^>;jY_N4{r2DBA9~os)$Io*@4Mi?1~ct7HKV}_r*v&J=kwvW+t12}KyUE{fbf<)g#rg7d@6O85o zXuHOrIi&Fv&w?ME6LcRDe;#}vJVsBDa2_Ko`34=Ln=2EX;pfenH}kJ8O2L#blR~3> z1y`w=7z3M4Qo(etBSLis7*P^25e*Io(fxPd@3-3#jKex&9hnJT!3<{WqsS_C{n~oE znM*>IxVthq2JF0ZCP>vCb2$P8uaZ0!kbE+Id!T5Ms)aAhN_wZb0%*?wj=qsO?*T-c z1;79sk|hccdo2|}o-40N%|!Wjxuw@7kt_hOqM|;XCM#DGD9U7k?&XA1t~}VOY~xgp z)RlK8ndmi@#Z$E`u^m@!uD6@KfM~05EwG%wye+h4&cvxqth7OGUH*a8>u|(BzwLbx zKhjj`n3Bs>#a|1$uh<2R_hnYv`quG4$+1fF9C8tV%XFFY=*X0W$!Pc9?ruEz$h6NlKr8@P*i9kmVe-ewgf36WWns8@imw&B8lasdr26&$)mE}1|# zYvovr*J_KEOZ|0oDceHTotL%ryNnj~J8=V>w_dh^cZBQy3%D2fzxjVg23p&~v8Wao ro}oI58k8I44eLqsLnz#m(~mH4`Zf^HZ91V7;;t9s&~p%c*!lNA)@QCh diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc index 971e7e2396912b1c269f9e2e7b91e8b8478488dd..145bf6b5e98e27aed7c5222abdec54f44f66c6b1 100644 GIT binary patch delta 20 acmZ3?znGufFrD8^cCDZ)9HX5Bd6O)8vCYVYLmmf!3n!;)w8VUnIRK|h!Bd@so|rohszEeGO)D=Bg& zOpjFCUkGi$p+4lO92H8YOzQ)sq^h=-Kt5aH_%z`eqp;bwDg}UxFS(h-y5O~t!_s8T zz}z`zd9lwGON~@lJ-2F&EUcJ`i^?C}fUA587v-6*JjG0@MC#Z}ELs!(0rWlS`d1iC z9ee6LC39!yoZ-1UL(fJS8A9Ek@Vqg@FPvH98b8~|Xu1KCJ9Dq`+&e*{?;_JUZ>tGL zb04f-&QzVN069ZM79$hOS?G zPd9T(nG*Mw4#&Wqd(H)|y5mfafWfOcPXq*?PTw6URwT+|VU(L>l&xWWr?>)+&w!V{ zk$Khwt~Lwc16IZhIv({}%7=hgZjqRY^6d1sUgbu7!+iC2Q6IzNC8ij%GhWcVI9Iu_ zSlJ?~h}4yPCb{S}mE~5o>|m>}+Fb2m@&ayN1uKP>yv2cmO?fU(Wo)$#W^?p6q~3rn z{(ipqLG)NNr6Wc!6BT_e*uLTyEZUc8X>(mi10}~Q$#aNH^exwAl7&a6q+Eu(_jh-r z!6%2uNAU?8MM+Uakf-q_%)jKLNOQyPEn=jjf)_h67Y5i!vK?703RLgZH{V$yUxvP4 zTvc}$h0Nlmb``YSfL?FGfc$`X#B&KI|GG|q3Ese6yi3$J*m|3lAIDUtajaegx!ML8 z{rCb(Tq-zWL1{dJde@3rkJoFDCD8t={FE)SYU^by`#xnw{gSLP_SVZj@X}9b zB*vSsaxzf-mZY0Ba^Rt=Z&6dVHr%yHnjb=Hml^vAgQV}k;5tnbkN|hx00%BX@L}@L Ef2E+iMgRZ+ diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc index 131673dee15f330582b8e4215a7853edee17ad47..1219a3fccad57072e0da560806b63e472459eb39 100644 GIT binary patch delta 20 acmZ1^u}FgZG%qg~0}#}8KH11E&I15ACj~hG delta 20 acmZ1^u}FgZG%qg~0}z~b*|(8foCg3m^aULN diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-38.pyc deleted file mode 100644 index de65df10c15b6e27e5d4a3a3d2258ef34291eaf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2323 zcmaJ?&2Q936rZuZUazxB76>KfqqPtqR%$jV5*LaPErF^PP?|uYt8I&bkPmAAje) zpB;q$P#*`MDtugrSG)v5P#Y0Uj0Cr_{x{kN{F{lHT5SufH7lv4cH7o`C8?%P+evHf zTI#l4EwhuEwBD|3zM9OYbL~0JJIQ?7Xg4sTc<%^3x{uq(=mK3JwO0ml$;@-BeVkfK zLf_Hy`YW5vk~xr{AjUds&JRAkLyLd}Mc_r0Q63a=#=Inp;?V15+)HQ_gxj9T`aGl_ ziABNVZeJ;hmiro z&ND7g9TctiyE)H7D#U1UabnmfQ@d^jaY6~4eI^YysV`{J&xPi=BqKMVUh9erXg!&@*!;wM{yQn<A>v8L?7OpD`PXdWhiM~Fntl9(6?PG40_$T9A z3vR-L+VlnphC>+Z;7qQP0e2Z5a8pmjCL00QC~Fq16&ijx9i1cff|H0Coj8m`JfTU!M z{{N2ehg|JxR;7^%Sygwzx!eMoG!x3C4Mmg&g|zaZ*pSwfEM`rEtL7nVJwP)HQYv)h zN2H-v<_@SIV{26q0oEUuE?v}H|4%!g3RSzQ!k)I{`qI*1m}m02;tftX<=YIjj@_ud-5_ zq_S%c0oX6T0gVc=ckqkPhSkABVV8DkkZM^a&Mx%1hlsT-R8%)zUSc$KFd8%pr?g0I z7nja6;~~0?h&yzCa2}zr5HlXZj?3r^w1y6HMXjvtV1V?@fQ?%N^(J8P`T|ht=^y}N zmb!tU#3Qs9K-Gg*2w9Cq3cbtq;91jUFCf`;(*8hwde{^qEv-FRS?e=)@O&nn`l*2zCyq7;i}`l30j+x?nHmJG*9^CatV7+vUBo9;gt9tm%+M>x z*202D#oeYWZI}QN<+4I(w;yo@3$99ztHH)iMPTe9uCT*Z8IGV>1{tskzszC3w&HB92xI9x*eE*B3g z(CzSx4|KF&{bB7gSa3-RqQ#6`e`eGea`QBSqrxQ%aTb_QKQUQZaK}M%Z)*@Qm z9%aw*ebrxlpI=mNnJ~O{o}|@IK1Qqx<{{UMio=*S( diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc index 1b1a5c788faeea280501f7be7b3d223d66ba2ffe..5c6032ddf6d3e4b829aa132982be178f7c55a3e5 100644 GIT binary patch delta 20 acmdnXyO)>yG%qg~0}#}8KH12yG%qg~0}z~b*|(8<6B__Kng!AT diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-38.pyc deleted file mode 100644 index 5296a6dab9652894c9b21381dc0db0841ae0876a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1237 zcmY*Y&2Jnv6u0MVcV{=1(pH74sIrhMu@Y<`RfSX`M4JSGR3#yy1Xd%BX4fyfPG-h~ z?a8vM?WJ%+s^AVt$&ovM&0IP0FMtF*dqYWW+2c2UAHVl|&rjFZVuIuQ-_-H_fRNv< zaCJl|e1uCUxN*X1PKK*59a5CN+$;Q{PwhWH4~lRYx^s|6MQhli1jupLl;6^ zUGSlMoAB`GkVm}rT`=r%dPw^1KQIE>?bD{cR~aG8EXVV$$F<1$<7|8iCI3Xq)2%Ge zLE+6ERhK2GbSBI+)s=8U0a|Ah=!Z>EW(72@(aN&9UVzDXX0ntE1!E)Cya^2y6>lO1 zrdH(`(|0fx17@zw~@)O~~FaEdmS+Jz% z!7{j@Kis5bNl(J1kGA0p?^$?69+1z-0r`>~k@C%enCLWCiV{1~V~a;iVm*F^G#{dt zX`gh?W3&%1JS3>Kc;U!kvIO>NsSPr50AJUbPXVQ2wHD=snJKXSoqhJ;z4zJ3a>ptq z$4JW{jv0;vm#k)0W~R(YHk$(EOdK;^kFDBqo#%6BX$EW$y{Vbd@HShKq}eV;A2?6D zi`(0vjVLo)E%uVvhwPqS+;C7WpjCilsn}wjy;aQ-&IuM^U}TZ^`&6}%-NhRpXCeo_ zLj0=LJ>Bm%*B)sN%EsAIN~$Kxf+qz*#U+4*J+ zuCtmDoEJ~(Ca^>_!HE=QKT;t&QnvUGmTFtS(WSH4xk+tb{Yum=y!!LUt%u1|1f~<< zvrHv>C2T8k2FbP@*S07+*;jI+vZBDGk}rg=vz#58nhVJ`-`(6y_8%R5ewZG?D9NfS zf$}V!;rWReC0ZDGr^5Ede%47Ps*O~X1{A)F4OxM5tm_Sz;f8}YsOHV}D;cL1RM-YR zM5^!NM&cgzXwUO#{7>NbXn>OU_s!rM?a?+>ucJnPt!Y_m5v^KBxrxjipVmZqR=9&G z2I(2TM5!>?WhK)oK1;29t8v$9{D*T;8iA4k)wSlnHp<~} i^j_Isv$yRJ3d!pnKBOpVTYxs=?s;~`0p{Xn^w+G%qg~0}#}8KH134&H(^4g9P;e delta 20 acmbOvFiC*>G%qg~0}z~b*|(9KodW#lH0Bi`B33tDBxyM_dJNG`{flu159ms_IBa}d#4qQ;Rd6Jul`WjuneTRVB2LERcOVd|v} zRLo-)M?4WQRE0RNT?JXmYfpfxL_Tyhm|1J#dk*^scKHhqQ;XA+jtms}luo`>^wQ$i z)V{JPQ8u@y&eXZ0Uxk!RmZtRBo!aQ_KDI901Cp;hM0qE^ctpts z@-}%1W3{+9B~$MTc|9Nx$@hx~BUK`{6 zOo@I>wAPepWDkw+AyJ)U|8fpdxL1~Dee&2a%!(Y?JGoRy?;dL{U@w>Fi0Bx# z?5QG4yIm^UDAeTsMx5t`nt^`ewIbO7hH)jqq}HS~s}9BskW4#`;W7#=a#)A!;uzMkB0Om&2eM3A|>cz9Fl@jK8R<+j_x3h^_$& zU4FF-CPZiJ;~|(EQCo$q9ZhoW92ZI6Z3%rxg)UH&ujpt$Zx+-yGDN2KDf~#pv$*^F z*Bf`k2Z&LIz|Ue4?&Pp3l2Zsbi(#cTm*K7`Mk3BKOfmc*kyV_seO2+KU~9M6*23L; zd++Z@2QUcZvJ4?Vjm~g>KN*BFQSfSsw+yeH49lckjgnk}z`ML!lpu_#a@8ce+Mv5m zxmTXo&onIjcOyX1vWEll18UL0vZ(*JW9zwt-TKRS7WE9*tv?-ajV{oDwyAgyJ-Q2Z zOACOBh$XaZPo3k>VI(YV+(Ll8=oEh}g}~3x3MkT2OJU=QMuz9jvFki~l}b|C`&Yt7 z)6NLg{YL6`WGIg!p`q8dRKkEU^glH$>)rP2S;4Cm-k@m7n>e%)d|)kFf#o}xl6ky8 F{sCFZsO7J#ez=62gNnPie>0|+&NY%sfVmJ#f(284iI_GOenW<$UjTJ5eHyOX|H zRn-~Bw4Z|ZVFlum2ZH1gPx~J2kEvIl_y@~Pa89-7LIe_RxwX&w=*wq4O*t|WPaWr zv`yX3g1j^66H?e084=PH=~>oh5vYuQBg|&05U=*cqHW>OHKvD973lJQlDH z$ecnQ_%-?mvouoO2Q9Y3RzYf=(QVQ@@eS;qT<=-h*-E9-{*9?h%OcKtRCmiMFCsZj zi-HSihk1OLN0O^*s>(8x(TIUcv^(KEi()aBFw2P~&ay~Wqp2tpE~Q@IDMcQuC@J$i zE?6UH>+bQkUOi})m6}#cdjb{_MPlLRmX8B(8~&H!FF$}nk(%76bBod1`U0%|r9HQ6 zD$mt6v;R)!cJU8I7uG&e_8sT0BQ~MmG5ujp7cR5*sobh5v!IW{m|N2?$d}l%Ya1-% z%`RLsTMw6;3)7-G3)m-wT9}pNaaxS~v-Qi(;X*J%mGeT$%}~=|cKV>dIo4))y)5|b z!lS+KRg#AnFW%!~R61|4{vxh;&C|L&DU@KYdgBlN5gnJ z9rEH{v}`OHo=VE&#Vnz?z5=J$Y$Vr5U@_V3qN4ob2_d zd-}{HAPFw3Om$(;@-!60^=a2~Xh2tKU#8ROh>^QQA zKtE4hoMriV@W!@*O+jS|8z3h)7+nBz`*iNsuCi*ocJ3oKuCfYHOP)7x82^ zpf_R;YSd)k`fVNM-DxfSn%0E5XF<{+`07pL2%(zra2l%#!hv;T901ZZ@K~jY#a?JE z7s3eviBjzKXD@6S`z;5`ouwku`_a>49wvgvinFjN!<{tavL9UkhQe`YgWsu`mjZ~L z#6<{bn>qTyHJHg*JbW&hl%)htU_?mO+YCRN2Lc!9wY4Wp0c&foxma^q0`F6|0K5XU zv<(w!tCZTo!)xbGnHJy#e*huz7#4rT;)rWImt%u*Qy>@m32>6A!6-8JSq3a)P7sh! zK|$I+U9v+Rt7}<5S++&29~}p266Zjo*D|Z=6%zoX>0V^^6v(m?2{%}+j(18eNLxgK7TDR`g&;C94 zm9>C~2EbXA%uXw(_8^8?wa+}zY2PNr-yDGOZXjw(@K^f_kF^j_(1dJ)I8yR1xlLXo zZ;_kiE65?+W4RAIc zDn}l*8J?H3C#HL90y*G7I6RgIVcCO#N@Ni>m1eSk{Nn~;HfGmP{i^8UH;%c5CNsAo*lab) z*^eR&f>G35m@SoPLL3GYbChFN!_+HGxbk1gOIBt4Rg98y0}3B<*_zb_ldM^R#t@)24o0H7g&tk;AFvU!ade6J(o@MJzXE91f zs}mZTyd)Qsww7EYgRUQSgK<2#92M&wrHrqYdK28sQQz|UdUgo&h#UdUN;6zJoG>jB zCcf@kbSc7=eZ#tKb0XYQ?6j4$)EV-!+OH~@o?hR~)EzEBhXCl7YL)j3T0o?Pdw)Mb opinAu3E62|`hctxc^Avyhf9^Ol$08Wr*;46r`hqg{YR$w0@;FFxBvhE diff --git a/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc index 0d64147c8eb73557cebd2de3755c0941061652f3..6649fa534c566ccb70313daf94c4272e6091842a 100644 GIT binary patch delta 20 acmX@acZiSsG%qg~0}#}8KH11^&JF-Ox&?p$ delta 20 acmX@acZiSsG%qg~0}z~b*|(9~oE-o=hXrH+ diff --git a/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-38.pyc deleted file mode 100644 index f3da62fe16c10cdb78592ef732d6dfab8b74d1c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1477 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 diff --git a/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc index d7a66274097b9ae3d4d61e7405162c0ef03bfe55..5440980038793c4d9a4e5332bee841381dde2288 100644 GIT binary patch delta 22 ccmaFU!StqsiTgA!FBbz4)O9}D$eq{%09cm?a{vGU delta 22 ccmaFU!StqsiTgA!FBbz4oORi^kvp*k09a%PR{#J2 diff --git a/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-38.pyc deleted file mode 100644 index 1833337bcef53cca66624973c974c10a71daa8ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20858 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 OjGr(@9dqP|*7|=I7;vfp diff --git a/env_web/Lib/site-packages/pip/_internal/operations/install/legacy.py b/env_web/Lib/site-packages/pip/_internal/operations/install/legacy.py deleted file mode 100644 index 290967dd..00000000 --- a/env_web/Lib/site-packages/pip/_internal/operations/install/legacy.py +++ /dev/null @@ -1,120 +0,0 @@ -"""Legacy installation process, i.e. `setup.py install`. -""" - -import logging -import os -from typing import List, Optional, Sequence - -from pip._internal.build_env import BuildEnvironment -from pip._internal.exceptions import InstallationError, LegacyInstallFailure -from pip._internal.locations.base import change_root -from pip._internal.models.scheme import Scheme -from pip._internal.utils.misc import ensure_dir -from pip._internal.utils.setuptools_build import make_setuptools_install_args -from pip._internal.utils.subprocess import runner_with_spinner_message -from pip._internal.utils.temp_dir import TempDirectory - -logger = logging.getLogger(__name__) - - -def write_installed_files_from_setuptools_record( - record_lines: List[str], - root: Optional[str], - req_description: str, -) -> None: - def prepend_root(path: str) -> str: - if root is None or not os.path.isabs(path): - return path - else: - return change_root(root, path) - - for line in record_lines: - directory = os.path.dirname(line) - if directory.endswith(".egg-info"): - egg_info_dir = prepend_root(directory) - break - else: - message = ( - "{} did not indicate that it installed an " - ".egg-info directory. Only setup.py projects " - "generating .egg-info directories are supported." - ).format(req_description) - raise InstallationError(message) - - new_lines = [] - for line in record_lines: - filename = line.strip() - if os.path.isdir(filename): - filename += os.path.sep - new_lines.append(os.path.relpath(prepend_root(filename), egg_info_dir)) - new_lines.sort() - ensure_dir(egg_info_dir) - inst_files_path = os.path.join(egg_info_dir, "installed-files.txt") - with open(inst_files_path, "w") as f: - f.write("\n".join(new_lines) + "\n") - - -def install( - install_options: List[str], - global_options: Sequence[str], - root: Optional[str], - home: Optional[str], - prefix: Optional[str], - use_user_site: bool, - pycompile: bool, - scheme: Scheme, - setup_py_path: str, - isolated: bool, - req_name: str, - build_env: BuildEnvironment, - unpacked_source_directory: str, - req_description: str, -) -> bool: - - header_dir = scheme.headers - - with TempDirectory(kind="record") as temp_dir: - try: - record_filename = os.path.join(temp_dir.path, "install-record.txt") - install_args = make_setuptools_install_args( - setup_py_path, - global_options=global_options, - install_options=install_options, - record_filename=record_filename, - root=root, - prefix=prefix, - header_dir=header_dir, - home=home, - use_user_site=use_user_site, - no_user_config=isolated, - pycompile=pycompile, - ) - - runner = runner_with_spinner_message( - f"Running setup.py install for {req_name}" - ) - with build_env: - runner( - cmd=install_args, - cwd=unpacked_source_directory, - ) - - if not os.path.exists(record_filename): - logger.debug("Record file %s not found", record_filename) - # Signal to the caller that we didn't install the new package - return False - - except Exception as e: - # Signal to the caller that we didn't install the new package - raise LegacyInstallFailure(package_details=req_name) from e - - # At this point, we have successfully installed the requirement. - - # We intentionally do not use any encoding to read the file because - # setuptools writes the file using distutils.file_util.write_file, - # which does not specify an encoding. - with open(record_filename) as f: - record_lines = f.read().splitlines() - - write_installed_files_from_setuptools_record(record_lines, root, req_description) - return True diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc index 443b4775fdd10ea99420e516666ee9812297cd11..67228d4a4ff33fb6e4eec1ecf07ef1fccca8bb07 100644 GIT binary patch delta 20 acmX>hdqS4`G%qg~0}#}8KH12hdqS4`G%qg~0}z~b*|(8S1_z9Rtk|BY}8wC>~B?m+z2p|**8DjIwYNOG3x_3Qh9_yZ7 zgRSueqZ}fk`~X0*FOj%MIdIC4$f>W9B5}tL&dThtFq~5CQaXD@z6RimtJFLQ7R_$7?NltgC`1Bra&0Ha@#_A6V ztM3@CS#I(AVZu#b<_CDaV;qM2FxoNU-*{rM2{!rAY8@O(S^NOV+M1T$qK7zs7N3Q^ zQ%_tr&8o0>j?rb(oOuDZlEr38Rj%-qi$G>VSy!W6D(6~HMp+uf%30>?eV&F~m2UKV zF>g}kMk(W|^y94if`SHMP4@zkb6Aa~Z_((rY$w8~diqTndCI&{rG92Q1$O)4fpG(_Ky8jcZl4Fj6Y0ERX4*kHy} z6QD2`x8~kfIghY@`I0upBy0h_Q}EO149E;j@qU8$gzq1Q*}LyIkZanw2UYvNa(zF^ zSU<*b&G**cspuVnM~ga;1JH8|h(jk$%>i%L0K{=5zl{chh+9J3 zy8xshm&o@gwrN4vNPbL0wifg;d1~y?2bx#Vj&X}nvTo_XF&4K@M(IWnN6eGisTF=| z81$TZ`%XUVH4Pn7s&OHQNWz%CEJP-NeH2brCJ65{Ov8E5*Lnl_W;(uySG9o<)1k9e zybq(MJ5Vz*O1VsDeXbhaI9mx~e>As5mPuu;W|$;B!8_4?H48DF`gtg#9+rYoN0O@d zp$tG5K8C2O^ftpR=|wRgfQT7BY8XW|=sKkSf`KHvR2l`@p?h?@QdGpeGfKUN z*|qn`9^Er2>5^?%mUqZczfuBxXAi;uxovD$w`)ahts*w`KC`Hzw3eI($=aHW1^N-) zuHPn~lW)lqxkFNm+1vH4_hGdPnQatiVHKsqF3N?&%8wjMZj*H0BC>YZ6~9q%A!w?L z=OACtpBMGr#vX7Uknc!3dk0s3#}%OU-3eSN+}%kzRaDU?aR0g2Cl@ZHjkDEvJ!r$! z@%RQ8n{pNEffuEoT;-mwf?fF=tKCru2QPH zFQ?Va__mz+y+E$!@CNFV^tvu#S|D)w*FeZ*!?37D4O)9;l`I456t!uMI&{vk3`4IN zusZ(!b=`*H!n%XhIASypi+Rwa$_OyHQrU8|2Y-QeOqfWpnu!t;tP$!cJShv~CuN~8 zqc~p}?jCr<0h{~|CboXH(Zmr5`Y~5!3fu5`J)s{Jeu;c@taYt+RN z9AQ~f)=HMe0zudZ%orWzoEud9ukcaIzW@TJ(ql%=r~xcBa|pzLR@pTh6`Rh!ssVld J4c6_y{|6LjqPPG6 diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc index f3b74e71c01d7f123098f7abb5febae88550c83f..13b2f159b83ef41cd9e07a60e26599cb381b0020 100644 GIT binary patch delta 22 ccmeyqg7NzbM()$Ryj%=GP}linBX>>+0ABkCq5uE@ delta 22 ccmeyqg7NzbM()$Ryj%=GaMoqtM(&&t0A9!kh5!Hn diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-38.pyc deleted file mode 100644 index 2070897a7109a9878d7ef7f44ce362d94557b84c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12322 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 diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc index 4878b68ec7bfa7f3c46b98b01d5d7ff57fa347a1..5849a5d7b0328e90f629f2a4b5b7d0711ec98872 100644 GIT binary patch delta 22 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 diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc index 895d7b5f0e71831dd37454b81126133404b230a6..cdc269345e13ae2abb47dd1b9a073fe41da72892 100644 GIT binary patch delta 22 ccmdnKhH3j6ChpU`yj%=GP}linBe%{p098H*E&u=k delta 22 ccmdnKhH3j6ChpU`yj%=GaMoqtMsA&H096YI5&!@I diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-38.pyc deleted file mode 100644 index bfd2c25b2d6e1f6645c53c6ee7b4705d1eab4990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24387 zcmb_^d5j!adS6#{^*KE~!{PA0N|Z!$Buj@42km*+^7xg#wPNp5qu)zeio>|tMe zRYPi8J?li26WdvN4I?oUuQr(REyF+@WaBunVIxiu#DQZhYzILqjsx3>fraD5Na6$9 zT`|Ak_o}K7w$}b5-RRfvy?Xci-gm#cF*%t};PZoDQ_KJC?yq_}@ z2`AwgjYL`h8)ZY%X4#bgWH~ASR@svOR5>O8>2ezXW+T(gma_)yCL6hCzMPl1)tG1& z%7x}+d9qn77n@V%spfQfy1A{qtvOSkX>KoXmvX7bY;#9>hs4v3oy}e4T@ueUb~pEw z_eeb3*xTG!-Y4-~V}J8N`GCaph#xE;lK4c!Za!3gNaBUY;pW5ThntU-ACdHAbdiEnQ_(|or4ti)#m&-3pdSBzanpetKnx8Fy zR?_<$i_KTcuSonrg9P^X|0k?n$`I?k(ro2bMGEJcj%_a+i^-pWSjE{~+lc zcjobA744OrC(zy#ZuVZXd^>L8wqrOa(880>NtA0i#sDIT zri;wXYp(KiL#a+xdCc2+ey!ec&R1)<-InuGyM6mY6$4arW-u*JF17B|RlCJ*g4xCP zE1l6?l-zc?<@u;q<-ji~)mFjm6?dgtTMr*BRO^j3#qRPeu3zzLw=nKG3tdz__abJk z>Pu^~CcF6DahI!W4Zq?J^u1ReV8S)Ot=22fV5OaWcK4R+Hiq)i-PA(8;d<+y?>1lO zb7bW%N+UNE6Ik-rZTxRraa-60->o!Vzv@)|Dl*Y!nCUuopIbEebh@r5U5Or|MkdTd zbTWD@{&^ z>H&oEj@!YKVBijl>~dskl{M9f?2dz#bm2%sJG0X zk^3RQz^g91XvkMw=zVIfg_W+{t)rCJsY{~idR}$K#k3}`yUmW?HEew_iOuYw)5`67 z%kfZsH>=lME0wjDgH`~q{#vyG;K8%xotjtUnH>DgAaNEy?+-y;+yp5KsEGkea?Q2e z6!3uMrrnH_ST^@0kjf&Rlia+7*)VUy&B$}h?Z*mkMyJBMmdl(>+|nfLpvA0{bW$Ho zJ838LUaDL~Z`ltFC+FmWOQyoqgi}CjI!sMEMWnX5GZ+opkn&T`^n2DlqrBan-Q2N- zb|rV4Gb6b>QFfQ)Y*K9maeZxRIFHD%+SVXZNUc1gVF@)KTXcQio+F z=Fs9}&f`cw9QP{t7jt_AIeK-7hdJ9vrS|O^@E)AIp-?cf6hsQDt&h_b6KO40ix0Uw|N_% zt3)6ku)Ak_Z6Lo}I7qgCtLod$>bkw;+94ux9UJ)FRd%~|Tpr!3-r+;wnWo@R`Ou-XG6J#U299YD5L8d9B6L@RQ1Il$f&pi35 zAY1p^oR$+zg`HK}LVmrVxYB4ZRU2`-a0|FHPEBFRz?T)z^?i&Fts(<-472cqv>-Mw zm_$#i;;nT$jXJv6*>P2~4zd0UX6RncxdVQ$J=T5^+Z~pkmG*Z? zxD&n1s9$G@_VqtUva>g-eycZ$*shk1R{z*Bo#cC%&FZd;iF<5iS1ar9zQ>k#^}xj6 z&i=5Wte&C6)jb=jUJB3lN-z7Q-~AFlAmPCt%OCG$TjmPeIMmA_{X#DnrtMxH=_|c_ z%dGSHL%j)vhozl|dqu<_>17Z;>K~CY9F>Lh{>&A=?32vPzxI-Acv`hg3l zZr%U@c{g3>ZdKiUrR82!^*ip(i|yJP`7!V2tE#=Cs?8=K@aAiE4^+>-=C3*Rwte!% z$&)uk8a}xxyau@L{^`)C$-FN3Zpx>ad-px+E^F#%J>ngCFPv9W& zhYVrrN}cr}_X6M?XRCAOJ&erbFxiW^frnu%jUyWi+gc3OOLJy{2lea3PsG&OR8v zz-)VgMP4Pywt$}`mZ>gz63MZMW>k{kM$|!eafV$?wpD$ljx`YeC^$5ftf29FD`Yck zRj{zZq|?6J61I+bFqo1F%Lt@-^&%ThV(EgkMn38@%qe(4m>zg_r?RvjOnbN5YYhkU z2^Tz=s*uB}ERivnd2I`y0F~5guIsptI?q89IjD;aF0tJ#Fge(IJbj6I=NJ(Df}Cy& z01(VX{4E>SymT;*f*n7|o$)e7cYyB!oY-mH-IgS?>5viY4YjLEAs+X~An zLlA-hq-=R^V|idpWjDFhvJg^R4|B|P^!{@R^>hdX{nMcq*>g4mw$CEv-9(U>*=wZx z-wfkf{C1l&X5J_mX)B#f8$}~;TFAGISu<-)vwRX?liz8ikz=ByiMnZdl1yjP$?m@I z0Pb^!dKujhAp)M07>WN9503;#rtSd&e=4zIw06tW z^Zk6}S&k{Spxd~eQ$3VOuL8v*zUpUn3hkOGm)rn(aIBvBmBd#~wuh%V^))}we-aS& zql|4NTavRmv6a|J_LAyrs09M@m4uW2YEtS^uFWiVvo`s6`<;#M>ZT1-8KMX6$29;Ui;it{^agqu?uj($bo3P)}k}RGC2)L6GGMA}&x*Fi+6Ht9+0X z*@4G*&QcBL7@ksb8NsCz2v}q)74%f8{0a(qM-U{i!+Amhensp&A%XuzqzgtCkYQoZ zyL%s;7tonBHMFlp_VK>%MgsfCy){-%AEcMWY}MK#=VdN-54`ZshTUGG%y$Z_XGhfk z^g9o!jWcs8^%fcka+ON0QT4n^g+NVty;4yfJP{1|p&^qV1O7N}nCS1KpeGtNOe785 zY~B9^VAbV^W|Kr^&W8UU4=2bJ=I{dv-}ruk(!ZNn28251ds#p(2pGxr28j16SdP`? zs^wUlsh+t7xOv~ioYUQB&b92d*1YdR?sn{3ZUc-DnK~PCI=LkqgvED{OP1p0lrOTRbEdk2 zdVy8-eMOOz|5P)$o?b@*mD~#y^55>LGr!NCcw#M5wv%H(LBlMx6BzLTb&DG4?tkGO zZrs3bzw?gFbYo-VOxHYaLzcBzB1lO##BS>j)G$HXYb&gj3|rm75Y$~6`D(k~noDYU zPqCt>zL!r0(%)fB=1>?M*ndX0S45BiX3Ls82@pp1)W=y^RX_vwhen9tNhmX8=2yx6|0r zWcR(RB4$xKg+!|C%XYPCi?Yd~tXgf^?%U8+*>|*(w3HX|k}~oFP#2yxI}IQ$O34xH zeERg0rIU8u3!8a<=;4|0S*z`9NtI1~g9~?tQ}`%(`t<3K%+seq0=O7K5-Ka;2Z#ZI z1@>G8**5TI73$6i2J-QOgea^}@^au#^<2J*wgitQ(rIJtvc^S$kEXS#3hooCW}<7& z#mJ_hA$}MqUgVm4ClK@uFYADN`F@QQa_X3G2#ugXm+c9CxQAovK+KWDl%hg>m^EUf zBswGbolR~6%lC{r&hQ|9S7h;sZiI!-LYdH5qdwxhkUaokM2Knw0qi^>IyZpMpBe*Q zP+Qb)RYI-67<_&`>MU7pt%qBn{sG&UWfx>8_;+%sC5s&k0yeCqW;M+FS*vURbwd~e za)JrhNPwJ_okV#R01Z$!x*v{!G6rbhZb2BCUum~NaYd_ZLlm$hh;i(yXNRhd0m!}% z?XPPC>g#u~nD+d9$o9{NO*Gq%`+U^iP+Jf*e7n7DSL0K11V*MAU*HDM3e^E}p*NMq9g z(+f6P%_0S+8DUbG;8Q)YHR@E)1T9IfrdPmgY-X6ZWq{UXd!RMkhw9H@nBi7bWtHYB zBxBu`R-sWR1XZ~5?B;s7`tzdo!dlHQ!S>p-LRTHSA8MYNia zco8gElp8^#GY9JGhalC5(Yjxg(Lp%aUCJ%fN=60wjRM41?w=`}L6iV5{X3t7%}ck3Ec;oi3G1b75ccK)6Pu`^No_ApSVd z_tLuEX?NDB&=d{EvAI4Co6E@&46Itavo1oI`W_sEz#`zm9^?9<)h);|M?{by4ZRV? z{Kru;6ui_2tTn;)l2Z$w^bB%F`I5AT=e<13BA86&Az|f>okn-h_%jVmG=u?3Zuk=n zNFk6X7UZ2gC{Evq5PgM$7sM|LwkH{b5KO_=+_dD3Ll}TyYxc}tiCCyjcAo=f2lBS7 zHcX{lOa~TI5M1&D0G7LvCi@mh{9(~8%K;JyL#|!d^X@hj|T%y5ah6Fh!t)1-GH~N1jH7M1RpI zg9w>%S=e7i1PcQVf>-bpPzr;{h(6&l##T-5aFn|W*$#P05d*IHmY-TpQ!0F)if5_E z5tZ0=cGCX~LW`e`T8GM&^$8oH2FFCF%re&1q`&`pp6ShNNP(^_fYSO;BiLAU7y zMy0#s0(6BUcg8v|`%!NJ0R0+fAEfolsh>eY{VamH8O^KLn86}?o1bCqSp-4u>ZQ+B z&fmCv<)WHmCS{z!T3f3-L5ktiLGqUSwz|P=*aE~_nucj(1x#H^#K#~@!!L&8sdrHd zasnkB^^**Kios7K2(l=k58^bCBDA{$Izd=|x!;wlS{XfiJKUBB(IG4xsZ`+Pq1m@Y zvLFhOtdX}&1JW+IlWdkMkXfq$2+SKrlz^mwuVt9u>K+?&V8?bbbbd*}32FjnEkpnq za(=y{PpbvaCQftC+aIQql6s6O0+&38`SqURr*Wn)LZL@uD79sqAt zawWM1{s_Q`UI-T5$F8{}_NHa92T($YRiAQQqzo-Bs%eZ+{Sbrq8T=@Mz*>Y*3dAX= zoZ=g{Ep!i1*I0^ZDVW5GgGDJ68+1cdZR?#4#W%Cv8QrF78jpnWh9;JJ)?3`6{ivBR zi%?A!le17mS|)Y@qP%Hjzir+(?~i4PMq7GdBjWRZ5v^-h(t!$vBD18-)g+b#Ws4kfYVp z1+*iCP01gnO7=qiZF?QseEVT{W#u&LEvxE^D4PpVf=+f_Il}fu+Y1Tbq-cel&elbSL*nnx147|yoVSQv}yN{1K2%ppvP!i35 z6>S2fJohpNTjQySK19ltf#ihzI3ieZIUx~+yO-GHCSV)3pm6J%-jPuI0rlc45F-#U zM6UNu@~qx_Vv)*#o9*FAR=vgztmNK$*U#SrEFy10z3UgK5?-AIT4wzsP%;ea?;3CY zV_mwn7yV7Cf2dQs#a3Euiy1jp>F&=j0MSxfu4~&5wsp`MM>D>Wg#$8&qIGu}%$?uo zK!u-#so5Je=YoYn!#ET8HI_?J6Ap|dgPfv%IASxg!Kf%4u{v0v#(H1e25Eq+6pRwI zKZD=)x{I&Z!O4*)4#!VgPfm&(Wz#MO2E0~9$|l3g!VMTZY&a2>sDB19y8vanWwE9r zW}BPVFu4bDkRW<64Y(%>dC($$7E2+9?jRGPiz@3(z_7&r*}Ymqj{1}|g=}WQnxrjt zY6r8ks(M$0wP?U;REe0gU*q#hAvpwT4kMTeyQ+w6;@9EFGr!6WJMX3l{VHz{{)9EbqOX+0R>>eI-Kt`G#LQUwVuSue&iqIbG z_`rYwkDH4NIMn1ZX|31xw*i4aR)MI0k0Sq^11GZ6DzC9h@TidoM#A$bXYn8+K6;na zN50ZhG{)e}b@n>O7MTunQAosGTBy9{65d5MO&4UeJD}i;84ma)Xk0dK=)s<~7PlA% z!M-(98|Qw76QYhyCX|@I-#tENjX$ya&>V?-;yE5eLRNd$hjPD{pqYr6zy~SVq$CUi z0QL(+0kcgmel)WPmRL-!IPO}T-_7E%u61A_{xGfQEhF^;-j@*Vz?j4|DTDQI7^sWc$Hc)K}nGDJVQ1V2QI5^~ZoXeonYQ zxFo8=#-KCE)$g8>!#54ewp*f$&Uvcfjexb*SaW%Imvs zsLhDmS%zaVBvwu#94u+CcABt{X^8Hu&w&~{P=0`t4N%DilF347+z@D(%d1DQgX%1U z-(m1|1|0@<2Dca-XCP3viWrb#1AoCNbkUs_L`$!Z7i7YIf|QU3MdRhjfs(%eBLVUV z9wxFBQ}|8aw=7!oEf5^o^6?FY6pAV1Kz5AJ?GVWFsKqGpA`(1m>MTNo;ikEj@Xq>B z{6P^2TRUXdekvm=Xu^p+9rLR=jPDxaZ)bJCeu1VVYzCDJFf4@jph0$rMkOe*;nGF` zBEKPAQMh+cJoDsp1F(CY&jIJp`*iH9ToPi9@)fVQyB&hE*oAyJaevnbl5_6 z)V>9u^OAk7PKF8`m(#`s$)3pxLNC$Cjv|+13o|gdqsLhRM}@_4TIw-F3T0@#A1JsUD zd(b6Hra+UB@pCNmUl7dA4$$>4GMDV7I?I4)x9=mTLDXiRG`7OnAq2thQ0dXX!BEjN z(BLa5Tsr(^R{2#{IRI}IIOathsffw&tqp~V$R5T4jv((~I$Xf`wnPfxC!QsVbl#W& z?uPG8AJ9`&GeNZYc0N5Cll*UHbMW3VAzqBL295SL1olMlN&GJ0Cz=&=R~&I0s>kAfRcwBfj&k^!D0HxOiFkxujv|BZ7VW6Dx|`XuL?MubY;f;m3{n3YEq9MzjV$KST^$!oRY-qGU&2#@ zN8RVIX{iY`2`Vj;&i=#LFeSz_lJ<~GqSgz=vA%tlUSRKe^ewssMJ%p^L zP;!7Hhf@7liGS3I?b54hkUDh;z4LBeP>)?1$l6{7&4to`}*q# zO%H_cSmR|Q!37psU_WA9XtS4uNr9vU`Gj8K@CPw}H55bH7hNxaaR>0dFiN7esZr@q zh@~@aTU8ZqGti?}#8>cM#QdUq4Eg?nm5;fex<|+tYplIK)K6&J>reX>&7d}nz3{t*&f(}|sux6koe}$h zFzl2zy*K@o_=3UVHP&;GaY34{jJSh9CIojV91Bj2Kml^p(~I3R7c_Ud)`1YiTP&S6 z6msx#g{+42`TSr`WN0B!uC)Yc0*fqSclHK27jYPaIQQCxYqa>6N1Fa#=>l}C!zxxKQPC#GR;&jOCIsy~Ijh|fxV_fk;ApeEO@ttp;ro>cAbprsmY_yG18 zz($annjK0+F7}4t(`?^i6&!DfCH3WXCI}*g7=(Qd`I~PJF4CKC5~!}LwL#YQs=ExS z5z=7W*0#WYvtgUiZcyl{#K60`Ho{I~1AHH_G z-hrdr3W+IbDFi^Q%z!%IbxMofLkn%(1%*=y&?L(a&h8ZH>O|kBr>M18|BAsE8N_rI zUUpPB@xQoG1Z!jmtl&E07*-hibCty-9oU~-}@ZxI1FZ7^2s zU^Tfb0j0?icmIqlx}R56f0xLeC!=Pt0ZD+rpZnahE);nT;`GA`@je-emTK<08EPiakW{Zmir^m2R6|$^VRl9{NTvEO7 zayZhiqF*fFtHUwG3I{PK%iuyio7S=aUl#gv2H#{LAUvX--u6J(U*X8bs$k4yaT&(w zKJqsiF&5`1*~!ZYhAf%ekdedh0)F1tfK2W;0eH6fKCRKe$~ms$7dC(98y2zPiz*Pd{~nB zJ_RQev;lU00c9po=GT4Pa0IWn=?+4 z?ZE!}dz^*8eRUSMBXjuQf#WmvzO|9*Wxo8=>=W~V@PKd^R$%uQ#=McmNcQxyTgJu2 z=f8L}xslt*Z%p*^NIknjRmoo5+06B_&h-1qjY)s|=DyyfvyJCuqv*`^ik1Dn%;te! z(b>*%{jl-YBfSaKJ+VP0%3j>@jOtE@tC;IeVHKxP>mZ&^hqc~B&7FN8cdWo6XSTmu z!fWs7Zd}8qUf@*?rCJvPibemzm;oKY#y6;*Ca>yMg{%!YsFBMVpoxO3fvUu1^iA@| zQQ0^9Te~R!1@$q)?!-kp&S(mv?lWimc~oY`T8C5x^z>0r z(JuLo`}jaJo`x(?oI)A?r-s-9yIHQDL-Jw|h;477kUo|oz>S>e zf5NBp3@E_$iI4g-CTW5N!*>f-ibi0O?BEX7I_@@tviU&<%fz(_G8ozdBZcziS1T7U zEnGQw{nAB!_pt`6w|aw({U#f;?p7PO)wdXBt;@W(2zxQi3%vHIwHj|1w}1eMc51s-2htar%3&%_xCzbzPdrqL8JP9W*#H2fII1|`9V@>7Xn=z z5lUqqNG@iiqnR)>m_UTRGCN445u}4`R4^zo7Cj%u-kETaKTF)FFeTcyaRm_E>ns#f z)H%Sa4Yic{Z7W4111|=`ACG1548{iJ7m?!CLDq`=qtfuR--$MKIT5E(E{)p5IS0+L z7tF$8LDWBwG0C0Iz#=J!YbLH5C{m(eR@_XynyPpFN+f6~vG(UW>on|R<{B>(4@aL# zL`a|nFaJA0bZC*w0MC(oHi6}g_tP6WNItwo_(;#>ZD~kEkcO0l(DEG8WiSS`$kDlv z95!`MEF;c-kk|QACCco%NJ3Lz$5Rkqe*z|v#0F)pr20Wo4bwR=FP9r9)sF)sCswH% z7M1Y5lNNLh-WeD!WRo~B)&V*I*76dr0kCvKr7Ms-{mv&jfC7o z&-EtI*1zE>!x2k-^yjTn=%z)kD}0&3Tlcm(QE^sz8^NbO=#;a^x(YqhCP40eU=dnHnd4C$`>4LPj#1qKw9 z)f|KGVel9O5u|yI z6%?cKg(~%(ted;^cFmPnNdz-eqe}C$zQOHzbCVjK#z%g11-bBYzV$xHG9E!*kdZs! zo);wDw`(IfP8~+ie?t8BbBH7+h|xsB$N!JgIpQ;&j&iAB$M-MN1#MJ?9w#)dYE`@i zoTp=Z*f7UyRa~aYljAWei7p@!)MoF!v3_rHkq&BD!Q`B+3mC9T2 zn!*22rF+6~aIhFYuC_>KT=k}0wdFL|lI&w!RV^^X{Qg#o?m)lV?+82loGUuN*D z41R+F&w)0y%NhP{CVz*)BMbrtzt6y8AbiGd#{Pf-HNWbQ82kx?BMklz19AZh@25+s zJYxi&0e})Ag7TaCG=c^EJoW>cmKP+ZQQ2_#XC{q1fCQT6X`H8iXeP`NnD}3Xc5!zx zRV=j|-0%cNVuzA3;70L(_mm`DffJ?knyn z9%oLmP~3s>d<&qcA@G}pUC2o!?jwzM(jOQ0&Q8uQ42}6OIZpc9>rqP0zmR!?zZ0bJ zGFqr%Y2pt~Ro}L71_|DP1GPCyuIrL&1a^O%-!>TQeCmur60eu-T6yGo7b)UX8#-ZS^t#yz_ z@UV%lp=70qxRL%3ska$RodP*Bxqzx!} z!grxS?IQ~KmU~xj81;)sjerkrH!v`)D_%3yf-ipGD*|JK{{^SymAa2>RR9G7PPD)7 zTES2qlxylUHg)KHg^#?CZ6Z`7(0&tSR&ebKbR$T?|6vX9yVKN7RJkt#g48htA;1M0 zAQPCbn*%41hc7rFPBLgkd_|}=4Y#o3uXo&X633EAE0Ls2X7m;I6fiD_;?L7XMdyE7 zG^3XrSs>%McdnC~Z$wM+hiD|$#-Bifd?R_pdr37-S&^4KaUVa4d}_^^KMTGFPu`jp zbA1vR8In^5N)HMZnEM$bn$Ive%Ro+<;FuWE1QWbb6ux5VE@wteoB+|{yE@2LbZQZbzh z4qTC!-dv+U&a3OM=vPyTZ_#Jr)*?!-Z*aEX;ItRP%iYDl!n;5d>L~<4=JMjT>*uaq z2~w}Wbm`KSAbatZ*B7t6a_-^)n8oX_E~3g0Z~~-z6kaSt@&!kZJEfk5AMW<_(%y5S_yD8N7VxzXM^q^OMD;@D z2GlX{;#SeS`i>D;eN!nZlVX|HG?Ybno1T;9Tl9!$g;AbZlwA!bwE`nN0K(~Yzj_&n zMRf4<^R4#$5?=kI)=!@T(miE6Yru2bGaM>KydVwkNkB*Q^U}_|ZpVHC8CqpMm=m%t zVb%lANAtKP%9n@DLp4lA1TH#=K>$c`xdF+3sosDgsMLMtGGU5%XdbR4&|)?kQ7^E} z!$FYdOwn72PgCeQ*1hvUX=unJeib-&z`Y&);{5|+uf$yGgGP)OyIe(j^P@n5Om`=F76TkH^aezB=KVCT{ov{kIhwyxS22mXrox+iaiDpP412Ei!b#3N#o*^T{R~T3 zE?zvVh!pq&0Ut^?2#GwYK^hc;RfS0uu9gQ@bECrU3R^6^Alc&b0qE&UaQFd{Rk-^= zDv#==@W#Bb$-&|AWd>D$!f2NXWMdkO?v&#q9GT?uzVXGV0Q1C~?vW(eM)Nk{+YCpOrL7z~H5}vyoXA**#nYf|r);Jnix)^4>@@k&ea_ zu@2h%w3op?1mO}qP`0#0O&+~Bf?zljxnktj!>dE7zLNu2UbgBk8=1U+k>-E!Vhn!4V%*@#gS41 z;iU*oQvq|710;($I>4}KtdyzfH!OKt>Zwxt^xE0K3BxeQIOUJ;HO*DKHZ{` zE^z>&mL>}*@9GLPPKbe1*Nbt3dWxMN9M^gOZ8!S$H~YsGlK0*Lj@2{l@YzpntZzlu z7p1lhHwGUE?H-W>`*}s~-D<|@7uYPtSuOIDD^@?oB*~AaBSKb)aR)Ga%pnDM$(g7Y z&Jc%sZzG_7xc?wC88>K-LlEv>$^uK$j W5A4q4onDlPbJOq!rd(})>;C~us^nDw diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc index 2c77e9c8a8b04279a4391eac516b719439c5899a..0a603c314f12392ea03643b805b232e13f807450 100644 GIT binary patch delta 20 acmca@aod9XG%qg~0}#}8KH10}AOiqJp9VAl delta 20 acmca@aod9XG%qg~0}z~b*|(89Kn4IsYz7zr diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-38.pyc deleted file mode 100644 index 98106de1b74ef67fa3b0bf40e016f53ac288e5b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4017 zcmbtX&2JmW72la%E|(M~(TZ$Y`P{Z?5T*%jxM_GWSNLqQh zOV2E&ik2>wdMS`Y&rJdQQb70qHG6DNJ@*zMLVja?Ndv*qI_bB@-c7C3btW2y#L^KYrVnpnMX=UCB<6Q$r?O& z=s$NJMmodhjZT=PNz@7BXdr_m>`E*y{5H{97{`z0vwoyxS0-79ZoBw6n0$<;|A9_g zEhelM7t7KXT-aZ8;fT^nspZI$aKC1vEW8t^RiBDd9<|HPe=(OxVS}H(=y&NB&U{|1?4w? zesI72xt2<|rPvQu`%xm-RJ14CYiXxXD%0)HRJyIgZZ}G{+h0VwAIAPh))!Ig-@AM7 zUi-689zWR#elIuMVXxPg$zHIJ@xy4dt)onS&YCy{LC5h>}dIB#iHXF=~O9 zS+jSLdjYnhEC`4x?V_`6kGXuX^!OYcMBNeTnpo~~Q#2|xP2z~-_ z?y?vBrL|@qGhqt{CSLlAA2H#+uwhh0!D#QLG5PhWOX*@wjdXQreOW((rgkmO57`$M zvz~EbZCIy_+@#t`yHW>RD(#-~oHy_0HeecA7u_7L$SW(`GLe7msnsRAmhd{T2-g}k zrts=a1wnHqPT^g8wK+a{iAxd#ak)X)(JL|ox>ptK7@$u1dX7$&u#-Dv8mCMxVlv5? zw-SflO%bjV(*L4agLl7|qv4TLmfKI|!8gpm#2T?>qfH1946Cx2Ni^7198FJ z0v0AXR5!8qDqTmKCZRQ)+||bA6h+M3-3#Ns)VZ^pMoELK8WzpY#7%iQ2#jp$Ms0#E z<7|PsXRb52bv5Wqzz9?s&6wM-F(_nChE|xJu#J&9NBofQ+AuPd9gEC;P~M-bwpOcI3mTM?w8v-MH^R$AUgu9q{-6AMGoj*u75e?_hJR_Q88o zDw@JGaX6I!6t1!JTIO-^UQ&Jf(r+>*l_=Hj>T?G=HpIEAP^6BUV+qInVZ z$frin$iIvkk{M8FQq_$83CU!azpxJx*C^$0SjNMUHkLt^&wZj1_p>NXexp>X6p9R> zM+}#V7`e?ItWDxs3WW%+$S)1h8tquD$_DRDXy=+km(n6R6g7i{)MA3HL6RZV?jl0N zl?au6$XBKisk=C0LYz_ONJWGpuk}<)25b~LiRdOVHrHBfXWZO(7Y>>{dWao6;W!6DgY2 zsy}?5JX(8%Q{8k=fBs)Y6b%-)E*OEMvOkTY$dX$q-SEq}QM6Q{D8V2Q%CNt=!NPYbyP;HUr_f;bh$S&3`L$(!1)!8&V9g)$Xyi` zN8})y$`p?+cyr~s*}7AA>t5aCY|-Y-&@|@qa-42&BYEaCoivUSsF9X*@pkhe-xnZg_OmF~CYH3`FchPYjV6RdZKN9mFR#F`AL6Z26>@Tk d1x$$RtKj6`N+HKp3LKh%d923jyoO)Z{tmLL!4Uue diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc index b617224ad2733c299c56f0b32e2c01047c1d0fbb..be179b3b7ff03358f83225f7b6b1eb3c7e5528eb 100644 GIT binary patch delta 22 ccmey>$n>j`iTgA!FBbz4)O9}D$o;+n09xD#3jhEB delta 22 ccmey>$n>j`iTgA!FBbz4oORi^k^6lE09vUB?*IS* diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-38.pyc deleted file mode 100644 index 3a21bef6f760ce5285226feb88c773f1f20597d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18906 zcmb_^Ym8jiecye}b7yCV%O$xaSJD+JiX4g@O0=B^L(8H_F_t5*WReo?4VB^S+`GH8 zJFh+WE>}C6wF9pbOHO3VO`0f(Wh@&vEtS?q8#hghv@znMH3Fjrihk(@`ala9aDjX& z`k@dkslVU<+&eS7OS%5gA@13Gp7)&p`Jey$@Wt`*yn)|WzpEDh=4He9AIyyYGRQoI zC-`@!VR(jTHjO#`*PJsYZ_Qcq*PgTS*J?Vg)LhDB8@riqW#%%i>|C~$o6EKGbNSZT z+*qqHS7?pTjkk((#n!~!gtT>X?Qc!ZO-Vl8JkUBgcTnCl%|or} zxoLUNHV?Os%pH;UT=QsaW^ShSz}y3p&o>`zJv8@F%bjyu56?Z^IyQH#b$sr))QvSC zX`Prm(Ry_5QPc2e{F7Ve+$q0|f2aMtU-nGTT(A!tUg4XLH|`Z*bLJlNv)%;iGD+Qn zb=bIHnOFLzbXV`M%m}PVWZQoH6#1FA4aJgYu%=g!S}z|ZnT4to~(O#)` zYvGcfdb3lPPhj*MMtiQaxag}W-)MV&JFGT4i{(^g*MgNO+X#@YW2(h=N409rM$eaV zqKxv}wU!@5Y1Imq?_;O~m%Qa#9V6WETiq)S<=3(Ljc9yFw(LY1F2-x9Xe_9!MmMZ- zpeT(`Ev_{%o*%BMcHJh-f3*a z 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 delta 19 ZcmaFI_>PhLG%qg~0}z~b**B5nG zPqh2tzpDSEzw30`BI^6Wr~3ZZ_^(C`lW5nB$VDc4jpbc%UH{>An|;8}Av?hQsu)%p z=S&xbxjBXkwRf;)Q?RNk(gl2y3##m9KICM&=`c-UJ>6_GxyJ)2YXS8|UgN)@132>7 tx9WIS1v;=~6G_@5YgHzU&XmEE(TR*Lc_|0>>!&rUOdd)c*E65d;tk3bLxBJQ diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc index e452c88da6caea3af5354b51f75004711127b81e..5c9998e1982a97443d9d4764d6637023655e471e 100644 GIT binary patch delta 20 acmX@bd5V+!G%qg~0}#}8KH12)0LP8d@E1FCunapk%%Y^yb>fR-I z6fXJq`~Vj#gilB*(^*%8W7?uAh9 zxeR8N*A=bCciLC9?8@JY(=_g-P&s>vHkH3$nxx3%v}IL`ySX-$?!a)AAY_mmiY`no zyI}gf(e$`Qe@0Odfu%$s3CUR%;DV>DOIt~0UpPSnyh&U+mr}XPqnNK6gy&byH?f8e z=pr2h66XvSg^3V`x?1TUL;obwqp~c}fQn9!0a9Ig2xf$N-=3mj-=euiQ?ukooQqF{ z)D>4&`^u`8+J)K8%Cx>6sJDm(ALnRDkI<(NaE8p4zJ>o6B5GyxI8V| z`tO343+yklVI3ysK6%y301R=~?<8ixs6Yky zfO0ofkN={&yT09;sr)F);|!vxnvJ5YP@|OnW)uxc#7PFZpXlGAdO}+Ay6H*FyRLKX)?DS8vyvKyEXU*we#OBf>caYM7f8?{&ztMk z9Kq_{HLNznRkk)*J^c5dMDJvrkWw|nUEr1fVj{vzZjk0iEX$_Vl+s%G>A1fD1&bMw diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc index 9a864facbcd22012aaa377227b439ceece505201..d26aafdf00237f7c86acaf58a93d530daf8c1bf6 100644 GIT binary patch delta 19 Zcmey$_?40SG%qg~0}#}8KAFh<3IIF*23P<9 delta 19 Zcmey$_?40SG%qg~0}z~b**B5<6#zTv20Q=& diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 92b38a8588efde05163b5bc0a8d3b6355ad7ff5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmYk0F>V4e5JioY0!88uv=m{ZEm0JKLWuxnfixpoW_MVP@Y>ec262VdT!Nm{q|FiN zsN${2m;Rgi^P5@sde0*1`^vj^{|CCUPLJT_di{SSB!2SF&g0)BXfYnhk zEDTPW4hU0Q#s*FBuw+}aY8o;%Y{*BY`$dQq*?#_-=dhf7t_t~uTTspcnu9#1eMVdG z6!68Va<6Li;K*f?Oh7hDXN=zJ7|5DTW39?lCR0g4%Aq^`bl)0VMUC(6x3^^R2f^Y- AEC2ui diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc index 9e6367aaf7cbc44fae68199618c6267334bc2dd1..f6be7642a5c603eb623c689607bfdf1554dcbaa1 100644 GIT binary patch delta 22 ccmcbxp7FwZM()$Ryj%=GP}linBlpp809t|vz5oCK delta 22 ccmcbxp7FwZM()$Ryj%=GaMoqtM((5G09sE6q5uE@ diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-38.pyc deleted file mode 100644 index 48e0a2c505993a22224b5f197ebee76473be0b8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14933 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 diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc index 7ffe43f1c05deb14a8a0c05150d1a2fe70cd78dc..bdd4fed3fa33d0a192834f4f531aaafba4507649 100644 GIT binary patch delta 19 Zcmey#_>++g`kg03w^X(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o3NzvsFxJacWU< zOlnGbVo{8LUaCt`W?5>COMY@`ZfaghaZEr_etJ=2Zf<5?dQ4bmacN?XLU2iGN@l)- zk%5s>On_rhNN{|3YEn#MK|xGvURiuOknNM16jPj8lB!#fn4F!Mo?0AJkXfJ~pP5&Z zT9lWVqhFL-oS#!#l9`_eVV0%lWG3my0~KVJ#K-FuRNmsS$<0qG%}KQbx%e{>GXMbd C&`0tB diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc index 23ed9e589d1b1240b5ffede57a22bc9532715fa3..66335dcede8400fd000c812b7ea832aac8b6b602 100644 GIT binary patch delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc index 059695a6f6fec310514d448d1892d0e54f9611b3..4312779047421420e0ae9f88f89d7853259c0875 100644 GIT binary patch delta 22 ccmaF1sF(vC2(Rz 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 diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc index 48f69cff6842ee0e54e39cb80c311ac9fddd6326..40801eb5064d1fa1997058a2ea9516865ae0841b 100644 GIT binary patch delta 22 ccmbRJn{oDUM()$Ryj%=GP}linBlm<_09{oF-2eap delta 22 ccmbRJn{oDUM()$Ryj%=GaMoqtM(zo<09_&n!2kdN diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-38.pyc deleted file mode 100644 index a2d6a791bc128654885e79261b14eb6aad93a808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19031 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 SH*D@;(BB$Pi)cy>JO2j=F7-(O diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc index 68f5b7ef5e3e13b9316539b0aad0f96b54daa0b1..35d01ab55b3cf49f96a096fb265c545370e00923 100644 GIT binary patch delta 20 acmaE9@X~<$G%qg~0}#}8KH10}CjkIPs|HE{ delta 20 acmaE9@X~<$G%qg~0}z~b*|(89P67Z%cm^&2 diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-38.pyc deleted file mode 100644 index 0d8c0527eb897572740e3940714b93e9ef1cc009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4884 zcmcIoOK%*<5$<{Hle>ILwkSW6iK4__n_d}85Co1OSf&)4u|WwTr67wnhQsMza>RKo zyJtv|SRG;tun`~#a>~UA`6%R?bAHGia>>caKS+QeU-iuH@}(e$WQghQ>8`G>uKv2} zYd&nZn+(ry|11ZquQK*G`Z)Pi@$n&E^;Z;}^%ys}85%tUzgB2QR?jl1%?|CT(yK(( zUNx%qYEivcj~cy3)a*5*ncj?+sf4Yl-D{&><+X4&n(NIOOw5S3sBJUR5OY`Az%1V0 zyr{?{VNqLeA-09pTM%_If0dy`8?S$D@&<1{vwMqT?o`jr*A{Q_HhL~y&@;>D&~y1? z#^?FMGsYLh!m-tRg`4ZFv*`WBVC-QUgh3hz<)n!ddPhNc==f52sc^iQJNtnOQpZO% z;Am6MAjx9hZ8ld(CWyDEQu<>m>IBO1oOkwxJbcIT6O}@7G87V{lDO-vrcMy=C*i(O z&4Eb$9SmP~#FJEdKIvU{hDj>oH1I+U+{%KG(*#k%vyjY?N#v*`lfGCkOb{{{973eY z1C`2PE2DXwNTePN_lgOz$Q>cYAdv!#%zP-vf}{hp@Dq8lFUSqMLJXUNEKkWShsKa^ z4jmXnDx3rF(Ba8JybK$h1K}hwj7*cv-}kNIvqy+*%iDUfIZop@6QI`;n)_ zqhi8uff0tr#>yB29W$>4@gPxoRf;r|u}>o7r-F)&*T<_qLXom#_S6`$yX^Cuee
<+k!gC{ay$V^FshprErhnU1zFO>(ej` zVlJKl!V!T0x*<>d6-X!nXhJ8E9O$F{ARE@;AWOlamdAOgBHM66K3ndea`geqYvp%t z53<t!9-#hNu+_(r7Vnk5Q2k*ryx|5h z76vHXkV0b>xG1XoA`G@}XrtYUk*Yg9%x7G3v`a@b{Q>RvA_`Wm8ZD!4m`1fMajiAK>LEfhT>Hh{q+C$hrXNX9G4bo?~gwlJHMQSKa9Hv9m+WifRF4+*f z#zhxk1ro>5o5l@7C*W0tDXqo}5pR@p7>JMq&VxXzvey(HPbw0G)x-YiNHtW@7Z}Xj5Qi4bf(b6^b_OF;KBvkv}bwWj;5l zjc{@bN1s4;j3cweQ8C)wt;xs5=n_|d|3Bhtf)&801cDA&QCm7HHM7D?bNFWvmLXLyGCFg*%Dfs18`aFa1tLG42tWfaJAg$g&!P;e{G@FQ( ztx3FWSxrN}j(*CZryfeJAL3PCpb!kCl=Vz*^ekb6P*y~>Ad{jd>L88{(G)YFj^@`k zx3~=&*aG!z^9raW2r0g2F$R(#mqtl0=fsTun&B<<&x?h}i@eQee`kn>ZlB}x&+KEP zcZn|$fz0R5$~Ih#28!tWfVh<{JYModpg_XkuHGg=qlXI%yCI;1H~_ z;Bubt3sr=6eUh}gA=#tJgcK3j>G<@4=n_)=6e+mmc*G?NG7{0^Av&d)N-NWPR2HPf z%1(NwK;0Q;0;?Pl+uZ_%9XoGqixgQKG)%|de4)%nXe-G~J|Dy&Ekm3~%-{xG`GlbH zLv>2OD|j^^M<8h~136JW8Z40QMp1o7a zZ6(5id=oPk3FA9d`z{q{&QION@E~>FjI67pV6`faNYyx6I)l0HShV1!plau-1+8J(R9o{di}h$6SDQNRK$lkYS$$;QWyeILt+i83oh+oOeuP&!C`Rn_rKd&;{(Y>c zL$1Sg#HaR5a+D+?c-aiNyk1tj@8^d9!YCZ0eWEjbROR z5)oDROEf8>oea#PYEamnHCq=WN)I^YF50D+Vo1J?UfH2SPkaU)HP=N7a@{{bV2q3_ z=N+MCddqe95Ch8|tePjj>q-hWk~HUw zt8|xI8K;3lN+UOJSyP5LFB_S`}ikUyjzx)R8Dskli6p*3&Nr74B5${V4~a4|s^ zki;ENoXZIsC8gUCuOd9u4ZAsut;Y@JpRLw>b+I{HMaCtW&a3hR{K(rV@;N`jl@R}n zNMhCXwtPvOpI6hvAxMU#gHxC`SzNIYvR*b&^xnk9s_X6}mnE`W+_o^XTXJhj|A@kh zansg|mp`NLh4D3h;-Uig6Ub{jFIr??zg29*Z33zy*V#=X(AUit{+3MJXtr!?Y0+c| MqyK7MDSw@R1EgCxdH?_b diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc index 82c8ad7851a93bf7ca738bfb7c7289a47e693165..099799e7607a3ccfc5e5c3a0a9dae7b6ebc5b8b6 100644 GIT binary patch delta 20 acmdlSxH*vfG%qg~0}#}8KH12T1{3_ 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 B+y4Ln diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc index dcaa3fcadc870b8afd43174b1574cfa2a999d5c1..0e2a1f1fd6d1fd781f2fc231bc76b67f3e0c36c9 100644 GIT binary patch delta 20 acmeyM_CbyNG%qg~0}#}8KH12fDhvQdRt81@ delta 20 acmeyM_CbyNG%qg~0}z~b*|(89RTuz9BL*q} diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-38.pyc deleted file mode 100644 index 8fd12b961856cbb26a8257f6aeea3a82f6f371e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3304 zcmb7GOK%)S5T4gQyt{Tx;)FyAQbP!2NwS6r2@wU9U<(u}GEp8NRx6EWr`zjE=0$g} zjg505IUyl&gul^UETNQ=UW!OpMRI@ zf6Q6dpCrtF9)xT7sT_n`+>Wip?%Ou;PV6LZ-!;4&dr7TdOX~f)k-fN)H2Y2PHC~VB zl2*T!wEJz_60YbxvitL2S-ioUk1gI5%|~v30rDJgL2eoO2yfr9x}6u;)#}7l9JDMV?75H`pA^=)qT9d2{yiOpT^J@)#p@F3ToIK0jqkZarq+Gf$d z73I@i*Ph!&T?##xX-EL3AMq5`75vm05N&Duk-cmAvi)qnt&G z#aZ?sN=GcvEI}xuJQi$INEKzNV%a+TF%QBA!ASUNkcfv&XN(JYpG2u(TN_chG1Vqx zVV2~9j)t(Y73mF@=?x*7+>46pvAY{aaU64|g9m~IWF{89oxjWsCNWHi;w(ifnBE9d zHdf;x?y>K(F-xM+hGwY{Sf8<6W}6Wg&=LTaio$0#tAZ<}U)LP>QW+8M6y)rPp<314(+(Br*@u^`wJ;g$r!O z@oFFC54ZhE28t7Y0wc(U@&oNxI;aRwiFp0FC6{30pWjxl4DKnUa3DC4557*ts*E

e`$In##Z7{pmeQVdgZ`Z6-=qjIBu64B7>%yZGBHtjk9-B5&cu~5Z6?Iff5@@9O7$)UO(x`DVpXb6WP!$=P_#s(0%YXaeK=Ma%b-jE`gDJHG!tQeDo-6R;<#{v;zp zr87eag`^D8zKY`9v=>g8kr2X5U)9Zj!th>a>$|4w*xchabTd!XAlK2|s6%`Gx~Pc; zM&_Qlyv5rXX&Si$jd{KRc}}!M8yZKTvB=-RNXN)Wp>d2aL7uPV)iSDI!=69jnq{%Hc=epNHZmb>aEE(TszQk zT@0GiTL7c2r)ad#%q0d8&f3ng>CQc+1E~S!eD}E{PeWN!i;>LrzB$$X2$RYb zyS?+)Vg6KBaS7ETG`=4W9uQhzT? z2vxp@8g!4sX-RFMsOxQ@9+gO_MEfkqE6qo%=9%nG-h6m;fGyj+lJq(#ydmE0C0GO7 ncx>7*-Ee0A!(bQ9tL5GKIlZnGHTjO+u@{|=v*Xc`lOsG%qg~0}#}8KH129SO)+}O9tNn delta 20 acmX>Xc`lOsG%qg~0}z~b*|(AVunqu87zV=t diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-38.pyc deleted file mode 100644 index bd295f51ea035f9716a6e16a6dd504f5c4581a69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7640 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 s8np<zZZ#9?y1K>np2mk;8 diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc index e38fe8939db70d8f23428f3aea5fccb84ce60e1f..d3c64af8dadd546cd3c20e46282a4c5579e392fb 100644 GIT binary patch delta 20 acmaEn@FIcxG%qg~0}#}8KH10}YXAUETL!-X delta 20 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 Z)#`dhZ~U3^qNX5y^r(st^MKyp{x2%JaWVh^ diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc index def998fac7c7963ee1f371096d7cb362c9a5a27a..421b45bc8f98fdb43ee983c402a569cf73d9c79d 100644 GIT binary patch delta 19 ZcmaFK_>z(PG%qg~0}#}8KAFgU4*)tt1~dQw delta 19 ZcmaFK_>z(PG%qg~0}z~b**B5<9soKl1{eSU diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 7231f482f24324304d28d7b5e9bb75cab603ca2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmYk0Jqp4=5QR5jA%b_Xwa`dP5m8JjD#o8?U|G!=29wRQKZ-XHZ({FhY(0XVm77W* zyl>{c>aCm22J^Z-^r5=13jYdx7IMn` delta 20 acmeys_koZ5G%qg~0}z~b*|(89l^p;=w*~G1 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/_log.cpython-38.pyc deleted file mode 100644 index 875682a018a651b79446dd9b6eb2fe3d7e184cce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1546 zcmZuxOK;pZ5Edov!}2;c(xwG^DGxnZfFl<^7DbTw(V&2_4!p5jECeW8adxdlk1a{r z@M3TAsfVIJz$oHld+x8%wWs`o0zGwx+I81}32;P?$a#G84No^VJPXG!f64Jbj%EE# zo7Lgs<~dIF8ilZimSDop*pT7Z$?V)2I=MS^nI+s|>!l@HqJ3?NHn6wt_s*~bUFe9; zjV-!j?b;o#30rtKOstC@?mS@+EPrG6=YFMhnWr=0Svi@c#l-UtV4N19cw&ATJxHEp zu~K|oO0Lg=zoFA0gA0(OQo&Xb1pXVIgFY`s;CX40>S$qb%jY>-;v?WmoMj+zg=T=q z#T75nnB;jWsti5q^H`fh%V2^D=%dDy_YqOB`o3K|FN&+$O=6`#euAom^sA$Vo98&y z*C@b3ysV)u*w6tNTF^oqoEulTqJ=oL4G!&k})nIUCz^`*(Zp{K~L|%piin)SX2L=)qNxjb$6} z$PS4via#v5fuDb`_rDEK6-X6=KmP{Jk)x}dEOn8ht)v~sj7*sYC^3FYI=emj9l zs<3tsL{6Mu@*TtErVX&`sSgI{WtCBjKhW&d{@COtze{P$-!`|>00N#C94QmrQ6`9R ziSI~cj>vTkx$n0mQKo*RmJh=|y-N*dy;z7NYRNv8kfY+>^c89h53IJw zB*EgZ%TMX5@zd5P>^Xx&ENb?spAspAnT*4~5(5vQ5`@ J9($Xu{{XfYj@AGG diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc index b2a0f9b99d00b051be7668a03ce5a49e0bcf80bd..d17fe9795373724fbbc6e8428f689d0eca44e508 100644 GIT binary patch delta 20 acmbOrJVBWIG%qg~0}#}8KH13K$_W59papgS delta 20 acmbOrJVBWIG%qg~0}z~b*|(9ql@kCpZ3S8Y diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-38.pyc deleted file mode 100644 index 2faac3cb512b9db8602ce7147ebfb6850a63017f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1658 zcmZ8hPiq`E6d#RdcW1}zwHw@|g&sudWoY6pF7!}BX`A3va6|31unY|HNZyq_|9H~a zu^AUi1BHUWK@RaT_kNnW_SBEip8BM*UE5+L&3k%(fA2}JR#zhr#~**f!LLKl`^yry z#{h|Maq1Qq;mtikgrAc+al1eFai=*gf_XsfS&$Ek;e13q8Ol%$-uhxFMsI@oSga!_ zLf-f-6_HqZGnlW44{q@$VikE4YfY+Lt zrDVsl6ctFpcwGwxniZ93a>-1^bmb&Kng&XC%=1QS#z96|Rn*+5eH1&WzzJmyfGiEG zRo#2o=UQ$?=u$FO8az@}$NOrB$Xud$p3*e&Rd4Bqs9Z6ZMa^Wl+sf}he z*ZOh9OTi>YY@8euP}L}dR{4REz)+c88N)DHw&dkPip}V61mD|oZcec^w7)|iTEGs~JVS0sT zH*K_pG~?M)rsymtU`@UEV2sZ3y@Xp+aDa z0^vx0QW_IyyQUGUVq0HqZ6z3zid+9+yE$_bRtksB#WEc<-{a3U zG%dFI1wHqTe@Nd2t$#^?wFs7==d|_UE5{$S_s^q#iFp10)Pzzh#ZmqZK~Ul-`KZD+lv{5AqmOEpV0MSW4bZ^4tcv_JAG%qg~0}#}8KH129fCB(Nj|L(D delta 20 acmX>tcv_JAG%qg~0}z~b*|(AV00#g*Tm}XJ diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/compat.cpython-38.pyc deleted file mode 100644 index 465b8fd475338d81aae9dfe06a2a381c06cca3f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1540 zcmY*ZPj4eN6d!x0Njmwn-4zEUE*2b?NRU+RE{K8<%XX0pRTDM4WE({qIb$br>x@UX zr%|f(!XgfQ1s172a_7_d%89SQiRVd+7LV+C_Vau5-tYb1ylOV%0LHI>>gl)|1b_L> zyCa0nH!#f_78Z;Gh8UJ;gvvJ_;qo1hLKd=!ZOy__#L>+buiTa4+<^KjJU;d$%k0c+i&{L;(p!39>A9G~y7oeMmA$nYR&KfL;3 zV2kOL*g3U?iRqMULqv8b^30O{%Fb0rEpLlpSuEXeR{4_+woBD_W@SR+U(I?)JhU&2QkM}wq)*6Y7G84Qlw zk&6;zq^ln-a;5DHt(A7~=OXVUmpo%icM2^b*8L77By|Oxw6TT?2BrK*pnYBc`Q`b+ z_>}=X#+)sw9``bSsKq58AF8xi0A^;~*J`HeVj;5G_(x$1Dhc4sgd%&pdwb*lv(uM@ zWXLCDn&)GlT_#JAkHutcgyo;+G`*lRZpIK=HxZfTI-|1dgEHMzEdbk2zH-$$HHnp` z1woZdfH11z3TmMWZeZOg<9CrSh2DZq>S4Jbo`n9e#CigP1#B65gY{?MCEYuWlb_zkM|JAQ+HLTgXA zkhUR&n7}wKt51Avj|~B$bmH>-P;o;tWyw@Ysg}g77E)vv=AhJi%el3=Ip}t0!p@6H z2k_|TtDJT{Sa~63_ly0f9|1Ab!g$6e`sx1e=exW68~=StQ_g_z!jNf^rJlK-@EceO zD>$+0Kl-N-4CtR7z4p8>L-@Yzhfg*gW9F)mjBucjg(AxpnJGe-baj`_fu_QMkKUjp z+W{HQc~&M(;QRDGJEAm6Y4+HX2`8FU0K;eM;$Cvn`>uC<+#6nX|7YlmwyHYKN6^k;-}IYQ5z2uy=BNraf!i*3?*PUB%e4SGQ8BfY?p1stDtO zcTstxdY3^v+-UKXx!P1n?(NF9*erE0)xM2CfN6GM2^uka4>eFDY~WVdg2vBF1YLD$ zW2SNs`e8hr^0DfRkvVlq@>|tN@7+x~Ys$d;YuH{h!Rmkfyd~38Zq7ccLS>@J?pF i^|epW)xKINR!IJ}ZzuBzmME+tcyJuXVXL`A;^k+h-! diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc index 7ad70b3d4e8eb720cd81cbd604294d5c473a191c..0833c1ac80c2bfaec5804f9f78b10d82e952af17 100644 GIT binary patch delta 20 acmcbweP5gVG%qg~0}#}8KH129MHB!FJ%luq=Dy61%lR3gf^43n2(0WE&jY3R)0g5{<@cH&Zpc%}!sa z?qPRvPhOTNI8q*xR}*RX(eM5>{hB9!LayXH)ibj*#(7G5)TgUXRh>F@F5jv7Vs^G> z;Q7P%s>7BHT50>G4;}F zo{$UDlnW;fQ3G#U%z(Ez!J8Fx;4Mw?j){5jmZep$h0IY)9EY3*aRTEjSW^{?=r4(7 z^jF1CFb{hT=z>^zZHiTK@@1uYQoJ`B)B22NjU;0)2YQ}*T@k0n8LT-a_(P-q{);Q0 z%1A0dldc~LcPCcc?oN zW`%Pv$$~iYyG7+uFX_six_;J)RhYh5I@kDF-8a<^^MWzeY0<6X3qB+sJYKNykGgf(V?W| zFP+TFE4j7L?-={6Z%1}+Y~q{S+QJiCl3otp6SU=7kWC{uzC6=s!Z7k2wmQ|q*fsCJ62c}W!i0uj8W8X zb`jiU!&~puzI0~0%HO_N^Cp6>akCq@{cd^-jp2fNrI__-OERH{{3$Bfw7pf>n=0-l zX<@=uY6cSPRlUD*(WXgHV}(x;;WO>GGlYYdQB2dG!>G4OtV~N~&tPS#@!X_hr!bH% zfEcXCEH;l{t?K;EnYNia2kwN4D`3zGb@V?)Lwf^$JwP5DvX)tTGv|VDb9Fbjgt=|2 z4!jL8&CL}fw^k4X49)kdgD>Oiq0q-kK*z_vE*>evojV2jMDEHHHyWAE6OvPIkW zLo~*$%E+$hBX|#)I!kDSY_Ou$9EA%OzJ|;xIc0uWIfb^hq3V!R*kxqbx%vQIbpfPq zsf#pJOEVZGB`nw8)@lt+a+zkY6S+c!EcCP|(M2y=B7Fps8>u6Vhro}0;~S(j@WZ%ce0jakbN$mUS$d8xy9dD56a@auBF%$&Sh|upkfHrMGF|LOC!J?t{jbZkl5s06w5ax zP7#4=36#_twV5LEM|LkybwY>T;9fASRG6m?Zm=14hO19#xmnBwAubzKMR7lgqf(qM zSLF5KLv4EXSqS#1oNqg7j>4`FxYE5d8AA`+e+$mH#$V`e#8593T|3n@2-?4-_KzvO zGM+1A*OU$xr267&I?RR(kSU*%tV$_HJKLgTpx8bM($W(YufvC`9u-`z{cq7gnplGM zD`ffYDYaU9reA^O2|9S+285s%;w(H_&&+-JYMb|~c~w2gtph8opy-+eE`QW%6D?{k z%C6>GC0FyRm}z5XWym9__8-HT5A^NH^<64>ZrpLxUXsKrlftEoor@alO25734jkyF ziEIa*0OLVabMbsN7)ifs)HLG;;M)&}3vNI*Zd14u4LRp&n`}#x?9g4ia%IiMCTmyL z*UszpBovH|IFb$b5#|lI-U+&0_lb123^k-WxmR za4dEA;-0(XN16NF?*?L|!0_-;cBsnd9j()Ox0gz-zrHNE>0X-2&>c#gP=Vs%XnQ)d z+{IPEoecN?U5Bwi)v_m)pm01=;>gp)|Nm|ciRI241#c&m*OS?=K1bMVT*TP)n9}0| z>Q^-B?r5f?K|&{+hPyJ4Z_zlVl$s(!iB)%wQc-3%5!XJSKE{c(eRipfOfLRTSOhu5csBr0%j~QYFa{5YI zRO!+ibfuzuuLf&H^;7>ZIJ!&d3RW7I0J*d^={#neqsx?YGmJ&AD{oO9ND25XVB#V_ oH(fJVD~pSZON-O)@p*F2Th465X8hkX(+1POe}aS3rQd)22e;huf&c&j diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc index 7f9794b8e6cdc77909fa28592a3dfb587dd34b4a..9dc89aba4361962d02576d54a155eb78de4a8a9f 100644 GIT binary patch delta 20 acmcb_dWn_$G%qg~0}#}8KH129oCyFu@dgOpz6JdN diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-38.pyc deleted file mode 100644 index abad65008d721bdd675987ec2d9c81904d8e7c97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmYjNv5pfl5VhCdTogDOe!vAy3KEnOAq2V;)#*494y4GE<*ZHCWY=EV-iw0vIts)$ zP~4UDe2rTwT1qO$5lA=IJkMyJX5P%@@$m$Kef{A-{D%K$PVQO>$qVrC2tc6~QdkuY zUSVAv9#P~QRaBLq>58giiKe4ZvsccuU9BzaOviT8#=xRuRjsQni?wD-M$Lc|O{-^< zU(gwyPidliEqy9mXJeg+lKV9BI`-aHBvbxbR+Rk&JTQQWKH{6=7G0BwZt#ExJQTO& znhs>3TMCNs`IMw_9-0Rxnxj-k2NR~HFQA3b13b+z21w<`Txt6q`Fxx|UrwI#%bRS!#@eA)ZUbd~V8~)COUN&qQdu1G3JXtLG#mhHum*Tx%bJ=xV z+bgky_{^+%Fi}75WVMwW9XQ-;E{u)ZTiML}XqqtpuY1<*)5C*kVS;F22QOkR?GZ=} zBLIXa_(9?CLo_YZkr2vNLik)t1ezwgcCI;+8# diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-38.pyc deleted file mode 100644 index a9048eec0d9a43c3f4787ec2e1e43cb2473944d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5037 zcmb_g&2tpT6`$`NEh~@_V6Y(`8)A7Kv$B;+IU$%B5ZF}Nf@E|E@2k$=Fr3XZet(K)wbh9{YHBlZKr+s6OGlFyQ?vmAK5Y6Gt3BH;TAv2rY>si zEsjw>+ci#UyvC1!&hlg2<_=mmpFO29gVi6^*df-~wcE$hn|`FT!|cee)jolq!Db#A zSfl1XM~|u1uRLE&q}M@bLg9#4V} zX7E66dK-aAFf6^GlNPzhcqVulE6s}Jcvu@4u6o}xLI0v zHZxw@cM}XZ_0rA)Avqd{e1Dw_iBaDlOfO!$b^F@Y%Xe<`iH9* zR_;phw89xgUb&g@MG>v@mBlnH6hJGtMA{QUzYjE4zKA6D@s{&~MX9&&{=&k_t;@IX zEc^F(XC=t86`rj78)$zPbyj4Q^Yd8{-Vb_Qu4GX*??*|_1(2FA@+g+`6R5VbO+i*Y zgI5|LuCDs!aX%GNFTx^UuBIC!y)l zqF(6;o);ns9qhjM)X<>!Dqh(J8Cp!cKPArPa4LL%k!wS3s1J>yIkblMj-zYILaq<> z+}JV1Vs1XRnEpiHc81Pld#F9p@%zyi*D#IrwlsJRD73~Xv?k=2O-CHT`DHzlvgm|y zAY}zWElzuozgJH6c>WpMT$Hsj41xd?uMjy(WR}P=BF901gIch!adDW28=f%v1nV4XGw6=v_Ck!x!RJ2|Jj-+?AAh;3~RYX5tvk=0>*TpnVR+~k25YP&h42ULfwN%<`n(9MG{s)EXp@q^}2_r z0^x#cQ=ftxd4DzTkwOyME??zdffzChl^d&@7>eYxdwQ#Z9PiZOJlW@hwY=rkw1}D4 z;a=c{DFx@8dlK=PCn0Z*xEZVBMV4d%w}2#R@?Y3O+z-gA5`^(}K4#__(Mgz1FANfr zs5*G0_K8Cw?P>I>zsK}Qf*6!-VP#(g*Xkio(eBg zyUj^2EQEmc<70qk53qxIoPz0?%PFD*{;?c%e6{tYQSY;THSPC^Q60O zD*E2}^APy_Xyr#+lUr=l3@;~qliv8aB7>q1FddRh`O*H#H^{BLr093RKU74A<^qYK z5-0aI6iP6mbr=BfAn?0I>?w`Y>HDWrt|FuBMhOF^F)%^Sk7QU#%B#SVd6`JpBL=}Z zXB`|?WejI zQf0CCATDSYUP&*7$)Wb!b1TNSzKyV?G9U#c%7o}YMkaisf1&Bxm-ua2`$k`)C{Feh zfJN>(!tyb1@O9Rg9jx*y9O*kcmqP9ZDh7G92C2+#d#K#-WL|F2-pX z#PU*WJpWs&3z~+?c4ZxbKD;0Ebsjfsf^v9yWaKt`MOJxYqQvq)U;e~L!FBz{uS;t! zMI5JcL%cx?ElL+nSNxbp-X=0fi^kprQKE;7@dQ^1yDCu%pCEsy1Rpr+Dz6>8? zty}=n&YUzG2A+RAhVd_>X6VKbhW%Xs@7Bq>Vf^6MEZsE(tqp1EArOL#iO1mQ&s7*S&idVKkP+4g{k|L;%l&ASf zb)ZOopw`dv4ko=ze+(UVqUVbC6L@7VxOvNsynDC_CABt2SC}{TZEFsqWZL|90-cNhuY&p^c{4l zh+Nax$o=$(fN2fztO1-gK(ppBnF|M|sDX9>^s>&+=a_gry^ z2;Fl^lL7_>rP9P*p|m=t_R z%^uv}A|)URAlZ!U6j`K@l+GwQ#mXDJIf)BHhMURWq&ct8^VO8Shrk;KNK#(lZLD%0 zqiCT#pQJg3(jNc_l2Bb_TXstO3@(FiQ60+EYZn#{c%O1hJ_ zqQ4;B;!e2KJdJ?nvo!R5L07RVB{}(KhP?&F1?3Qe(zKvUhM*fp`;59uuH*icidLlz z%x{ef(<&jFm?J3YiVuiTCMs+9s(%Y6?p8;9KS-d&>hBG(u}HJ85urPvx-3=kgM6(# zdw`2y4BTm^A(({uIHMgt$qoUs~H2nixr+p6vYx^P*%V diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc index 3d5323d45d79b45bb1bcfeffd106aa6f5511f2dc..081f82e793c65de31726297827f7fcbdd3da0dde 100644 GIT binary patch delta 20 acmbOzGf{^7G%qg~0}#}8KH134#s>g45d{zc delta 20 acmbOzGf{^7G%qg~0}z~b*|(9KjSm1d-URdj diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-38.pyc deleted file mode 100644 index 24ac8bc4245749a075b4556e38a613eee5a1bde5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2148 zcmZuy-ER{|5Z}GsJD0cwCsmZj6hyRk3ahr7E@ zN;tnX2%$=O=_{#}yj1FIRrL?(pK-5!>YqR)pfhVHn5t*p-0bYk?(A>pH@;i1R|q^m z{h`(#*9iF=2eXd{gUj&hCm;k7G$sk{P>Q+}I|=Ksgm-x2cHG44c-GG1QsQ@ftMj;= zR5}%_yKyzCb!wDIF6*)`yj>$jyz7XHsKR(&EJ$BcSwBf+17_xSxtJG? zM{Z|9)K*Aq@gK;Bv}obq8k#6e!??wZ>J`-+L>uy(bS*2&*CHi*=B|p15~$Wzy4TaF zKpejjrT5`m9foEQm@F8n7=~=4r(3M32pf#Xf~R333r|TiQfbe@eWwqHFT!&bUi~MC zoa~W(LP<^qT_$6vPsYs9oUA*BZ9D2x?g(d(<9OW#=~=C`&prd+^y{go51w)E;5^!` zPgy$9&aEf~mn2x+v34~q9^%%Kj3a(LmwxnOEka!o1;NFr+bBM`*#sZTkrQIC3r z6Yr(ZYP15jhSPwrM;kD^NY&fm+j5GE&PJ*yaX|&7Cq0UbOdr${XIs|CK`{i2ZJQcL zP~q%Q!FI50_{}>=Kq(>t1Iha@)H|TxybdJiF%Z`-Rvbq)h%`VNY!0N1gI?Gh$jOPYcn%*dg%Z5> zM1O$-v>+-rbPwqTWEiuY=~IRSjo6;0=05GRF(12QFGu3K`g1$$j!WrcPWAPvZz-n` zT{3>oO*v=lmAsU@g6<&ks(=++!KP5#C+Z3K0HsZR8+V`12{K0O+_;>V)vtN^DY2BD ze@cE~V}Baa$bG?gu#Fr=0s8Ju02vEFErBQ&vBsq~QUpqF0NJt>=8rB!odBl;dJ*p7 z7-+49!UNo(*-e;tyf00#3S|l$3-BT|;D}vs@>R>Y#S%IJMR9{51jle>2E`IuHX}30 zMkYAqR#8LW!$c;vfPA0u@z^Y1U&YKrM)HS98(^8OOiT7M@;|^HY%{k_p;b}u;%c^} z&R}j;ILhGxCZ~Q6%`~v+Od{JD@}B}+nk_(;B>|Syhv2BMgCNWUN+GfM%L?b7Pd(QM zIyv^oQ9kD`f992a(7}uH=bp!*VmS~FEfD)$eF`hJ9H`#K!ZQzsa6E;7BgJXx2koPN z&`vTTW8Hq0kv;1KJcMG>F;D()kR=6{cyZ$OdD~>#a7Wsbu~>M0`ltdJGo3FSHxZBdV?v)a`T;<8#Q%ChVb6nSDdW12YGXQ$nc zGMwOo1fPHd9J%vpa^=)Jr#h7!m2o zKn53VM8sP^GcgqV-}$q?c>A1;-?_yT$e4BaK9RPn?Z*HWbV0sW(CklDW;_3hGIlwT zuVi*ugS=3$Cd=NUD&=IktF*DaC=Tb`Y^#D>K3NXmco&ij31+e!ys;E&zU8kAZvSIx zK;E^O3{-8gM*p84psMVo^BW_#QHpfl=j_BVyN@8Eij%Y2JWkri#plzd&U z*z&-VmgQ7XO9lJUOW4X=`Ok?y@QG!Y5u8$lost*iW%z<<_9baOGkqDhp72Iw)oXih zcSHCdA^yd4qxhAr0bL!tw!tY@Xeq)TEth8;jErlju9T1>#@3rsYHL1- zH~lM}$6UwN{2Q6s*eD)=+aJyy5p1!7s9ZheYq4O;?a_ocWlrY6eRcQk*uIq!u z`DJn(Zpz{WOjFp-!%KBh?Jg=@2JE@$V3XSoH7{j)0acl9Lc0AcUNm=1zY!Q=&g-8Z zf0R7KA)7>sYYxe$T24V-$z)n(8`zRFsB++CiMSyFdAj{DfDc^4V!`81@A9?(5MVm@UoM0r3X2JfNwDdOZ{+<+I@n;Lrt{0|W5Iku0i n^NfXc^csLI<__q>)3OpxAs@KenD>zl>Cj_%=Kp+u`oq5f93nqU diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc index feafac0979ab3bdfe7f156ee5dcb1a998f2e472b..ed6286f2ecc5b8db45c459046b72ea7be8a1338d 100644 GIT binary patch delta 20 acmX>gc|el;G%qg~0}#}8KH12gc|el;G%qg~0}z~b*|(8Un>na{dZH`2ue93y9c@N#b>iC+QHU`yC&ieiEc%CrnG762bi-DW{cAC9QU zTJO};3!Mv~m*Vo!@2v3#Z^V^f{kR&}ehfS7pqF^#UC-I-aS3b}S8NyJGT1g^vhOw5 z{(^|Sy{4askA$&#_3_9GC0PQNh7p!WBi27+LvHd~X1I>f276a@CZ&+WD3dW*kA=1w zOSnAFH_z6QRM9X|J(lEG`EVE|LLPxXdk_t@N+UBdPW#u*MD-a)0^h1?HjX4qd0y7s zW?J?M20g!UU4r`_+~zU}>z$C8#Qw}X4dP(SgDk`8A9V`XJtdF1wv^F5a7R;aS z$1KS>wF)-c5NHbnrTE1gv^Sw_G)g9rt8-xwI5qgP$$G{Ln_-ZY89F)|Mw%Oy={`5t z4ICP97d0JZvX7_Q&cU9te3yG!-fVr^e(~{Z(wf$m831&?=6L{-Hi^a#{ms)C;qm&Xd%NA| zP)*b2@tEoEW6AGpam>5-RX~x>pdHQTW z`iA$qfKC_c9*trBNc6hcAgx8ybVp*e9SLc8f ztS^CFsdNa2WupX{A|kO7!|H@I3;( z@cp{$dw=?stHvXxj_5$?mC6r9!kuxX)gkZOvsM_h7$#SS59`PS!xK zz=O~%;hBOm^Z**~m8U!iK3V7KTRM8>))Qv2~xxrK&uBa^AlsdS@0DGPP03>8? zPz5LSSQr?Iu&FK*$)6 zV1u@w?>~4N?SJ{~!3~V8FfOUiy|~jX{7Ka+IPAZ9UUhPN?qtHv|MPM#yt9}WiG3I= zc^wG>dKeO$hq+|V0fzGYa}Bbpk)iVti9y2_7aOCe2hGQfAxr? zyY^W_x~yHIc_oTil0*?uhSf#JIOQ56K9>cuwMGuetDmJR&JzAP{_hOJfzemVhQC2J P%0BV`4$B+0&9#33fN)rs diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc index 4f5c1742271c8e3d13f11172b317d23363214e91..e9443df1ee6615e5c36d6ffd9f289b1d84ffe560 100644 GIT binary patch delta 20 acmbOtI7N{AG%qg~0}#}8KH13K$pHX0_XT|b delta 20 acmbOtI7N{AG%qg~0}z~b*|(9qlLG)X#06mh diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-38.pyc deleted file mode 100644 index 1c307785c1c4011ac49b0267d3eea060947133a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1354 zcmZuw&2Jk;6rb5I+Z#IxAyh3YXeBN&kc2u?RaFJi#tuRXNz^1Dxf`w4JJ0r#_3kn= z+u+E#@FAhzxO1?NTsR>9nz?eynG;;#&APF2U{>>f@6CHN?>Fzwo;DgT!SU)3-v8Mm znDm%#=HR$#Sn+#~l0yusWj1dQn#Tbj}Co7%(bzZk5+ zmVdCi>x>?g=E^m)BnM4HS^Ke&%04Ob1TO7D_BS70IvO54ysXV}vj+VhWJ)J=M!7X1(wNZiDWgB)m8a&!m{EgJa!kHK-_&AgGs;Zu z#r-E&=EP(cv$f5fbAz{~J#{7~p0&`ftck_wc};vPE8o$HHLcDFv-Ih#GMi_=ou`d? zOj(<{tU9ClZ*pl`pOKj^ZSC^a?hvALFZ6n23BnVSV;#JH#&HR&DA>?U{v;{-IlBt8c(%OTxpdRgin zjpZ;)cMks2<#n$Olw7OVT9k|LDLWKV9Pc$793M1Mu8<*@;v$wqWhRg+hXE1-Ws5wC zrCRD7>>jp1Klm(o-cgQ#kViwc{8R|wGS1Qt=NVVdfM-Q6lryKS*8h*QGR0V^HFPoP zheaZ9F4MHRZoe{n*+^AyR+W{+Dd-0yF!oo%?_>G()N1)hPoJM02VX(Y5A)oI^kr~?`hMK= zMJ!=6$KrE^Q>Z-k=N)T>mo4k>ecM^0Hs1Ua8`X2~JP;9;w=E?ZHD; zU#P*e&TVVIvk2R1EgUFETL~_kSd*jtLBYX;@@{&*ZdFCGkUlH diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc index 0304d5568bfb7a7fcd09646d7286eb0e97b55a0c..545bf841c510e6cfbab01313d8bd45612339b834 100644 GIT binary patch delta 20 acmdllzh9pFG%qg~0}#}8KH12Z2x86I+GXIJahm+d-rS`=*4HrQ5P1p-nah7nYjjM{)J3zA$Hiwzc|9j=!0 z%y2?-R$gOuicjsSJ@k?Ukb3LAKcl~Z*PeRqsR)py4>_Ay&Y|cm$l=HE<@3Jp!-xBH zdAS|n`NQAU_&?Wz;GeE@^@-8>HH!WRsx(MR7WC^k=@Z|led^y~Kg646QQqh`^0*%p z_g$DZ^H#s*+flZZxBG3h8)<`wr`Jw9p9Y`P*X=a+qsthLPQv~QZ>vA2&9pV4{nd0S zZNCb5aIwZ$`06Fy4L%|LmGlOWd4sRt4sHkhdV1|Mns(CVSB?G+zMigpM$*-E?N!vj zx#+E@*U|f4N)ChW&40n8V6RJU^jK(PTTeVhPkM?$-JUg^uDN0Lv zHh3BJ_zONFZtdcscsEdXQ1mTSC&4`UXyqK?xd`UulKhE&9AQJET9|a!PbI8VOMCCx zMwuw1{}!kY=Dzsj&fURN&6OVT^ej<>Ck5YCV#)`*a#ZEKFnX}BUt~=KvR57Jrs}<)4!j`BLZDYkvrHVHq;-V9x z_=wy@!vv?~f~JTC2~0Rg>JSf_{2L$cxLx7InF3(0*jOr-WEqoL%B})xw;7&?KqQqI z;fooA4{VZXl$2>c<<88NB`oD*QSh|K?(_*5i@V-ulS34+%9mr71W z3NtL{qe)T-o%BerAZd2Y9VSss z<#V306&vk zF{adaH#bj&nN-I;aC)B>$SU) z4Z%bkYlB^tZJa5bUFFUnL}V2&uNHN+jIM1B7h!)3J?&&B=){D69krA@ept1J*T{{3 z^EAG9^tEo|0R%5vNDe^$)deFZ=grj z!91b?2@Zpg56s#p!Kb(|KBrKO_~pYRcWNY3bK+7iE8}3MQWoq^Bbz61b+gD=oeV|dd zQQ6ip7~q1ae(c76;;Nsb>V`JN0`&_w@Jm;@OaAq-RX;=b5sG%>0gXu~Y?JFG3jIu% z>~(M1C3p0Vl$ln3N54f)LNhBNNXq^HP%cpR7D(Uw_EztWGSPE?WV~|Nx8I!fSH4q1 z(4!`LXCa_4FqXEFC#MqHgFhNlDdx=I7~&F=XWX&G@WP3$2FI05tC4|Z8D&G diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc index b534ac80ae9f7b26d619b6a76f482c7639911a42..65ebfe965f31ad337e0c78f5b34d8aec169b08d5 100644 GIT binary patch delta 20 acmX?Mb;64KG%qg~0}#}8KH11^D+>TZ@CE6ut9YY~)Gd4L(TwPB zVap{|rD7`C-Bhw~NgjBxA9>#&lIMQS6MrGeL%!2v8yrZanx5{{J$*UnJKs5dZ)&RS z;P=gUvg^(`&OfN};;)FtCwNqsISzL?OPpr@W=&?>?%vyLdbaI1eZ1YI&IuFidi_jBa(F9FL_ILxwRC7o*W(nT&+eFsPem$Zq%&#! z+p*H7a4(Is)cBo9>AGhMQfN6eHKntDE9zaOvr%LJHfAkz-uaq#m{E8&^LqjpeeXAMSKch!t`wa49USIu&7 z(b3+Tzf%}FyG&is!S4X5F&jA}w(iL%wy#Ki@+)}OP_jjgfRu^lHA)_zq!MrJK#OamG zrieoeoOemmiEh=a##2LOO8q3#bbeD@jZ~zyG;XHk5sWc~SVe7Rs@IefQbW- ziP(hlm7K;PIYlFjcNX)$AnJ64QpUgEy7LQDRuNS8)%b&+;5GCQF9`HB| zFTZ>F^77ql3rmZw`=Y%Z_4~^rebm}O{dU}5RcSX0aWxc^Qo2K=zKMZE;s43lqQ z#Qs@>bsS?w*>4Yl$j6{bJnMK=7ln4Z;2+J_+#Qb$Xlp*zxXZmK{)qk6{WJUay|Jqc zIv4?DV{fZG@;(PJ?mO>0BX6g;i@IhzCDbQ&@g)OTsPC7~0&3g`6bjMXu>68Wbr^+o zwA~IN`Tn_PDS`~R;tip~Ikrq5uqBD>p z8HQ2HL&!y{(B|}ITZ9`j)>@?0;;~w{vsnKOHRjqQgAh|e^D2xreb4t+%k>y;#7RO^ z^&_Cs&I@bx=@gBZse=}xS!I^kwP=-%XlPfX&n(B}XV{-N>w{acCLQqBmfwH^>b?oU zAMhLF0m&u+e8C|mP=hYs^YyYMMvy0{AdivfP?%CXQi5PFCrDNxS)rQ@)GA(Tn08D+ z+fK8(pMUixjbL4(95qO^b%?xpoqCQ&d@bt01zOk>NGuUQgjk(L;go&mvNHbezx{&y zuOOfn9=F6~1N}?S$lF(FsN?+oXW+=91cSy(7@t_u_{5Bd@abYCVRR0U`Z)?BxgD4A z2r{F(MJWgklm_B@i45f@+9C2oJ0N<}AiHhie|KwTjyx-jyFeH;3fN_G zNN^#5L~YnIM;Mqug_&yPY;vIdKEGJEZ0S0>TF&NPUNbvoRe0Yp9KT+w6w(^X5WsB&&OJZ19;;DH1QWjzygRD1f zYgp?kGo>i$uSRX82_dGD*1sk`UV-ax_T^Ph^Aq-c$91;quLecq<0R`uiMrZ2`0g1Q z^VZVVm3uS~Pz{0t{qUHAW=NW`P|f54&Yz>dK83U;f~JhW1_pisus%_e3GTEOZroo$ zh;7X++`P6#f}0QKZkr>w0R5Xb66dk^$Xy|Ou~G+ty3k27IC?NhlQ>C{C27PUk( zK9~y% z>J>Px7wr5*`pLQ}c2j#U8;-Dj6Cl(h?(Sn`0W-@>R1i=QyNGH{(S9RTj+8~}wq8_z zzVa4?%3i-bpUnU;r(O zek#c^@`XaG+0|-$cZq{V|A;PS9e~N-pnhmUx`on)tP;o>CgybI0Lo`Rqcg)z$dr2yoZ@{-4Lkk=Ig~gwE3htxdgE( zP}o!Q3#ym)J;3DZBOm(jqgD?hxYh2r_)d}19O!liv9HQ%ObWCQ9r=*m|F4ee(^u;F z_@0grum3j;-&b@O_4@ba=QINW#uSlE*fU%u(J>O0_tMTJZcDO{DeWheHmfs%9`-@o zlH!3);v`v0lF1}p0&R9@W^kQov>w52GTDIlM4eaSk9!#(B;qPrOI<{PJI>yp5}VMSfeTf<+8M-wQzzVV Rp*CGRd!jsBtogGO{{dv1XAS@W diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc index 015e00f7b9b660adc1bc909f000f5c5eedebed15..000bba167b75174a48e7c16ef71ee16d78e92cd1 100644 GIT binary patch delta 20 acmdnQxrvkeG%qg~0}#}8KH12{y5UkHX#pD-8=(pO;FC8{-!Q>Z! zQ$&%2s7A4`1=zuw@^xPi495W9a7wh~m<+QrH79rju?j73AzE>&3tSbr8Y@k(Q(NGd zfUi4C3tVFhu^Kbi5L*JPt|6z+%B(?~Uomab_D92M(q{wIS@#pGGWL1GZj;QgXIFj)XB9gk!X9N^V3JX0=goIc*Xvyjdq;zV zM$PR0oBO z>{Y+0V+}1jxN-H$V+}S zVm{Y*~lev?6UC2n}L7GN3MjId=ZoJHJLK$ z#ysBic$hE|5`QyIxGy)={OVUoJHE?XTzXFz^VGpA%qP{r2)DJ0W@w@f{!youmpzY0 zW6#S?NQSY55<6dq4)(tecG1BOxEw#~(mLPo^$!2bAqjbVi8#G%qg~0}#}8KH13a$O!;F+y$rr delta 20 acmX>jbVi8#G%qg~0}z~b*|(9~krMztsRfJx diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-38.pyc deleted file mode 100644 index ef8f769e35eda6c2d0040636a0c776b15d06db8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1714 zcmb7EOHV9C6s|{iPt!aic!N=ic5b3^lIvh_rBTBb?lmN2APjJobkb?MYM`KBsj7xR zW>)CNty>qcbnmaJttC+!=bU|5rk z+htnkywEDzm*tsE@*Iwjj)kg|EF9>Xi89>yVq+uPe|c~?h~MzjD5$Mh{T5oRIt8UD*x7~Nn;znRXL|Xe1xYlpg(t!IK z42>=@!ARCuJ&|iNG}7qiIM&N1j-qpAJNFN z?A&hdOOYq?CKNevYcWVH+hI9u(SL&ZgqTwGCgAssdo7ADH~Qw?twH=l|0v$w`F<-t zeswU|+3R0!gfHlrOky2~?LUpZa7QHeM&u5SsqT!Z_V0+2BYHn)NgC4; zZNUHbb&_SLpqc-Ne%dIzCvCa)jhm=ch;CrK)^Fx_@~V`&h0xjB-rWVo6?J^Zb!=;I zN~v6ieB-BadY;I*G9Ag4-Pr^Js!!>pNIB341?DlHmW+2D`JPQ#u4I{VrQ#yVxdP2| z`GNJ%&(!BrhCB%P7#_6-6QTq!;3ez>Qv?TiiTc#X9tm(jq>X&Um;IZz02;nN0>gHe zF&aTjy!7RYl{2FwG_>zl)W02qpmiBC4h0CM%tL+7A2*&L2w_ZnQW9$0+N|o^-lD?K z0IC<$Hq{NU&qaC;8xE5?({^v3SNdie-E1a`Fili@R#ujmbrlX1DEwaY)wWV3pTqTy z+thy-H+2r}bn#I?c!Heqr=0a6S6SgA&%-`;i2MZXZXm7brER&!1OA|MNeh>xcCvUi p=QMTDfZL?aoYM41yRY%T$xBve{5xABO%wOwpm*qsyRy8p{x6Lr!1DkA diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc index fcfcde7dcd79e6903c5008d44af3483471cc1ae6..cadcb13da932cffe98072072113813aa83b9f8da 100644 GIT binary patch delta 20 acmZ2sy~3LNG%qg~0}#}8KH11UR~7(26b2#y delta 20 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 bG;a@dTKZsDm(}~Gq365vm-_9zlh6G>D}bLq diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc index 55cda422e899bca9bb5165f0e81e22c59345e7fe..94959649f58574644f044d32b18823c5ae880606 100644 GIT binary patch delta 22 ccmaFg#q_?5iTgA!FBbz4)O9}D$eq#(09j`TfdBvi delta 22 ccmaFg#q_?5iTgA!FBbz4oORi^kvpXo09iB#WdHyG diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-38.pyc deleted file mode 100644 index 015c0923aa9023dacf4f828a40039a0cdd888e7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22445 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 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc index 3c170a67671756707b3980a93fbf662d45caaa62..c5b24e7652b573268ceb4b6667df0e2ebefc717a 100644 GIT binary patch delta 20 acmdldx=)n*G%qg~0}#}8KH12poWx0XI>#G zr!us2&_%z&i+1U*`!%!es=v@x@13y}*N9LTDF@{6@Ns!~c<(*xbXo+;&%f)@g-6IA z2(A_vz-Lg+J~V;^L{Q}bH zM-rex0!Prm6^?MnPT{p3;Osl%F3fHU4`kRaw!f0I z&$*G}AWL$tp_!d<>nr0Aajy@v+!Z{-;ok8~49)}Xl{x&yzzemZy@9vP`kD8*~8!*5ghOsf+aKFgwMB2#NZxbIl= zBmoZyzgK3;V}D?$LS_E`$NT%?^QYgv7_cAYFywh2%JhW2hW^)T7#d~eM>&sP^072w zuJS#mQY&@JQN3}#9&TY#*mdkpCPnPPw&6$2_7xh_Nm5Dh$t?*$uT{n1ESXf_MO6;a5E{z0RwFqE2XHKEJxhE*yI49z`?DrRFx%MV+x2G`Vmpnp?2>8drTA z#|)7}|;cJ1u<+&%^^tGLkX9gCqD%Zxz#b0Al@D7GU7LS&ZQ-?__Zo7<_O8 z7HHu8S*+4x7Z}{X35)+j3;Ak=7N~=N0~TnY?`m|dqMk@Q$wcMC*YgeH(uE&D2Z9PR z4uq9sdKR1*GtaR*r^oKu(xttkrHo3AFeu%59XtT2%GHykvv|h48OIHM19#J%(RJZ&T6JRNo=QioK`!_P! B%&GtY diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc index 628247e48a6fbce2a5ee0fb8e6b4b1944e17f2f1..8e1819f8d0358c21feff425c3667860705a2b65c 100644 GIT binary patch delta 20 acmdlhvR8!rG%qg~0}#}8KH11^#03C5%>{q} delta 20 acmdlhvR8!rG%qg~0}z~b*|(9~hzkHangwJ4 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-38.pyc deleted file mode 100644 index 7472b7459e33920668c2e9b43961570b88bcd667..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2117 zcmaJ?OK%)S5T2f$eT~<49^?fGHIa~6k=;ZI9IzsU<$x3^a-!G)X|iFaJzcvy_Pprs z@n$V^axNfo=a7Sa8|SPs;}y+eYU*pJ2-y%Qw;C7 z9Oo~yI6pjGe2tI%11Iiqk~+ccO#))qZs6kEO>3DKcv(HDXN{ndHG?KGdbPBbwS#u% z2fkf<=~C7SI>Z5w*J1hC4OW1htipv;5?ln_x#2(qF7d|D#jne}`MSniy#2}x-UDav z3itWauLPE%!#l5CzRXu%dB-HUiaRTO6?ZQ1i>P~zlWnJa>2LJe+3I?_xdoG*X$iXZ zxKv4zvsBl2sxk%b#Z0QMt9@BQoD35XQa2B9My=n8UU~{YR*8TNa-~VgGJM+U~k`D{r5TGiN$FA{YJ`AKyd^YispW}3dupyQc(qYe%&scfWzbdF(ghI6lR(Ifi(jCPS*mKu5^| z4#K&a7Dj#-)ty6{43Vxt(KCoY|wQpy&$v`ziECeHzKB?4O71`TD&VQTNQ3 z8GP$B+7T5*{~M!ZDv_8#XIsf1{89Ydj{5Ay>| zGv7WdiFNvLNTath9nmpEM0140YSW>qj`?j{JDT*nP0_&g>dwN@HYj0Iuj>f1#Om8C zl3dp^R_dBmqU(tzl!}f~x$)M0;UZCbWmaq9S)DrKDxUb~=gsxOGl{i306t-2@HmGD z0?T3WpolAjgd98(#R#*Di5U&POJv1Tx~(dn6!h+$yLSgqHlFTmhu_2QfR*I{@`G@K z-;a{rflL(iN*3?45y(NAl((@m6bPi!?Mfx7ygd`5;eI*QS8R^Mw?bG!FQx4_D=pU} zzI&C3>$sOV$d4}3&5XU2NH4=jJQ^Y-XiqGoN{q$680OnB$}$MM7P98ZIX09hhhJAdtOpDz;K=C9|V;Zw~Z0;~txFAL^ux`s==Is$bTi9zub+?1Bk zE%AXl=IT0_e(-Kb7gRTqDn}7ZY{FfnInw*oIY!!dYwQ6=g}!4>(es=#v6~p1Q#wPz z5QpJ6%Q+LAuGt&cXwEX2@pdDhQc>m7Ff=dn9!twH%Q5dFiIH+h>KOBd6)V7yH)S#K z83t$;AwX`gg=@DgS@4oMi)585n&7E)!lsg@#RLSlOyG0M?2J)3tn%2jRintUOC&K< zXnZJ&j7CwpKSKCqQHdC26!qy=p#aS@g%h5@|GZH4UemxNMr48oOb-Y=A2SRGO`66V zns}p#7Df=lXcVSNzCYic5&dxW`41btfb|aV^uFx(UVNrW*sY5?qAyJCX;%QUt=iRf z8x3atLnAX3I+t}{vLS>PuCA=*@#_#TR-L@eYMT)-`X)zj^68Z>5x}m0}S(y3| zH8YuZZ*LE-AZ_|c+ME}nzbH-HBW7LU<~tSoa~4?!i?%U$*-SQ=HWue2bO3~Ig%*b} z)D7bj?$nT?+S^4pEzNX06;)^|9&F*-V9v#D5wIoSx}O!iO5rQRG-=>z5%YK5y+Asy S@A_WD@rnCy=bBG0`Tqf%6KF^P diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc index feaf78f98533ce12038f0a4170ac2e952558c89e..23a0059023c5cf35305d81dbe3fa5553f7840569 100644 GIT binary patch delta 20 acmaE({6?AkG%qg~0}#}8KH13qP!Iq{NCvV1 delta 20 acmaE({6?AkG%qg~0}z~b*|(AVp&$T86$X|7 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-38.pyc deleted file mode 100644 index 7f8d13b936058935d3724dacdcf90b108a33d549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4633 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 K`e*TnTIGK+6C7^< diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc index 879b48f75121719452d86f65d13253727063fdee..85385dd052b9a54f74735c9495f9f66595bd7fef 100644 GIT binary patch delta 20 acmX>ScO;JcG%qg~0}#}8KH11^sSf~0at2NS delta 20 acmX>ScO;JcG%qg~0}z~b*|(9~QXc?EKL#=Y diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-38.pyc deleted file mode 100644 index 28f69911f188d0fa2aec159b5f34a85e4b906816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7309 zcmcgxTXWn-c18mj%!M;Uin`0P4J&e@Nkq!g+Fq|pyR}@AmQ;}_S)wkPFh;=XCJ71y zj2ak8oErMUbZWP@N|jXQape^Gl8RG#$U}ZZ9`Y0Vb@yfeg0{Aj?=&zslB&v6z(P-7 z54ul(=bW#bk7~7wf#=u%Dc4VZU>Lup!uV4_;pcdhi_9<{8QkD3G@98jYcgFno2LG? znzsHeGz<7OL#JJA7Tcv}iBW$mEVnDoN_(m~)vh+H?OLE^UN}|eZ zXANF|!}v6x`Oe;D&2u*mevHq4XYkowv-uvzoX42=^qAw>7=c>O)~$Tx34T(Kd>8|(W*3!})@5aK7TT80^VCgGQ z_fRulijVO?dV@7s%gf6@Fic3KT^Y4#)q}@Gri_;=ldDKlW7qhH3p+;2`i5!jFrW1* z+<0s-J`R$uAG#0IE)Qb&>L*vP zuHIjGu=3D*BGy*@PG=Pw^j;!=Csg|Pu$kDvWVI7?u6P0VRARHPbkiVAu8@K} zXlTB(txj!(@tPkVoalMXGSL=il~{$DtYXS@sGHCp%7%^i=XeuJgh7@DD`QQIo7@7v zZC?1!ZrY+C9Mm{(EMDX#)D(41`He|df^vzQz+_dOoq!5q>w(w^l2mT@KD?_znYc86 z7xT~Hqs>3x$YQ3qJmy<{`)Vyn0aMJiBZ zCn8+e`;;YT(NUE=Xfa4V@6SmT$uwB+!aFBBKj;qV+RuWBtHKLE>F*EkNx$To_bh_WtH}#DkWf3K!OqZVKu8?!<@Pc-=+4y8#46E`80-)&$j5 z-2CyoX*`#$k(uBFz;vhn8&pcJJcEG{!e;el*|* zGn1=Vt`!Ff^iZDQGg>*;y~p}+a{B}Zv-kB)k-G3m>%m4>3hs`r!Cepi4R<{zWn}A~ zn2VbNIhTja>b#}sc|2};o^L!$eGF*M`(W=OdJQ@KK zJGq!4X&EL%dY6|dX;5<1_I!edzrw2#Q(}_Jhd$__lAh#Wkc>V^E>zgu;`X|BpP&Lo z0XHeiL;-|@eBq7#OJki8?f9!R6NZG|JOr zhW_A|XWrPFeAvxnkn8Z{=%eXHa~7>6kqCy}JpM}|~->qwCxSo%ao$O-yd-n+lFkft(N>!u>PHgpXgKiwP_$XDKp;cH1C5KCUQB?UkW z03Tk!a9oDhVUff<$$d467=V2HFvQ8HN3H+?L!h4!a7njl+Zk8IfYoHWyNiGj^ReY< zm3KRr8WXY>b!?;U5l5~=cgBpP%vQ(0H&Fd$H^`z)wpQ04=+edRkzc*+#*vnjFD6r7 zMkn9(VH!JW>&hlQf7!5=O*^BUtXYQ;HIsRpa69LAyhXHs@KD~$-y}qa$lM;=heh|z z)O=Qw7ZF>GXJzSfwqr&(1nii)rX)Y_8+%sY+Gjh6KcEOUr?fz^*mL?8(qiA1n`w#0 zCts)KZ&_N}tMrY1Mu!4&4$EIQrojEWFow*Dmk=^^*il6<1Cc6tdQsFuWP?izCs}wT z@~G+y30NVaZ%Inf>>AK5q?cPkqmYFtBC2B}KSdF=rR;gy1`$I>@xevg2Hu3iyiu%} zC04Q=+qS{#Ob31tf2Pfb|`qdts%&QRg~BL)n>)MheExg9&g-pY$9+aryUiP$h5q%eq2 zVKz1ySZ)F zK?D?s)lD0aJq*~ayS#{=t#O`dp@L$pUf^Y9QUGAjOsy@lat(#=EpEMLSels@_8e~a z&3%)+27poMUB96tfO}*N({V1ru~xW2nrJw?LFCdAVxHjm*2W2J?k$^xg*u2=>%ptH zA7%oN3@O*#kCR4GnQlkYTpR1xMjj;8e8^0OU}^oEiF)KmpmeA z&gy;sK(yl*2suZGondGtu0WwYb#Zh~#maKS$^5|`d@a+1gWXNiBy$c^RDFbP$R#xV zD_%{94LGZ zrQ{cskZs8?DItC9DXCiSn_D6b2mV=a&UNadog49~2Y3_0FJOMk1V_c+A51Kxs&g|R znQX?cTQk;)shLU({U#p0tEfrVkWBJOTzJ*!z)hD>#3IlGF<}UHmdm)*AQq}!Fe)!=is}cTxrFldZa6t35;?IB4qe_Z>qUAAj38h^WpSdjZStc0C0_Nn&rj=tF1 zD-c&aja8$~{(JMRaTGL&iQzY`MFs%FzHamk0N#|y|{u!DStv1Q+#>GP>;fEX8&vdg*XQmJqn}HRlGp=#H z=}W%_q$d=*2*xC22*sBeNyeC;?tFwg++_varC^k7C-}D88j85=;(+B+rzlQ`GO_{r zt)v#8xR>bmW-W&B``b9hL^_lrT7ny{(_I@_Fs*GUBOl!u+05^u592NSM&TOUQ3dHo z8$wy3h*TMupfbh%Nuu6w#qBkC3N6p0#Sn2LEzm`)s@+*ySiHS_)4OqN;lV>?Z^c2> zC@8BHCh{r7D;B6S&ZRuy2u-RKiI@5|XY9PM`O37nk=>39-JJY4#wIQjqdbcsWE;-^ zl&o_gFcm8+n<&qs-23<)5T2BGnAcE{qDXiHZ}RU*GG3FBv{iG*+(C5Svk9rd-rA0> z+v!YW@0&Y?9?-ex^b2%?d16GL*hX4>R*@kyb{uB(X8X=oDJ^Z4f#}t5^`$q?OU^gW zQ{%6V=jWehU#rmgodVGQ=J|OozmiUERS)s1LR#CagI5*yiB}QfE-cHNn6tb^$!$vL zqNFh`M=`&UbiyFbe8f8S@R6tj*iRr;@!rGij8wpRD~gq~wDk1$!xed#IxbUkkCOY8 ze1)V@9Nq6JTgGv!w^wrNpsAKAULDv}9l?Kx4hh|T8*CPQqK;5pXESD%oxtl@=aKf_ zf5#SPQKx}_5!8<)8-E9>8PCv+L-Pz5b!ti<<=XmmFUd_wtpLp^R;W0lb|VV$2o3*% zHz6_t3US;v&)X(De^ydUo%E(E`EfH0*0TR=kfT=) zZd5TKqc`L{vuWvhm#9cgNu7cH&JX|JFt7jLFy9W6mZYmUNpMwVT#nw+#5L22-XfZ^ zs*xMR=6ZC8o#_9ksAem(tf2z?cpT?*12UdGKdb0Zq1mpi7RVf;{~>)G|| t&&Y8kpCU1#sKMV1bIlpEVpa<|_xht#oUu%HqEbIjzvpUo+p+3j|1W?|3m^ah diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc index 3a3dd10ceebee0d7bed901d31c5a2799cf44766e..82e133650a99b46b7cfd0c89aa565b4114ee2405 100644 GIT binary patch delta 20 acmeAQ?+WKW&CAQh00ecNPd0MbYXbm2Vg?QX delta 20 acmeAQ?+WKW&CAQh00d`U_HE>@*9HJSF9q@d diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-38.pyc deleted file mode 100644 index 31254595aafbbaf8fb9480739268102627ded860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6678 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 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc index f76df9a0707003bdfd8889025cf44f6126682f8c..4d8ab3ce2b7c7ff1302a016ca37fc774ba66b2c8 100644 GIT binary patch delta 20 acmeAc?iS`g&CAQh00ecNPd0KlZ~_1{*ac?* delta 20 acmeAc?iS`g&CAQh00d`U_HE>D-~<3Pr3Fg> diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-38.pyc deleted file mode 100644 index 686e7694781199dc9ac659b2ba4028b554250b2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1647 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 h9*d9B- diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc index bbb653f7102afea14763cc3895924bc45d2caad9..fe472b0803075004b9a48035d65cd962809ec8c9 100644 GIT binary patch delta 20 acmX@3cSeu^7E8OAO^kfJGBmTX!6hzB{u4qKbDHPduP@u>BOns{o<9?7;`j#>`HT}iM& zfZYYH2qt~7(o1jcHOUNh%%!LPh5iX#J3VBkzaWRY&$}RHQF1dS1#owJkYc8 z@v?=_pZ~5l|8d5${z;Xip8_hs#-;y_o3QGZV1kFN&hTr8yk*yIMr}^$v6>Zc{^Ps%d~tUe{na#|K~*_-@= zCCcC0;*_X-?bOejC(~jaEfeB2TF#l488L~LGhzxY=S_<(rqOa%oI}g3v@zQSF=J*s z|1B4@;sV+)zHgP&f{Tk7aYD-5J%eEjFq<=tDPX) z@^*t{+uPliGW0fsQ0iLw2iVA3uClE7NNVkGNfg~DzS2^mRCwBHhqB7E@?BrlgZ6JQ zC@T&Mcz&koM{yK1{V+&nBl24`eDYbO^Ib@>Mr&314-Bg)x>fCL%xs{M2JOtDA(^XW z(os>9(_RK27r*4@d${yV+)^*Gx>lF%^BzwaN*pCS;az*5^_(>;`pmHsd#9|PGph%u zrn8AHSl{Wgq|hzwvje`*-m*387nb0?!kfYi>vvYfUs#FTMW21nFk=_)gBk7g`=zfE znfcO7 zuY2CMuhAEqeFaAxZtHb#xmwJob8FM|4Vu1z>9dKvaX3{rp4VSVrEyYKg1s|0KY3>B zL}k;>ZQ0yuG~-qq#@GnLAla+BiaexFQSZ{>+@-@=i-Y+xCcn4Td35{nPxltqpCPvN zx)i&NyBu z2QwA$i}s$|E%e>4d%*M?j4JnSgs__jc-KJypGyDszv8SJM~NRqh^7xk+%QP}Kuhi2 z(eM<7{*qDv5&Rv`Y%kdKq8MlscOr4!Tf8+a#mYn{5<jec-u3Dhr_OU-=*DtoDy=PK}{g4llqg-9~f*vv}=h z#@Z(C^4lzWWn;IsOel^QZ_xY>Zmz|x^lF|0BY9H09mc>my;wUObYiE(HfE<6QP`rL zP7QZ@z!ae6FZn)MT7GYFpkzr#LK7ZWx%vo0Gp3JkwR}57)|$P}p@$};&|b?{dhMro zdpIt=@_x}Hz;fs_W4W~2>V!!Er2kM*1c(IV-v#e=FXh)gW9W4LgA>30SoMs{O;`Z@ zKt+ah=mF5EL_Vk8gLZdP%MPjH8oc!hB`@y>Bdyu?aC0nQx8E&h(bb6hi~ zYMZ@e4iIqrBo5e^?2xdQQAsO=0bOMB8Uh65gltdjO`@nTK~W$aP?RGO)!!hVyZjse z9ddj?QF#6a8a&YgX$541dBuvsAu zavU_cGfJOCyx>fk6a9NK2corOt%HqlfK87<`Dzz{h{z{gJOP3OB6jD@0_kaK&{D`| zEJzfje8F1=SCY9h*EGv)>KRm1EaZLab;Li4!YC^ldP0(5n2G zb>a{%0iEE#88*SpQ_N)sk_0=MbVQ`YjK*~ES>~jvB-R?{hfP?!#da7uG(9 z^e`@oye^!CUdxHwFAC>)AG`t;$X))w5G^aYU@(!dNhm`&A#6bjVd(jzLl6soat+cK;^HM1g<1hw8R6k?6F?%x zchLp99KDV#Y0`eNrVN5 zP5EkO!dtcZ!GwbY4f-r#hWQ&NHW0~eB{kAFpLoO!-lvb~EZ4n9v_jQvgE(`+qkDcL zdVRy{1F1^}%7ICK)s$`Xs^V|Nog{zZSTN7@3DjCJ$NXuZc*ut>N=CDdocHg(?!lPH z_WZh6rM@I9j+;5z#)F}u;1D=i{SvX5{_Mef>zY?9-;3m~RLAH3L|2!qrEKc?(#qphf5~!jC@d^U`Dk-H~dEcFdN2OTT*33@+YhejrBfHMj1~{VSuKK z Dict[str, str]: - """Parse provided arguments, returning an object that has the matched arguments. - - Any unknown arguments are ignored. - """ - result = {} - for arg in args: - try: - parsed_opt, _ = getopt(args=[arg], shortopts="", longopts=_options) - except GetoptError: - # We don't care about any other options, which here may be - # considered unrecognized since our option list is not - # exhaustive. - continue - - if not parsed_opt: - continue - - option = parsed_opt[0] - name_from_parsed = option[0][2:].replace("-", "_") - value_from_parsed = option[1] or "true" - result[name_from_parsed] = value_from_parsed - - return result diff --git a/env_web/Lib/site-packages/pip/_internal/utils/inject_securetransport.py b/env_web/Lib/site-packages/pip/_internal/utils/inject_securetransport.py deleted file mode 100644 index 276aa79b..00000000 --- a/env_web/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +++ /dev/null @@ -1,35 +0,0 @@ -"""A helper module that injects SecureTransport, on import. - -The import should be done as early as possible, to ensure all requests and -sessions (or whatever) are created after injecting SecureTransport. - -Note that we only do the injection on macOS, when the linked OpenSSL is too -old to handle TLSv1.2. -""" - -import sys - - -def inject_securetransport() -> None: - # Only relevant on macOS - if sys.platform != "darwin": - return - - try: - import ssl - except ImportError: - return - - # Checks for OpenSSL 1.0.1 - if ssl.OPENSSL_VERSION_NUMBER >= 0x1000100F: - return - - try: - from pip._vendor.urllib3.contrib import securetransport - except (ImportError, OSError): - return - - securetransport.inject_into_urllib3() - - -inject_securetransport() diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc index 1ef40977c532a97f34ad8b80b066f0a505a68f7b..ea9eb0e31cea1af64a3fd739f1953b16e6d71eef 100644 GIT binary patch delta 20 acmdnPvWJEHG%qg~0}#}8KH11^$OHg6T?JJD delta 20 acmdnPvWJEHG%qg~0}z~b*|(9~kO=@eDg`+J diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index b4a83d8bd06dc45d7a3c9bbfc2dd486a45126a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmZWl%W7LO5S4xXxN-3+6avY@TQ6!CFG~n1O|uG)i4zwt0wLc!H6nW4jwGAr1G31U zbl>J%N-ExIZ%a&=G~s9w=)#Fuk2%>KtNWIAkz!y8b>!PK}*<8}2N(cn9A z!KK)V9buVA8IBac2evLPL-^$df&%TfP8P-Chj3Jjdc=fwfSSuu6h}+`z&VC2I^pBK zy%H`Q@5>6X^eDItC;O)L%Qc`CMu)+^yR%B89U6&gdzd9?C1@w;MEFCnpYjCHkKew~ zI~#jas5TtwwT256YoHgV^y!n9&d{uoD<$-bE`;@54(85R!VD&#ClfmRdUHExKVV6D zT~p9&wu$+bSW+t-e5!eQ&sSh+oOk@TpmAK#n8i{!#zyt;ke@13c?oA}Oq)l@8?WaD D6T+-n diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc index 45aa7ccb8d763c300d5fbc9bb3ff83103ab89eb4..7d9ffa7d4f1e46dee66490b483a345b59164da43 100644 GIT binary patch delta 20 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%0AEu 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 CDk8W5 diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc index 50db6450980c796eff918d290cf1fa1a6dff7cef..563b9934d5c38db69405dd3319a597b0e853ed09 100644 GIT binary patch delta 20 acmaEx_%@OIG%qg~0}#}8KH13q$N&IOM+Z;< delta 20 acmaEx_%@OIG%qg~0}z~b*|(AVkpTct6bCc_ diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-38.pyc deleted file mode 100644 index 8a96723655c92ade3ac6a39db8f6305e2df36730..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8544 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 delta 22 ccmezUi1GI$M()$Ryj%=GaMoqtM(%<_0BC0jBLDyZ diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-38.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-38.pyc deleted file mode 100644 index 3e168640bec97aaad14b98d9c7497ae4e29daa63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21249 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 G_x}b5hTJIt diff --git a/env_web/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc index 0d953b214317af6d6fd2b3a44cac81f2c0f946e8..bff34e1a99201d239e61a2ef99bc6ae723d0bdce 100644 GIT binary patch delta 22 ccmcbAi0S?zChpU`yj%=GP}linBX`I`0AE`N-2eap delta 22 ccmcbAi0S?zChpU`yj%=GaMoqtM(&V>0ADBv!2kdN diff --git a/env_web/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-38.pyc deleted file mode 100644 index d87ad8b793521e7a5252f2e75867b98d9ee4e984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27522 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc index 43ac606fdf4f676241602622c48d65e4d8f59540..453a6d5278d2fa7fe2075981c62a4eaeed26f9fb 100644 GIT binary patch delta 25 fcmaF8ll}EhcJ9->yj%=GP}ljSk$WpQyj%=GaMopCBllKr#s_x*c)bZJ diff --git a/env_web/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-38.pyc deleted file mode 100644 index 5f6a36902e7fa25bfe8ae1e1e26b060de55b7517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66181 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 WU^7Wtl^oqLn@vp`WU6hIX8bqFfa_iW diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc index 5988932565f82dabaeb3c6217387a34ba157f1ee..58d3ebcfb651fee6bdccac43188e29a9984cf98a 100644 GIT binary patch delta 20 acmdnMzJZIJv} delta 20 acmdnMzJZ}Vq9_tL0b0OKgF0yeK>$IEYlR3!3MmNCLuL5vVW;A$;sXf9pOD2))=kTbIs) zxibtmiz(0UU~05Qqas<925s~~TfimHAP&Qi{2n4{BjD9TWX=C8OEg84?X=lmyO#FO z)HYH^=aJ?GR3&Ao;&9WuM43f1j+N1y6CiRXjYgB*#|HC_e;SV`@p$}1Z{Q5wrhjOO z_^U&HE_g}iX#4nZTLC_i+PNAYH$G#+WQ;W-W4tC)NH|~&3N97F9%C!OiYyTE*T~Bf z5L={feEu&zws$Ptw?@fv_ZN+?OrA@fH$e_|Mi{W^GPY}WSB?wuo@+tZo8DEe)Smos z@Fl6A!=LZdH|cFf!Aj_D^27bsVdUYM*dK-((4Mw25i3M!O-kyXuAG`F>oCYqd1 zCh7J0=bJhE3X7DCr=VACO?W03X(cVZrboZ$IaFyW%MmrIg~8F`M~xVhT3W{9@}cRz aEsUrYyz7v|>V$&lc`nUX-=*2=x_<#r64ZbI diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc index c790e1d805e21b980803de665c6a7fced94fdb9c..1d724c6fea773c62ca6474d6cfcfed7a4aab614e 100644 GIT binary patch delta 20 acmZn=Z4l)?&CAQh00ecNPd0LwasdD{X$4CF delta 20 acmZn=Z4l)?&CAQh00d`U_HE=Y36tKEuZ;j|zTepx|F7BPz0DV)-cT#MbJS9+0Waj)>pAPOw@imft?Lcl%`UXiHJ zw|EHO0q^qxe20985Bca7jYeXdZ$D>Ji_tZK_4JHP?)?R)lj($-K#HH2LTLr~{i8IS zi=(>IvMvsJ+Grucymg#s+D^g1E9%+Inn#Cnwk$=ZPgALc%y7rsMgd@?NARjIpwnbS zHCs40loHK0?hSc~w%(ecg%j|JPA8rO%7_V+&?n+j6voHX@@i&!$KQT)@tql-X(`h3 zNm}tjNE4=co4I*;q zqG%?LMEcDD^p&KY%uU#!&~c2#;@OdWJDdQ+!6m5rF3BDpQTZ8+GxYbiA*=uSeh!1y zcTBWRD}yMYUS2ZoV%@IkqPOwZY~jNjwCM)R7Fuqoe4;~6uc4Nz01!iDtICt+Ch0 zywV^u7o(T=aR(RweVZY-O!Mj?Oe?GdLOtp^1IKgTb4D~|5@$@1B)BR`@K)H70owXd zWxHLKSs_N_JC>viJzxU{5(kkFoWKhPffs%d(0>6r?wXbW diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc index da468e5c1fcab167741a92e0f37dca0c6424e3da..ec119d3f74513df5d1f3dc4fd955c3ba6eee6721 100644 GIT binary patch delta 20 acmaE5^va0)G%qg~0}#}8KH10}F9`rg90pPV delta 20 acmaE5^va0)G%qg~0}z~b*|(89UJ?LC=>|3c diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-38.pyc deleted file mode 100644 index c79d5a818432bb25f219bfd147242d85d70b98da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3175 zcmai0TXP#p6`t<7Xf&4POPr8olVyMh&{8NNyg^9C@nx5-UEzuq0xDI_j@2z|q|uDF zyA@;CxQZ&L2vB5;2Y!I^z=PlU5&IkZm8bm)@W66Tk1QM3Rm{|!>F(2g`gEV~TwW|M z2Npbk`n%|#->|HIVCU-NK<6oZ@-raJVkEUX<)3tj>C+B{KTYki({YH!Z04ly*z0)X zN~dD_Zt9P#ovLYjX)s>uED`HNi&dEa+G0L;&g@Q&k$tOC{R(!mS`DI?K5Do3Hd#DT zTzo}futD|8R@@u#tvpjAPg5@RdwV<2KizEYwA#`0o$X&d-`Q$M`|Zv4i~XH_kWt-E zddjSU&W)`&O%LMUXg5juOA${dT=a0atB*JD$USIq3r`5ABaAY8V0Ub`^2X{D=CR7_ zYR6%#rsuON^jx-PdP}SZJS>31?m>w zahjZP z(Wq)yPT}f=4{B&Xijpi*Q6%u@v};!B>VQv0B307UYi1-qNO?5oYLGK25K%hlEv(oG zv?F=i7i+)}%g9~5Gdm9`*Ba@;`kgaAC>E(=-m3( zpSOP6eE~<1UCxeT(fwt{w?*=bcenH2bj&j)yL%!(6!CbRWQW~fC2|_4;l7%(Bo7}w zeDtWhxB0xiAHC!UU4TuOXRo3oXn&F%bY-IWk0yYs_>jx)B$+&jUh$0O;(8^j|4^$8`8MJ@XE$-S*_f~0wI(LEcN%^$=F+F=Pk`8yy5 zo%mo|>(nX8kQC0y6N8gg7@;$}An(Yj`_jtpI+k*V?kEsXh=nhM@!tSyer*-5Xv1s| z@Z%!r-`e|ttYKw_Qt7OUGTs5&RG^j&{%Qs3lfwRjoO*=^7;;Yj8iey_A1)${L%~0v za;cgj*dSB`elZXxSw9!!SS5KDsyvjOhe(blRN{t zu<(e78RrZ|m6NjOLQ<;@&<^?{A4g_!W4XkUSAtTYEp*+mSTt8yJ11#!pk2UvE_D51 znxx1pH`J8@j~QS}d(#Pv71uYw)-1up#A!5V3Ut`gQvl)_YgEKd+^I6(!YCnb<51OX zj*g;N7JAJ0a&T917iHZ;av#a}f&2hIc?*c;1|$Fkt->1+hpgHgbc3GU-ns@!sK{;) z!^y>i;RT_D(2^SvYzt=&Be$^Smj+5MKYS*JUv4&7;Mk+cW@kz;}L|9 zOTdS@2&WQ<5UIwd&0ry+JxFADl%#2hUNW7)gfzv;XdVM#!PQh`rN~LHAWlIHPLCH7 zN|b;%l`1U8lZRlz_AUUv&Ui0pJi;gh%X^qcFCJ`D_)I8z9~ytK&d@FpJd8c>LW|5O z+R7vc+7h^=VMFL1OtVpx^1jk`)SqY%Vr?$@IWgcqC;E=b5K-wE(Z%%aPz^5et2eIY z!xqvcVGN4ov!WH5L=lf~%2JpAQ8EmDWo9zFT)|2OM5z-ogA z_(=?b2-6usa4M>xf&mvdJp)zJYB=SkxCWS4ZuTLp{og>k3uA9kFcu~jqVCRh>KRcD zuhnkB(||qbZVRd*sDQF~%%eyLQ8dok6e^ua*P`fiC?ZOZcnWe&-Zw$pm{;JgdU;-^ z^mv*=4P}D6A;u2I1eo5jWRN)IlfZ#9U%daU->hTw|GNIMNivYtoO4vEE diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc index 6c2025e2ea9f412a6c39c1ba41ee03d6d40c567b..e32730c5d9163b6bd7353eff410598c5d673cd2b 100644 GIT binary patch delta 19 ZcmeB{>z3m_&CAQh00ecNPZo0X0{}2a1oHp@ delta 19 ZcmeB{>z3m_&CAQh00d`U_ATV*2LLcH1lIrn diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-38.pyc deleted file mode 100644 index 14b9fa5d4a8119060ca13671bfaa76a24a848d55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2702 zcma)8O>f&a7$zmzmX)N<+O-?@(Q&{q#6ap61-3)54gJV46ezr|Y1bhzpwJ?du#qK= zl+)VCY3-?({)P6K`+kkCJMAy*vb`@ANnYXrB_NtKU%j8t!&gsMRssU!^`Cn8-xeW% z;bwk#u(=J7*@Q`uZ6c^}VmfxV9ZG&8!WG^tB0TB7bhka&w?rHEZRx?j1^bThVei|0 zTXeTbFPM#j$NQ2+Jc2nLJ(E$+?mWEDc2mvNIE&?2Cb>%XN(s|vC@thJpTs#+hH;kf zYsp1m_^xCsxjvTTR8N^uQLfU2>uEpu8@wewT6hoA=pe$){BU7&8y?e#Ns?^}fjJo1 zE3)m1KzO3{if((NEjsW|OZcJ-zir`y`%6XlE;sTXdLKFPel>7S;kgHo!KCKoCHVtX zZ;@jty6vM6rPdsZs8ut=`qpx-aoJJZ493nsm)M|=UfkePUNOm zhjO@?MiWeq89vnMp625*q-pr8G7}!Nt$ZR>%5L4fb!+(W&ZEa$;Zr#p@+=$5j!EyG%A*G7+i1Ve1j4Nv_kl-1M_);qJ-&0!Cy*rL&bf_&%Hr zBE&~EaD7e&G@fYy7&-Q|kLxZ>MeC5q6IpcRi%e;0Z20B0gvYLt`3JCAU>r`~H~Wok z-9gKk<2fU3A!C`#59jQxHbIt$5r$O_T-RY@Tv+1L2&(SUGQd-2T2Y)D`4I?I(Ohh- z*s~rT^g4wfh6x|bFf4*F9H(Lu<9ay^e}^KMCwdvQ=vACBJNgn%jXAr*{At8F${NhL z@Az)u`mX)=d`jE|(V7y0aD)p~0G0zK2vB0ll7h~Wf&wX)i|!_{&yr$rrY;B_%ZjV8 zKvo=)kRH+Og2I(kr?2N~6fL|MNLzS<=e+0GWENeOs60f5&jo5R0{OCM;pgzGv2dh5 zon5N^=~n`0{6b;t7XtiBbkNqlGMf|c5T|=kZFcGLtKxeCsTP48| z`v`x18DunaQD4F76P!-Ly$QNOIwI>+cutTWcz|_J4#&n-1hUwxk~C)~Pqh?m ztX{yZ682o>`&MWybB-WiXQK&rHmfe<#*}hv9DChpnoDy%RtHtD?4b_M%!yafCF7Xo zDcjkB3WsQTt+%t&53IJw`y4fwPQfh;z1AuR0CC$bS;lkNBp|f0QNDvgMcCf@pl}WP z(mEJ}*kU!4BCMS5S^fW$Esetqy;9MZ8mpM=7!=ewG5hHx7HlM0oN@uaRB^;pcBnW+ z0nC|;!WwX)Qq{n9efuH+nl{^9^uU;=$#|HPQ&cJZDp?z#qT=thg{8(cSdY$JAdCFK z>(H5fTW9By%qNiEIss7BT@}muiuP;afo+kCXjJ%BUcRp#_GafeT!{{P?Nfv*I$!S9Hs7F!=r`@9cK@A!nP5<((B@q`UCH VE8E%+_&Hz+>v_xW>c!Q|{{h-7K4Aa= diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/compat.cpython-38.pyc deleted file mode 100644 index 4aa31e1ead2357915c275f9481998be58b1934c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmZ`$&2G~`5MKYJanq!YIQ7s&PDnw*slp8*1fobFp%OJIh1E)yV^719wRhQFr?ig% zya;#BJcv(7NJzW_C&qCaQY6;$?96^Yo*kcdIxT|h<5zv&@(B4+6`L!-;t{^)Cx)wT zN>WFV%%P4$&Pd+#3Apo?K6FU+EK#pU-;msWO|IH_<_e!SkbSUX(>2=_4cb^SD{oJ1 zWlh?=;r)5d_C!#l8wy`+XD!;gq4>5|_+qCVtBG&9>4o8|VfE~%C$RM|djkKKUILmlGW3RX=V$mDhBIU9-JRA<$ z=<&&99G$_G#Y!>A7tsagFZh%hZsG3rU>LSMSdDFv#K~JoWNx(-gG6R3wxPN#g9n*R g3jq%s*q^zL!F9UMu5-(Coi^^f{;GEWo(FjT2i^MI2LJ#7 diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc index 036413861f121a7bf79c7300425c0f0796187b42..4226319988945133a524f05dac78d6542688830c 100644 GIT binary patch delta 20 acmcaucd?H9G%qg~0}#}8KH13aW)A>P3I@dh delta 20 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 B0LB0S diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc index a366beb31e1a037ccbb7658216bf722ea7ab8129..8e0c795b8162eced293d28768922abfafd1e0156 100644 GIT binary patch delta 20 acmZ3gv{Z@vG%qg~0}#}8KH11EB?tgI3QV@btwL>_xhBQSzB7_>!77kUYNJ}BIG#&4Z<4yL%%#7nE za!>6E35h=;Irh$9vsX?%bK?TPH|wNn<*v1FXXoSh-uu0e^`n)Qc7W^mzsz9oy&(9T zUd~@JUT)*I*CAA(SQg}LhcOz5S-2B^AE-#hF9H?o=y|jgt8hE$HeO+O&}G%dEtzZe zQ0Jr4NOO2E&Gc46Yv->BFSl{q?;v!r!&I;nDz+1;P(?2SV8*I}XG1mB0-jCPQj2&l zsQ1*8T7JQHT53ggFte!I(0-x%U{hvUUncvc@UfAjkv4JxdfFV z^1+Cg{XLyHJ{hLTkWW(Va$0kJpv|Ehro}EdS}L9vuH@1~^~ZyOHfvl0VKUSOcSGs; z09tu!d6Jb@V?PiHOFz}g*lDOrX69ku4RJ<$u%s-UE}Z4%pvI}u*V}$|0|?SNllFmO zVYcQYQ$9_h0OkOL!wqe+L$cFbPq2yS27d`}Wb`0?$}Rl1-kPFxq*f+Ls$etxIplUIRXG6{ukAcjuDOy<5-HXJok#=^ z?lduKgU5wSGolOIC`9r=rkR9Y>zr>`o|VO}S1zsh_s!FmtJENRr8%VYDz*DJ`jYs+ zZp&P|G>6xzy9Q_v0s^oVTataPZajJ7^3lLPdBV$r-%pG2)9zYrvJYLKsL4vHYPJcS zrvoAp7#G#FJ^=C7QVNH?lttFu8BVsGno_GMs}pz+^7H^1&ZvdH6}RugG@KNk9qNe^`I zPMM5zDyH58Q|=m>=Sbt;&nYp_x7}E!CBOC6ty{eZ8$UhV7LRqmhc406#etY$d_V2? zZ0ht4aJDaZwe5}4(M@rn3sst%o_DHNQ)V|QEVEv+K02&gLZn6Ngt$y}HX#DmVNG^) zc@8)0r<)Vv@ARU8(Cq{AAqLan7$G@f&qBu#2=<(MY`A3zy&F~+gxJ;YtTzZzEzI7# zk!fL16&Gm3W)VYATP>DpW$Em!5T9YfQYHk8ZFY2ZzP&SKAreMAXBUl0lQ;PX430X} zU@zE1E8lNDM%KiE3-{Y*l?C+sH7LSgf}^(I6P;WC?)erKCfjA+)3@F0fM6>IBT?_V0T_D`B48owgosNRvNk>Aqt*HTov(%e&mi zfSfT~knA`-LA>@ub4i8ISn-9Qi%?YTBxHe$U1P7|=bE$+Zwn~4=sA0aQacW&h%|j) zQE-IGj$0?7Y*u=PnEnSheO;Sqzvw#MMYDhj(}1XAr?ZSoM(s)i@08`infL?at#?rkQUHHF_ohozhhkkg&8+3bMHkN%6J z_5wJ(G?zmUzxD1E{|abuG&n}Dp(LM%<}%*H<7gTZ6(A)(3CtRv4WeR7>Cd*hO`jH3 zOdsXi`NqVcXsgxvE#-VD%~dFUIV+Dy=B|qA1ND~IhGW;SxGfb+z?NAYEwdJDg-0LH zbCoQ4x1YBG@rIvB2qX!ghAOO|+qC|+-`~99ceM42GS8A&X`gb?7FG_lIAg+4Et^#m zkT>QUgu-n*5aip1C=O@dU76?IYaPUXn_3<974)075P7M_8I6~P_zg{V zwz43EDia~h3UrwFNxZg-(<_;A&NOeNw=cp1wJdL6i^UgPjn;DO{nn@LB|~f7M%ALf i0F=`H`(rL)wrbXYd;FGpxK-<$+SYHWUVOiU)6xInhw3E& diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc index 1df65eaa8ab809b26f756f846579bda573de9cd5..da50ffa463a6e37d54cd3addc1c22a20b6cf43b8 100644 GIT binary patch delta 20 acmca$a>0cAG%qg~0}#}8KH13aDg^*TRR#$F delta 20 acmca$a>0cAG%qg~0}z~b*|(9~RSEz@A_eUL diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-38.pyc deleted file mode 100644 index cf08fa876f06b53fe2ef1d7d638204b86c1e6002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4770 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc index a1e1e365138e1ce86042b7a053f8e165fd5c056d..e16698808f2d21618e2f587a7ec23b89035b15b0 100644 GIT binary patch delta 20 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 k$^G|=2=zXFMH3u+<}(WBRa`NAT$Fd~y^l_i&? zoHkHT$!ULJ*Z7$GevPg>?Jw-K_b3bTf{p;mCq6#C_kHg@J|B$+1jg@w>f^po$Y1!e zJ>ZP&!!%#QB8j9KS-JzrmV> zv<_stN=;hiP8L?#bfG}*KM_V9h~!iycyoI&_}GVO9>Jo>oJunHB$eJJnKQ|x54$gS zWLNesDfkOyA5OY*An(B5lS4UzJ&+xU<8D28retawPagcR9Vp{GfN7ADidG~BlrwTo zrx2l^6nP$cwQp2*tb1_dn&>`k|NL?ARrK5_Z6YPlgpPj9)uB#TDmpBZa-ni-qNlnz z(PFVk^ONZ3)RZFQGh52E;Co-}?L|)?Kl^DG|Dui}v0O$fU&Uu2|BxOXX|{ zAm@&WAqW-uja<=+uIY^EE*ylO!(X!#Wv@LQz){U!syB{~WR}d;@-fvx3-Wtj*-?v`HEW7aZA?{cHnmizHnY-1gsO?tls<$Q=6z(&) zKW;S@Yfdno4TN9=!6;h~pdxc)MV=^)$m?!tle{>qJD^psYnJA=9@)Z*EH(=2K$_5Z zu=NgJ@2o^ts=B9MFH^0|Z5r;voqI41@~LuS diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/compat.py b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/compat.py deleted file mode 100644 index ccec9379..00000000 --- a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +++ /dev/null @@ -1,32 +0,0 @@ -# SPDX-FileCopyrightText: 2015 Eric Larson -# -# SPDX-License-Identifier: Apache-2.0 - -try: - from urllib.parse import urljoin -except ImportError: - from urlparse import urljoin - - -try: - import cPickle as pickle -except ImportError: - import pickle - -# Handle the case where the requests module has been patched to not have -# urllib3 bundled as part of its source. -try: - from pip._vendor.requests.packages.urllib3.response import HTTPResponse -except ImportError: - from pip._vendor.urllib3.response import HTTPResponse - -try: - from pip._vendor.requests.packages.urllib3.util import is_fp_closed -except ImportError: - from pip._vendor.urllib3.util import is_fp_closed - -# Replicate some six behaviour -try: - text_type = unicode -except NameError: - text_type = str diff --git a/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc index 1132467bdd97f0b5224ac1bc5d9539dc370ddb14..05a3690e95649a081ee0973c2f7c1c177044dabf 100644 GIT binary patch delta 20 acmaFC^n!`|G%qg~0}#}8KH10}%Lo8J^aa!a delta 20 acmaFC^n!`|G%qg~0}z~b*|(89mJt9y!3DSg diff --git a/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 17653a0d13f2a4ff5ddadf9d573a837b8d215e03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmYjM!AiqG5KT6T4V8kQkZTV%H5Wld6nhjc#wvuxVVj-C#bh_^CN25};-7f;YjXAE zFL-kI)`595j~U*ZSxqKm&&KDs-aOm-FB`1`#76t+3X~n%};Nq(GZque>{u;SX~1Q zhX7mDMkopJ<>`?VaPaqWeMVQtjwtdS)AUZ_LW?cZg(~~TnbM_Jm1a#NWJMo^=~w zICAG}eC>%};L>`R2z4aCdGp48o;lmz&Pa&6XT10u@}IW&KjKh)4#%DcP(;xMnYEcM zXvt=*jAjufKpuLJWEMkwm8eMdRIHNwR*xSxf}TQp#qcX^0=p%*loFE#9=&lzr=-8} z65Pp2pZPSej05AWk5`v~aKi@qO*R<3%b9f*f^gVCpZY}RPFJR%`BY+2OSItkYF!V- z5{#;Fm;*X}p^*iDi~{(bLoAvyd@*Tnqffe5=(nU&BA9eNpLJ?mTi@$2u2CEJL~y6I zYT@3jA2lxz!E^wakCX0xS#KD5W++4C`y3ekv=~EZ~5K TxokUJ%63^wcWKHJy2bthy>gNV diff --git a/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc index f644fe76e33d0308f6b762ee24b4c4b3b2305dda..f1629dfac0d27a012075240c17b30a51af162f29 100644 GIT binary patch delta 20 acmX>tc3O=4G%qg~0}#}8KH13azzqOCMg^|` delta 20 acmX>tc3O=4G%qg~0}z~b*|(9~fg1om69tn1 diff --git a/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-38.pyc deleted file mode 100644 index 9b8def6812bc4f1083a907eb3c99e6a2acf3e301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1947 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 CFld1Q diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc index a7ff10a7d412ec243c04b8228acaeaceae6e8e5b..ce4cb109708bd5e6f7541aefc1f719dc6d30db1d 100644 GIT binary patch delta 22 ccmaEPh4JMTM()$Ryj%=GP}linBX?XD0Ap(h<^TWy delta 22 ccmaEPh4JMTM()$Ryj%=GaMoqtM((&Q0An}@$^ZZW diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-38.pyc deleted file mode 100644 index 8f03d5e29323595c6ca56ebb327ec2fb69e95fa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27214 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc index de2311a80a5edfea0db5ba0fd59408e2fe32c009..e01a1780c830e1162442fcd8188b15f97d10353d 100644 GIT binary patch delta 20 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 ZapLNKBPI<$%wYMLvX!OHWl`jF-aiN1Fn9m} diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc index d50ea939aff48c038ff937c23cc97e700ed45720..e43e0253a980b7e783297dd36f2458c71f130038 100644 GIT binary patch delta 20 acmX@2eng%7G%qg~0}#}8KH12Gn4IML>85z~=*Q}bDTaneat9IL|I;O#F=0v%+TXoy{ zYTh)sd0b$*6SG=;Y%rJQ-xw_a+Nw@4bJHjl-hrc0E?H?|y`#b;4x%*oG{)eai4CmJ ztOaqi8#MV>VWhZ7r=EypCybk$Do|Yh1VmfG!r|gV_4%h;uNK}v|Lk=7yKIA2zpT?e zqs_tO5kC2Eblf04sunY=Hg{g+8YXv`#q94a=CItGT-C+Q{mx{0R(Ru7^Sr=|eBwIv z!CH|`ym4Ne)yc8dNj9Zdr}#9V;TIa#b%W2cX>goj7r^5psAu*0S$0uV&hblnKF2O$ z|1!Taa&m@U#>p#eUQ^DG?Oo7&SJ^eacXezpJ9nMk(0kXI1)JYYrcs3 zxYH_EN=4yr3)t>IQWc?r~9|{d|-(n{aSiY;v`RF`QoT{WxfI z-%nlIhjQt!5TtYi%uH$~8H zgMaO}q3i~cx2d`;OuTzv+`CtMvba&%^q=vaTF~j#c)aKDW4spb)MTjmLMN#20*SKL z2|J(rdpu@|_`D8VGOqNmdbe{xLWgmveE$xFlcbwr7EBj^hx20&xH}*$nW6}) zIzfNXXiPTO_MXCEXm8l{tywPF+N^>iSWKdOYl@3BCX-~{C5+OX;E?VfhEluJJiIh6 zgx>$&)pWhSn&O3ADUcxgeCLNFeV4vwip+tFw7-51g6uZy@W%LUqhuexl#Hf~KOi>y z7r!;rOXWnZwmT6gk8-vmL?Xm_q7(?qlsSGmBE}iZ4@f8h?Hni$K#I%kjyUYNV>gcEd2g?>9hZmTRd>I1W#?*-GO;LES+`1l`NzAt+3hh zwWE_bI(Q69NlF{mjCuIuaiPyWF=jiGmAs?ntzw{z*T#{l%wv++JhFP$vhn=U5t8Du z-LpxPKjIlUF--$AButteIX&mtIWgonJ%`!5hWLg#SfdjTQNFy~Bah^|zW^d9yncJe zJ;obh%stf-9Q{FuOD}17q?^1yqzj@>E7;-czQ^Nc6v~!2Sdre~p&Sy2h$j&T*)x3K z8=HC*ut?L$uHM!^UM>9d@6U(l+JV^R0#_h~AE*{`tH&eBy{-NOe1^Qz;^5usDi0`V zaN*U1*xMmZl5Vr5Je7Drl?uYx3p}LrFw<;55llksC~PAav*GPK2VN$Cyz5n3q4XNv z7|%%(dpNNxiCyMOs2r= zzc0s-T_Ct8cqa<#oWV1s4vZ6VPvRxvULfmXcxu?Y!*iJ$`VIE*5JhAGs6q0}x(GW; zdi$-g-tt)D#fkE|F!oB{zo&jWZ)hf-sxl+%%x7BcH{mgcl^Q-^-iVgytA zB+c1aywQ)WF%$dxEY+8iBHx&Ha}!pa~Pw4#UzVS zhUjG0k*!doyhgk-8}Vu=n`VgFjhc1j9OZgB=ImPHH;ByKRpST|d}O`6g;f`;w|Y*` z-gSiNSyCWgogSjP=L{npD-0zN3gUu3Wy!w`s95oo3b8#AY$1&ey}zN0E(x^Mlg+c{>C=Y>M?+Sr8 zA8KpefqIInA;0bIHRP`NXIWLdy?rY7SAw32)U4|ecql04>)`_(4V5ym{8OTsX!CX= z4)#L6pE`8_I4$xRrK3QVDn128$<3Y@D(O-;jC~a}Q>P>N9_S$+s)%mmT-09>V7e#tzy`StonW$9_fuYA3+g2~#lprL|WP zIw~7Q9^Gwx@<-?jmSfGkGqz=3*55Vsvo_6dIQTxXOif>!6w`E;j-)PLK;%{}d0$lW woYb0T|9Ir diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc index 80f13c16dd46907ae3b1186744b031f23e86a317..b4479dc604b9d37627d979890aacf6a25ae7e1fd 100644 GIT binary patch delta 20 acmca0cR`N(G%qg~0}#}8KH13a$`1fQG6m8A delta 20 acmca0cR`N(G%qg~0}z~b*|(9~l^*~<{{^-H diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-38.pyc deleted file mode 100644 index 6d8f2654009b5ff31abdacfd6475853894db7185..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3118 zcmb7GO>Y}T7~T(m#db_+OWFvKhEHM9rd2oq6+$g-;Zo8nNdZ}wR+F8vz3F<_of$h# zm7dxYM}#=_&>nl|*X)&3{{knTch(!*i9uqm9nb8{`}Mrf`|dtiU9CH~e*IJRes4L> zU$mINd@OF@)>{~aBiz{OIKmTt><+z-=hD0s`@>SFbUn$xA-3Q1`GDq(R0w~jGLr{fBz;|aIp z%Mv;B0#1nX^Ae1DqVmEORZ+vLBCE10R3U7P z{k-(d?W_t90i4Uuo%Naj0f*`g*G;A=7B64xMurO0uCV)6ZIk~HgnH@yi>R}^(zrk2%eC8z@2bfjC`g6b{B|q z+C8fPaq5u_VKO9qNFTYSr6G=BS4bW86C}&h&ZdT&v#NkFola7gLWe?_T1TMC2|3x} zAOa~vWFSlv!;v&YK$DB7)fH5yjN^!9Dx8ZY2QzFEqv24Bi0TD~BH}7is}ErqZk|?0 zK@|y~!g^)L~1=OK^gv6m@l1(eR-S#q153`DrW~`FXL&GdC zn)|qK;nrVaIChVn08JgEYe&!c2PLe~M=@4R^<~YhyrTX3vGcO=%0a_-&=vh{MIC*w z-OMV%5CsxvtsopL6%a83WVcuoErVDliduM9wk4Z2^0T%CvP#~yvTB_6`*=BID}8D1 zVlGuy3xb3XWe{W)+QpMHdV(|vvZQ6)Qx#}^?Wha*`}?GMYsMl<+19nKt?vDsJA1pq&vL)ZN29JxCcz=* zccc9-*eb7#c=(W`D|ScG=xQ*LiAdE|3J^5Cnm2PB()4ApIXa>Mq9igw@HITtc*8o5 zTd}_y#-{t^-Lr3(%|fQ_swxCRg1We9PII zyNros&5D9icEjH#DygyXM7>ttS@BQW(t``FYvar z5)~jg&u diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-38.pyc deleted file mode 100644 index 8e330205c818828d24c631455af4de60f00f9d6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 727 zcmZ8f&2AGh5VrR(n>K+8q)J>+uQ@yiHMP3+a8Z9k;~=Oa0737c9TnRY#!Ugtl(NR!>~q75ZA7_g zt)EL{?=r@vtguC1NsWoVHtGja_b_9l{(K)jOXnJtPC?vqmA*sHDqlf*US&-Q(&%)e zs-@y(iKC@gxyC*xQ`3mNIvG3}4ARN-_p>Sc0M{w6>lEaQ-J<;_zfN^-;8D%9Psm-T zbzb+`3Z$r1-_0q&^s~*vHY+H%3lnZ(^;(6<(ETmlaRxo2F^bch$P0Y#(BNFfxEI;T stZO8v@CTC3@G5YYD`5jy@ZY>!>%NP`!|nP`DIy)CI`V?B;~lsE0;gNTX8-^I diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc index 088242de720cb10df754fc41ad3099b6dfbfe3a2..426c422b5a9db16d334791be0e72377a4a0c45c4 100644 GIT binary patch delta 20 acmbQoJ&&9FG%qg~0}#}8KH11UnH2ywtObk! delta 20 acmbQoJ&&9FG%qg~0}z~b*|(8Gv7DPUaQqWAfLX8{ay{B?|M=d3nnjN z$Q~$$7>-bkJ&d(&L`H0SW@(#|72BR&+E(PmHLr%z8^mnpoFe9Mdunv%9nQbd3!Aq`%$U*a{%TAEN8fB42~z$iobI2E)wwg3r)CW+t;vo1V!n zZfjqew>8C{^V?Hn?y2_F&X9#X7b>Y2H_E89BnFU$Be=>%66gxAMB4@o6NY>UN}(w_ z$6paf%24JMpCDo>dy3%eoS^fXUSSCC$Ae|Juw|ZcQMiPJNvH@B`W|6}D(XRr5s|Ub z0gBtKf+e9E%wsre3og03z=b7wv=84pAwfi?B;*49{M>!!?@2DC&)E?b{&vE9B0S`N zFAegTCrbKI-&oK%20r|Eq0DKtG*meY)1}oXtE>Lb`tI8ydCx~a%`%@ShvW$Ct#IVa zQ1QnZ4L;B@mwpyz9dgJMmWoaQ^f9hFK?ba4C5bE9MAV^-2QZ`y3gHHBm@YnEsGz)Z zg~MMMYn;3Ktfrb_z|R;Ic6n6X0+(oMRa&KL!?bAXL;xL<(3n30kJLyaWBW_8p5 z#dS7Q!D;gEz-~m7aSph2Dnb7!^lAgN8IZ5@Bcx~$5~nPWwB01+BXBWWDWNM|fD*bz zO$rlUl~{ng#UiMpbxC=^qX>HF8ihH%MMEJRQ1@X-{fFS+smrTp+d7X_pL&6FEYIxXnCrErm^gcY%dRbf$E^^ zECad*dXXBS8!);6+6LVOZ4)#dv@Kc!tpr+;-s>pk?I|~^K|rE&5|0=$!(=R==ElV3 zj3k0l(0G&#M^O@|L%fm8DT~R(^`5yyRxyk{H;G3P-y;n-B(=Z|(;?&|>V}oGrMf>H zyM9pdqH)=n!A+HNM&@uknL7yFp@&U3KNXaHDB>LuOzEirO@^wyECmoKT%6{58qLEM zG-+7jB#Aq*8?$N0AnT5V#ie z;)oLuE^@|*A6C-UI38w}iVW23azW~j6S`yOIMQ&OaYT~<>zj`AJaL0XPr-3$${UlpM@9BCDfb#Szq`u z`($A`(VzH}9p{3DG~zo8v+f{hqB6PS$V+6d&_U>GE|*htYTA0sRtU;I4n^^5TlET5 z>*=%r)YE$g%QLN}^fuTAE7TOGLw%DL!JdXJHQjKS0J#qQAZC2}&Fk6}$d=9{=jlX2 zE?H_zfFZadaYWp7rNQ8IY4gUyRK(k+LZd^>PZzxO6{oCHmkNQ zzyePF@sZ3{n@w3*Op;k>TG3-(yNA2tiQa}HP=JN+p5$aP3Ibb;yWv<}soAZrb8M~!|N4r=DHty~}Tz&Wcp~QB6}#?uFVj7M}W`!=5KB^jOn>#sYs7MRfZ0-2esGBQfc? z1Ot!jft!=_CjmNl z1<@VlgCUC@80oAQNVmu6sAQ)PZ$nkNJ;N?;^>xn7#Q@d#$na!tCTm0)M ztqw#L=-coDSBNo#bWCN|4`crE^3eY}E&mWYK8GSO@hrnT1dmKcP5V4(e(Ado8y`UP zU1XUDd4OA&_v=gJ*5{yJO@FzY9jpAjLXljDbx5=<5I_{3t}+;OfGq*5UBwJ{5-i4e z#rR-A;6bpW7Fsfn;HiQ%s)koFxbu(%Or&p}kkngtx7}(Icru|vA&n;dIW>s#M^fuNJ+8HyGT*QcA)XZ$ zd*856`V>eb{AaMd1x0Lv03#Ka(Vb(DT{ae(2MNlNXFQ7n37^J(jR-&?FkhmTQ%dBt?QF@|zQ1jhjMDZ$@1~)L diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc index c8512fc99d427930167d2369cfa429d3c17ac08c..331db0f37c80335065566840f35eab886656f217 100644 GIT binary patch delta 20 acmZorX;9%l&CAQh00ecNPd0LY6$Ah_j0Nxj delta 20 acmZorX;9%l&CAQh00d`U_HE?;DhL2JSq0Pp diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-38.pyc deleted file mode 100644 index 4dd81848601f8f984e5122eba668e26f87ad7d7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2858 zcma)8&2JmW6`$EJEh&T?$Hm8ik9BBj9|R|yrX-^w&8*O(gj?KB?aT=s(|1xg^Fq(` z-E=AQLqDs8m8=?8jm}G#vszfo>R~-=gpF(^T%qJ4;Y-|qLAWoR6FY43%7C=1-+(vL zwhF&L)yX7}(!zb5L+2ZcdRo*s_9HnEdRtERgak!vW5SbsJkXIATT#59bamlkjGRnTAik~kz> zgK)QsW=F-BLVEnKY5>pfexia)1HnuQ6-2@9c)~@X;(d{c+d(v)$_a!$7)@lrg%+`f zzy=}*E9j_SnAM)`3n})F0uiYsJqo0VC*wRhj`mU!2o*%#NiC4qc17I zG))8#CV8MIW~qdWTqmQWK<^6$vlou;n9&|UXE}x3vr(CNPYOMgd2C%s3-%G-HZ=8j z5SpBj13IUi{+UuTCUe59IXSR3WNDqqb?95Co?g=a34H|?=iim{Z?vs~?eKhT`O;Vo z#=bZotCwROys!pGe=9~d_3A+jzOK#5>Dns-#X}%VcCSq()F_dr2(A~dnoR-JK4VFq zXvT_48EvMr(ryWip)x+{_Bw+O8+5m}A9WveJDY_E`4Tyo9WF0?NB1q{|0c*2(GRt+b%E~+o&SEG=C3Mkxqr%{0;mHb4u55O8I~%** z-owIU3Tw1*CFD&*o*X68k=gHST2vT|(?}`CUXySCxbd6eV0R~|A~KP8@i1_*y8uYQG_cE^>5*)~DL#az-T^^qgLYFHTfoNOuhuB9u`5uZN zp}36#7g&d;8XyR*!q0vP}DYgx03b6+J1|+|xz1P(20A9wqae3~y zsGR|dIW;KJ|Kq%N%fw@-{2 zo>x{m9l%v-DtP?$!+#&Ief{5$$1rLh`D1u}?@k(Hp`q6D5prEDJ_oyUKlJ#$D{;7N zi#O-qk%ns3vILz8VCj+Ib%f2N#-!nXr`PXw40)MaE_`4#xH9ySL_8EW!sDmVlX$+u z9i@{<%b%eF38`=qL#n9YE0QugGHfn?g=6(IrjA9Lg1a|WWHEX09}Il^MSmHvEQn{NI*Q{Rpw5aB9=40o|?98~%6QO|;qo diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc index d9d8f3f38fa5918658cda729ae5874f142a523eb..b4c1500589b268739bb13a50defa84889db74b61 100644 GIT binary patch delta 20 acmexS{-d1xG%qg~0}#}8KH13q)*1j*A_u4d delta 20 acmexS{-d1xG%qg~0}z~b*|(AVtu+8s?+1(k diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-38.pyc deleted file mode 100644 index 354b3dfe71cce5c45950d6dbc60d615afad129bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7651 zcmeHL&2HO95GEx`*1s*;R@^iNa_AvCs7}>e5fpJ`p^7d4K(bqaAVARCmBUsf1yXX* z++X@Za68`LB<%Lnr^eV}LB!BaUyGIEwmFk6OZNtWbD{+G0zqaw|d z!ZU#s-(Lk-;5|UIHAnkk^*8#W;}LpUxzymfTqGsA zL2uJFb;-F{a2c;4yhUNlBpTg%?vg3a-v;QH{X`k z-jRBAvft|XAiakE@hcP?bw41TiG49_yWuVN5K3~Je>AkWJJ!o119 z?48sbPaBPT^VqEbgLL!wognMg2aSwnU1Qu#py>fPFk3sM6SxB3%< znqx;fwXI8AGYm+NE8pnOL>oTtjVDC69^=0QrxJF;tc$`(YxNbY}L$YiHv)hCqU7>q>1=q!LgLJs^ZiZ5N2hhhnFdEVrwTXY6dUyEe0H zAeO_SNrlv2_yHV}BlrG>{)jpB(i4B7s?@$Wn*@gnsq4(gd-LABH}5lB)6)e4-!H$( z?vFEs{E5KiX9Dmwj3k7K6HY@C(H5nIGj4<|GFpb-o1qz5ElcmM(2jDgT;#MI4clQp zDzplEp9`lVx8>@+6HZ6PR*{kigy(tTi131N4~^CgpK6dr_bo^yi&R-#anO(7(hORt zZ&g<|YC)39V0)Ot$^F<5_mdz2(sH%WgSgj7{Zy>_ot+>Si%hwvTa8xkhU{;j5dqI- zePOj9r{Z}!ao3gAVVDNr?5Co-|;UJ{eEN?^s3n$p^4%CCX;wiM}5#vQch*@t@u!+??8hAAb7 zY{@hjdIlGqny0tah5yt1~9Yd8FW^LEg}{#e%Yu;Xp{`cwP_(spm-xu96sF zD&Ntb@sdcQdDI-A@Sx|T3r9jq2hU2K%o*osWl52U^bJ*JBEl}LdC%*Fev)|J8}iq$ z)jRF2M98Eq_%mO&*JDwW!Bf$$^*h5z#A(uo=l7%^Md0`LcR@1r!%8C^@}OT?zP-HM z-nhTnY}eNGXs6t3G;BpJ130EF3a43#+K7?xM;{C zEb z0aOEL8&cYX@*!QI?r0@ZQTS{aIT-r!D_{n&JB0UMJ}IX3CrE-_rlIQyrN)>Z(i-{U zk2X7C2L{p}n`7gI9++cDmR);~$u3}X#|}r{JdDDaotThRQ@bvt(ljNn=#z}P2-GhC zKl2{G1o+SN-Log;z#22o0Q378<(0W{7j?XJd>Ns!b;2mZY!ZHg+(_Sb)KpfZ357vj>OoX@hEhT)@i2fx5vzg+^(O;$`YE$31cwrcTBv-j-mF)f zkJcWjnO;BjMBE?tc0BH9@K ztcqFMner20&Z-!8A7w=Tb0~0V1AMh^%^s{><(~Ep4ZZ(z`B*hb*x4Bs}oHu;8& zwqKmZW`zaI^T4BC)aSzx_pawXfhLii=$fuesd6BAp~a>9%D@WpE~2oEC=1<`s5~yd zl>WXBH0=;&b;G`&O8va))9%#~VF+FFT_M%gTNmyrxbF)X2_}F;%ek`2Xvx4ae?#Kw z8uWHM-5)?plUjNS17fnRW}UX2MU9TjDEpsC_hn^a0wp?OP7`8x(23LMSreX#wohwy rmaj4oGL;S31bR3&H?75l^5+q#oV%GJ?_shf*rr?vKo>#`XV>@_o!gXb diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc index ca0cd9a9a0e8b58034902672c866af5107a22a78..deb034bc2fe5787f23efbbecd2589d04e2663cac 100644 GIT binary patch delta 20 acmcZ;cPEbfG%qg~0}#}8KH10}s1E>3G6t3a delta 20 acmcZ;cPEbfG%qg~0}z~b*|(89P#*wF{|0&h diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-38.pyc deleted file mode 100644 index 535faf75ff5c40b0811af6637050240cd88239ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12098 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc index ba9b7a563af174d8d5c89a2bd4e698f9f902dc7f..c3fdf26aa50ac39c4558cd52ebac31451d780823 100644 GIT binary patch delta 20 acmbQiJ%gM3G%qg~0}#}8KH13K%L)KByajpy delta 20 acmbQiJ%gM3G%qg~0}z~b*|(9qmlXgti3MH& diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-38.pyc deleted file mode 100644 index 67e6961ef7d49c3b82ae2f1a5b889ac3d8e944fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1202 zcma)6&2Q5%6u0x$bhK;~hCt#l!G#{Sp&b!IjCOF?+D$71DT-vJvDZb*7q+vh)oz_M z3H}8REyRl3N2}gc;dA8rj@AsU&W^)d~`1FnMe|Hf2p+2g^f{#}) zMHd7`6vrsR9>z*HVk0pOVVQ$!tRPfgFIwE=3oKQXv! z?8(SfSxG_{6YKS)=81gVhoAz>T{LC6LA^||xh-xG`rpV8xh``an&^5}^9-7G8; zmP+A6eIp(u3Gm^+k34wzlT)tna=XkPmF=2YK$Z^oSgTz7-995lOb3 z2jO8bV#3d(e3cxrlxBQ21o|kGtE>nQd9F!Z$;Z47Wjui?To4G)!Q@~ diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc index 240d91e6335e66e91e51cb2f940c40554db39a33..16e10d668ec70fa06c266e13b4ea846bc066a47a 100644 GIT binary patch delta 22 ccmaENh4I}LM()$Ryj%=GP}linBX@EZ0AxZ3^#A|> delta 22 ccmaENh4I}LM()$Ryj%=GaMoqtM(*S+0Avpb*#H0l diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-38.pyc deleted file mode 100644 index cb443384dfaf5065cedbcab3b5d9ab134c94a072..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27218 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 EH|SC=Dth2nY%Wjew+-0fMB+OB*1e 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 BlH33Q diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc index bf32c33b1316431d2ee59e0ed0b4872dd0f0f414..74e2d44de7f8802bd5aaba0300c9294884a87ee1 100644 GIT binary patch delta 20 acmZ3=y_B2#G%qg~0}#}8KH11UixmJj#08-M delta 20 acmZ3=y_B2#G%qg~0}z~b*|(8<7ApWZkp+bS diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-38.pyc deleted file mode 100644 index 65ee169ad307cf917d464ab5194da5563733ced8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcma)6&2AGh5VrR(n<`NuqLn}#D!7nCTL?FV5N!gzG-*XBNUN2s&Du>Zb~lUdZI!CG zRH}q{1Pa2Tr^KC&s%iO@)x~%CqC~&&+)D*?Z0A0)qDGo7n&EA@sux=9>e9 zm(XPo1Vt1lD8&KBMz<0xwFA4#M;pAepLMTjux2p5E|$0bTcrouST zOLPuR5*av;VXG^cWa$sLrMIG{Z2wnOh5MF@K$Hz8{yqs!cH4X-E(Hn$(go;!%C4SlmJb^Q6 zs%^Mk;tm`xmO<#|W#MC%B*3I=AQsIMgNA@-06l;%&CB59mS^ExwuMXk0D`zxR&I`G z74=#b6{WebX?0;sqUyzTbctM5WMOKfJ+Mlkt)X#w^js|0mGPffS-!Y$0y2zf;PSJ7 E12tzVqW}N^ diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc index 83944d8f97fca3d165e2fcc6651e93c9613b6ace..27de619fb07c7dd257dd2c65b4190998cf3399a9 100644 GIT binary patch delta 20 acmaE%`$CudG%qg~0}#}8KH129R}2706$ZZm delta 20 acmaE%`$CudG%qg~0}z~b*|(AVt{4DD;s&Dt diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-38.pyc deleted file mode 100644 index c1e68641af56d6e3a90008f08aea465f46155a65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3479 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 BFo6I7 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc index 89cb7e7d8b659391398c6f1af8bd2016c8fb9dcb..195544bb367fd2c158216572946deb58386f1ad1 100644 GIT binary patch delta 22 ccmdnGmT~J^M()$Ryj%=GP}linBloH>09C37XaE2J delta 22 ccmdnGmT~J^M()$Ryj%=GaMoqtM($N%09AJfOaK4? diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-38.pyc deleted file mode 100644 index 39235c8c4f3cfbc56fc920ad333836bdc3e5d57c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22170 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc index 0bb62b75497979217aece3f7d2d98460cd74c70b..720ccda8f3998fd913526e0920f95b1288e21b1d 100644 GIT binary patch delta 25 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc index c659b8fa5ab908b331fbc89e4e373af92f000ecd..f0f4fb37f6754b4f9642bdec363730424452c073 100644 GIT binary patch delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc index 0d1b381539b5507f9a7eab5da569fd510ce7005f..bad9a0f92f06c8ce501674533bf595bf9011caf8 100644 GIT binary patch delta 25 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 Ptkg30vz3AO=#Bpcv;xMI diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc index a64825987cfdeec78fbe64fef5c2b43ab7df4cc3..dca8a228da4bb1111613e62355389356dae62d1c 100644 GIT binary patch delta 25 fcmaEMljYe>7Vgu$yj%=GP}ljSk$WpQ<82)Pe7*?4 delta 25 fcmaEMljYe>7Vgu$yj%=GaMopCBllKr#@jjod^ZTB diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-38.pyc deleted file mode 100644 index daf86276642a1d8d523cf193331262ebad8f6cd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20525 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 N(VZSDZ`BF!{}(np!TtaM diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc index 40ab759573bf9b0d0bd3aeb8a289fa7737425819..849a5c57691dfdab57df2e0dab1b249a97a11fba 100644 GIT binary patch delta 25 fcmZ42$-1tSmHRX=FBbz4)O9{-kW3mT! diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-38.pyc deleted file mode 100644 index c2e99d8cb08920a6c66e024a2e33bdb04d45d1d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21794 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc index 424f30d4d5896ae8367844035dc132055183f581..c7606b97d4fcba409e6f7bbe22071e07bfc51881 100644 GIT binary patch delta 25 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 DRB-{i diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc index 6fb1fc479ff424b97f7d48bfc487c3ea03eeeab8..e3a12cc050c52313eac369f01de7cb9f13d5ca6f 100644 GIT binary patch delta 25 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 EA4>vB!~g&Q diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc index 6203f6b39f0e9b3c6e62811e9c8d7a5d63b93808..4735b55adf82ddbc3ae3fd0c980674531cc10880 100644 GIT binary patch delta 25 fcmex%m*v}C7Vgu$yj%=GP}ljSk$WpQ<7+(tfP@J8 delta 25 fcmex%m*v}C7Vgu$yj%=GaMopCBllKr#@BiPfBgvF diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-38.pyc deleted file mode 100644 index 8bb984016ff919f1fb9b481446bdb8703300d4cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20607 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc index 83f3c7a0500f4f0489ed77f59211733ece9f32b8..9876dcb5e4c10e99e6b9643f1643647908fd7648 100644 GIT binary patch delta 20 acmZoMZ!zaS&CAQh00ecNPd0K_N&^5m;svY# delta 20 acmZoMZ!zaS&CAQh00d`U_HE>@lm-AeuLY0* diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-38.pyc deleted file mode 100644 index 10a1699eec061711fcdced3daa765d793579d9c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3579 zcmeHITW=dh6rP#A#CFz~q$#~|iMSOD^(qi8s%RpoEuhpXbyCpEXxVti#_4+P%#PD0 zIJ_jN5<-F>(1-T1FMZ+{@H6%a!~@C?-~|c6IkQQ<4sF#wAt7e8XV08-cIM1?F1wV^ z=Ln2%f0Rx0AR)ivVq{Q4WN&w8LCR31{30jE?D=nl}ThW4ku+mOI9Y zo8ipOa@)=EF?Sqf4$ruGo^=a6=N9?6TN2rSedfgT&$QR$;`wL#`wSpZ96=!utGvkQ z2etbrS{FfI1dIK;=UqEuIPWm9_86n~&i;!beK zoxDPLo)@+WF9>tXa1Zcejg(6}n2BW;oAd2R#nw{T?uI*%kfcoGeC11D)`YqyyURj? zz(KAZwra{(V#frl9Y|TSV<54R*ht2ZWPp@sByRQ0B#XvRCwjl9n`rIh?9gGU$#8=w z+M)l6vF09UH{4~&4ef>p4bL6Qo^JPOzXo_QGH?eR(bqr(aVazb#wlla=^fIf+~DT6 z;~FW6#chz7!V)%G@iCs+Hn*rd_DGWDIW56b$cgbLJ3@rR$L})k@cg#vLK5mP3%m%c z;vHfVw}iQmDQR8+g6Ffjp)OW=Zra5Jk4gJ$j!|qS%0VMvDM7 z2jrfGGEQJ?S}ohL74>^U#u?9Rhi&C~v9YlDVO;V8KT=);a?@)78^w9ADaESS==MVe z_LdZpP!DKqMj~j!JL@Hep7((K@m=Np`cfohR2Te~FY61Tn3L@_QJ?EJ`W+Ffs1Da@ zNx##9Ot0T)M}0q-uBkq6cc;&uK6|!)ZT9+N&HGd=*Zp3vF2XhM7Vz`!<$Bas;zZAH z-1J)_s`uKxQ{I{gc~_o7Z@EyX0*zNs7u3n#x|{$w1mc28Mre-OFgFgSVLiEb{U?Ju z4c{sRk#gFiicKMJC=*~FLdvST4$HQj1ao-+NbFp`e(4jhGP~$im#)ewl$VgeZ;Hql zkQ_#G6v;6psJIDFgoRGPSBGv)j(DrV|A(uX0~P!Z^OsYIFsp9lKB_I8ICt*d^C!+E zN9YsvVUJFX9fS_z>4knr^l%HzCBin2j2xS`dZyFk-D^GW%uL{itv&=%rOq1-%AN(Z z&dl<<5?-XFEP{DMyN52qz@CVYzWNuyK$4RIy-zpkfX{fLBloBNM;%b+RAW4pFWq!6+)0u(Mj_vBgqIdODY{Oll z|Lb&t8b!Wr$wOcwr_qi!;v9x!w>nKM&LqCWsG3b7_-(L`FzGPyGcYGLHSx_hCPw0m z_9Jn{Zi0`7_A_7r0HWv$1IS94VG4j*fkuZ=1CT_%$ys<5W!yM|)+RRrMr(>3hL9X1 z5DII+INM^I4Bqy6kPH|=I#z9cHTCeyFB{tzTX2pZ$zKYSc~|t#OsoF=Prtua|Lr1F z*l|!u1WmpHBsQXcCxOf8__xc31}nBySNQ>8)eW0%F2aV`k5U0L5Zcx}EMSx}g-n zj>8jS-+>IUCoM)x20n-L61COxRBWsD9&}@gwUxM#-!1s0l}aqK*b-sC6D7X9hyr72 z?y~N7u`ye#AgKYV+(5E`OXO+`@^#!6|4i~VBzS7d*bwEzGB diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc index 1d3518b546255633e4f927df0670662b7eb4728a..335117606d3e363045867147d153f5cd0d88a4d6 100644 GIT binary patch delta 20 acmdmCvBQGi0!ODlBV>Fj|fCtBaxzlgg_N-H(OR=BR+s*I^cM@a{Pq|s1c5^)A=J}*s;Ep>b(*OF*i07Z9r=AqgKZpAr;fQSi zaYSxp=12HMeo&GdLocs?7eqn7(e}{OK@P2=6t$Bb10CFnbKHIbB+i)b_@2Su1814)&R7i1Z53{kzV)I%vQn9rXHrwGIBqb@* zI9vMMmldI|%l4{}AaIathK-8ymDn>uYY)={TbBsP)>Bq=0mAjKOJ?L8mCjq-4U z?h~Vj>*>{JD(eMJhE@(&#*0ajaeT0)!dLg?aWV89y-#i`WQnihjKNz z#=e2tIHE6s2;x#`F^p5r?$djuPPxI&UB@*>Bo?t;D?|3#QmC#B zYk14SKps;NGcbA;h$1`W0ewg)QLINiqd|b0J@UXp87E+zmWy_5Mcs~&amw?WVN-ct zY%DE*7#F;jA1SW}dGFPLjpD3Vmtx(kwY#ALeM^c+s7Ew5BhjkEJMATkp7)6S@lEOd z>PjSJR2BS=FRM$TSdh&PQC(=)x`7B)RE6s_q#p!OMb%r)sOz_8E2_(z?b-8hoj+f_ zK7Vt$;(aVutA3|b72$?=2l#8v)oRpK;?0gQ&vM%dP=!QLb<=SKDZnfLzHp5`^x^20_K0=zTgaXefD9cbFA)lDV5NJ&|M4K;m4 zJSGh6#`x&Ve+CSc0O`?(bes0*0{Qf#ZKh}s>T%n^LRmAE2~jnU5s;WYlhfNwUQ*VY z4UwLpWZeawRL`_vowIi#EiQmIX2E(6R?+~hkwjg$#$qPUOA)j;gm*V+dCG4@@sogg zCBSyMUDEY6J-}1{Tx@gEO41}wK#)8>DRA`<(tHL7+te21iuH`5oRP7MhfP%rY64G){()v`fbdapMGPo7@C2tr>D00&|K$K&&3)Y=><# zc-!xRq{jf*iE`tMnIEqHvbB4$0e*2FkYxdv3gaQS<%)kn;sCd(N1Up71WC$lm} zif+9$hS>hS#VPEySWVDtGoBZ;dAEhU<9X}Q1(Oxsv2?-5DQIKRq17gw9uj;OFM|zU zBIvP&nIFYzeECxPo5^kG^jf{u_LY1a`E0*E*F>x3c_a7JJw~^eJm>}RL|8+R1@`nL zqXh$><5`KT<>JxUR+}B@+4wiTe}rtm^pkcgvDjiugxw%Y&hjz}jFp8ey7$G#e5Hh> z0;F^c$rAoVt^(ZB!h$@5wqHkb8VR}{Iq@)kQx_8SK6nK*qFFdnfjQJ+CNt@QnP%{T X9GP^4NBRH1N74E3;qkM5#?1c>^O>rg diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc index d0c650a00b2cfe92c0fd9d3c32d6727d84086331..c3875283f4c89e29f46c0155f1c3d5819f80cc20 100644 GIT binary patch delta 20 acmaDU_fn4gG%qg~0}#}8KH10}#}5ER8U`Hz delta 20 acmaDU_fn4gG%qg~0}z~b*|(89jvoL+=LP`) diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-38.pyc deleted file mode 100644 index 462b335531af9b84ccb0654652eff5fc9c53f7d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2381 zcmZ`*&2JM&6rb6ztR344CP4U5>q=17{Q%0TMW`xG!iNM7N}N_&8I9JSv9rnU+RUt> zv7Adog;c3({{Rm05vixDe@TyX?TK@5RVDh~tOHI3yP4ap z4=RNGg~IIPfbca8)dIo^r!h%rKocvlDB%{jV>@vI$M8<*3EtOq{xOc?N~ETA#YEI`Usee9FQG4rkwsvA$Md< zm}RJ)fqw@SWS0}L%x=`FEWwVy^YiMScGYkIG4&aX(kNq0pW-vgVj*U01PXl0Yh3-$rT}#ePuO43G7iELmB?ebtxE{#*~($}&rKL**(WylVl z$&S^K(9ERn$p!e)t`uOhtO74jAUTO-3CIg7Pa%IA$ug3&NX`NI9EQRS6Iuk1@-e#b z4!_I|*u0og20fa)H(P8T95n}H1%_G%XTf|ZvE72IWb_9ptsN*ekS?H<*<)~Ml|1~d zW$j!0HtHTaV|zmPow1X-JKnA(In2%-`W*KbU=+vJ1fVFJ-zh<%mMMAkr_rr|?g(ZV zj?FH@>_v0#i3!C>=Jzq)Rps^#6ZFHAD2?3-z}+L%wqS;WuDwi ztlhPZjr9%f#r<9ny3^&NJ?!byw9Z)?CPMoNB#4_5zZTkStT);HHSOi+XzwmG6v+Oq z^{vJ#yW7<6W)r$hpX>=}>7kU+m!`F2k(#>GPFDyHkb!pS!s=RcZKZj)aa%9+`WX{x zf7sh*Jj_B}F-P>%Zp1~}5xTm0XMLl&vejhGI~!{t+*^e*H${8_ZKIKPFhbzL6lTm7 zKKjG(dQ;_ZO8ryV^d$^+9SF8>#ag5#Q|=aZ;I;mBJRg3GG^hAmq*beCRjdkVmR>ow zZ;j5sqcPCWw|05n25=`N{dgOYLu-N( zV~)qNzKCFr2?nq(GM4oDFh;(_*dsvA>B<~qyx(C=BEV^MviEINyLzp_lCq z0MaF5N`CF4f#sQxjKq($E+4~aiMXSyc{P}NOY;8*B!ZE4u{D(O&Gdt*aC7I3k*~`| V`#16^eT6A8mM&UQ1Mn`{{{b;CVx<58 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc index 8ff2d07db4568bc0ea5fec0ce2e9d121cf127232..ab72533608e183b0f40241fb7d8b0cf990d79a95 100644 GIT binary patch delta 20 acmcb|bB~AnG%qg~0}#}8KH10}%mx5I(FM-{ delta 20 acmcb|bB~AnG%qg~0}z~b*|(89m<<3wo&~c2 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-38.pyc deleted file mode 100644 index 4ae90a132e6fbaf1b7e9d0b28af078ee98181bec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1294 zcmZuwO>f*p7@qORe%R{`NlDui>UH^O=oX|FAw;uj1EFl9ZbBu?(#Y$X-FiFYH8XZ1 zP;RMI2?=rKzyXfE^K0hHiC=)kiFanrvaJ~FdG$Q6$Da3V&Y~zluzvVm&L$m%{xD*5 zc_2OqsGq@5L@`GK#~2&#a7VbYYq`rk;m5w^9&d?u+_v239np=umbZ8y!Z@_N&3ht> zBg;FyFSg<>%e(w7u^n$)9`GG;Exu-X$ln&b@h(P(i1ujo0?~-MS8jZr_9tkt^(Th# z23QCC`TXM(xtuZyYG?E;l@nGS%4J=yz2WHO{zv!Mvi~?O=5;z}k8)nw&%%diqob4c z1|z?E@|rw-x|Y4e{o&m^!?g~Nj=y-Yzm~z|=*!7}>g@E@auX%`kH*rp_6d|wB-#?8$NzN3LDq-{@mC13z4rG4Ll7nSd3szJrfuhf4 zDnwq)lW%fWr~KBWs%gHwHT-ZmOims=Ih~NFY?`EHnXuxVTmXNZPZO0_?1M7Rp2LKw zq|D1ba?T36lzSNr7iHC+m}Y8jCTtb)?eaUh4H>)-P&dIK+;=?u#`9Mz{Ql+}eY^c{ zr3P(NwIUUa5FHRAmbB)E_XznGLSMa+W@5BAJ{~``2kNM)Nya#ba^Ha0E3<2u2}MR= z-UBF8?GCnjJh-8QDcqY?{I(H#$7Ba}-$+cFQPE*m!tH6cn#O6L6}3>SXhK$Ji>45^ z%i4IJ%Vxjnw)IpOjmI=x_vTY`hZ>ie3mq<&&(dk*u>%pPMXnl$86q9j)$Cs5u%l&? b+sNAHZ?e{%PgfQE>>W_*I+z~*pU3?N@G?sZ diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc index be32f437ee509351ce0c123285080bf623e2c10c..7a4de031b552c15afaf9f2680da704d0cc1c8acd 100644 GIT binary patch delta 22 ccmbQgj%ofnChpU`yj%=GP}linBe%$O08xbo>i_@% delta 22 ccmbQgj%ofnChpU`yj%=GaMoqtMsAVm08vr~&j0`b diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-38.pyc deleted file mode 100644 index 9d5184eb799cc56108dadd137b3cc9acbb5b337d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18765 zcmeGj+in}jm6VngsS73Bk}O{(+p;6tktNY~Vy8h-OI8vqax92c11ty-6lZ9&6-j}l z?8YC^hkiqUpl^LB(0}Mtp7*st0scYjph3<#v$L~1;!@;NQCWvvaAwZTxzCxiv$ws8 ziO~@J{`9w6@$YX!p?@Oa{(TR?Z{T15E8y*gScruWLgla-4r6=hV5mH74nup`H2CoE zBJhvmpGgRN^#2I->3@ks)RK$4F3y=T7BS=8U{N09aW=wYe~y@=Jj};f{PPeSHOFmP zO1jWx3@AVgCdZ|$cD1gbA1rxDy(Nsb>?7$?H?7}|Bk}aURiBkn*W6E}7@pdGkD< zf;l_K&$A1p_XW~>8uXqqr=>rSagx$?ZDqfZFlElLS#y?8voSuyXW2!PaFHa;frLxu zoRpx=81Vs*f!|<6m*NLY>7CTl7ZO*(?i$AsZd(^q<|TI7yv*ld{x9*%>yl zvTU9#y8)KnG#6U%BObmHBXvB_(N9DzDOwe1pHp z7habt{8_2cfRS+TXeBZDG<4{+X^H1SdN zU;h@(VbpJAP<&WEpwPovO-A(GMGG3oo7l39_0p?H$%r*pILO!Qxki5ffLr4NDCP@| zYRwv}W4g765{1|KTJC^XY}lye%iNk+fBxm8T>3@s#mi@#+oza*h4#Iq&|YZ&m+4nz z?Vlxc#BjNHTD12;r(AwMJYW4N#>szEXm4K@P0GCIP`|E=Ci(O{(o)eigYHEtie?<; zs?7n}p}=2wi*k+=ddX2&4kpiNIZ1ho1`urG?OZFevGe5N6DvWLmR?UMGpKbLkRLG! zNIM|w=dIxhyH*uBy|gHMQ}XDAi!ZHOS%a24U3cION=5xy;B+UWuCouBLs3NWgj&Cg zZtiU?Z|ztKsJC{svwhW8?bez*Uakb`9p2_?!zxY(y93tMCLnsW&^(3Q_6H-#B0k~B{lCEz=~{D zU+4F&#MaBNo~~>8)QhTbW;-4A6WuXCV$i9y0bZ9EQGM(%6*;}MC@c5Epgk>}b=#k| z)vDE2<(Yw`BuP7+O~MDy1?N0DqCeWv)(Uw6&(H5-e^};6h2_Ru+L&g()e`CH%(IHa zfc%I-K-#Xzx(|=`>@~j+z|M0#WhP2Mt#+q_zCL~G)}PM;18C(=q`r$B7qk`qay|86 zEoDuL`WK!;eSH;hV30FA&zYL9$m71JG==Poaux$hjX^8OO!quT+9g2G{M2rbQfSn5 zJCp*FrrANV;_26=Vk5WpJZ(*+q14i+gXr4Qw(lb$3dJj~V=jsTwa6=4U-zJ|Z@XtT zps?Q@9yns)2)qOOLB)Z(_`#d+$DhZOvCjGOU2HG&#q!!G>zmf(-bOmLzUd^<fqKE!TO&Ror@SbsE)nF=qy)&vLd{4RIb)55?(WN7E0WGU-OX6h=b3cw#ilhPz9Pt27X;#0Pj_?Mo8ROzPuI6MYiP7J znakxXl`4FYP^wnyxttXj@5Un2nEje;#+tS}y$oiNL0r5JM)>xdVSsOUdhstxe0Uc^ z;^S)(0v|iQ_;Z9Wp7jyF{n!ui?M^TLWyv3IX-ocicU$nsPA~oy#2>Y9;2=R<-pt8Z zGqT%Dat%phbjgAQBjVx(94xxL$n(VCJ~dB*F<)5?x;8B|!d5sI~(Y74QGJ@mY4S&TI87XK(Yh>`V9nuvU7*v(Ku9qcX2F z>e-!I^;IojF2i?%+25AxNBM(=bmNGXstc*rR4Tgz5tq(=%lEVS!^14EyveE@?pO4`}`|j&mNWzS8{K7g;i@S_{|IBjg|6#pJT44b@r4Iks7%_&2!uIh)V$_&%(+?4+A)N}jpGDuljd4x8 zMbt=WMK1#n&`;N+SC73nMm4FuH^`gHpD#-wKB9Y>b%u1=xD$D`Sf7hDk}S*IXacu5_#p@PIJ5)7lAAxh!0;PCnO=Cj7kb-AE$!<>{>k*9UHAU`mvP-4Gd}^2h}A#< diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc index 0f4d0d751313e635d2e73e3303bab8deb92449ef..87593fc1130a9135cb87d8dc03b37048204902b5 100644 GIT binary patch delta 20 acmZ3)x`>tgG%qg~0}#}8KH11Uoe2OoaRrG0 delta 20 acmZ3)x`>tgG%qg~0}z~b*|(8LE! zf;&&+D<@uo6XQgPj^z2b{e2#<27?|!dHku@-zg!#eDG8v3@&h)b5xQ@T9KOOv<~us z5}tbvn!Y0 zw6<)Ns50uFFLy1-X<699H$RmSg9}{d3>A=^N|FaF0wF{v1Y$|Y1QN6X+JCulj6m?} z*!6C~bd~idyA)K>$Wm=wuV~b|lo*3cE1@=>*uX4%=2Fg;sDX3Wd)ikoUIIK!$3X=&2AJ-b-4vLZHlf2 zWeuC_W}`)2BQo}(GKyL5bbq}TX?h)Gc$2T|M)UL=13^OT-_ diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc index 48053b457e80593dcd39e5a17d907fbba20a6700..7ebfec02b96c62fa14f5815a64ef55ba34350ec4 100644 GIT binary patch delta 20 acmbPhG}nmxG%qg~0}#}8KH11EBnbdJ6a{Ml delta 20 acmbPhG}nmxG%qg~0}z~b*|(8fND=@#;RR0s diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-38.pyc deleted file mode 100644 index 474052865a05d35ff9e62dae41605998d9e86b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3741 zcmbVP%X1q^8K1XCPe0<=ahz-k$nHk4n=GM<-J%RmVk?ddM|N3u0F_}FYufV2qZy@V z6k{Ww;;OCU!XAOj!QPuMIq`Q;ocl&`$^|&HsS3ZZM~a+Y`~^Yz!?OB=;v zPC@y@U-`B&ttkJb!TDlfa2GZHEx=PeHBdTgL+xk{t)n;ej?pkWX2Vn!PxJJ^>SP)j z**5~alWk->xkj#&Z{$^FQSnUAI#N7~>Cf~=0ppBkV{Eew#zik%S1P%e_=-|7g|Xl_ z6Jad-aUyaxx5K>kUN>OEUg;)&6uN;hH$rq?svZ+e{dr zcN5l%_`WF6q#w5G2`FN`&YtvG*ksH8E(`pfDDs;0@$<#R;4W(X8vs)ps;4xx4Tb5< z@YLC~)zF&EV%D}ct$?l%#&2i?x&e9y^Cnswt%a7($;?6oxO!Gh*1=rB?(ZjTaGOVw z#{yAk;wmvqoDgylcHoAsp4(z#jOb1hIT805cRFrYl!lW|M{b==_Pc)54V-Qi`-%UQ zIoyT(#P}{_UB``^zV8Gqfs|rlyFquy-C{`%yx5NXn&XI^Lud5@hJL|up7h*+_`pby z6D~#^#|^^>BE@UOj>9#GO6Y!=2y;7#Ts-1d6a}XWzlI43|NZ0qPc}DVd~=g|doJHx z3E2V%bDIlMv)5r^5^v(ETHNh)Ad$_-evFTn>q*b^qw<~4?%dg2y|=brcYeXPHr;M_ zlZ8*6J@l9Ttxa5$ecE-KyO2=4+4Z}(ou@4HB7U2s<+0>;yfu(#SL({G?mjPoweO+E zB|uKK@f%gI$X3q1rx+I2QHj3>3>Cvu8@i`8paKokGa8mRi3hh?mgT0Q^(vi`)%qHdT3GXsSQ(r2E(zpWUni5m*DOYMLFYn?8KGrF%ZCU;`*ZRw!shrL| zs8tMMrka%ZV~4Y+cr@mTywreHe!}7`>G7~ho?=+2Pl}+U#>;?2d8QnzCyJ`{)xP3r zeGRDhbs$U$Xtorf&pAy?l)`xwQR)FymgAaZ*`7^b;ti zHPHU-8OMcGod+!EoxqKg)NVx4iP;mU8TCSG26G${FyT?)$YIXe z=CqNfOwM4Skd_g%V4IhTyYCQu7jUYItm8ECNwN=V2G?osW5AD4<4J&GXYQ9^k>mIlfIO-=4mZ8(T|N2WrCz`N*RBf>>+J_0|!)c z{3A5{hXg+$$OFW9i@Z{=<1|wr>$8}DLbIO|+#I&l$Inx3NO zAb`{MIGHispP4&73U?lFXz3N4<1&1rr0L_JhPvOhiT_tp3&Rv1#KO4~ey#X`u|A?6p9 zU;pXQ=xfKBzLD7N?1^@0_D%G1y9(d#!^^bup87dlgOl%@*jE7kZ<1ad(2Jnbvz^V1 z3}!|^9gSa*&uGI-_RVSK&!9JKC$pGQ+T({Av_^8N zJ+Z5OrSesb=-kV@Mmjp4JW&qqz75)xq|sfk98beSGJX3*R~78NiW6tTn{w5)U1e|% ztVO)kI+4eokKFU8We;9vK-ect*_bDs8_%;&`e3P6T@ac1mD>8+ z%CaPwBPH1pIuNc*qQLDC&aTcbQvWEZOI)%o?M+9D#-eWzMm*;st& ztW}qt^@nTK`oopw1yLfeawZ`$v$|4WT3>pMuRL5?Tc6)pKeyNlqE-vu-}Km4uO;jU zD`3@GT1OC&*AX+d>f*f%ch^?dok!J5HuX(k5XWctH&Wj&(<@;G(#=V~A#!Kzz2iBA zvCWuA`C_~ZP&8XDXgSq@PouQLR!ea7C6#Ic72ZxOspG1RbtU|;8Z-?SqP;fsTsl%U z{ESzIWorl5E^dbdgx!*2Rj3oM@U);5>erfI z(9MvJq&Y>C1;H?{kWoxVSQ*9W;w0FZf;Zh${!HXiuQZL63aa+a=)`zlQzuNSSMG4y zQ>&DOMSmT_mdxk54k9OIN^c{%EDpk6np4Re3X>rlh^5a+d8WrqWkKhjd!aXJkg#Xd U{}(?amSYmsHLajd=%cy+0Z+Jy?*IS* diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc index 901ff3bd888d08391e646e8f57db30b092918585..fb3ce31211982e4c9572dc158869a5d378f52eca 100644 GIT binary patch delta 20 acmcaFbYF=3G%qg~0}#}8KH10}!U+IC)CJ)H delta 20 acmcaFbYF=3G%qg~0}z~b*|(89gcATjp#{YN diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-38.pyc deleted file mode 100644 index 8c752687723805440e7072617febb84a7d5a1923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1779 zcmZWp&2QT_6elHF@rN8cuJefvOLy~OP2<98IuyeaCrgZc6;`sKf&fCc7)OX?d!(G8 zgL_JW0t1F!cjzHK_P)P{*PV9QKd{U8NV$&VQQ*(-@ja67<42$6^H~Jrmp|A=rHIg< zQkfhEDBr{69{_yh;}AvI!C1;#s71P?D_IYXDCMLg(=nB9gfmgvNk9q$D?Z(^% z%5<0)ML;F@M|I??9S{7Vw_1H#t-7zanx{57r!Cj(_g&h(CO04-1}&EdG5x0RwXeJm z4KzLeC#2Wx+u^FJ?5G4#pjt^s?YgQ~SeWQlCpAf$u{i;$n7Vu?jXBJ!hRwP_ea zzaK+P34A3b`C3>BpbC>~0BNlBIY@g^G`gijtlpFa6_7FG$Xi z1QhBFc+FPXW diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-38.pyc deleted file mode 100644 index 4f4d586badc7f215c85cca3628595f2dd5580f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2714 zcmZ`5O>YxNbY}L$YiIp|Lm)v^GEzU}stqWI9uTTZ?G%DYf?}twEVrwTXY6dUyEe0H zAd$nNNrl9TAHX3wRoweadYo%dTzjl4(f4K(VnFPAX5V`=Z{C~t>CIxXK;U`)r|kbx zCgg8KrXLfK?_eY$Oq_5Ul8AOFC7f|1WRcM^G;D@uWOXbJTcI80I=RT{I2yOZd{pQZ zG@J`(BDdpe*a?eKsZ*ll4&ixTI3m0t+(V;N<})o)cVB})uMM z86>F;w#F$e+>ZTlF9{OZS#1n?5D!|ZpNdt#w;jZy&Xju!YO-=4$l=!6Cg7RH^BTiA z6;INsqb{wE!!-DQFBOe#U$#VwY(fG<5gEMJs<*n{T)y8!C8r-W7(U5Um;~uiPCATJ z&R)`Iq))lQ%_FyCOi?Uu1H}}UuyGg9ap%Z9q@CPb3K|C~j>wCGnCY_xB3wT6l5v+8 zkIYU{lr(3FmjNq3BPQuoz=Rc5KxH%4*Fbk$igYaF9@_HkL72fXU?ewSO35KPrYD4w zl%>WYoebBOdtNW}lf?60k$;~zZgw{l zA(O7)kA2x)k3~}kk3_dQ?2RK4r%4yCKahSDfz!J`2FchDYprz5gJEsy#?n&v!R?K9 z%lk=eb^Xz(E8<7qV}S1mTiql`#n&Uhx9bl?(j5h(>)s;~^P#-ngP7nVy`Jm@$w&vr z;%HAo{*W(VBs!&N0bU2*eH~(%6Bf_R^Klo+BG4n32}v?S%?&A}aB>_;M# zt3{s6y#lODcm~E4Vf&Y-q)sz`TsSJsL2#X|Dd(O)@?!{q>}L9+?+R2-=*NRGxagZH zsnaGuTZdBMY(YYMP&=dxn|oSC0PwM4XuK@j1efEVDa$rpuXF&ODg7T`|xP>~-9$(a$IkDzJ-`}A&Oso?|agAkb z8U7GY!rc_kF)qWdc><7?K_BqxU3v%XJzs@WD7QfdYQVGxbD;U9UG{>?pS6U`CvY=_ zkLOQt-@>km_}Tq{G6&Aht?gg?EUCdSOQ70zkk+6I3}wwvYv?CflNgZ_E7NQA)oTsC zfv0{&R)C;Nw-bmBYy->4DlZ^0FJef22~9v1Vkqn2aDXLxSXs*(8|xd&4u^vQlq-vi zt?@u&(8{YgVF)ODZN2TSE-O3ZRQ3u~2*8~m);HIh-b!0ptu~YmH9LS*=#8a>LgQg{ zhay%552{m!W=UiAh2T&iQ45uCF1ME(?Ul7VsyrB`o`{Fz!M4Z!)K?{a+%WD3T*N)0 zs;#^08|}ts+iTz5SO(;Nvu?{d)bkV6lLpE}OF>$mR#+{Oc#Hoc;u8Y{69aJoQs*nW8`$MLT3 z=rE^=T5hS%I*n7YEdUZ`KdriS&-^T4-WH00wDVb}8>LNm!$ zbn(|kS2+;S&D~xhpVZPT7#h>Epqb|%?>Y^v4zv1Iw*v}Ziyp0zZVWP5C7ch=UAZDnQIu;iVcUJck(S4m=v zO}2|{DblvH!P-H9Act9C5hMcxk$_z0l0%T=o^s1Ir-0WiHkeBgAeUq?W9NHCcB>^h zK*AOut6sf&_4n#~uS(B)dkqE8pZ|kcQ>GN#CbH~2>orj!+?GR;-Xs{CqY zO@3456uv1pUC)#=^=vs?&y{nk!qP0`>h*j%FVk7qsP~k6WIE>->b>ROda+!r_m%r3 zPj~z41LXmk&bx#46Xg>!ZMZ}A;qtId_qZqPBjpj9F1V-ar^}~hy4O8ZKU+R4(?$1O z{e1bnsyt9wAM1amu>O}?`2y3Hl+u6=J&N(jXHA!zRo@G3$8)@OGu+_jGtb%LBCy?A z9`b7F3zM}IRo4!JYv%TbQ{6C~K#DhnQ@6#AAAAp9`vo>#I>=!44g7ywgDOkzIZ2*KM!E z>3cLivvjx@##0_N-Eh{ahEUtLbWEW4+4BAITay#9k}8e3`^h777jN)85U#+=6|!(x zw^mN`%wCqI_SJGurqW31GL=Cp&$2AXbe3lZ>tO}f%Zjh{vH@-uHdtW&Y=8~26R&gS z9$u*RvY|DN7kH5kvy-n=Y=oV9l_~e}em=lXzgF29cJ@{JrCJ^Yrzkn+*m=o00nQK~ zKCMXZ1$I$#PeKpXGufqA>GB9a#ZU7yYZ|16+2z+7dyl;j{#kxbN?lMWu2~0CpYQeA8oGxDJo^L&xsN;%x)5wWe1kE0Wr5kHKbPZm{1F zb!^wA?Ls?`IcsZNa4$5;dIKJs4QW{cc8%z~G%=x>e*X|8cc*1!5|dj9FhK?cV6^FJAV`$dpN>gw6n zAOE7%X8z3=yM@mjkNMld==j9Vi9@;ThjQbGa<>lUCJ*Iq9?IP~l>4Nle``2_KYIK2 z%{!yxy9eosuJp~W^sTP+Ctc~=-yYPxv)gl^b8@$5e(7=2z<88gKkOnaR|F2#tZCC!A{S`Im#r9ty871RiO_6lL|KBbFNs;{LX-QQC72KE*BE(JR> zv-odlN#SQ?B@SUjj&$>y=*%@g%mmv!`>`y``D?`KVwygy>cvA>FXx5JRa>oFUPi>#xHx ztw(um)CHu0^SWipIkuuKm4Z{WHtfLKcD#7Qh_h5RgFf((98bXAHK|S(e65H{lz;o{ znW>d$@U6iLXWO<|dF=670Z+X$>sOm~fJU$aJYN@fy^ap7{L~4W@Q+JjlR3UQaeZQ9 z<;lIL%S+a0e09ZcG*-B`Wo;w9;H<6$PRK_ac6AfpDOhPZjgPG@j_oBrrn$ss{kYi< z3gVsXi?PNIjf}juWsz9~CWw;Bs`zP|ir@FT%<05Y3zF`hIR>L+Z6zgDoP&lcdD!+t zX?msc5e~GJ8qDKsbrI4ZA^){1Ch(C{6q6gsMm=4t^b0To4Mfp)&mV8TOY;BHw73OD zX#6@p;u9jYI$cfo9$MR9qOjfg#p8`1lKuZQf8~E`zVER02QRxiaOrpljz}Ns0?k=x z=dU3{Q7%Qea-Sov#jaH))g(=Y=~@Q7EF+42U(>~>MECNvuaPpuBGFF1XIA;5@Iq~= zG3WU*Q?d86yT9*v7=$wLc<&BN$;&0)lbl`RE6r8dF$IvQArM4B0)kSGx$lNUcA@*a_KBJUF+ zdnjpgFGSgRCXN`U6#g@a1*briY*B8=tQv1m133e~-I3!q5(ASK>Ezyld?Mbba!Zja zJSn{7u;o5|jS?)gA`Dv2mKqGwH^efB+Dk2XKh#?4OBKtm)KWo&#ZQNsT6SL*_hDWs zIxa~A%XwQ#nU3=Ong)pt1d`nn%Ot^aDESq_&hC;aS&~P|YXqa+C1#@4fYu(V^|uIC zyChfv<_jlQ%duVrkLqS#M3RRz#-r5WzG}ry?Mqc$MXqnJzonv`H{cGSX2JXDn9Lw# zl-h}wI-=~WR1dO4B->J1k*R-*AQib2kQx3`4ep00Us8UU^0krhRPD5E?Jp?5cZOO6 z@9Y7uc21U@-La+mi$2tRy@d61AmxvPhA zrGp&cVd{m}(vI})VM{~LG}$k$cBEG-+Ijv8??bfpQM@+PJK5(SNPy|Hzi-F(6vZyv zn-qs5=x%zOv}tX#y;)@>P4O+Df?x=zz4eVY=nyIi?(!|$3p;x{0n|1cC6PNdb8ii& zJ_$DzqE{-UmVl-mm{&JA0T+~R*>01!4+V(z5tLLaofhmc6wYch@)WeSy;l0-kFoPRG!P!NN6}b(?X_Mngc+!3l;2gX6mFYNZl~ zPL+z;=~t<1&^TCle#mjKpjyfEIgTR9m4NMT+dDA`V@l*v0jjn)0Hc_f52;%ieP<|W z73>34hr-TMq1)}bB3wtaSSZ15M##P_nwY~b=-tgzKz)03Y5qYHY5vELqZo^KWvo3p z5s>qH^A=(D$)Al@-Muq-Zue)ASj z>6(Q02uA?NgD1klEXotA+Ctbn67eGgd=UoQPPh?e>2jkQMEdmOM;7{fTe^p+kYo|k zF3ff3rstw8m4Pe2({r)M=s1vQ@ZtP}ht~Ax%X8N3-16Ma^5dsbHbDE;jVRwKiwbi~ zGaUixaH2f1WDp#CoB<3f%1C!A==Lni#|q~cA4F*~y-2_R_}SvDHNPAc+F=F-!ch^i zv2_r~$F8ggD&nB`5~XB(Q=}B#Mnt*A$BWj?AO0lDB6LM$D*CCYK%|$-2R@r$JUlAt zIZLTHI{YCC{sEE0!J2pi-dA{ozXVZ=Sv9St@fxb0%4&sF9L5@%!BoF$q-E|qBYTh< zOck}PN}e>GE+WJ=G~;br>wl9@>sm3btGd>&4naasg5fm0t`51FmqmcA=ZI6(iqJwo zLmfm9pic(R1~|JXk9%aA-b0}pO%lD*|9%B<1NLElK;f|%;V^Nufbcg3j|pF@D&D^! zCy!{GnwX9~Aj?Ycp?bef%5;>yVYwG7(_d)#l3&aNmoL9ax6(oFd8L)!Gxik<;#%5f zT2xvp5Ig-Mg_4wbLr1$>5BP6dsaoMhrj=p2&3y2;VehZhR%Wk=n%P!LYRI*+dwq;N z_CKRezoY|ugRN{Uv#+5h{HOSL&>`?Ljo&d@J1NVwa?n5A?meVZdnfmmaHMu>ll<*( zz)_h2Z=T!KlRV8sPvV7WM3onM3uVFGFV*K0;pvtho_R?=eygR|&Z6AJh~wESw9++t zhvTvDr{Qzd=TE&eopK%JI?8n#SyDbheL#5I+ZEm}g?=NB7k3k+Hmgk`uYfwZ7GD_E zx!G)(gbD!UHM;xkAnE};cLDEIe3TES+V@w-arzoGb#9WRW^z88d?)CrZX-6nmG&7N zE~|2|dy%6KR@!IrE{t8?9q@eVR^TS99A{N_Nl@@9enjL`A{6_^Veqcrz6+6fxeEYq zJ5h53{s^a9r{1iS6XtLpF54Zx5}5cq=nHO>t^}oXari6)X&FO*j5eYS|~YPV^js z$0#EmGX9641X~bR^6}{&ke4c`{dfVE_!)RLz?hD242K2ErRY$RRW(I>n@&^8kST&u zz*}xm?I*|tKb?HRCk@{jIn+whdiGsM64|fP1u;fLFf6Ms|C3=^xSz3}6rcoEMO-} zIbJAkli(d9bO;hTBKW^iav-CyAzDdDsB)|X47CUL;{dcy2x&K~^<-RM7Xjqr{9ZD5Xocg7bmbyz9g+uL-gODaC zYDh)daHj#_iHDJ*GTHgT#9vF>NKTW|EPIoJghvC9GTdv{19?>@CohQxa1)nEk!z0% zuKZ6%!XnQd73+3Y&_6R0ru5`}_0?+7-7W?bwnM0|^~iauTo#7Aww>T4}jU z&o1><nXy zg=tLp^tw?tWZCdCb+c@$%Bu>?F!PqeOm5uN%RQ`TK`CZ;p+PBXvGKYaMseo4?*{&^ zN<200yS(Cv1s=UAf@Lni$WzJnYYUMR@d~wU|Iw)E7mlDkSIR0=${JJ4I@8Jq)5{rV zu*}Em2TE0CChNJCFPm+gEb9fQhi7>&NwFL|a?7}>mUAsmp7lx25uTS4{cPZtQSM7? zgX}13{d_=vE3jjz4W_jr_6TZ6)7mgQj#?qDjj&PFj`1P>$f$zxocLH{W9%e&!!6#U z;627pfp?sb@KJuEs*Ngqj9K76&Yl4OBt|(Vdw!CgmZN+$9oJLrEBOA{2a2JTPr>46 z;=b#P^HVeDrW3O|4A#n7_${uup;hsmFtkFq-te|8F9_B`s~QL^s8pIlaKFMsE2vuA zTm;tgR>Z^SEXQY->sPr5rIw8q9<6X;fml`7;}(?44lSrb;oP+Kv=?lgxn!>LT-1mM|CLrs0LLVejZYrOs zw-q>(x}(?tbWLU2kb<(_RyLx{stH~XQg@myv%qw3VmGC#oZIvMAt4@jJwhQyhwE5gWL zalEP>0-iw)`t63}3Y&2Rh=?;=>i+ixp)n(P$fG-IY+y~Rc=y`2^a$I&qx|DLmtS7G z9%8+hINNZ<(p8_&3U{3^%?6cbo%>O^1fQx2r(OqEm)>&2rsG))QIolWH9a{!z4YcQ z*A^G-xB2pt(`YPlf8E|d`E_@B2{z?t8%|}-sqt{B;Wj4hb+||%CMpPmn9hVW)VXQG zH5cQJEzt)97x9EAKom8nnra^ZtlE##{(pP8!{5jER`UL^t3utEh8+RzVQ_1QWlv6g2E(|aW^EfHE1-qZ|uCdp0B6pi?(8`>26ye)DV=?({3fNv*DLjNGk zCcdrzxK_ekwJh-&EsA zQsbv>8dcVdT_d;sOL=ss?C32zt>S!XxmB6l&?%NuA(;hHk|U3^v?pL^AJ4VgC5(Lm z*O$!&wmNQ2Zce5@>#VFyP0r)jYRoq)9!`%)d=kmo7bhoE$;ruCl5B~tL{TGrd18Y5 z;~Vap+u%sA#sg8CpxQ(-ik5KVGBWDYcDeg&5a~g?zej0Nx>X4a+B#*SOffZC;m#lu zkII?T(OVu(@GZjk(IljUmy*jNwB`_6bN7-*Q_Oo=UAvddnA-inZJ+53!T0Tn zZV>3;FCL7(zhNkdFiKcLG9{6hBH%ILMHSCT1Z05@VCu#u%XG+Gk|^0E8GIud)qm!I zOjXK=RFA|aFe+s!?u9>>{Q{F|zaPqef7sTqcH^$pxi9lmsq?Pv_pa2Xr~U5B{7%aJ zxvgIz`G)sIEimi6^wvbC-TI1MoqZM2r zkR)$VQYq8uRxW4JxNya=vEo)%ta>wyC>?M2pq8e|P3qw+UYF2wHSlo9fRufC3!XE3 zIr&08w;DX$U#4bS!s4p{PLde^2BpQ_-%@=BWL`$zQqf5A5V_09WQ1bvp4X5I9N2n0 zy=H2r&1=37>CggEa;AC`M-x06J*L)Ke~@={XoPoUDNZ2+Kg2^Q3{ajW_w0{R*imPd zcfb3dMxMgdVdXu2hsx@XeqPzZZ5krzJJ{DH@3yMa9*^t~r)`}X?<1;q@C>H5c(@rv z+X%A8j-F8vu`@3qrk_{*0(hBD-VS^O{X;?{Z-fu6nlgP7M=-_%JHK3oVo!3GmwDg| zB=j{Rt!xsP8FT}IwUV*yJU+&1B{pz<@%+K%F{+%ipFtwc8R>wS!&>BVOdP^{NGqs= z>UNO%l z?sQTb`AqGj@6m7ff~z2eW7jW0dvfVwmaZ<^Z_LHn`K#AUv-Xw6xW9(ft`hiFm(d;G zeN!Isbtw4-o{;izMJoVtd78PN?aGg(ExRU5o4o`Qr83FkFSPJRZYfjTE_g$?9u+d zeX?_%I?YkE=zfbbU)*oyY`V^BdQ{HaHnw>${nBIGEU4Iaa=etMYr2Aww+pxy69F#D zqODjbCwq!MoB@e5RWEQNnb63?X>2S9ftSoh&PvWt&XjBy>#iS(eemj1hdgA&z4UT~ zaJG_rk&E~yS4;8CqeW(66b3c|3YQ z{d38GXn4pP8K5t+U8$Ij&1kEE(} diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc index d4510106cc432836561beee6cd557e645d3c4c05..8eeb8da9d73e9b638d0ecdedd151cd8f2d046888 100644 GIT binary patch delta 20 acmbOzIZ=}PG%qg~0}#}8KH13K#sdI0qXmcn delta 20 acmbOzIZ=}PG%qg~0}z~b*|(9qjRycWa0P4t diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-38.pyc deleted file mode 100644 index 6104e3e04e761a14b8b724a1c993448dbb3974cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2153 zcma)7&2Jk;6rb5Iubp+`IzU^5P!Fic6>U)tP%1=QZ1+QI?8SjSEHiPi-I1x2Nc_%}yRvzv?-2`XKTfMtCSa*|cwj0fdAwIO+&^c`B4n8i`r3-Z!IJttlA%4kWAaY5PXY$~L385<|#j4^4$Ez$*{ zilIiErLiirWEQh{z(R;fs%$Azk-ehIN<}n;{~}{y6r?F*ugD*V^_%^zRLHb1__ILv z+lgq%@l(-nOu|_#k}U0mdm|adF~q6=%{ZL}(WP!S=}$7jtBj8oQbQ`AlwN?BJEGd)9dW1NccovN6Wa#uFtaJjj1Ngwdt-bgCie9 zPthYnOYn2(eEki?*G?V(Z(KiwlW%ZckZmJJSmSCUo^l1Y)GX=2pRAx*MX`qB9Ex=m z@1l4Q1#YZhy|#?_={lsYJJ`(xOEW341cll( zG!Gg&iCugABMcU_LB1R884v)V_`*1%d*;H-jBRtrkXJHm8z{~kN}fE{+5%{AgVudZ zTLi78ZzvrBhC4RSEV8}Ajn5&I*vb=J_266?b{;~~tR4~2tnFCx@bos^0qC2pV>DP| z^3^IjbvCXD(@(s#)04#^Od$+ySYOn`AWp{f( zeYHMrE3fMi-Av#r+X^}S!_@4Wu) z)-mFEQVD;*RWouR%I#K@)$iZwut%Nt*PulYl`~7C@s7yT;VcOxR>n=}ss7MuS1RDr z{Nj@NZ^KxtVoAiDVN8`6izj>*;n-vB36!gRMScR8>Kda{TDeeopqgg8%0y0|$JL7{ z5DH}@*;7@-zd*`hSF=JQGRhuClOWTELb1(@X(*xy3i6xy=qjQMNDd}|`{k1~&#R-v>r~ delta 20 acmbQlGKq!zG%qg~0}z~b*|(9Koe2OkngqK5 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-38.pyc deleted file mode 100644 index 29688c67658f30cdc55a9af8ce1004eb59c87ea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmYjOO-sW-5KY=>CF0fd9PPnW3toyy)p`&_#rOebA#AeKW-+@Pb~ml<9}xT%di1V; zCRhK0Cr_@mf&=qr9y5pcW^Oh%LeIt1n;w0-`td{lN7IqMOS9>Kc|(u+Lm&O;25Y?d z!zOFSUOSk-hu1kbAQY<#1bpDe8c?#BfmL9*C<{KCfkvx2PPiO{%@HQ34ObFmB~sL& zMv&!HGqmAID*;n(b1uQ4txBs@VSq{oi_vlqOqG^2yQgC`Q5g1UWpkx_FrX5S3MvN-yDFeS7s3Cc+_b^RGniQyKv|ICq+mmMccGNn69^PQ!}sGQYn`@fez@P9rP JI0#yS{|((ZniBv3 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-312.pyc index 45f1f1ecf0414f769f7f8c61c33de677cc68a8ee..5a2802a2101c48bb28eb5290fc0f5b503c2aa225 100644 GIT binary patch delta 19 ZcmaFM_?D6TG%qg~0}#}8KAFh<2mm_Q20#D+ delta 19 ZcmaFM_?D6TG%qg~0}z~b**B5<5db>C1|$Fg diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 7c6087d06d0847430fb8848fc63e5a8b739ec3a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmWIL<>g`kg03w^X(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5lK*(xTqIJKxa zCN-rzu_(qrFV&?evn(~nB|o_|H#M)MI3}PdKfNe1H#ajcJti!(xHK_GA-JS8B{N^a z$iT=bCcrT$Bse}iH7O>spdcnSuPnYC$o9!hiYd-4N!2Y#OwLYBPc4oq$Sly0FH6l! v$uH7R&PXguNiES&&dJn|kI&4@EQycTE2zB1VUwGmQks)$2Xf_SAZ7pnadSeS diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-312.pyc index 194cea86bb18a53e0d8fc5024a7f0276e2bdd86e..0c213eff15fef9d0b841470bd7e5efbcf2910543 100644 GIT binary patch delta 20 acmca6e@&kIG%qg~0}#}8KH129njZi{Mh0d8 delta 20 acmca6e@&kIG%qg~0}z~b*|(AVG(P}B69!5E diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-38.pyc deleted file mode 100644 index 438dabc8408ed079ce18139a7af6b2b3528f6f58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3058 zcma)8O>Y~=8Qxv)E~ynIS+3huLC_A08VysCwuSma6m1NvMpGD$V9712GN6{6A-U3W zm!27lAwiwoLs3-u14#fIJ++6ThyI$m=9IsXq;;QnmXv9v2D*!#osW0lnfL2?_Q}RZ zNrS7q7-`=r@cPT9m{bPR^90$YjICLHE z^B^q`E5{Yv57V__bR407P55Gc#}QSrfjbn{9fz-d7VwC#|1mh;H>HyB`0*b)4w1E0d9ClR?rQFdd%>#qvzBT(V&<1?wfL zV53+M6pJ&?q!{H=lL*rTkx0gc7F{iPB(iSKldP|z=vN=d!%-@l%_w5HZnEwmmW3cw z`A}G$)XAYk(#Xm!mzr#nWIUg!`klSIdl={e>*iT6;n+j4+l{+d;#UfqELPnl`IhjV z#_cHjpvSU&X#{K<$^0D3_%2KI!sG-tCD~}KSx@FerZh}xMA4TBn)9euGL;XskZ~s! z#($V7Z7Ls*bdqOr`lSbnnrqhE?Qwhp^#Y}>LSYI z^A7osE%SusJqX)W$febg!m%`4C{S=e>1~c;84sCtS(6<>mF+T}v%Wz1FtMVtQGBDP zqlH|PEh9&&J5w#xs#+tL(SjbPHO-ET#2@eNM7s_1_OugTbTNX6^~kN@ zj=azf@eWbz(H0-;)d>NozX}!YN2<|USi*c18-p=@onJs>eZ|gFO)#KL-x#yL+^TNIG z=HBTV0ODsCrFrRj^um#!=ym=b>{8`7Ew063wbM;VZsEDczkBIFa{(Kge-8!! z*6a(LLcazXq@ap!J{%G+P$U^lE`nsK0@aD^9uOsz6C@h+g8 zC4hmE=q9~H@CDf{_o~xgMV-G^FhKc7$i7|Vx|*s6Y5&8W=0_(dEKzK%peM-`(iNwm z@0u1PiZiSrk6oMHJNkc#u&B%>3%;srqJ)*?F@a^5+4~QOPbUM^$CWIh!-Sw8UOW>7 zY@|*i!$pI=%SA6n$u;3aa8k{9vSZx$YQFIYA{`l@%rHR)LzF2mglB8@`hr$w?;QY+ z;o&Tuz7Cey2Vu!LsF~$s4em3M(%}5ImSa)#5rWkhmF?NzS(aiq(`+SU409=l-$Vk68sv(1s~XKvpK~&X`G!E*-7>$eNgto4Y0b$rukSF#NS{@ zAPm_ghP%kOyL5=v1Jvs@9U-(nF$E5O1!s?H+opmTfUJOgoA(x#a6m(8sxjwntlH`@ z70Q7l3R?+@DhUou*ctbFLQ0}_6Im_vfs*go)kMWwPfakQSeg*209gw)uVB@LMR01q zB#1Jh)gmntDdYAm!WIqTnDK{kk~Ps&kI^`5zUTcX41CwaU7_deuw0D1e=p~;_DvXK z*72Om%dixAgoBv%eMr-np5xQ~(tj!M(k_*DoA$v^QOR2R;6cqLXO-J+o_E`A`4dRV zpOR>ZR7S`p{ZYvhHH4PNDV(xBUj9)P#g@y0g96LxaHWQ+L~?~&mYWmlVi#hUmBu=t s@^f(MI2FGjfL4@){uY7y4X^4}1NhN{t7PA4>Z3KYrh5x3G>R5y%`- z;K|WkxFeYRy0zp|gr)dK&{}p4yl`ysFsf2(*pJGavV`UIc~$9G+5mjO$4To+c>B7%v);4^y6<28$yR^ZvqY@` diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-312.pyc index 85834aacb4389f2d8ed3927f69c49c18b689008f..3c2649309718ee0717367c5a4208e2ae286360db 100644 GIT binary patch delta 20 acmX@=bJU0XG%qg~0}#}8KH11^r3L^+2?itp delta 20 acmX@=bJU0XG%qg~0}z~b*|(9~N(}%+)&>Xw diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-38.pyc deleted file mode 100644 index 21b9e3c80152351b42f878005b8b5ceb42ea7141..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8117 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 Ox}E>a(rRioJ^g=@gex!r diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-312.pyc index 5b8742c8e0da7f4d57de7a8a73aeafe38faacc4a..7db6446dd80552b488c701f6668b4b8e6bd28cfb 100644 GIT binary patch delta 20 acmbQnGL41%G%qg~0}#}8KH134%>)25Z3N>0 delta 20 acmbQnGL41%G%qg~0}z~b*|(9Kn+X6jIt0f6 diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 0ad58ce474fa86212c4ee4c0eab3d478a7cecb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmYk2%WB*(6oze&?74U*>nys+){D*rr*siYX)cs5N)tM{fDi~}tPDzZF_Jx#^bOiK z>Ap{+ZB}`Ota=Wi5P?3Oi==b@b2*z$5?H_g`rApGB#-F4UKu!_V23Y&CTUWgn3Sd_ zqnR1dfgzNboaQO!GF_M<9hwmxnK2!k3572qKG3C^(ka-4&YFCgRK*k2N~$~(WmOl8 zM!uZ><(#dYc3v34J9*#5-Mc3Ra=wv1C}%nUllUFHig^BYa>y>BN?@|t3eV20JoRcL*{NIgM%pg0 zbMMw5)hN4WS1R;E?=8E&QEso^uWNRG^!;MVujLIBZOf$H@GaP1)eVCli?s}_ nRqX{vZKT!(dPs`EvZOd}6xopMy4fgY8SO@9B2&te zwj09%3OK#=SENVZ`)hdZiGRVT&MYlQexZdgC9xlOILn!xCwDEAF%`J}_)9zsl8W*- z5|ft>#5@e|EdW!f!U!cyr7F{?#&i~Yqfnj2SpuFh_8vpN~A-VBC9z5@QH0KWj+{}&+U71B zii&iMy=hl$*K^9FS3w5%Wcfo2-RY u+_#0uo3$V>I$6j7DSklvyzT$mm^l?oJ7; zUhdQaZK2Twt7E?754bcs0s~|ONss%M&(DBL>*@o|GT$;5V+<5+zk10Mqj!& z;I^>5p5WXqOsK^9CA2+|+62b_v}tCfYT&s1>V%?cR0QM1g|^Pa@Q}+Ds73{<5o!`D zP-7Y-k{%?h5UU#4-<`I_vJw}g>DiD&rgp0Y>w)z_-8 z;mp_f)P1tA5#^=9#+hoBVu8jS5tyED3*Xyu{EZ;d=f3UxB1k~2a3WKpqy@Ui2hRfC zwKsVX+qMT=XS{7#mg73UWnIV3VZaqVO-#6V3&+-!$BSBEBz%GLEGsZAD=K)Hr!DIx zqvrGKi$lxElR6kBjaC9J@Nhp!q>-(^ytEKmrXgCtDza z7MN!SOUf2F#Y~pM7Rb^NltN%iGq!{`6d`tl9!7F};T+Y;&>Xi1a;iO4ql8t(4Okiw zcfvGTBI?@8XTUkCjor*UjpenKOXypOQWj;NR;AaM*IS=YD9cSKL*6CS)h*q2aRzgVfhP^~@qazf*zjmYa^$i^4Wk3;xA5VFHVwxd*O8Ciuo8ApTh9)z+ezljc$SOdoWI1nBVg-ycK}s%E6jZ zp;|Pk6CDl-F{q6=HCTcsnL$mKq$y_7G)vJ8OVcdN&>YLsJj=oFJx>d4ie6y_sHH1` zfj+o56g{lOGZ}9{s61{wp}{V8V(lKsbW{Lur)~ zrxP*0(8gS%T7BsujklKD535a@lxb#Fo6U2rdIX{{*X3_@9CLwhv3a1%@uLtVEQ<|$ zmL>4yFR<1{3L%Mrhb@7}AAyIDAU=HhocDbB^OSu+W{W_lNa<9^5`_YRNCq)!C5_i) o!#;1Hf$@Fx8^5c91g{97$7DKc2Hd7*>iJYYlb?Y*9w&JJ1J^8fBLDyZ diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-312.pyc index bcaa911ec497fe3efba0d71c8754117add7e3949..98cbe31e9bcb4d2effd054616aee39677380c9f3 100644 GIT binary patch delta 22 ccmX@#z<9oak^3|+FBbz4)O9}D$nD|)08$qQ#sB~S delta 22 ccmX@#z<9oak^3|+FBbz4oORi^k=w-q08!)yssI20 diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-38.pyc deleted file mode 100644 index 75747e4cb3002e9a672f1791e034dad56efb5580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8422 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 Ncv?5mw)E*A{4YjDi%9?g diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc index b1696513913111e7de15bb33e58df0db6cfcab6f..af7cbc3675d548ad7da03e873885fec6f42032b0 100644 GIT binary patch delta 20 acmeB>>5$<*&CAQh00ecNPd0M@>5$<*&CAQh00d`U_HE?;%L@QDbp_Y} diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-38.pyc deleted file mode 100644 index ec84863a19a8b19363e260ed9ba7144df59bb612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2311 zcma)-TW=dh6vt;~FJ7+`w+(4hN~x?$6d3_UsoQCVd&~vrZsGS;H901sTi6KJV1z zjGV0gA!eKd0qon$FB*qI76Px9193tlvBcu=#^OU~IkE9QM>>pQW& z!*L>KKe0mmi05#!SY2tyRio5dKQUI8BYUz?T35}nPKQG!kA$b!ByXfvJ9u->kGh>ym>RK6PlQhq(=CZXq+Zb8(t=6S}#dH%l zbKO6`-@ns+Vw5&rCC91meqX2uI@?v<2W4+GP=z(!N4o6mbTG(@e)nl+Mrq!9Y)3LH zTT5RoEp;C)|FHHrSyvlf+@q_C-DHgUciBeQWLAAPOnWlRvByR6qI>%O!(aQT=RS(M3Xm# zzKH#|VkxlcVtEA%x(sg^3|G z#v|@jSJrxNO?&v!JVbNH{))-OGgmE}unC`tzPHEqRm&v|_=Q`s?WI2YAPs2_^CJBf zFsl^{HnKiFf#HW-L(yA(@hQ=E zcO}h@YJr~3JnLE08fSK^l@`xirQK4xmFoW8H9b;m?Pld+yNaKt`DhAH<(cQE3a2DH zcew>f)dB9R>E=~~PC@jvN(Z_|+mut9%0v|%5$b%`_N#h2vZaHys==gPrEL}9*=$(( z^qvz~H3gyaiJ6ZuGuP2EF~_4IO6_1u2EnHGi{dt_{af_A=~J;ZAay^wh^N0Q@zQTV|eJQ#A<3w;C9 zxBN(?m1u^f(~SEQ{J#MGPm${D>`O{~%%-Jz8d>2Oae--z$_M+vdk3YkZ_ZmhdsMbi zj-J_sPIAEoa)QS~6O?C+!kQgdpcWSY7d9fo`F;wUOQCnerX6fsc;+l@H?h+rP>+7} z+GE&AI`Q?5qtZ0Nw+#>lli+~AWctP=*cOD8`-bTjv=579r(w3rQI5|LvXio((!3q& zkD+o7A$<*dRgDyfK;SF^dJ#ewuQ^PZ3$%d0#G6o1x;S~;Us+v6A(|GC7zKiSpJyA+ zJ)K6154kNJ!P5#(pMhxwr`&gOb+lB?!)FI+f$x!a(bD7ucg`u>oRtpI=<7i#N4ffj bg6NQpki?Og@uI~jh_6MpXc1*5!WjPt>g4Ee diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc index 762c8afae50a183625de4644d3a5871fe8ebd34e..0881d492005f0375d4a9145b290fabfe68af98a1 100644 GIT binary patch delta 20 acmaE1|H7X8G%qg~0}#}8KH129R~`UKrUvW) delta 20 acmaE1|H7X8G%qg~0}z~b*|(AVt~>xqa|X}= diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-38.pyc deleted file mode 100644 index edcb6c69f4e62f298c540a8d259dd3828c854a7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4535 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-312.pyc index c18bd03de1a4eb04e3b4c0320028a21da2ab0912..2d8129bebcbecf0d3af6ef2d37851eef3ef3f7cc 100644 GIT binary patch delta 20 acmZ4GzRI2ZG%qg~0}#}8KH11UUl{;F8U{uH delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-312.pyc index b30e4620d8d5bc43ccf26a27fa852e7706c200c0..54d226e9760f420b6d4cfd73b345fdbca7e483f5 100644 GIT binary patch delta 20 acmZqGZq?>K&CAQh00ecNPd0K_i2?vOR0WX$ delta 20 acmZqGZq?>K&CAQh00d`U_HE>@5(NM^Aq8~+ diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-38.pyc deleted file mode 100644 index d31393178a4b681cffedf9cf809ad0fe33b32859..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2594 zcmeHJOLOBy5Z2rBGfuK(fh-W-m`5ItVapT+>m(wZ!g01@hp>vPR7z%&Qr5D}NKPs) zZrKwjegYhG=hw`Y(_T4p+U}XnT6t_0#TmK$^?Wnxo>9*?YV8z@IR&m?|73@E^NR8p zlJsQ&c>w?T5P&E|?I|u=t*3^XtA)C&s|wMH(KABRHABm_!i<{{eP+)Nvu;*ZsB)Zh z^MD1nxULY3WS%M{L$!0=Ezt>LKhfAe)z201Qrk);`wZq%S{04k9U3RAeoVO$`a%Dh z2K^PC8!P_76K;GTG0M$$a@M02mFFA%IOs&XL4Ub=fC17MIzE7ZTmztrs}jZ4h)T4l zimT)D!5YLQ7Fd&Hhz-^vS&{>rA$eF-f!ksNSkQqAK`t+BW0F?kAAbVyi}JgYsEKy0 zpR0-Sho+8u%*!64w3Q3BRk7TXAIFp>ttfGR9{N3QBxeK4_4q92R-BM%m@pfH3PKsX zP`MG)-rtU5gHeA?+t|_YsSZm>-5g|ET+8 z5W^&M?PN%TXs)_gt#%(ZwmWTam+p7{!Jtd~C*CQvo56lJ4ifss05a_#(YQMZ1`FN^ z?URTt97MecLi!5{WFubiA@LqI=LcupjA^nnC}B1*Es8#+j!KuAn-_yO@`t-4@>hmN z0@?GlLIiU6V;5+l2DS~h`z*^w}Xci9Q`*;;hkzXMDz zOtsX}cZ5edtJKMrF&hv*QI-1y4R(9{eD=P=6QKI#K~Y5?xVTVY^?sk z^=)U3o9o+-)8f`+r`g=vg_lBe$KjdH#=6t$G`O+)xY6R~?!%3a!_94{?R0ptxv~DR zBSLu2PdqOughC?6L`bA1F(yMJFT8Nwaga?2_F}5>Fiwd~#u8Hly;YD?cwX=Y)<_Z- z><@vyfzo^rKv7HAfBMy)(QHb%*W>&z;Y2;YDdC#bU`=YUCN)@-8mvhT)}#h&QiC-q z;TlNTn%!Gk1b<;6fUpojSO_63#1IyO2n$h!MJcnpu&vBQcpU-vn!SlIi*OI&Erhob z-a(i{cozXR!QMys0O3P~j}Sgaz?$=FiD9K2OKbt|{cjSx8t2s#n}-?x{aaGJVT{(u znB9~6Q3V5JDXf?>Wf_R)>T4UDuGQMw-fT2oYh@cx@vVaj65RT0tR1iKz_zYoOcSH+|56c2z z!HThx*_v(HrafcNh<=<6KW#j(QWjOswTJy6!RKID7MTvf4IfIZln*`$6Isb)XA+&_ z2aotj5CxH8g=3-+zJ@KFoPCaP%hI_0jeNjwajqE4udSA~J8D6*R7)>^XRFTv_()8} diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc index efe25696bbadb006a01a1d9df0174079a5a4b55d..362816358f95f5d2bac1d4a80df9adf0a63e67e0 100644 GIT binary patch delta 22 ccmaFZ%lNRDk^3|+FBbz4)O9}D$bHQX09YOeoB#j- delta 22 ccmaFZ%lNRDk^3|+FBbz4oORi^k^7n(09We=fB*mh diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-38.pyc deleted file mode 100644 index b5c69adb90b679595a2d4672315889a52bd9798f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11451 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 delta 20 acmeB+>5Jh$&CAQh00d`U_HE>5)&l@Oh6RfN diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-38.pyc deleted file mode 100644 index 41ad53241b278ba09cc75a6f931b65a2e390481a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6948 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 T9G}$-s3*yoj7c$h*JA$z-P|&l diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc index f686c453ccdb785856729b309094779331f261fb..cbafca871b4be000cb6d5ad44c18f7db173ebef6 100644 GIT binary patch delta 20 acmcblc1ex|TEeY#C1|Q}5kjbHm557)($d`$uq-TRXPP?oWto{x zlqfuHpLmJHFGwEq&ad$+Px%Wxan3j!drg!#@XE(?#xv{lU1scOGc!#B$M1iN=a1@y z{Dn#Rs6p}oPMJVpgwcq&cr_v#8?F(Xu1N_qSuLu?mTSefYeQ}^JF3Ty>%uqHRgraQ~$SnH)BcDXqwFpBm_w|x%JB%56$bNXDW z^+58h76)N+Za_bD&-9ewLA)h`;gE~0^)QiPKivwGPu9*U4zaTO@L=#F5OLNNd>91- z?r$Gt^OJTe!ksV)BJ6DBf7b8+oVD}jW|}}Yz<-(?*f!x@hf~f%P~-^c7#k<_l=R3M zg=&Qb{h1xgK&gW+&1|WwJR_n5H~#)({Y&qeB z>5d5EI81iDA453`qLrQ+u`pd(ySKLHJ$d-F-}ATlwg+!q7UF&L;c}uU1)9RO1pK|Vr}Sm*bJM6YlF>!%AKtFou&#k zo+2Bcg#~G{zkr4!WAYn4A}3TCM|4b2DJ2U0a=bu6hH~!~`HcKPo|2zHoE{M~Fu7Y3 zEx2UOKmz-!FGgHL6b|&B8Cgy8=y_%W30kK-yoNIzq{#;>px_dR6Kd00>d?daqV&6y zQU5K5HdfTiF?=0F00nir03jBk?beetK{2a1TDn5G2~ZYb;53xQDwKTS6dJVur6Qk0 zf{Gm9p0KaX-CC|nt_I{*o?oSht&0{|iN=tb@<8HhVO$7(O-JgCYD`rq9SvnaR4<<7 z>-#OlV?!VyONSmVRne5jPC-JG;TEV(b{`tK$rJ@(cfelSXcq=ERc&Is0#MN^tY&Ge z<@k`V0;G5yQ``tj23xA40f8Rx0Sh7HZ^O_FU^cx$4{u)stTgTaz=&2XVSE!)ZAKKM zit$zzW4^miV7_00*}Vql^vo%wXi!|`TFnR=+Mpij2piRy9)F99>ei>)w4f+vxRHQm zAyd}4$Zg2$lf2ORs#c-BQ=$ZoB??|NVcPFlqd;k^G%a626Q7XOg$Yu>ufgOCumge7 zKfIo(%enue>2e+8n_biNOR*viPMnCgXnSUJ0m%GkWOS?(<;D~M{9 z)<3S?e9g>Z3pd)FH%-|xrnfNM#BddFH>_yd<{X0r2f2<{=Rl29RDft!~wv9A@tw~tEq@!Lm#fC!{Cvqmb6WYv+{ neVSRlT(JW20fu5h`4@choLN)T;)4iIIFoPA+`e=6oAY#bwn3nM`l?=C^9lKegXso7atln4 zp%X;Vlw>rd6fsL#=7pZaUh0QF_`I|dR_+nui^>5J73uAJVHL(zQG;>KjcbyMK-3S& zJ`DrF4Kd?z9dJ|3I@|y}Cr&v$BfKtYx4r`d(x!H_N{38^3<6I8GR5_;}j-_~KfjI&ST*Zugsc0GEkrP7fU?_(8hIrMG7c^+qybKBrNE5tBG z+~oWnuq$U29`ZZT5(VhPoFH&F1k{cH=>s%NYMmng+i!5Uq)|Oi&9OqdvlCVj_x$wX zlh75a{*OV;!9;Vi9fHE~FUV^Tq06p7dB@x%NX*y#D zq`=c9>J)5gd)CtW4H-@72Wswr&JJiJDh?00tu97EYi@caZ<=z{x0_uv_vGhtf zxA}7I{_U;D{QgF_cW1p_Q78vngKChdB6n(3m`sJ_+BB@?Mb6=+pNz9M81-MrD!T~F zv@7wf0a{w1XQ^7mtxenbRY%igTcMgPOA3Y3a#?j3yC+>aEdw$Kn_Q`*t4{6VtwGF|LvR{F(x}OP5+YGXHmXZw;er^zM z?c_zB68tHR+^NPB5^9eLGg!vY2L-zj6zyVAvP+aK5N5LMOTw~TJJjtFKFX{eP5j37 zLtKZ}NHy1m9g&r)o>+A*<2hII#0Xq3O!9KaYp;hsm$IrQ#&Xo$NiuCWZa(d5Fa>99 zc;Q^+M?&>#@pGRiS@>4xB52~WXCDIw_o2yG0G!yA5nJOrqlc7fOn*rZscrBKH(S{w ziy6n1We&A;`yk2nG%c1>n)xBkJS!+kVMtPBB_$~iNk-VHl9YO@m)R9H9_fw8*i|(i zWfh=mJSp^yL#Fm8nrONkxVQJbFb0$HeRsNv(L67Z}7z!IhGWc>Y<(^^=UV z6$uWnO&8p6Iuf0HVkCy-{+68!ASi&7yVJIXUHsF;KrT**xB-j(``6sP#yTt~8=URA zqOltC2g2LsjR#S)6YwyWjYlHd1{wn|+;05hN%+^vTHIk?G&y}|db;swX02XxHuz@4 zZMPdd+;#S#zvOK;q!;sBZP=H)&1IwQwWpk29>ZFLirw)4CIG{(FW5`1EX$)bHI;Y?9OHX2fM0-;LQj2L7a*ZgRTr2

pCkA<{sbWW85xD7Y8K7EFUKbVUi*bYrgsT8aZkxxB3qF+sgUdFb%r7miZrIu7 znT7e4`i#h_ud{253lHljnz)WLKSDs?r|>cKk|J^lQHb#&Q9<4W0MZrhCM|0g9fM|| z16~_O+N-?Yzkc2k{Y5U%vVB2`ZK;i1qu=s2JsCfW2Bp!rD3E)tPfG#pF9-U zgF<#67EA*>ra&hIXD_Jfkpbn4_R1G+>1T==lsYJGic}=(#OMVf)~k9on?@lH#1{w{ zkBNcBN7*dC#E+8*=L}ZK{4?myf>0I#&{!~2%Y%u-sf?;0)->@o>|xjShI{H2q z&4S)C%yEr*pr-4q^QXx#Yugjc#l**>VTOR&nj zvmJ8V?BzC8*_PGH0YY9M6^_Z4=0O|eua<`8+fvnpbAUlEsyJ1J@>*?h!q)k(s?4dg zH_2h9IZSY5A+PhrOwX6}fhX0Q-mpd@C&Aa|(+S&JpI{CfY!5KpHQ&tE_W zWIck#-iIu_gfRWjG>_j!ST8i{Rk)-@AzTm`7ve4SiEm*Sr`(BY9Nq=6k)ipuwaXcr zc$1;ku%`Y@z~mvOihZVTUd~j1ft6}Gu^cCK1MWCU-f@D6b$sj>9S5&LsYD==;u8cc zg^4bo%fxE?ZVY8AfctXnidgP>@l){`Dt(3U4Z7ku1xde@E(JAzTaRxVp64z`^MY4<5bJy9?Y_>4qR-ID1mVxbOhY4UFr*N<5ev^ ziO`~?uo$!>xbO)P3EM!SorMs`Yn(dw)iIyeXWXFp0pWt}C)STCaX;ZdOFY{wTG2FG Ofpca;tLWv9MgIphwCl70 diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc index 1f68a97fafa2df2d686cb524602b43a027ece75c..bbde7415e44169aeb634da4c77518aaef26eaf88 100644 GIT binary patch delta 20 acmbQwHJ^+7G%qg~0}#}8KH11E!U_O2umueO delta 20 acmbQwHJ^+7G%qg~0}z~b*|(8fgcSfaeFX6U diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 89bacb9eca859e6519bed46f7a22a8777be634a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1094 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc index cee2e7278cb2a190c756af68253f4522ede8cfc4..6fd6f0b0fd9dbb748f7dc92e92070d895f218b66 100644 GIT binary patch delta 25 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 CoF-HN diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc index fa734bfaa867767c5ccc1e3f6a11a32a304896db..557a345198190c24aced21579382c25afaa595df 100644 GIT binary patch delta 22 ccmcbykMYJnM()$Ryj%=GP}linBe!on09`8wd;kCd delta 22 ccmcbykMYJnM()$Ryj%=GaMoqtMsDAD09^P7U;qFB diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-38.pyc deleted file mode 100644 index 807d45ff883e9f74b524f7422f29765ccf534264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17233 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 H%3J>p7`k6t diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc index 0f8944381233d9d9ec570a55846c5a904b8b1e6e..83283805dc20f1527b6c9fb5044358daa69c103e 100644 GIT binary patch delta 22 ccmZ2+jd{g2X71Cxyj%=GP}linBe(2p09ly_tN;K2 delta 22 ccmZ2+jd{g2X71Cxyj%=GaMoqtMsC^H09j@SkN^Mx diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-38.pyc deleted file mode 100644 index 0dfad29a5658d02d4330da9ed824ca193c8f2cc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38198 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc index c6fe789f747e38fbe3014adb9a71ad1d34e6f38a..8fe0dffc61b3e9e1bc327d8aae7f2dde3a224f8a 100644 GIT binary patch delta 22 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 delta 22 ccmZ2BlX2NhM()$Ryj%=GaMoqtM()`@08iWo?EnA( diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-38.pyc deleted file mode 100644 index de8876e4083138c398135538a7483525c59b14a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11508 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 SsFPD|1oW{^s$pe{hW3Ba>C;F6 diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc index e0512db5335daaec80983ba9b3c53826df907b4e..1bf89febfe033b1a76013048ad4d06946f7dfa89 100644 GIT binary patch delta 25 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 H&$#_J$*dJn diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc index a25c0563e1fe2b6df145b70651532dc64c50085f..6a6ff76fcbb442079285fdd371425139a6958559 100644 GIT binary patch delta 22 ccmX@{mhr?}M()$Ryj%=GP}linBlq4i0AjlcK>z>% delta 22 ccmX@{mhr?}M()$Ryj%=GaMoqtM((|30Ah#;B>(^b diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-38.pyc deleted file mode 100644 index 3dc8b200de9912d49dbf79316f0b8aa5f7515f03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20451 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¬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 diff --git a/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc index f86f6462796e9e33bb4a2ac7b0d95b0409ca0cbc..e1657a245bac98a063185401f48a48f3c6b9a15e 100644 GIT binary patch delta 22 ccmZ3ogn7vlX71Cxyj%=GP}linBe&!w08usvBLDyZ delta 22 ccmZ3ogn7vlX71Cxyj%=GaMoqtMsCSV08s-62LJ#7 diff --git a/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-38.pyc deleted file mode 100644 index 2dc1f63d7da102cd9c27e932f729b3f3cd63ff41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42380 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 nN`Jpr@xuiS&TaZosDx7&EId29QCV3A{su zM`qgj7+UZ$CH#(b#raX(D`P~?`3Jo3$kng%@imssanr9Xnk;^c7fa3CaSl#*Z16hA zO?$!&G@v|Vu@Q&U51@`;>0k=tr;|ens>otF9Uvv|VfKzic0`~>K{^no=kTx&S)EK? z3DpeagIJA_M+UNjk~46yle1tiY}e_UgjY(h~g-a z;a{S#^Y?j)tr{+^-{G+E!LYDadIZa8!6Gv6-yG>?7gi8zp0rdjr8vAdnhrd2fO53x0_;6ffhO41@3ZQW25cUWzW z@df5sy<(f_P~%@m72QxctvA~gFQ1y7J$q$ZNQ&3T5pj2pQ17%`cW}Zd-+wR;MgRR7 zN8t4j*;$(xp;an|&KuA@6PpnGA*~epeTceVj-BOBA_doZmLYH*S`q&np-KlFgm`-Q zGnAtcFZ}&%KcC?1hro~nQy4}nzu`|d(zqK+ft4CPDO?Oz>=|gze_)d)E)n}T=|vtN zA#GQ1)BY4<0fZKSqdpA&!1Zbfw}=?YB0QCpAqC2CAufgKn2UcGtV;;)u!qor4PqPh z+J%-JO7*gW_<%f)^E9HTKis9h4|54Se-BU+(SYF`A{N|W$}jUmL_#3KS>6l4f0cJJ zBL8oZ_7Iq~OTZ@v!0=O#CWq3SNY1etB^)rLzsR~xTq0D3GfHkCGs?cI-@WAwg2IEw ze>DXI80aq~0x0~>4^V4^R>wS@yN(0Z$l;L=>gyEzyGRL<0Z@X`#b1{axQmp439UA~ z4m<}AaodclmA}5*U)s~H1D2FkNoZ5clcn>G34Yd*{ZDbLaRK{O9wr*r|igMfQ;>jh}kP`8aBG$2lf0 z@IvLtImin+iGrAjjC=WbjF%^P+0IK4*W*0E$4~J>SxdrApA4Ssi`kkUcs-#*28`0Km5Thp zA#reopmb(M?u2DbBloM28{9AB27>NRNKO8~KQ*9bQGWo7z(3~O#OXC(Iw8p*wn<9ozNKKuZ_L86BH z)#qWPjiixwe9vwp>99X#e1bnt6Gtc1=XY^K>eHm0N!>FAvp&r2N#19WlWq1<(qu}r zedvu@hH{q}COiPOK3whMAB(nNFIJ>A~vM^x6uL4^I}ILiq;F93vg zc4A`1t=C{_TxmaYNe=5qA^&%TOsbG#*H_yG8TXGvuZsM6Vn}Fd{A^DHf&KE!HSPSw z1h;-pK!ibcj_g)$KPe0mJJ?C`m@Q`lsUH&qZ}bl=8PkW($U#U)#-XpIn>QOag5jw9 z{Acv^9C+Gge0R1WO9St7jm)Ai*o9zWkAl}vxv9t>&1vVR!K;s(pLAvOO?%)a_4}(# zX%C)(!b8E5PvZ|j_^K~0LC5m?p(0(tJq)hHsM^cnl-UbBe9g;DojrZ^c`skGtQT

K2Kh)~K7NQP>qp^&Js0 zV(X>X5WF`{YI_;FV~=l6K|ue`j>3#p6q6TEzr7XkPua0ds+%?4FugUQ06 zgm?;}gDgmrjIH&xYZV96VKb?~ z3+))r>%7!>sq@m{~-^6z>1*S!2TFFSd;cg7$*;Yq$rxje)UKFdc2Np!Z7 zdHr&TC04rYJjWaoM8PSU2gS*H5OObfLLEwZlGyK3c1&-VkWn#Q_;-gviRlQ+8|l<= zb{PKFp=3G_RQP^&TL>kFi6-d`&;-{!sPm@({vf?8lK-dafqjn+&5RrzJ-Tnl$Tt2P o+A*|e^f36s06w|lox`K}>|kGpjnUzuFD3kcFJ@CiWBKI&1sWYI-T(jq diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc index 80100783455f5b007d3129c3d604aa0804c8e3b4..60763decae1ef1ab5338b85cb8eaa0d8014da243 100644 GIT binary patch delta 20 acmbQuKAWBUG%qg~0}#}8KH11Uff)cbq6K*X delta 20 acmbQuKAWBUG%qg~0}z~b*|(8<0y6+LZv|Zd diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 16b7c50df6eb50cd9d2603f8081523eb2b439b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 953 zcmbu7%Wl*#6o!+zXOhgl(~4EMBLPJfVu28%v@9y2QYaV6ie!0m+!@mxJ908p`T%Tr z0N#N;Pvb2s7Q6r}>`8@C7YGSQ`Et%laxV7&CXTzFU7x<{^Otqc`{tZK*VsBw>|K1e z01y1kL!bD*vujxm>!gki(!eHZVvDq}P1@KY9Slf-UDCyngcy+sV-jPJ^srC*I3NQY zk|B=B2*+fM6EfN4t7ls{B~xoRpb0H#Lk9xrLI@GW(1Sh84AbUeLKsXZn@ByvmncQgvabRX|8l3YO7S;ao_rO<2XN3_<0{^VGC} zr?#|daalcA)hFSqEbc#`nj_0iZ_}bpwrS-34PTj2^?vgw&A42YOEa!wMX7~cTnFvO z4DE=T$ptSq>6nn(9=4|&4o!!aL))R_5I8tx=+Gf@h#h(kTMm7Pfy2;YEuMT!7HFp7{OgD?+ivSc*7-Rq2*$5Jy3 zG8sz~0n+7x2k`MZq=BA}wYfi*-+r4bO;8&x|e4Vj9=E5!s%t-j3(s z+l<_};#K0RS7n-THpaNM$-LTE8n?OgMB|RISL*AAS4WG>D`=^pWgIONXsPlsw2Yx; z5-o?&QsZ^B)I}X_jdjy&plzH_plw3grqDKpzG*)Bl<`Bn@x=5Fb7M(sO+9BAe#?@! zNV+K((&nOk2T{-wk+cWpyK-e=@#1BG6rSS;+G0zW){Q|w64Jfe&%-ncqCpKE-^@OH z^!UYZKfU;U^G=sW?rt_J7x2jzPzcRqT=R793Il(pu!P;yk72%^8r>Uq-)@c!$y4*pG){;vnUFk zv%3Zy$#L-wR_L2-ojqm+%T7{~a=k!3H%Rt$T-02IG5qS)shdeQ==W2|1#hbLn%@Np zkHTcRdHVac(=Gia4%5Iv(K3N{FYR6magc*fiV=xq3nR`%)C0;MAkwrg4G!b$)#FQF zv~OktvbNw40%%`N!~%r(MSCIb4q}nyS^FBK%MipduGqd6W`iJVF69Frrp@^?^YiU% z7q8z~@^6byJLvb@BDwEB!2Z`^r=5kl_^2Or?*_{vYxl$coPS>=JcYTCC&3&+pgY@N zRbdhjGDQaFvT@yHrv9*|vOZga=1n9QCMXlS+><>xghrs_g9eEy5|pb_9HAb0$^JJH zm+)R}F?EE)S4FzMp9Hb+eOdMWIOT(g`ZeFbhe_S`7>F@&ac*gKR&$X_BTUMZEMpo) zqIxPE${T%>5#U_?LCO6lt!h~Ce$*p5ZWNwqr zt#ew^D2zb|RQ~hzK?;dz@iu(`9Wb z2NA@#0k0}p+%jGV@F+E-ML)r5zNPuL7bX3_EP7o892bR8@%vq8Fk0v{baZwtL^@t3 zs?K6}PphD&>TDA`xwgVM%k_0_#ZVIKVQ%M6?sEM{`bT3dN|Wy3mLpBNchnWE?ibkz zN5#IZ8L-Dz9vsLT78}gm1C_aE-VaAegp}NVA*5uI-eyR)Jno;w+AmI+kQR zU+rT}EkQ=flTJ5{`(Y$NF@~a*$G=pyQ}F$@PsM-WfNi9|zBhuY3i7~Rx@XJ31Lp~> Z8C?e_umHPkQm^Wb>BdZBX4;%K{{mesnK1wW diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc index 5f1acb395dbd64848e9eafb831b42bf604391fd4..e9662bab0ac876b29344a93aa04b9f583ca43162 100644 GIT binary patch delta 20 acmZ3;zL1^!G%qg~0}#}8KH11UjTrzok_C$Z delta 20 acmZ3;zL1^!G%qg~0}z~b*|(8<8Z!VkUj=Uf diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-38.pyc deleted file mode 100644 index fb7a35f576ea0b07ae0fe7b479177b38ce59719b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc index 6f1b75cbdd9663b8c1feb2ffadab31191fc5fbb8..3134e6d456f30ef635f3bdb0f4ccf29c5b4c3d91 100644 GIT binary patch delta 22 ccmbQShH1tcChpU`yj%=GP}linBRB6f08j}A(EtDd delta 22 ccmbQShH1tcChpU`yj%=GaMoqtMsD6|08iEiwEzGB diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-38.pyc deleted file mode 100644 index 09ba7e6a3235887c9273c499c8ea01679c0a67c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23237 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 delta 20 acmew%@3wj$w?IDH*kPs?)f!y&B=cu7xGn)AB3bwGuvHVRb5@*SG6x@W?Bs6_dj*-hY801 zqQ!?Jz~TX3^AkRjZ8FKFm+?)GUqAB({-!?&HUrL-uflnz0u{=j=gl)2zVT#3PW&8f zHdIKDY`*d3q-;Slfi*N$=rpIGIW1=(Z`ShKgPN3|z~X|O#ZF6l>nysMOmfCr-=_O2 z7m3JHV@1&uX>L_tX|p5-iBzH-l5laS7^+^GWrq<|%^=A#k(YyQrD-=S^1jezZdzD$ zi`=MgY2o$*U)^FbEUkjERzt0f%57rPA}4dZqeQRJgVy4rv5B^~mxRjY?Py8V>t(lI zjzqiNj@n{lhvLo60S+hAy;2$H>iR)q#7lAFzLn-~yU=Mr&6CVs@cwngBy2iR;^|^m z^cQcqxTC1uItC_eE%K`12{KWI8|5%lZLCAeOk6dzvZcs=#Blo1q+=c4se6y8UlTOn(P0;S0Gt{QXzeL zR}l_6$@|LOX$g!IDB@c#_wlVWFyb1WnBXBimV_z0JIHim|CMg%<&;Yz(MqV7N!MnF z&?<}qPUm(G^*9wPcOhOO@UZ|Rged@2+HN^#&s})6tGruCCFu$#&HLFo(@rQOR#wDU z%VI>n5Mo|f(zOJsX*+Mn?=g-EOiiDtQ8i4Vt&&yf@=*Di%Bw~)9KuC46C+7DGOqVR z=P7Dvs_1H}HjIfUpot5!YGnynbD&eJDxOv|-BN3izIN~j)0bfR_pcA{bY2(~TSv)* zM0cL%YE`3fI;%yu96;T4p6Q~mlfeMj?0lD+5=36NrA!O4d~12R^X%*A8|(4+YP*9- zJ1XCg4={g{Zg&h${&JXfcN2ix8K%RVF$!H4`erKgSG#{5nA3o@ckPG zj(Tgy0y3A1$kTL|zIrNfQhk}0WGL_&=bF1U>XPgFK!Wdd(A>xC4xGh=4!loa?*Z#k z*Ynr(9OM~ky?_1wwSRIx*Yl9nrxG^qXy7i@Iqo+gKMmq@%yInynTz!WGWgH!sWT8k zTrjUNq3$60kvH}%e~Z2_^4@u4A9c=m1HESby5{H52ab5h8waTPU<4OF+vWPvC`89t z%klS+2hv|>BkBd{ERgQkwr6$?vO^!)Cp{V9+Tp9atI8@39-&xzVvFM55Lv6Yc z1vXBaaZL>Blw0+5tL=(J(~UMBMWKVBYHX+I^tPI+f8$K`tfstZ`WuWU^fj7OZmNbW zn7HzXg{cBkM46@i9b57E&?V`w>gAc+u$G^EUC}f$bdqgZlL<}aH NeAZjI@~J-;`~#%Z3q}9{ diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc index e6ac76d9d19d1b3cc5ed9c630cd5d66262020c25..a05b5c0fdaa6052a04f62d399612e73f3c408fb8 100644 GIT binary patch delta 19 ZcmZo-YGUF(&CAQh00ecNPbPAI2LLPr1%Utn delta 19 ZcmZo-YGUF(&CAQh00d`U_D$se4gf3b1!VvL diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-38.pyc deleted file mode 100644 index 1626189d965201626d5a165b210188a4df57b358..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmWIL<>g`kg03w^X`(>-F^Gc<7=auIATH(r5-AK(3@MDk44O<;%*J{qewvK8xZ~r? zQj3Z+^Yh~4S27ea0abyCU!BfYF`>mkshHH1^2DMT|GZR}qRg_?7?=Fy(%jU%lH!y!4o`%;M6-9EISL(v-}61tS9^qnH54ppfAB@YJN3#DapD)V#9zav<9$ zGbyGxvm{lwATc>RF+H_7rXaIGALxj@l>8$7%#^%DeW*-)N@7W(UP0w84x8Nkl+v73 LJCJ8S12F>t1?NbX diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc index 42022175fe66ac854c7f99f810aaa6b1910b523e..71790b8fd160fbc36866fded91805669360d25a3 100644 GIT binary patch delta 28 icmX?blk>n$PVUpZyj%=GP}ljSk-L?faVs~|)*JwjF9|9D delta 28 icmX?blk>n$PVUpZyj%=GaMopCBX=t|<5q5_tvLXWR0$3M diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-38.pyc deleted file mode 100644 index 703759c326f85fd72f7f56c72f5f1777ca20fe9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185462 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 UQ`e=JrCOzzrmjyfN&Wl(0Dd5#EdT%j diff --git a/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc index 8e478db7bceb91a311e8b71d6b073132592718f1..142c0701b2ff1de2f86ec5551e96f486e837d2ee 100644 GIT binary patch delta 20 acmcb}cae|#G%qg~0}#}8KH13a#tr~J5(TXQ delta 20 acmcb}cae|#G%qg~0}z~b*|(9~jU50z-vyBX diff --git a/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 0e5610fd84850c316820f9d24186d2b76048ce84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1458 zcmb7E&2Aev5GMCWTFH|9m%45a1rI$`1uCaTPDW8Qjg9`KO$5uXlf?q7l}IUT?=BZ4 zWygkc>!B!$JcE4fz0c7H;I${eLQfrXE5j+$Ln&}LOU};D_svHgx7$qw&ZA0X%#OQ~m*lB8oF~WL77`xf43M8@d=#mwK5OdUo|gpZZ~q*1|gTPJ=~*)~~Vr zj`^oe>VAM|aOQ|1WN2h7c`Iz??XaD9!VX5oS6AD1fA#JC6I6WcA+~nb6bp>Z?_F=d zK!x)h(I#E_35DylMcc4$&<*)Hy zD|K{PGTk^zb0$@imp5>Xo_1Yf;)D<81~@`j{%5@hy@%n(4}-7!j~+jX`^Sd|{TD~y zJbQZMzCIK=FS`Z+MVMCp1TWY zj;`@F2Fw^LcCMZ`2@I2+@X;w7D>CFmk`$C&h*U9>Dxx?UN+np551Tf6z!=#ZXNi=1 z!>XjY=wX=&vOr@@wBPM=BVjW)i>*vRN z(XnJgMvOv0^sHd}B0Xo(J|E9=RwxJ}qoSOZeI8KXH#c{8^6fG!c z3#K%@qFNK%ow4cOav1hqn3nN1a4h5ajbR&@29EL7$$xSzn3{=#Sp1ZXE)|pigW|4Z z8MZ}%--fS?Rbvc|mDvDK`zHU0fGe$7YGM=ow_q3uw=nL(!yGNpHG1tRJa;B|4uC9_ zUoDhMd!Uk~W+sB?w<76P5Dt@6GD(JT4Meh^sANbkUb5mgjEs4qlC+S7nTQH~rJcJ1 zTk8BB5`#DKZfEhbzClO)SVKz`LHQ>HL~ zk6|Mo|D!j(@@-ynp$>%L!gkU&$JV92j3-q4#!A36%S-JWEAK$Fy|!%*KF>LwW$X*n kWcd-80IxX#4qOj=?tQ%FICvX(@O?LE292NvyN-wd2J``OX8-^I diff --git a/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc index 1b41bf894777f63c8e31380214f03d535703c950..f2fdb2ece6be2ff140af3ecb46ec3e808309a98d 100644 GIT binary patch delta 20 acmbO%Fj;{6G%qg~0}#}8KH134!2tj?s|5G} delta 20 acmbO%Fj;{6G%qg~0}z~b*|(9Kg989Gcm&)4 diff --git a/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-38.pyc deleted file mode 100644 index b93b8c19c789d7230694693549c9e1424846c1cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1888 zcmb7F&2HO95GEz+kFpZk1#%4bQXm2vyYQ_+Q8FvfmYsh=DfqcXAb>y3}g?tMdP)lyU;>EZEynA2R?Lz9l3Mn40;hpzqefEj&Pek60~=v6V#*|)MX9r>&4TH zbS9$TPp%`FWwA<^f4va~Sd<83*jQ<1)D#%3)rM&i8<1=ZK_F$K;GpYy4bc|zwM&OhcNS!r6FOBHc`=jaxe$&!CQ zzkL;67|;*#TA%v7S9g&98#(D!PH!l{9s%0{n?GCSEOxf zNZPLDAAjl{G}=BjK69<`-{j*l=y!RN4Daf?jusl**wNIt+m9|!ZIX46P|L4F68}{p zJEJ@sjgLhphMF9GF-jK|PbyJ}e>}<~J=}e#^i*Ug)D_ET@6)+RV#!vOq$Wn?P*dr? zm;;q-uaX1tU!8-0mJy6>3jVoLECp;t`9EQM80J|eEb;#dOGzJ*5ksFOzs-1>y4vDmLAB?+8`njt=Ae`8_hwF6Sc7Jid|CQ6IIHw$-8L(SdQJF>;$84?05QJ Q-`n%{8eYBM_gv5Y7r#WUr2qf` diff --git a/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc index 9c95f8e9edb2c0cf9fb90d5687ee5334f211204d..bf9e151fafda398c012412224ee001a6aaaf227f 100644 GIT binary patch delta 20 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%0Ay!NuFwo12Dp)1&~a zE+Zwb9}OnQqfPmu$$?x<=k%CrN{^-o(ua_qLHb9V(qSQBrVrB7cp_3RiVJzNBl-(~ z%}k(wO&@ufZYNc)($|t;7iNt$b)zz^-Q2#^hZBA(=q%+W+fe$Y+A(P3B^6<0uul+q{Oq}fwe$j4p5~% zfLT|~MQO}C84o*A+iIp}Vy5{=gqdwxjope=a%aGJupT_ujBW*JPVFgUz5tm3CY}*w zff6x?KT$oJXYWXGY#*s?mY2Ka;iX7n@Q~O{G<35gz+wXt5LEK?wK6?FA%+V7Ey5!a z?Ybmk1s=#~2)tSFs6q#z`}n*#-*pw^a5*U?(F5!@1%&6*vpjlPj^+rSJzjI+{Hc*g z3a|~v=jeq~kKqD>7Ujwo!YslCQSjTKWi}nRYM(rSG4RL4g>2ZuuDHXgbqB0FDw$6~ zlQnwsRaj8qtRj`_j`I9 zogH-YboS7Zor>^n*^tSM;2<}s+(#c_ZR!o_7t!DR5Y>MYgGvM+Y*bFlUe@erZR;nQ z4PwgmXPKwd?depy4gc<<+mTFn;9ne1J+lV9DUAlK{6hvQ4pP05P5uFW6c_vsoaN9G zN8Uj<oKp7~^I+PU$#@hpBK#VoriiGEYBiO~G=h=y`e! zrm*tbdO_@<$9lrxaPS;?Rj+5EK^AI1HOI&7OkMXAh@_c@GJJifRMErCm*F)a^Te#V z>As&;+)IaIqIvr@Mtivj804vu7K_oZ)AtQJ-=y;;I$xplRXSg$^KCkO!c#v;)M=D$ z&d8*{k1%+e&ILLjfP+J%ku!ypXU?5IGFpJCz;XRGCLN>0E?BL1{q!O8toOrc!>TU9 zF{dKD*#fI)Cli6}o95^jV9CApU8ZJ~7YDta=B0@p3EUh-4jkBt~Ywbs>_z~dD zLvZJ5a^)ouCuSR=!jAmYjP>8q?0>FDqd|b@%MZQz)(C>1zWDd_u(-s}Tp%ET5E{^g z7PO%Q-Mp6s&`Uz-Ck+@RO&BIEI7!+tN;>c$>B2+aejFq{I9&zfM~6P8R@j15dKgk_ zTv;-`$D&KA)8hDd$F&hkVlkkUIlEOFbG*q*CW@n`5E+-ow;55IscNr9zO`OfvFwKB zLgw|exze0CD+*x+H)NwUS?;l&Bu5c9_0z4jl{t^1T-dE!Pcv0U)xKiUeVbN%Hhoc# z7fP}M$jZ9S#u6rh2nk{*z_Eg4N?I+}&MIx{Q@E2}nmg%KsQSs9)nXD)<^^+x6CC3T z+i&?Kp3dr%cy{)3f_O!qn|I^Bw}KV;OdX=#8W$4irbo-8?a}e*did3R5A@LI9>2fN z&(mvz2BsWtnNHtJzR+UF(}l`h$)z>vQmb6EvP6s0Pr~@|@lhZYiDz+~F0Vd(T+z>b zowBM*x!loP%-@Q2YJ}yJzs{wVs3N-K5|q9-E5g~=%HblW)&9`CC>6MZzxD$gf@p;Q O#jn<|6=F0nJi|ZVn!#!S diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc index 785369f554089b3aa13b46b07031fdc30114d64d..a8dcbc989c6f04b95c1111e6bc6aceedd6c26deb 100644 GIT binary patch delta 20 acmeyv{D+zQG%qg~0}#}8KH13qkr4nyI0ljc delta 20 acmeyv{D+zQG%qg~0}z~b*|(AVBO?Gr1qOBi diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 20357fa51e2c2723137b35894b7979a5a6d20b76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 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 Xa)BK`F+GVB(vfZIWr$scy~+LusX)wF diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc index 3c43bcabace7c871d1e89a0092ca37c1deaeaf83..45311eb6b945cdf221167bfb8d319de414c0f39f 100644 GIT binary patch delta 20 acmcaCd0CSCG%qg~0}#}8KH129f(HOV^9D`; delta 20 acmcaCd0CSCG%qg~0}z~b*|(AV1P=f}zy>k^ diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-38.pyc deleted file mode 100644 index b3c1d0154febe28d9d76f26025aad82999728875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2839 zcmc&$OK%fN5bk;S8QXCZ2QA^1U0wj#6 z@P;LfZ-%yEZ`(4XHCtpp+S^%~lX;Q-W{RB1qh3h#f+(V1O!O&HLVYUH%c6pMDbc4z z74@>ri5W4A_U1$l^@^CscV37~e+IjL;75m>hi%z4;w;Fh1A%7@yq@Ott>LF^6vDu} zW@Le|6Pa|Ks)M27e=W9Jk$eWN^UWo%lv z+J1Y5AILz2u+m#ZgDYG`(DBe4sqVE8<2>ge+rW8_+%Qov<7mF`0l9y#e`3gc%AWSV zgp-Ix#s_w69Agx^M!jps_MWTuVw=oE7Ek;L0_0I8Xga|;)ms{L?*v-QgwdV^AWTm` z6DKriK9q*8S%0qKx+aigP$iKhp@*O4ycuy`#;rd3+!@Dd|9muB$LsImWAE?L;JQ)|zK+{zUla=xY`Hu6sF>j##p*M_* z>}D^JDKHHT*@ZDMw0}MfTtpM&aWG_bC@rK7+>dK@*>EH5uED(aYeJV2IoKaGKjm=5 zPJ+E;#MQH=M%HwW^FTH@zl^5(FRKlLV>jso^`&WQfWU3hJBysRLeZfziA$Wn!{u9n diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc index 93d94d5f2a44b2313c13f3e9b3886af397d11594..c5632c7ab86a35bce19374390c29daf025a69ee9 100644 GIT binary patch delta 20 acmbP|HzkkzG%qg~0}#}8KH134X$}BFItAtc delta 20 acmbP|HzkkzG%qg~0}z~b*|(9K(;NUo2L;Li diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-38.pyc deleted file mode 100644 index 9df94e6114f5387e78edadf15fefab64fc28673a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9515 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 M=sR+7z#ZQ6zo>9X1^@s6 diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc index 2f0436f56aac73724a1c86cf9db45ad54d14906f..be29948845cf2c75897b694492d75a561cb8f62e 100644 GIT binary patch delta 20 acmX?OcE*hRG%qg~0}#}8KH13aC=CEY{ssa7 delta 20 acmX?OcE*hRG%qg~0}z~b*|(9~Q5pb3%LV2D diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-38.pyc deleted file mode 100644 index 4b813db4530f1660a89c6caf69f30dd58c9d15e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4012 zcmZ`+%~u=O6`waV8Vy1SA;1{t!xKA+EeB)j*ok914l>9#jSxhD?Mz7Lj5QA;tdW#A zBY)`NE=tlx&uLG(ZIW~FGTWa11I@aB!P~Z*th-}T_jjKpP~vtt@9KWN`#$c+yKIb% zq%?eg_?y^T%xT&`i5UD6Am%ZmEnU+BEns!c?fx>CDOz_8{OWZxOt^{Aa+9I$+KhCJ z`cRm1Q{k|i2Hy%t+>tQjX2MZ-G|al$aLgSGb8apicgLY`28sGaIO$G?$J}Fzw(3*i zarbyQ?M{a$+!IW@tp&-z{z?mM{>q-=zRE{A+j$M+^(k$SxhHu#7}{g|&U4Lu19+;3 zp8`JI!%qWG_wYA?kM!`jfM>lGMr?i`zo98LT$?q|> z_Bnno7=zwB{G2<(GeK^T1>>O4^E3SXl;+Oz8O(o+&yY6g3;Ydk@e73WQ&U_8e#{00w+$;Rb{s+PFVEQZVIb#|h<5#fH6OdfxS0Q<2Kr*?98NsWNP4Y>|UOSY% z?Ox;8_#{qoonOT&*VTzWb4tG`>_nIP*DVK}pidb$6E=QZ9wq1k4b^av2)f93libbul zU2Ft$xQnjEzKDNfFq_xq@N%K@ak1hR@2^&*wd{+BTwr&jCBE%fpRTodwYF8`Fmr^a z4^eEnO6M8;$nHEwlm*}#Ws<8044I_k{D#aeH6Ho(T2SF%wrhfiyb*VPopSIM8cwY% zbHtI*dF)5dRM zys#Ox>x8F0@5{Dd?@5xL7c{G$_k$*;u~7vM{Kxj1+6;^u0hvcBfs;}16dR%??t9(j*}mue3- zBe?T?%dbB4w|TVLsoyOWOorq!RU+dE-23Uw8D+L9u9QFE1PAh!a<`MCu&!}aFB5nN}&4Ano-s^ zDy136Zv;*^tY)2xUyFF;yqwZbvw{6Q@Pqo(^IJ_3a?01kgjdG88|Y`PE^`A4xOXaA z(h@vwi$;|~qyN#fO(D5}5oHmjolLClvt9O_J=5=LjXS0m>km`nF4LYFOzWJBjR4YJ zW5=Ws=u;Z`{99Z(=)||$_vRk^9lNJp)&k7DMGAW&9m^E6#t0rouT~{ z;aJDqHFt&s^Pw*OqWI}u^EpLR@}VJq#Ci#`*f>jC;;(=s3Jym<5+0F;vWm5J(xjPK zDcP_BM5dRFGvJJhe-YfzKF4mh5u=cd#$({&0S2A}HvSD0WNEyitC`~grA)Hi$#xyj zg=h-LkDXILQBrk`Q&$~nZq@3%GuCsO1E)GFJUSx-tgB9b0#R1{WMipPTrQT^7 z;@t`&lCY-Aku>Vfsx-oATbv@^X#i=V_S9<+WI|1mHpnh!Mb$4*@?{E~cB98@@L1W1 zcr4yj)BT7ZM=?$YFA$gm$S0&3@%omyL^=kdMKV}YMgk88Un)VKS8LQ_6nadEs5)p& zXBn0SbY2`YZDxT=u^dL4nJ;u2MwX>?i=6%8 zoITSq&g5^X9l?jR?O*N=eS_dFZ12wysyA1ADG0g>d0R}9fnx-w2plJ{OyCZIRRW(7 zIP5OEn0m6_h2S1WL`i8gGo78zObFuU7o?6Z&cbP_{-wK#G^>JK(7Pe6_-P9wK_#)< z8xF1an@C}j#w41H*&z+dk~2+;^N;bO{J+!-Sz8jUZi@{tqUW5RISy#I!8E&NLm5fQiOwEiNxDtdv&DQZJw;t!|VT z);9|4OJHP{7Ez~`ZY@zeTV9l@BU+l}!g5h2iuczm1!-(lmI##OuwtxvrKPoXX>|!S zje?qMid31rTddq%Su4WW?ea>cxKIF|0doy2dgweaU79HR!5am$|-`LV3~a@iI7& zH$ackkr%yz5-zTgyFMU5vG%`06Mb8^VZK4(5(NM@qrVA#ZY0YljI5Q_(tU>+d6dg2@IP`t)^@G3scwsV;U1I19?WzFq2s?Ov8jOZ0Hku+DIAy1@9#WY5)KL diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc index 5d58479af06ed66850a24d0edf5511ab865b984f..d3473489b0058ffb262f47e77a3e268dde7268e0 100644 GIT binary patch delta 22 ccmdn_g>mN>M()$Ryj%=GP}linBez}^0ANc8rT_o{ delta 22 ccmdn_g>mN>M()$Ryj%=GaMoqtMsB?-0ALsgiU0rr diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-38.pyc deleted file mode 100644 index 5ec2334d0fc9cd155edad5e5f74685ab7e393f7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21601 zcmd^nX^a(3a;$Cn z{Nq5_gum})RrNU}RQB>e17V0sKsAiHH`1_ruUP@ z%?r4KUp5WHGd#0ll=Zh+Hs#(bTk>s}ZTWV}4!*5MrkO2go4InXnJ?#?W96}Cp5#|v~jn~-{NKcU0&{etGwIK`aAvUCClF%`z_uC?kD^MxIgG;y{*!!ty>+u_a;BI zylvjpyH5EK-reqP#k*VO-NU|p?@4dReY1STpY{v>^e)5OiQ3cNF4R7XvOV5z-0$)B z;(kWgh|^;49ij1__|W$DdHYebgnnG_0Qxx~V?O4Y7md=v?{VhlN}HnmxoV?PU1<1` z^HRMQM)_AmU&+1Bg>4l%U#JIo^4dyRZ?~$AD0iV6qE;)iFZyAWxwN{1*K?O{ulSd% zD$2akLbdOK2#k^$P1UNccB@{iHtK7B<%X{UJS^GK<}dh5)!OaLx**CWnaoO61%6bF z@8d?%P-daM+VW}~ckhSYynrj1K;j#uG*Fod3bO#G9ZkI2x`DpEiz|MuzF7Cw+A9SY zpBGzhT|aSy=7hT%U}SD^wY}Q#T;(tN$_?A@g_ke5&ph+gtTZuKa-w{t z(yBK7N+l{(D$TaH+F*XXQn|ibZNyJwU?!|D`tGC^!pL+V~`3o<;e(7T6 zO@Cp&y0S9ww{BE!BL9W@!hBE<{gW%z+O_JEAIz`RS3U#8x4gFcj4nijpGkoZW>;>j zDU9m?v1lR5n{q#d>U4qs7AhsE_U&cI&v@pCre}HfyUrc6oRzYilsR5T%JNb+<`=vy zh&bovrF0WY$NkNI0VK;7#=L@*7yaV$7S!G3jidJFv=n`LQ+`Ijf#*e#ITv6Cy-u(P zZ@a(MpWJ1{H6-tCMXgD1o7CFoZ30>Bh&G?C27XEt56md5{BTvZYNV&+!#uBZxB>@> ztQ~9Z1DSqO(d+V3;D%RyHwYC7WkvY`X0OVn;SAuthMcZ z(9gy-9t-yK>3|d1tM1imaMi^sTlKMeuue7xIel4=S?$Ac1_z8K#Re;t&-9FV$KZ%{ zl?PUoX#+b-J%P$K0S_5|m>)HH*V8d{0a$3a8-BIb#XMGsd-JN#mR&&9YKJlh;mvl> zJa8`4#`K&9ZdLiN&&5A9KbG2$A*n-5Qa+&PC|jxc*DIAjjz`H9O$`Ff3Xe5IOX-*r z00$reiJnwG01kYN7ykei@XOG#8MJTup1W{crZH_QWfy~Bjhwjw(ugLv||hz2H49YL9J2)(!-*pUPN+mvz*jEx$}hxt)t z`FaY>OFs5iFnvr;T`&D5>NOIcKqM`Z#SuCddhTMqfgXgXHr=2N z@T#HPZZ&Slb#7j**RH0GalL&CM*0XF_^OA4L|lq-M2<5OM_E0n3n_-2wSfhyE0oMR z{!gjxY-tCRok$|Px=@RX)dg_kYAtMnv9!I&#+`EIalI9)1I%SLABh~YB=sbVCX&}y zRC~o&;cb;eu?#cH20kS*b&@6Aq0}Ukr9aRnsWyy=(|SzH;%oW%DO zE`IOMIF|9qGP6e3%ziBIK>ixTsH?R`H3({Wx9^j|-3z#a*Fo8dVDN@fH_EmT;lR&O zCWS0)o-+KLpOL(E%J7ckS>7MR<_|Fen{?L8y_+c)AWq~HVW7MzzJn+LX_mr5F=

S3i) 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 delta 22 ccmdlsg>l;yM()$Ryj%=GaMoqtMs95{08qyUkpKVy diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-38.pyc deleted file mode 100644 index fe89ce1e0cdbb4628e1b68b035acf50e41f23030..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12297 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-38.pyc deleted file mode 100644 index 7e0b15281f67d5819d851f771eeb53e31322f9c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3653 zcmbVO&2JmI6(>2L`mn4dPGWD<#cZ3dqfMd&X}b#;L7Hux6al*0w04qKtL#7)X?bjE zM&VFaB8(2L(-!EzuwB5~o9{jMkLZ!tJ^9*04?(f+dzAc@q=&8`a!9_%$49>3`*=Jv zlPB=|>)+-2MwyUradPtK!Q?Kq^gHM{;j}~Q_+=g1Wp&oI>Q>jT+g+#bbltj33Aec2 z@w$H9@8;?`Gj}@qZlPZ27VAYygd=S3E)Zdh8Btni3j|wzR#@B z6K8g;`dOIgc>(4HGe0ND?i??UY5lwz&A{k_D2XyJ{f+TiUVdfQFTyFsiF8roXJGv- zKL_jcz-Nmx&}Ib_KAdeY5IzU=^ZWwP7Y^yDlUcvW=VARlPFF}}VISUr)GCh7J&?&z z#4AE+uO?gHy!K|U8*Ir3$&r&wPshe@XV7xlzA6g3g#k$)F~%*#%bN+40N>g+*I__4Iw%Y zqK=3`%J8#%0KZS;AetN;43HeGPwBy+nFi}gKjznhehNwj=|&QWd(GBXvn|p_FY4V0w?)hod1JB&0&nzH)Jdzom$C$U z&EjJ+=zMDC-}}W^c$BK67yt6j7f+G=f4sQb5W$hk#wtO(A8|1?fkeHJ-*hsX!?p9! zVLQAOj)(3S*Td?wtHa!t2ESUlQvIj`FtpK5+Lc1}W!yq!9sck=Y-snOrSCzf$S&nH zBV)G9#$-g5rRj z1^8$OoS-jGTmtpiXHJPh6$4mKQ60j{RQ?dYpuD#|aUOXQ=BJdmU;)FLQJ%oH6v>DJ zW#z45QL&8d&=Gw~o_}l;Wo_kUl>!q59+&){tdQT4*v{aJZ8BmR-LyH~vgDJD?K(L7 z3WDF)Y)pY4R+PKzVaVgouFqZWy&}MqTZR+HbZi+ex|!$xR!)9{{M-h<+>|dr0SnD)Qvh#TPgY)uhV zz1>LwwCSDd(XQI}(M$daj*&mc?kCtCM?K@0S77Zfv}0|YYA;FE(5`Z^{hD5_lyp8y zqc~Mfcx8DRWfZVOFl$HjlGcWHA>ctg(@YA9j;Za;(@wXk0Q}zL+QWOF zFW)yg!1#tPhvo<@tR^YPq#5o15)a10%ZgA|TPFRU%z>;*UVefiUEWMLL@Ixdlboqo z@a`rvO`Ih^k&LUlFd0wOaLh#8aOT@S1nf}fnffX`^nu^N87Vpj0Y72XKd|j0%~O9m zE>oXfq9vFYq4`rv`M|aUX2Y7S!Ol|=311qGYh36R3=UmLzK>1=pajqrh;bbnUo%ul z1@iWk3hs48Eh)yWV>iesI?|XntPvYoBRjLw4sbZf9FX~8|Hx5JX2aJ7=(_7z3AnYP zS5-|}Z4Uv#!>BjBdx(@bs-Jfvc(QXbNF=}+b|ah(l85u}7PAyoT=@&Qy|$pvHHDAP zOSD&{z&ValQt>7>&!Ise$BC|dXtt%Ir;F1x5S}*wTfuQ+SaXph!}dXnsgDR4Z4MhV z=Jm?dhCqqNl&io~`N0Iou6o&n3RD{B!c-^GiV|IPQXYMVBOg1&s==WN|C2=U0M{;K zcON^frF8xY7E$-5Or&w2$uoGZq}zkb$^~Rx#t!Qy6P*p5j9Mq|Xp)twzx>;ia{dl# gm15fP=_M$<%50wIt+HEo^9;Z9*BCwfUGegN0Tj)WlmGw# diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc index 61f6ff07ed8658f8946de6786bd23598335b8591..34ced7785e484d434a9838963435bd47b0b7f930 100644 GIT binary patch delta 22 ccmeC3!`M5Ak^3|+FBbz4)O9}D$j#&j083K_MgRZ+ delta 22 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc index 4e4f52e0bfbd933f9e5eaebad88c41fe95da74e1..b7532268389d8d2016f8ed5793b2e303aaa107f1 100644 GIT binary patch delta 28 icmccegX78%4(`*uyj%=GP}ljSk-L?faVs~Irwss@M+ou& delta 28 icmccegX78%4(`*uyj%=GaMopCBX=t|<5q4aPa6Q2YzWo> diff --git a/env_web/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 2d1b5cb5bb1be478aecf8a4b3163c6474566e470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100391 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 C%c*w& diff --git a/env_web/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py b/env_web/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py deleted file mode 100644 index a2d3007c..00000000 --- a/env_web/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +++ /dev/null @@ -1,23 +0,0 @@ -import os -import errno -import sys - -from pip._vendor import six - - -def _makedirs_31(path, exist_ok=False): - try: - os.makedirs(path) - except OSError as exc: - if not exist_ok or exc.errno != errno.EEXIST: - raise - - -# rely on compatibility behavior until mode considerations -# and exists_ok considerations are disentangled. -# See https://github.com/pypa/setuptools/pull/1083#issuecomment-315168663 -needs_makedirs = ( - six.PY2 or - (3, 4) <= sys.version_info < (3, 4, 1) -) -makedirs = _makedirs_31 if needs_makedirs else os.makedirs diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc index 10ff3109ad87c74e5f5e3e48f4e39348b790dd92..684df6ba0cb25c37bc135006af3ba1536cb15cc3 100644 GIT binary patch delta 22 ccmbQ<%Q(H4k^3|+FBbz4)O9}D$lc=x086k2z5oCK delta 22 ccmbQ<%Q(H4k^3|+FBbz4oORi^k-NtY084!aq5uE@ diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 225ba369a093f4e71bb60df6b846b6e5fae40140..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10792 zcmeHN&2JmW72jPhKSYuG@`wDHto)_Wu_;A%97jry}Da? z_^(`$@mDtER-%v)1zmogg!o3BO(Qp9rmU_)mnhg7PNf41l8`dHtxO?^JekX?PUj z4b>v^b)=~R!z%aJ|B0Oo3dIxeSbqRi5<)OGk6CgBr!08?-lF2WF8h3ha3IXDlO;TDX-UAPDLVH_qP4`XYC zg&PoC5^{@MU#FjXhG}?)?kcMeQ$Y80W*N3&uPIu&Y#JraGaUQ2Th>d)s!>wFU~XPn z(sgBG-Sf)s_{hkb;jLFz@+HR_DVv&y)mS98itX5InnRd zY}@hp%iKAn}>=M>p`_S9zc|->JSIl_Aa}mT1iJb!pO;NI9 zuLLx*Yn(45e-!y~Q?}xqpFt{NCafe;Uh0P~NWKvvg>v6ThaA#8N9?~vPr+{`O<3ER?=K$5xMIY0i=uG}s`P zuX4FAVZ*4AEQ_P-ztvLA(n^lYdP(SVOQ8yOiuI9<j((D zLCG*B?_iRX{7iIM{VWwwsX|gVmLox>mJCtuT}(#tadGJ)2w6_&;tjR?T^8DxQAYpX zu9|oqt|qksJhGzHO4bywm8!Vw8bf7S+2o4iw$PMYh;vS2H}S{Mk{7Eh$Zg~`Do7rA z5Adlf2+?i03Ae-XKXx}!a_m)O?I1_NZN7?jFLwt)!IlnT1o2&n;7xQJcyDz$-ZiT| zPJ7>jdEMfx(?ekOj4ZhZJ2&zO?9I%a=74ATRLz{|<-HR@(kbJ5#O)x%J@{(gXlKALZ`!j z?6ZK2`|ktc-!%yYX!CL{=YYG2?$;5tiEab!@`$5XN8=NI@M>c#Q!S-1>=I_XAH}UyfFH)d%^bYWoI){YkYLZ>56o zXk3HdL*5Vg1l~txM7N=joxTUzJ^6&xA-1Y5Cm&X^J;OTK|3r1Nk7FK|Y^j$YAi{sE zA)aMKvsinun;q_kj(yVM5ef9#USn@u0KVY@*u$+deUBirOA|ZP6IStWDnG z-tv%U9eD9@PubG2#}V6qM6f2h4Xi62j&;pAkBoM$Tt++FVzlzs?c(&7Q_kmvF_*^EesU$hyX{rSx8_4k^N5uX`)Y%4i3`s zG;8k(SEK6<&dZK{brysK_CcDKVAUO1fOHTI;7B)HpM8u4l4y|C;1AJlAiZ&7)5jkU z*azpRMF%H=6bWc)&y$GiU<75N4;>1)(=rs$x`9<4Jk<~d;4M_}?Tul8PmniUYoW}D zZbJ{96FrRR;W35*T0_mEy4b%f0?<+)A0WE<8roS#H0#2|@2g)CGVE1HRfEIKA`;$JVswnoE>SW_ zO-)kwOk;(|F8oY51>l{KRmV@@wI;fFL3b<)yKcw?f2jIbco~K+M!9|rClubV;IyBH zfzhQzHbn_t4&h_K9#W3Z^ckJgGCI6tbdCU#RHemxmN(oaoT4pdBi5E@CHk8rzIoe lH`X(l5M>!}SJC%>=lXv^uCFKc3raV8^R5~t@d)3Y{{ua*9IOBU diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc index dc81eb08b1c1673157ade83e38cf5e75ddfbb6c2..0bf27d17ca4d26a122e1be2cc5ec025eab080c7d 100644 GIT binary patch delta 20 acmX@Ye}td=G%qg~0}#}8KH12AVoouSG!%bCJwf~}Fd>R49-sg_7^k{6&;s4j1H&=E)|~=1XyG%aOSJgWaF$q+nx~rBW=m59>!l8| z%ReCtvT?FZ!jLPXd>%?$ODgRFQ9Uk#mM>(o?0IKQNLcecyOdO8$%IFVA|CZcawjvp zJnZ@X%u&l7qKbq(Yjdh4Ml`+=F`c%6@IqE|baHYSvsdfuY4>099W{PitxCF%V96>9zdU2aN z-zkD?uI)R8z2Qz2IiL z3o@|QXKk=*>v4*q$WE14ga& zg~(U1qtdl)7m`9G{7{Ls14R0Al0y6NpxsG|eFp8Qgl#w`#CstLm{U%*yl7&i$4`t% z@aQWN_W=6)Vt30ug3gyNqvu4p2O(<-|BShht10&CAQh00ecNPd0Khs{#N#Cht10&CAQh00d`U_HE>5Rs{e%^#xu4 diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-38.pyc deleted file mode 100644 index 91163907ea40a06f397c3adeaeca29b6a6248bf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4461 zcmb_fUvJyU5$BQ=^~aLzB+g&lwY;_{A~Yu^KC~zT!#JPqYg+UiH%@vzK?Ox?S27)n zWOi4HEy(DD@2O~C`rHTm(XU0nK_B`Z_;zSt?kn6&Z)Pb|Vr-{waT2)P9nS8~%x`vP z_C>8$(ct&Tzw_R|=QZtLIGFvJF!)&0i1-V1s76Vk4M>X+?CXKv($(8&8R~7eOn4hX zVPLf^#bXA=L8(=Oet}v+c~EIpi1rJO7HR2Ajh0yD$Y{+m3%-{BOlXD9{gu!vt$k@8 zkybUM*A;!9E+~49minYsr~01dfk_7zq{*& zeb($o1IKfg9{udmM@uUmw`qUoy=1~33T8(=TvTn+@!~l22C!N@u`dPtHoe$yzGZNr zDbAIS4I8GDUo$QMx+_ecaISQkYGz^x$xlgQaVCd6>>|i#KkOIaSwjb2gw9wy)+CX- zG>)_*fb;}iNFUM1>Ey>Y^`vKm+^j1jeqc+VQCmjJaG)-KV6$ewX?HpfGCD|dma+Be zinAPp(Y!uGBdj<*KVZUHUX9~T9CtcNL6J_)D z5k|Kc1(czdreHzuRO8p+`!|1Dd)$5jn~OH1Z#>?98nSinzh>?As5>06P>S{zkNVsj z4E(U){;e;DUSMy_A@w7B>EY5+du#RC^KJKYw$lbt+AMtSzJdO){hhY(CHruqkZ8w# z?0|qFjkq(5ZssuYK~h6IxM&v_40rzX{+8|9s?M_TD%#;9W6UeNrJ^B(?`P&HjBe*3 zobsGA$i*N&xm@!pj2N9RgmSuFr$P9wOXXKkO__g`$!|>Me~agw{8s^VZ>kOEm;Vmq zm4k-LSNWi!NSA|FPeDUD5VOXN&bRWIow1x#`C`aE$&`d-Am6RzB`1$#$i2|jQmNI# zD0TBvsWXqnP~*1TS%P_8w{a%VAOf&WJ#>k$rguF?rxS8 zvkfNc@j_3#u5_NVg61ozxk^oi(Y>6`IkueU|GUTiGZQ+q2p@*hha3emTv}iJA6_R1 z@ptNVYQ0SQ#DFn>4{XLiz~(KVT2S_#Xoh~Zf!59W)t#J;XIM8I^`zvc6_A@$Tz3%B zVZdBBsk-hfs8v*LE)UX-eiP+U>EJf@@LceF*!%z+4FCMc*i1!M zJYrsjYL76;zG@JDP^fy&b!+nZ6yco~+-T_iA( zpczz*+K0~QJ|%Evg6q>E9HKE?la2_+r(^v@J2v1kPqah*b1nRpsma323g-m)h$gM$ zA~jFQp&?6q<#p}%_Mtg8jw@rJ@h4;Rc#alMAllu9*+hF4zIsBfL;VXa)PJXqvA!*i zrm=j-gFuy5lknoIu${nTKi#&0g4$q+>#F;dy@TvSsNeA1LjhX$hBE2~o)F*M_9kT= zq+AKrW^)bS`*LKb)$x6-1;^+gPMiLu;oNURqiW!hmA*F{)ugZ&`a_{oKx?kg3`P$x^Z<>*W%p1=PZ&e)Iw8sv4Df_I6Hj=OdIBvR8WUU%z||T( z$U;jNxh@A+A;>=jIkA_#^&>F{s`wRLDMkRRQ_}5Cv!9VwrZIU7)E9etvati z1pXd80<)V2rxJlsP>_nw@oQrqLr8B3w?GIX93wWz+CXJG{!{2B<=!xai(M25Zs6FG z2av@3>dKWEa8u=Y^-$+L#T3`Y@Z$vmEO|j3NlMFU&|1OsAu#%+f|W=WM64PM8zr)^ K2+xB4pKk$rM5iYJ diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc index 4a530ef3faecaa8ce315413c70b34a81142383b5..6203a8f123edfd53767501bf2218306e6752b1ff 100644 GIT binary patch delta 20 acmez5{mGmAG%qg~0}#}8KH13qTonLJ><1_S delta 20 acmez5{mGmAG%qg~0}z~b*|(AVxheomxd#jY diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-38.pyc deleted file mode 100644 index 4828ac7e149dacc594e191c504e31854f8921b16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5318 zcmbuD-*3}a6vusS$4S%lH$MuLVSW?{KUyeklPWa9Kt-EShE~|7EXX*yx5dS=!?jb? zER!a+ND~j+%U&j-Y1K`OjPmVd_KEe^!*=DR9-hTzF~rf#ox9+BIw{{lW9M zu`_=XNn%o&PzgFf0RBUop&D#i@y)%_=m^d4WXdWXg>T`FOvmW>j#|zzjb*_z@rKYz zI<=#2lWkJYrM%O0Ci0G?yoc!F$eT}jkI}2RvxwTkUM%?FS!nDok;e<6(!8KE2izS zCxKdZUHh#TWX(pyG3zWCfgQ66DaV8CCgUC?Wsv2rS+|_^V5Hu(eX9X^7-Zds<-o~W zHkEd`FT-{hGw&kov`Jesq_zx}v=y*&TLr7MGho%W1~x+p3GNwO`j-G~sV1r3m*tsMyJnjySIv)i_N8MqOG*MV| z)EyQJ7X`-0-Jy}NQDAhG3M=tZP_~#2RFBzfyZ{G$49z&22{e;vrogZiSRy-&{R~u&Sxw+1~O2cX_8k@|aE??~AD5R*jXf~{c z##WFs49FYbFc8l}cxgr>S_ZzFmTArI83hZS@IZkyhT^E=I0!V({3ds5kTdZI>mt_h z`N1^b&l8;H-<=@5LAB0HYQDTpR9$($aY-n&DT(d^n@^A7_ z5~Qb6dWW~-Xi$0E0vd!5G>`*&E5r|E*9%lJJk$->a*7I{#;cBsK#{1PcpjlSgzh;b zYyf`@9D#=EP!Ldzyju_vYD6Z9MhaqUUFp(jKodp6XQ7o{N?|W>6T=iG3x{Cq;&LeK zvQACkj4R8Q?puuNzN`DsnBIgmDv1ufC1Lk4!%{sO!w3UgFyO)8gOeWC1W9R~+zY-d za$krS`XPGHOb(FMEdl6-g#2`jCLo34W0F(w1Yb`O}91)(Bbj(qr%+!@z% zJvEF1_eGcFBkfE`2Yb@fVM*yUf~4yy(lb3t<9lNGzIZRkS;?D@Z`BX@%qInH)CAt# zPO<7eSyRD01JPZ$@%tC9c3=vGNpBn9ut@7{3@yq#&Qo2Ly(o)T`5Cx)z)%v^9UFL& z0`5JO;?N;T&-5To>Jp0PbwJPd1x<=Kf^H51-5ojv=zI(smHUCBp6kaN=0Q|Nv5D_e zw7v5n6+8rQGQ+2N6KUg;-;sB|FLJt=Bk~V}koN`;fqX8JSWEx|6+Yh&H=0pJS;rP$ zrD*%isB!FpV8fYUAnb*~uwi}27GA#>Hi;bqHW_6&B@9HxwOr3~5WehTsmJSoPJ#A* z+3Q3OftloNT&D-a7W=`@?3o-8`Ii*(*`5_QzN_fs5a8$I%iRTO3yl;p89+uc&CEMu?FoGFs${cm|?Jm+^`#Xs)7JK(mPE8k*~9meAZl zBi_;zgYWBn1Pm^#{PJW@CNh~;hPRWdOa^V@&c!j5YOM*&O^}M? z?8@iBz&$JM9aN88{}?< YPvsL_pLw{VFUUEPgXLdA&Xa=jAGCxQ$N&HU diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc index 741c1a7437450c70bc0666c677151c053c71d9c6..40078522e1e2fc0736f1a16d6e6ae606103213d2 100644 GIT binary patch delta 20 acmZ3lvtEb$G%qg~0}#}8KH12vA_f3G2?de> delta 20 acmZ3lvtEb$G%qg~0}z~b*|(8fMGOEu)&+I| diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-38.pyc deleted file mode 100644 index 8b6134986ed06d2e8ab9de96ea6b43d26a7b9ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3342 zcmb7HOK;mo5GEyBl4Z$O{7PB`4G%^E0j*fLhZcrm)RB>(K%5wH9)%!)Tx(Yn9lp9t z*_9FGlAQ7bdg{SF`dakY@Y+-ULND#ilA`EH@`HxftKsbK_susuyLwrzmKAtD{>{54 z^!~vw*++vfKPieTwxB~5syd3Rwp11SIVac3(LB|hysNb|Re7w?Ia>Ij&;rxm=UdS4 zsjULd9V+$WC!DpeMhnFA{E&pU?}?|M)Y!Om;E=HEb9c|?V)tRQgU;C}h4B|ynbK0J z0!yo{JkuyZ_(P={o%^7@S6g$br9g|)0$>uK5}lWpVrnVV1!*azmI|#(%Y15Cq)XCL zPAxThM_LwA%Q9V&mP%?_rEAhsrRzZdZZx+~I?oQt@4&dM!!u&6Q=79+=yRJ19YUao zeWttUtNQ`t5Gb#wi=haa+t45Rj^m#S>C+q7lz1Jcce(HC)@~3uOs9Tl;4&|cuUu!l zABKV0G7QR2n1fR`2)Z^pzH2!45hr|T5Z>wAC(O7s+<0U=Y@c|f$8buc>BDM4I3SLE zb0{$#aKFci>jKKh0Eiiq<}aY*h}5K|(GOi`$1)od;68Z+%m;$$epeE+0G~%(rf&yH zRzQdZptc*Mpe1R7Owe=3(uqgqY}N_m0&?pHgA>mkE5;G!MaUsR3!H@m?sYIVM-TSr z;M2sNune8I%DED%$GP)7RsV!PkT`dCv=tBC(kTf^D(p}XZASIbm+XKj|3+txUPHI6 zcgB-M0hG_~$Zeq?4uZhvp|O$BGd2>amUZ^k)k7|{=)MWVm`CxSiP143HfAzIl=DTT z1tjc8W%gSDZxGLg8fk(#-3x^;0l9xaHn-X@!7kd2o)X@E=CM5v`O)4>(o3{6y0>51 z0+K>M3P_&tMVxB@D$hL(YvTp;@c>`%B+JPMyfX$;m zH?nFQumgP22!>G=0h$<46Vjjt@I($8C4aUeQ>}67{e)_HaFwcInM2i3FR7L_OD)kS z9P~OGVp4LEigjzP?q4;>G&Y&8IsX4kn&e5zZFCoime3zt#F%(q!%M9bSjLKt=3C^>1emR@#SZOS} zGt|yf80|>dh^wi%83&HFVLC-A*_gnCNs6C&Oi;XD)>mVyqyvl~l(Gunr~)-{$aFz# zV?krD*-|dXQsP{wL6~Gb?He0TWR5)k$$b`IaX@EfDJA< zRj=h(+R()yd@_`rHkXkU$t#{Q6=E9KzP<&T%Oh!qmmil56q}+nyya=4l~WDVw%6gaV~ET zW>hpyh#;6t0msW@IE;7E3QDtz4IWQ?9h0ud$TXWmS6~+SKMHEHJ@+Gn3IH*VIgsn}cZqoT2hm;%774eDM11W zW&v6jM|Ni-w@owC>9o_^Op;c5^m~5|Ui*|k(1*OF-`OQWU8q=T@=$OHVh_&VzH`}g z4woh-3I?u^{w14VTriA(Q)B;Sqwy2NV9}rOzzxm?!Df=}`(e(DpGPxI4wU*e@zR-5GJf>A#68LhU=l5wxy4r4F&!*(=} zc5yarH~rOno{WS<+rH<;Yo9UAJb5qh;$|pYbH0pjy*`^{0>9mT2)691h`T;dEWaH; zMN^_F+YOpz|7D^vORyC25CfJS_5tGt7G%!%E=Fr%H{ed#4z`>X;dCQG4d?Ct9L4+H zcI>yrZ7D|2+y2UOuSa8_?1JJ44UG+S-+yO#-1bi1n1d3`3z#Dak80$Xg9AGD9*q<#n#$AvV_8E{u(vd*&my&33IlBf1Q# zy_@0I9s|wT&2F91^)7iBPy#Er(S~#&HRxh+LqNEwMZ+vfeb=bmaik@$#vl<4F0;aEm1LvBB+6 zEhV8$UqTu07Z7)f%V;5yxhf%WXJw0wL`Kdle$%O^`uEjz)$z4wAhm#vlF@Sqh(U&_ zSmxfk4*~m_Sj6g`=cw5nWg2AMQbZk`x`LRzAPSuW9FgdF65dHInb_|xq`TB(^f^LV zPF1ejjb!!NN{4kS&SMobooSz*VM7b@6eQG}Iy_CUFdVL&m8ZcZ&(Q5G-Ok~bdp4-Gxtu0=Y#$Np%(Z!hQ_mu-2T22+SB^Lif5vYD8bR}!IH+TY6$zQZhzTa;d*w$Yl_f@hfxxAzG0NhGFhme5YCO?8wC&LF?=I z<-epVnwoq=MXo3G%$j+Wj~(TdXYbDc^sP5e;Fc%J{`YZfgBgQw))UHU0&kSYPbwd& zxyY6Nm~cJdO3w^k>5%PsP-if}NN0M1YZqz{4mqzn(uL|tQarzDCz=Y7{NMkT6BTiz z`jD@VQjT=dwf&MFy2gC9-?^L_6QbYBEXb3O}M zwG~3P{$DjTEFz7RMw)m{UXb>+>8B5goF+TtX=eH#hR~nuqLV#>k3~ey>}I*G z5*Zb*^p?`Cq-Mqc3MWM*VD0Tr&OqWcXsK{?RnHr-~;Ei9*sY)rX9+;RKy<>cAd`j7)u{+2^?A||9Xi}J^E?Aue)o%Hu zHh+IYpC)Pf0Ev>?E=Fy?MDq-m`byVCkrG(JmDM{%A62XDMMTdij z`6PvZ2P8moH3jP`S0^C?U-Aq(7iT@50;^JRl}H^*>nbQCp?auOb*Bk^i($*6g$xN* zJF@)xFzF*x*ZCRJ_j-L%c1698;M;LkN0&OfUZk=V*Kg{aMWrk+VR2H$!D$gvr^BUT zNPOj1Gi790$nGSd4>Vhy0qU^DsE(muZm{ z?G6(frCViFCo!+ltAlb(r>%!N7obSl6BV@cKFVaGk>d^k=D|Ax`e}|sve34WEk+0J2dvyCg z-F`qfC63`H)DvZdauPR6Dk9>@Gke@*Qw4mBQ@O!Y|Cgv^^rqjo@oTI8ateKW1tfUR zwlg2L1!QGyh`yA_EC&~5y<_+)6a5GeI>U&q9h7JEfvqUYEy~}-*&SrmagJp6hYOFa zZF4uz&24LUY)`q+J;sc8jMt2x8TXBMVd}`kt@Fl4PA+q#$hx&{oHuq0JcAR>-nQ{S zNLI~Ir2j(@Ab_@jvJf;P-&?=0{&v{sZ<{h~DWkYbXHSK0PTzW(ejqB&f)LK2ihQ_i zyy~_c?o9o;VyW zkj#|$ldO1%ygHJk`H2lZX(!`Sc-*B*U3)dLsnM^XNP#MDLr8T%X5^31rFK?%Roa%@ z&mG7ZlPqdSSZb2RFv4q%s@%yc`u_vpi0U(jIZf%iSuih|MP{4R<{8`-PkD;8yxGMc zI?!@ScB=M+g6me46!o-vKD`Z9>IwW6WrT@^YO^FOgCX?)FiD_ko{S?Z1nJX70YVER svq9+{^Ni5-B!5F2+f7o*h)$!TNymHixUl|iq=gcqu3x6w61^@s6 diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc index 7359a7def65f34d52d54970002cd328e4bee5f67..bebd657590d55c8e0f9eb8509f1c139820e8a35e 100644 GIT binary patch delta 20 acmaFJ^pJ`BG%qg~0}#}8KH10}#s~mD+y%b? delta 20 acmaFJ^pJ`BG%qg~0}z~b*|(89j1d4nsRg3| diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-38.pyc deleted file mode 100644 index 6c3a7d2e600be29cb428d67f1d6c0c7b625ee103..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc index 0f9f8b4920d57ac2a386836d0b60f80442033846..66d2c2ceec5a44dcfa380b4e6293d10fd66922df 100644 GIT binary patch delta 20 acmX>teOj9PG%qg~0}#}8KH129fENHi{02J! delta 20 acmX>teOj9PG%qg~0}z~b*|(AV051SP$p#+) diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 1592cceca5f173291abcc2ceac3933c2479e4eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2987 zcmds3%WoS+9Nw27agw&6f=Y$ZATGFaoe~g-Kr7nxl`5oBoj!;xt=Btad&s_+nN4EL zMX0He;IC+p+>!WS_R5JfH!kqatnEJNfis)VbRIk3{vO}&8{c1DZCH4I{#6WqTehs< z_2lKp#pEkAc@rJA_AP2tC$eK_--+FQ*S4s;?@@2RLMyaNYeRRxO6#=p)Y`An722TH zr}loGuF_>%!)S>vb*$#8;2qDh8U)Yoco?%pNi+F=_B3AEB3zPy$Z?{AV>05yQG}*= zG9+0L9t1;1js#bVC4?uyQ=>F#mk3*`JUe6w6FmGE1`}kE3Szc{h~$!Kh#-o{0Z*tT z>43;|ppF8;j72gJM2p=tnS6b4!O6uV0LK!jPvFk-}lK74g0Z#N76FyKS}ru^^%(>=4|$ zCIX%e^6=opGI@I=MtXC0BS+whAizq(QP0=$=ZRFHnz7=Ds}bq-5T~&}TVGVh<;#>E z_Ifi)!vO!ys2j78kdacE+*n&10yOWp;oMp_tFjk^K!hWH$ks~3+7q6A#D>GmbLfls zX6eU9m}X<4D{g~q&WB|E(xuNYu3uVT*AxNk7uFKRg1Cj4GjjF*-tD{hI&EXu21jX$6=R?{i!9VNiTt-D3-+E_8Ub$3!-Z-4S>`%-ZR zBvB#{RW2A+>{u0U#Ey$<$-81{k(toZV6(@?|8=xYG`WjzvNE-wSySt|{m|-Io~7)A zhPY!}`p;+_^zE@@Tgsc-s&e9p>#91nr;Zuf)IG7E*iWo)ti*X_Q4gwCncOn2ZnI{g@H_9s(A$w$OU8uRR~U){G$|9dVu(p!4fv?YuZKQ9viY_;4v}z3=khT zp$@}b3nqzksYo9LCI-8t6Ik9NNvbrbqd>}?X02!pnet2YVrg%ju^U39qBx)NtnGuj zG!^YRKiURM=r|P(4k-XdfmwJ8=k$uq`v$n_7M}L7sJuAwizVK|!M}dm-00qyOvo;y zkk0Pigk2ZlTK9Sy8rx-eSENG`#4$45eZVEuhICX;c?x2!uXlH^-rMW=4_UtpE$y=8 z&_BX>oApIaM`-dCI?HqH75kL4VxP6^&Q9p+ zwb`RzT(ILuOeWW+j{HnnQ(JT4#1-e1ePU(rE9b;|?1DM&)S9}_!H=o?%zJKW4$W2_ zz538fu7Fb&aO#H{r(Ehq)wuT91E=cX)DoC9Q4Mg)Gb7xfuW-r%r>c`b4X17zaYtHB zA|sC6_j+Yg=OoirSeAfRnqF@)UTDYG0Lzfv0gp5_p+Q5WMKcj%M-CzRl;}N@_P=GJ zA|HdI<Vh~Lg!y-i4awE zMIGyiLC%E!K~#M3#`;*mi?jORitbi*rwP`q6xDg5EnX~YvxpbVxLu>!q&%+6#ng;= zTaUCE>uB;_bXMK5J^LIO+i=b-SR3MZ)8f%%-8RvrMo+ZEY)Ub93O`7|o-n4i0zeZ8>eVT^8 zUpPE1iK8i0Ec?(PA@Q>cTdU@sGMbp;2<~{_H(xL9(C9CH(R^Dcuc&_+r!ty3T&CAQh00ecNPd0M@V*&s(tp&gU delta 20 acmeBV>ty3T&CAQh00d`U_HE?;#{>W~dIh8a diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-38.pyc deleted file mode 100644 index 985f8df4565d3e5ebeb5fbbfa1ffa38cedc7d648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmZ8ePjAyO6t~lim1sjk+7TgNE77#dfkTB5qn*THY}K+ds3N6q{FZu4?8tUIvI7@R z@G0QPoo~V|S5Es1oN%&rLOjdQ@2~xPKTo!|J!IwUPjyByLceS0Uuj$Ch245=6+=_R zFmp0I#rAAvPTrcfFuK|S{LO_H;PZ{o_&dhv6p6I&x8xerJx+~awZj-&5F`2q#)h=?zY*? zzv&nxvM3c#7iK_)Ym)^1{?l&I4+1hTiCF*{-=ZJ}X#Rv~0J1wdd3AIg`pv_Gj3*#8 z49LrHbdx{WAMPE7dkq8zhVo4N-nFF)9d>Z#*27#|T2W`S+Kgi+lQ^zgy42H01uy(~ z1%gTC-;JN-EaL){V_Pa0K5|pJRHdux;TtIDk}9?@3@EiM%nzjQ+p0$W`7#_t6Aem7 zz%HqZjs%PpUqLjI$+BTK8Y`J9n&(`k(L1h}G$Wx|GA=C-K@g31k59t*6y^~viU`Ci zzO?oMpGTS-=oU1&peg9c!tUL|?yX_>*1u*4soKwS$(9*BugBI~R=HjqZ#fR$!4L3X Dew?{S diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc index 442a3f536e67768a2b27615bb45c62c1a1a2f774..7ce1d18dcb476593ac62f11b2c91737da5f9d0f2 100644 GIT binary patch delta 22 ccmbPnfpNwKM()$Ryj%=GP}linBR6jb097&u=>Px# delta 22 ccmbPnfpNwKM()$Ryj%=GaMoqtMsD5=095}5%>V!Z diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-38.pyc deleted file mode 100644 index 5c0601d44c80c8923fb4d89736850a38dc6af873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15516 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc index dc00f105b674bd8145589ab4fdc34172158ed38e..66f20a80c24a639ad10bacbe7f78553893f0bc88 100644 GIT binary patch delta 20 acmaDW@>YcVG%qg~0}#}8KH12f#03CDO$HDE delta 20 acmaDW@>YcVG%qg~0}z~b*|(89i3l5Z}E&_W9z3lBP+WmU6Td@~??;Ls8ubQIb|5RcTZ=AYF`{^UcP&=Kh$y zb5dI_FMw3>AyD%eiATNxFNlwDuRP@|majZR!zQ0fpgQA&i1LMG$Ke>k{WA&P!}aT#(q5ctql& z#G?|AN&J??7gh+o4dZYTCg2iG!W3L?8MX=~n1(BG72bhs@Ge-W)8IW@XE~-a?R#a7 ze6w6v?7VHDN7tD?Ndz0qOXllvgP~^wo$yG9_dg-F{_W3O`7L8hNB?sr5ru`P--Hi- zAa(&hgc#OS1MMsYbCqP+8CT_CCmvHte7$D z{^rv!9zUrq%A=~j=dv(nRqONGT4sOrAR;uf&P@%(tv>?v2aQqn8jzI$)^ z?!9t3NOjI)me^|fqaf9qkq-zffvxX2UMSSJ1KWrbCj@jG#pNI^bV6X<_dq` zyodNskQ&i`W)fP*-Ah%BJk?vAu`tbbneRsjc#Pj+X+CgTc#%%3xm_nrwH9}}_DECS zh5XhoWCAh_^^(UfX8MfHHiw^dm_3@|0rSu#`SpWcFJZ^mFr|CyO)ofJL3E6{OQ*QI^Ze%hhUqGiE%lGdOT~{c*_FxVO*h zYmwWL`BLBD5r!B9Uf8OC<;5Mxw`xfTya->rQmJp;fAX}}_?k8APP<)a;eO))@guKU zkJ0a2ZM;mpuejd!+DnanhVQ|bhPk*jNUgPjqR90IF2 zWuy}b64ECn(x+2{n5Qsmei02^SZ5WxAW0j0tea{Hd!D?BpHJbA)R1!B4W~T!1VM|uQ2Kbwp!}%d`2pp2BB9!}VdPQ4&t~l~*L8pqI!YrDCrF zs@VHN;QwNH203JSd4?hXzZiZ20~!7}!%+Aa2I-x+Md=+%eL6(wwVCN*b>JntmXmc33u|u)YdDSqW;sd1y=Et2akZK?5Ydz5y$gUN6ivs^ zRFYdL=j4t#0WDGE=ge8QG^F|O;y%A=UUJN59HQbekx%ig^KpF3UxCgS5Ip~_(%cl>|knCXPEhb;{oYZtd0LYDG%qg~0}#}8KH129fCm6Svj#Q* delta 20 acmX>td0LYDG%qg~0}z~b*|(AV01p5^fCd@> diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-38.pyc deleted file mode 100644 index a190636f1c26e310215505a19c3e02fb92facd0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2676 zcmaJ?&2Jk;6rb6(*Nz*9^3fK`hvopHmQp7&QiZIlv?M95C~j4!AVo%-_0HJYu-%+9=dAHUywkE+!Qf%e01 zviDPokiT#--wLp}30-{*11CF#SGdF7W4c3mfftX-j`JDe9xojeUOIAiTv(O)60DYl zd*tpEIBk>KxykPp25mU*4@9C>y%)t=NVE6dVyl?VFH$~=1=D+hX3=063v&(Df^pFc zMzLmAMBScmhUsuDqyC<5vW?l4HP+X!U2Uv48mv1ucOT^MGcAI_DpNwRTaUKy+<(}v zn`fJG6pBQNCi}F#Y5(85yRp@3Z?Rq~;b|R2v8q>Ep$qPqwIWQ=Pq?Svhv6CNQBJvY zTz=wC=_dJlX#GU+V-h8Cc&PcI=(0eIoI%UCd7>`+yun3$K zbiom6FSl30e{(HhN=vY!&hGYDEWQnl+rGr5{087h#x^U&!}lN}oGhfQ~za!q_G!v{j>- zXCJFMS;@})%(FV5(5z@wJ|TZU+h}&c1yXec2YoyD6R{~li_T^mj!e`$4`kYx!C(+2 z{mz$>8U-k*Gq2ymm(d2s9DcH93-bUWa;jz|vtLzv%-x*Y}nyE+WQZ-Ty1onbUw z^T9nlm1{E~uH`5ijx*0UZhs9;Gd9!7yJp9?XH@-qoQ6THZq)5b349^7qC|(xOjOc? zm0ZFB;b6{41c)rdkX08XF2k0>ec~-UWx7n|IhcnOck+gFd}jl?VlZg%`99T7k7{>H zI6ZP;4anlo&%if>t3OSsH$|ArKm%+Ii^4QH5K=1^u-+&Mb(8{55(HZw{$|rs33+-` z8PZw9jWpZ^=CL?E6fz8yxS~YdTeZjorWh;&u7)UB)taZ5@FH?Y>+w*mvV$NV33xca zv3L&8jw2BRWam!T&6`(hMr2m;{eejizF%`CdN3>bK2Jm6&&o5)YQ?O860)-IC&56# zzm?m$)wfOR$x3}7v({2pK?I~E7rXF?B7D-bnyuE4d~`&O^(P@@K~G7UVgom>btW7Ao!M) zsXTGzn{dNY4cT`_6Nzs(P-d<~HCLi%Lf@)+@;u%$;92(l$Bkz#@fi3lY0sa zc>(^`P&hIjkWehUX7A-lz>=_t1VDky3s5|Z9B=?%k2{D4`6?Wp{9yuls|%zGLY+q) zLe8;_EruMcMIK}e1#@*qgIUlSa2-o$FCN#~HcZY4ImL{*9gK832y_Iw4yurqu9(V^ z2;~8a(HtCs+zXE?HUz-hvJ+{Gx7I>V!>C~B4d7N`f;kN{nYyf@YC=A9_T7u*h(4vd zuwR@)HJ#EQsjV$FwkE5Lj2U(cCbT1+M{M>l4E1ctf{0~Sl*78*#O zyYmIpqTMluS#G@z=g(?`e%nG}2G-8x!Wk_rya7e0=$7xG7|d{1^#3Cp!FLViV@U#J vdj+TL8A#TkpckzitWYNN8PJ=*b9$b-E-PQRY5E2d+(;~(t5nP9SE~O3vU85d diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc index f7ba08f4294a7dcc6ecd79199e29ce98fbefa1a1..4e4c1dcdea987d4a23558224e59dc0a6f056a8bf 100644 GIT binary patch delta 20 acmZosX;I-m&CAQh00ecNPd0M@6a)Y_ECu`k delta 20 acmZosX;I-m&CAQh00d`U_HE?;DF^^I`32wr diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-38.pyc deleted file mode 100644 index 0f344eb1eb151e5458963f415a9dfbad0404ced4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3044 zcmZuzO>f&a7?$MEI7!!a-AC6Qh#b}$NZcZaVF-$$ZQ5?dinM5w4iJpVv`9N@WJx2b zWC^le(o?Y?(HwW*c|Szgo%$Dc+VfJD?RJ$Rnxsg+FQ4~$A98W7ltrrf9u#{MPr5Xp6=x z^qzZuTX?%pcj@%+4#Sh3j3+WNx;IMIgc~E3?f(6LPsjG(=UTGaP!`5q>t6Y3D@?N! z6^#$f7Td0>Z1eW*Z#Fh>Z*H>T2{Q+hJ)0V2M)Juz(^9f~`+Gk;eZJeX7PjIjl!=yG z?Edb9^81s=+YfhkACg@rq~TEvn{R=Hv(t5pm9aFzFiqni%?#QfQ(K#pSO&wBAmI~P zEIq0=7rHcU`cR#a-NvgwLt&gV$GGR7x?;RD=iJ>z8(6tJ-CEI!bd+erlTa2lZIq&! zFxRlA{&Z9u?SEfyZ}s=JRJt$4F<1SkiF}}R5pPf%R-qx6|ZEDx(=^COwo11AquW z8lb_iX3C(anTgT_gThc|MvASHSc8FucrdU_5o!0pBily{Vl(G+mq4*1A2mlNwq|5Km=q+#|BirtC?Dc=33~qmrwG!6=X8 zMaN_uYfJN4B*?`yH(74r(Hf0kV`55%br$txxfE@SvoM`xu{3a6#-oieO+fYpK2;NX z*m|VVlsdU#*a1J9`^XbGJ{rl;*hJCkWFb>Eo9}wWV=cSY4oqZXxv+)DBUWvT!IV)s z;HAX115x9K>4P+nfs`x}GwBSdklPsA36;|erf=Ms*_BC{3WVxi(_`dHvd$*CHa4CK ztHv?PpCtXpBSfZbE%mx_ech~E4&i$=^sT1IKU$k-?gEN-{;dXtld6mS|8r2%;o1 zL2wT(eHn%0UU4tscg5{^O_Zls=2B1%R+lg?B%{?sbvk6W@oG{;fg`2s@vG>Zh5NZQ zxw15zY8vn$>sAUOBbH2It`v^x=?G3jTGDVTog^QF0ar*TqAk>r3t`v5@q%u9_JD;c zj_--&32CH|8IBLl(sy%Uu3RLCRv3{*l=hVY5?g2pQi&8djzDU1Glz7|c14cAFF}^{ zlo|(S63=fDa{;sn+BkGQbrpCOHTeF1bS}*gctE9}5V#ig_URY%sJuHUtYK93P@ST& zjaPq-0_=3um&SbqUcYoMkO9}6Gi1PTXum-QoFN}5aHr?9{gs9QiPaaK<|>4Wt`qV& zrWGIJE$`9<$$hh zBh_7|Od(wkf}#@ylT_rmbp^#r5d4CB&Gbtv2yhgjyKXOIEgna>Me1USc1B&=U(HLk zhF>@+)u(VkeNM$!RM5?8p`aAC_ls+&*z9b(_3QN-e)YQ7UhZ_dON!AT8c%v2Kq diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc index ca665a4726c46329480809332769e39d6ffb3238..2ff30c40e87506827e966ab80c9513314a2c0038 100644 GIT binary patch delta 22 ccmaE|n(4`EChpU`yj%=GP}linBlpdz09~aBG5`Po delta 22 ccmaE|n(4`EChpU`yj%=GaMoqtM(&$a0bOzk761SM diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-38.pyc deleted file mode 100644 index 4d3f24b7294b7299d52fcce75e9929d8edf74816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24507 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc index 8a49501866c2014bac46e783ff16e8006bb6f3e0..df297635c6484b421cda874824f5abf7ce0b384f 100644 GIT binary patch delta 20 acmbQEFh_y=G%qg~0}#}8KH11EC;$LBTLn7+ delta 20 acmbQEFh_y=G%qg~0}z~b*|(8fPyhfpCD+yo@<@6D33WTWU3^Ee-G-h1;telz!H zXB!OPU;e4LS(CAU)8Oo9VeosjECi9P$0U~`M<=(!(@!6N_-9;mOISd9W&eXE|Y4=XKe)sd$wN7`< zm?c&22O)I6gzH(S&5Nqa27ap0YYvhqO5#+j?cfQDDf~4VWAaRSv`Vnh(4O z-k&_rTktkF2XN=_Mh(N>r5Jm}^u_+K^%&QOPb*b&Q#`uCV7UNACdD_fY6h#yscG zFq&s$#I4Jov8;zV?2)#td@HUnSv{bL)}|aecqY5Q8?t>1%^tHmZ1dOq6-cg3*8V!S zj;wLzm~-}x9^0?`;IRykt-l-F`d>zyErrqI%(L94^{F#}j^kX6uR>@QCzXE2Y`)BJu7vTFEu#tvkqkmW#@AbaxaQvoSW zIXjgyl>@Iu3J0|~Lh(avhD0qhKw9`<SRXCOHLrBcx|He)>S6+@~D32XEfFuc}8KFH4d zpnj9?hbO6C`HTdTWSd;@;s18Qbc6l{nBTIEqLWc`L15dv`+!y?8yrDthRaV(?4xVW z(u4*k`kl5YF1(?&uqi@qp?^wT4iV$0*UtI?b6=p9mUHpyoI#XJgd`?iTIc``_!ZPW z(T8M!=$NcCV%uDkL*b>$cA#q^JU{ zfyD;#G}%;C%W}{ciH97IO|{8YTQm}I_fuc1xR@D)Nv0-)dJ?M=WeZy?u#?F}wY&?9 znaTdXR*#@yw2ce0Je#F|MS6Zt#3f>KjZC8)%)SO;qA6@)bB8xYi`(K7+$qp(n&)O7 zD^1?ST8mf9HLC^wDtD{~zx+xF@uO|el`}%{_b}7?(acr^Z}8SD?6SlU#w8}|19HXm zqdqxe6)hvP0A&PlxCD?v2pU0a34m>}_n%Ynp%MAU9tq0kVwZEQej@}SwkYh~g$ zH&4n3ksFNwQdVt1P&rqrzd+n;G>}@3?R@fI#7fF4 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc index 3128c390477ca18f806cdb1b07314dfaaf2f71cf..defb3691aa713c12b493709f2ffc7954524ca845 100644 GIT binary patch delta 20 acmdn5x?h$1G%qg~0}#}8KH12ti3TtL delta 20 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 XW7(8tW(Tr8xs$np{#^D|v}XSszD4{^ diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc index 27695fc8af43ae4dbe9a65e6f09e7488b85ce698..1248f86b1c4aad4e6c3b4532b9d7a5b7bdd0e113 100644 GIT binary patch delta 22 ccmcb;g6Z}OChpU`yj%=GP}linBX__Q09vdEkN^Mx delta 22 ccmcb;g6Z}OChpU`yj%=GaMoqtM(%(q09ttmbN~PV diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index e8ad27a86bf4580fbe6a837413725d934a0ee070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23497 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 OO&#kRHxmH=<^KY<$JlxR diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc index 57ce040ce8b099c9c055dbc05ce20edc18342e8e..f4f8517fed4c1c406096f30c5c50467f66a34945 100644 GIT binary patch delta 20 acmdmKw$qIJG%qg~0}#}8KH12vCk+5V1_j9g delta 20 acmdmKw$qIJG%qg~0}z~b*|(8fPZ|I}(*>;n diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index ea994df034e2d3df99f995a588a95f161aff07df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4349 zcma)9%X1US8Si=MVfnc{3^uUokR`iHKu``LRSuN`8`w>SHN-Xxt5RwhPq*x`M>C>( zgpo?3DwxV4hs`CY98z%1J@?#lNaZh>YfgL3F_+En>yd34Oe&-5o>ouy*WJJG@%#GG zJ*Pis;C|YI*($bIKp0I)w8|7RXCn@ zce5qqRM(n`YWZm@l{Wn^-+wCR!^7bOemJ3)e_0HYc2|X)Tj?TS-f!}SYu9dES-7^a zz&E-)-IDx3Kq~##Wv->Aj>Ai|q8KOb-Wm8(oj&W%Eb7A;D{gky$G{LEro+I-I7nvr*!U!w#>h zl9rhfShVlqLsnQoSw_*P9p_i^xz;oAj6fq_AQx|qH3jDP_(nG_}q^=QmZNYLI+S}W>qJ1!?>AbmY0nk$T8~4 zt5Y;`4An&xJ%Nfj6BhkutSRe==@#*g$})=HKy?7ZLZd)O8aM-Y;PzSH*(s`W9|jCa zYJkKV!U14xK(TfR#yr4q2L;S2Y!@(Vsb3h5STcrg_io=$lATT)z#MF!;))-IK0<YZ*t%NdLI%vd>HH0kJHdk<^P1p4`Da_NZ>mTs@}(OG6J+g(bypc z0DehTZF3Msb^zNdBAP%CSt)6!VG`@(fKnxly-9~OK2{)9Cai3Fxueshb#I@90vkj2 zADTjJZm{_$8ol+94V*ky?%97hHE>g_@4m6$!r1m~i#=vPWxr;t>l*>sz7b zEtzg5g3A|e8KinRfJaFHl?$$9>0xhvUFqzsk9FZRkI5azPKt?vi#t;kFTS+GpwD@zWx>!cZ zW+&piVY+36g>k!+UdH#p?`VK@2xxvF&E>OBh|o!x;S{P9$AFDXbnzr-P$OehEvp}J zCgNRqA(gnx+bY?JWD7)WSeB$70d07WT8*}@aWG#9DHa#`LT$lpF0<7}?*jZ0dkF=< zq=#VTP6>LyqO8!%lobO9#f=4qcl@BIdbCTgI6y zU&tVHNr>_6tn^^*F3HHo?!E}5@$G6UEAQt&^~r;N6beNqPW%~- zVGL!dMX>>F`vs^eC#C|ZseqpAgCenXzqn_si^!~8M2lN#0htzYw%d2+SRQMMh=ycz z@!3pTH0*tOQ0kYqOOV4yk^ciT^Kl?<39ICPUvh`VU#& zJB-)+!3Ux^i8XGDP`*+fQw|^-;YJF!-b8}WepcKTR6BXxhAL< zvT@JvfKg1o+vB&XjnEh%CGHM=@X-8q?Fipc21R9=mRUkYsZHN{YuH%bKqiL;hgqG2 zHWC?d32X;;1ismGEb!18n1E89SJ)us=qn~cQ?n2^%s?^+DR!QmQJR*O^f2R|x{bU$ z+~}mzxLwuFTrHz!o`w)u$H9pMd&897^L~p#nuIa{N&Z7W*Xo@a0i`xF9(iL{_KdT7 z9^D0onZ1`yc-}MQ;iOo6!G%F20j>x?po)SB1AB>=H3&v(xqJ3PPc znbbF%J9b1T4Wm5BxlyQ7bM+aqc}j)z6o+yUMWM-p zViE~-WW`wS(i_-{Fu;`~D|XrfR6PQlL6NY_$~SW%zo1lJ-$3P7@~jc+L)fF*wQOd8 dXCoB4j%%08t<&Zw1c) delta 20 acmZ3axJZ%vG%qg~0}z~b*|(8&IWywM>pspsH}c8O&ejTk z-~C%ho3E^_{7Rk0->c|+hJVw>L#&8Zu_hW~T{OjpxFI&hOJYmh6x(7)+!8N~SH!Nk z{r&A=MZDTsY29fxt2c{roXX6ac9iRsTPw9`4+dc_h~{6c1ijg%d-y**lD+N?X2MzVS{mBq}-8P}4PMhZ3b2IYjrZErBCp|H{p-34 z+%THY{>J+KPfWqHPy2mldF){fIC2^&w5;WK*+}!E0C1;cLS5El4(v4Di{3G8ztdr1 z!i{k-9w5Nd65=V={m>XU)@ONPRi2Sq%VDa+N#p2jABopcI@FtRrT6FC*Nt(Rhl#b< zjQqBgStv~nC9FLGze*s0Na0nF+ACAZ|c0=zMhuo%9az$<`Sk)n$j0L-WyO!&f11 zF$C3T&%}W<$gwT5+Mv{NN`R@eLzVgUq&HEc3qF+| zEQ8u*6t&r@)R7FWvui&u#%|&%H>hMPgC|c^sB@D?_T94<`#RTx-m}yGr_tsz4jKpn z2)2Q?HyVxV*Jq6Ov0^d!a;QSsq(I%wm&v*PsF|qNuvT6bQY*5RCvEnSheMXAOtL(3 zuwa*@3KSnFeVVcU2ui#)*5Uw(cFi6@?*}mSW zzPJ!Is|*aTM9GsG6i{|t@-0mTT#{0pk=+0LN5ReRywhp~Hy6jYpn=H~iFuO-9zG|2 zzV10k;tw8mj-W5qz8Q<(b+Pma@zn=gyzeJXPhnV49|Bh&s|zxQ^`|=dlQ5Yab8T~X zA**+>$Teu^IM05{_o=L zh?v4^Y{-oS86vE{?d|>Gy1k%$+@Ew_XhnD6h;DZTHB=+Ns@=LByzIX;{7RrC*xgGD zx=PCh(V>c-65TqatLA*l&KJ1&&AZ#U8qIsRo?5*7Wf4Cmx^+x-e!gVq5omedz2j<^ zFM4z7E^1PjzJ%tY?K8We)pqAHo{!y`!U)Mcm(IX77ri;1IK$g~4AZ^yW}-(3#MZ&% zvy%ti?!&W=3&s5L+dua|?maR1w(ChT;=1=Zlb>sKDSMw!>rL-e=b-Ks#1{9yQijN| zV@siOcK?I>_j{)g&bpoRujQbJaQ0+&c|JlLpE*6FtbBiZVd)jBxOaYu5}xaOQ)ajq l&Au(~o#O+jpnFC!o@{=S=AumGr}X(?-oj&T^$-94`#Y9cHmCpq diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc index 34098bd38a4cb09f8298c3c6c9d5a31376954eb9..e42e12f75efe3d3dd424b3f80b98b8cda2340afc 100644 GIT binary patch delta 20 acmeBG>{aAG&CAQh00ecNPd0Kl2><{$Ck2oI delta 20 acmeBG>{aAG&CAQh00d`U_HE>D5&!@;^aXSP diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-38.pyc deleted file mode 100644 index d5ae49a67f6d6184974f98cb0f598e4a0319e765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3097 zcma)8O>Y~=8Qw20DT;Q425@5_2nJ{ihk!yEO5hZ#Q^bW&|{B1?xB}lTA-&Md+PJfE-BS@fi5w_nRn*>dft!S zXSZ%OEj+*dqa6RUWm(_S=H}yJ^D%~cfQegOi`(3Z?U~bcY+AdqJM+38*51VK)_!8~ z8uz}&PB>q=U7!0WR=d9ZbCcnjFD5gQXw?~~au#YWr0NWZqm&DC{N?|An&$lQkgl=~ zbEhO9jMDi+Mw6*NU`OjE+rNMR!F&7n_xIUw!SqzHr0Rj2uP;9#}wV(ZD;32a&up@U(X#z8vQ z#T$o*N3e8rVMHu99|xO{G1Lz+39D-ZScltPmpfgLyMWT^)+QFd0wuo!*o2(zI8Xk}REse-Tx zi!{YSiYjcU(@0&%l1)R!l9Z`zK2N1KkPpMr#YCoA!eMQkN|=k~FqIsMv&+C>9?R&P3@LQwycVOtE)GXVPKw>HP4p&3KyJ(;G7?y}$yh zBFWCk)jkQ{HEOSs0TY0vYu6Z&*E&UN!0j>~WC(GWDR(M{0Ub3> zuac56Wbi9h^Ke8_Of-AH&rey|Y^UUNROEXQ&D8b2KPzDv?n0$GivT+zI0Y#Nl8$37mys9YV z9Bx1!>83E6#JH}LSHrmxw9yW`)>_MCDg3gl6n@zUVYA`7%yZoTkdTIl2!nu~Ybtyg$H={D9Lx9gJB z6pbK=l1K-EbZJ`)=qmo`Ug4VvtD+Um!V3|UyS7t!O2p%$UZ$Y>y(Mph_g~)}9rT_l zRCG`9t5EhnPsC#xU5ei0bd;IbMenIhCo-JPkRQFDM^qokkc>wuy8Qlr@9Cp2PEUeg zh+!|B&wC=d46d;LEE@Jyq{Vwk@r!UGRBs;5_kv52@Ko-t8`a*XZq#0hYX>irIt+Us zLz#D@eVcxcZ!h0^rLlL`F#Ja#YT%@CL=wKilw0T4W2^t0p0l!7=<}Yna#vpNaObWi zALK4~%k>@WL!59g_r7bH^BT^Naqb&>eM4`6J_dcu(3>0jHt1i1-ZJ!C72VCfu>%{B z2oJ62z6tN`;{stb?QOY@0ziBH=zBj<{bl29&+PhzH%w!`bkBzUrFXVB>=%BdL%bwG ziVP|07h7n~LdH=dK+Oy_>m$@P6Ld-NwQCaJ6;P)2VlD~~3}ZSEr7m0q!(>4@y@7jj z8`F<4)H|3gAm6}m$IP_4@pG4N|5rS2WZZ~SbNy^#(ZDb<`3Dvh6SmhQrm7k+T&fSZ;e3IABy;be`2cUQtj{Ifr<|anZcXL<%nr`LZ zT?<_GRl~@1U)1tCZZ*d4%Tk}ea`W2CGaP^Tzc|RkKN)FWWw9myV)nK5Uj5bh@i#;D zjUQCZ_2Z>qcDd!w8NCTUqCz#zzb|)y#2VZ`ZXFF=UxsnFK?}+NdB?~EEfexBl6jXV z>IK(XQ0$a-8Dxn_$R2)-bG47jvVFTr!|`m-X<ZBe7JRO1T5uvD~96}{ju|>WT zNtxDRa#%9hdc!T_pviD*(%->QL~7XH+a4V7oJOPZ<}n)V_dzY*L9^;q%?cgq)$iuA r3*UY1rA$Y0*_L50J|)nkN#pBGDH;z;Pk&4=5=GJWwp(_~@!fv|N>^sM diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc index 616a66e2f4d37924edcb253d530edfd7747da180..6fd37f961eb7d15b26a3ea1bc4f8a9aeeb7ca9ab 100644 GIT binary patch delta 20 acmeCS?6%}S&CAQh00ecNPd0Kl$N&I3Lj}eF delta 20 acmeCS?6%}S&CAQh00d`U_HE>DkO2TX5Cy6L diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-38.pyc deleted file mode 100644 index 8b6aba10d6349fc80eb2937f60f1aab80bbd362e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 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 E0j@%?G5`Po diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc index 2a41d11c3193424ad9c5fe71d28f140d98f163a4..ebe2f7d5855e680b872a03a1f343878a553d597d 100644 GIT binary patch delta 22 ccmX?inep6ZM()$Ryj%=GP}linBlqD<0AIQY5&!@I delta 22 ccmX?inep6ZM()$Ryj%=GaMoqtM()Fz0AGg(_5c6? diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-38.pyc deleted file mode 100644 index 5ad71e7db48018a32d4e670867041d0da5bafa74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17580 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 A9{>OV diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc index 0e015accf00c436db835d94ba5f565d0df54a918..fc28f1e165212b086ef709de98c825f8bd901ddf 100644 GIT binary patch delta 20 acmcbke@CDDG%qg~0}#}8KH129Q5*n8eg>cb delta 20 acmcbke@CDDG%qg~0}z~b*|(AVqBsCWO9q4h diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-38.pyc deleted file mode 100644 index b107eb769c5328f5f88edce28f7fd142dc1328a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4488 zcma)9O>Er873M#=tCj5dN4AvMW}H8-kjRD*B&eFCb|n8bj-*<0j1t>WT+Vn!iMw16 zxppM1dWh2=f}*+gP!yCj0c1sVA@)~paBy+h#&-M$< z;})xMYx@{l)$QY~%I)nFXxrN-*#zh`tAU^ysgy~T`R4srtCOyRA0w6#4wU zOthn-;3A(-M6AYs`rTJm4PG0{`+XuAwN)(oOT(tWaOu)J zZ!KI}Sn!*>ezC>xOs%>cr7frztp-m2xJU7(Gd&L|}ol%hNP_ zC|*=uF-t>4>c%r;Zcel zp6RAIr{3>9(?8fV-n&@0rI{lA>>OLCD^0xQB=SC7TD`S;JN)>{nzZ-sC23l>q#b7| zHj!2E&kAWqj6uBD{8|$~AeCP&EjI4tK$!+-4~M*NYxYGT_I;LSya9?Tz*DE^juXZnwcZ55k9N-%6T|9Lew&cIghbPTuGy z-HYJ^-eH-zI7GRNz^VbtT?ER_cXwq4?~;29_T@f^rq^^!_Xc-$_%>_$EZQ|)T!BnX zg5wvZ!DT!-5v~O~Dv`nTz+^^XG0>I~*ezruvj~j?m!Y2E?Jlobn1p!j-KTL`(g}KVtz|H$T-idi$g6{^9b(2skFLqNNGJY?=P~Y_1yx7W6 zBr=|N-YD?)qt0%z1vmS7m&XbGoF~vi$Sk;@ZYBx^xiLUA>-b7DfLDpE zc8er~RZ$%CZo%1N$=+>f8{z;hii$ux;d?4bda5Fl8%xzc_Oh`+t&NqJ-x60QrEQt2tr3IX0{Aw zJVH|M7=0}?`-C?Z)1DaJw+oawo1_~#b5hKk8K;XY-n{z z>%P->hPv?0xqT$d$O>0{-Zvh*g@<|WQ0kGg@c!qRhwqEOjU-fmFgiutzC~-fuiEsj zk>{meefkY9U_PM}(5&<)}_-ALdBCazP*&bw(+h>y`$=>N5+!V^rCfSmP2 z%*Be5EC@`b{UD;_!}q}oOiY#*<>T{FJQJ3sC+q1haO~$1`#-4ITZ7o!3{f1!Ud=%4&m;D(_yr>86fQ-)j3xC+ z8j&mza~(1N<48vJ2Qi-|?jYu~!#(yRtVR%))jfp_;>W~LKtW+v;T0Ry8Ux*Y-(e%u@E2PO&fb>4n^j9T`Tno!Z@ljVJNF%*v?oF zr8|_hFuacw&|t(3Lzcy0Tf~rVlqONmb6FvXP&G>7nM&$%p}}Yshu2dcFK7w$GvMjg z2|DpuhUa;fH?vZIU3?0@Jd0D*{NNOY)6(<*iX}SFey5Py8G`Ue5HblWEW#l|nI;H) z1fh?hQ@)^6zMxaSocT^|y&_3V@P`kgG=&e`HNm?gi>0+eJI=aG|9b9+W!aV9wO&V6 zds$hb;!S^V(q2lV9PYaM8J$#64rFDS$M`*<-#+h?NF-4+<`m?e_ZiH`Psg|BknVq2FGK(TzW?P+dnf+` DUonqI diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc index 66bd929ca17f6652a3fa8bc2f6d4f203c1556bd6..c39407f04c7b610bb0f589c1c84f9bdde8ce5dd3 100644 GIT binary patch delta 22 ccmbO`hjH#4M()$Ryj%=GP}linBe#$r08Rr2b^rhX delta 22 ccmbO`hjH#4M()$Ryj%=GaMoqtMs6WL08P*aS^xk5 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-38.pyc deleted file mode 100644 index bdc2e13ea95de5ae1dbc7ee0f137825c4ee21616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13856 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 rJnv>V20*n+Kz%gCDK#{i diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc index 01e525199aef5ba925382ba909c0ec19314ad499..7c56f326a924f4169e9d7b52903fbb230b960f00 100644 GIT binary patch delta 20 acmeA->o?;*&CAQh00ecNPd0M1NCN;lb_GiS delta 20 acmeA->o?;*&CAQh00d`U_HE>5kp=)cLj^AY diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-38.pyc deleted file mode 100644 index d5ea82ca670d6aab266293b002979f2f16ac9e8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4804 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 d&ZY9fd4)p-F zI3?DaODhf>IB?;@p_LF4ocU|^ia78u^niFX>qH@~V5~R$_BS8<=KX$e{BUuxj-Y+_ zyBPjlMd%Oxa`G0dzOk1gNAh}k3T+uUK!Q_Ng=dho17mhWcG5xbnpk;@nF;A3i4O20uN^v1u8BIp%n2NngX6AhJ z->q&Y-8@=PU?;Mpw;<&nB%P>iqFUv=c9>>|A{sqbZL)dfl8yEC4=-=5Z)}jkAyJPx z*_p>h6sO}4h~%7HfB4|jd-r=S^SO2$g*=hGO+M*umE(7BZ{FDM-7w#0T+t|&t@>Y( zHq^vL?Kr+-*#!5wIo~n*60c6(RXWbDyu_WUvl^=_p{3W(oAzz6O)#k`%h7X`;};lm ziKpa-3~9#6DxnD@of9c2Khx3?C_xh$Q^lKB;VAyKDqKYeG5-~b8f^IT$IW*Cp#%c@ zoIRnUe=p%%B0Avxtu&k%lKML$9SJ%fN6D!FD3TKzlb)KeD1`)WZ1i`o-+#~xzTksC z&9XjE4uU7(-;D-+87Y1_qv0MMaoNwJY%Mt82}{M=kpR|!wz&Y-P6(it9Tv;noGy?V z42pxegsiJ_hw#4D`w@-(fa$MxfIX@;&AGJ zR#+9DpjyajUFd92_fBYwsB{k~CsfYmRpyq2DdR12Tal0^T003Da3bJzTyO@9fD_Vt zbZf4^R*M`!j-xc8jB(a(la1EL<}1@isoHW|-!)nA7fvK2#1PX_^T2VzJ_D1#K&Q|y z&e0I(_?>KLrt>Y)9%7=p|$Z5OC;!!%CCbh#tp zcw{&-uU9X=dr4mGPAi=?4R;G?kj89kcLv?5(^(sI3olX>3J;*jKvB1-O?0B;DB*xk z3_9sH9iizjszDGXkqUyslj<<$vT)6_=@pLT@vx|*nF1;RH{^;p^(vS{g(_^I&{Rg* z>7o;FK=(eFd=EN=mn_d(!VdhZ_zc*qzv(+W`YJkA?X9D@Lanl+rmIjhYHIv9aDXeD z0WZ1r95L$!u$p6F^DAJ}oq4$nnZUY4tFtdVeg;IZLzCo z=FWKpD=V|A-Y>7@_6o|YD@gBK&Y#)2J9Es6pZ;%!iOJS$4Xe(!Xh6iklTzKO+gXE0 z(<$610xDmeg`vXBC{%?q)!M9yWx)J}vZm6B2sw~3QNt+aekG<-9njdXYDXPr9QY|8 zfKIqyH!KeLC`$aQ@n7YtI8)vz!6e~{u2FUsz9=t3hcsnY-D=>vp=`-=@De@?zE^tI z^wMi-JH6v}v!*qc&@l&%)q`N1vPrD{MiA`7^*A4?1OZD!fE^7K6%a9%pvIa$u7;#h zmbd`1osgUsgfP0(GI<+J>LgdO<7ve?R`uL=vnuqFiVJY5w&s^AT$-omn$so$_p5eFsTRs8es)p5q}4gZ=Gz4fh{ziZvww diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc index b2b189dbe3998ed063dc8c1008bdee1c54a9a60d..fb6addbded5c711c6a34e39fee514e6f2d976d08 100644 GIT binary patch delta 20 acmbPfFw=nhG%qg~0}#}8KH134CjkIDD+O8r delta 20 acmbPfFw=nhG%qg~0}z~b*|(9KPXYir_ys-y diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-38.pyc deleted file mode 100644 index 809fe25f5bdcc65f9f5fe340ad5b557c9fbe7b58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4160 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc index 553e3e709f8050621676aeb62b9718ec3388f777..01f143f8db442dd979c73b06b9dad95115bd293a 100644 GIT binary patch delta 20 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 nw^obIL0-mj{88q?M_rZXeZ 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc index 225faa3a84135d1c12b8448244f6eab9ccbd2f7a..41a591d95700e5d7fc5a0cd9dbf3af46c2216411 100644 GIT binary patch delta 22 ccmdmWmTA{nChpU`yj%=GP}linBlr4c09)1w2><{9 delta 22 ccmdmWmTA{nChpU`yj%=GaMoqtM(*{?09&I6?EnA( diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-38.pyc deleted file mode 100644 index 93204be55b29588b0e93321ad3b7a44d24820cce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31199 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 YZV1BA>cb7g?f19e2wy+^H@2t#4~09Y1poj5 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc index 2dec5f61b4f1c734084d95ecfc4a66cd4169267c..1474293f712f87757762adf1d1e6405ffa3e2f2b 100644 GIT binary patch delta 20 acmeBH?pEeL&CAQh00ecNPd0Kl2m$~%AO(*A delta 20 acmeBH?pEeL&CAQh00d`U_HE>D5Ci}=?FDlH diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 03ec896d430c08da801f5f533d7fa6b5e4abc5fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3197 zcmcImy>}bO5x+Zp3Is_}GDS+Vm`h^IhC+fgqd3XM&o4Ad%X*KZ`2>B~4D#+RFbm+q z!!5kGM;iCQ6j3Tysq#{!u*>u*Q@e8EdRtfd7t%PhA15+?YIAtlot>GTot^#7?mV5J zZ#ejU@lQVZ-Mr&`rv{h5cX04q{HK4#2ApFDT<~Id>>YcqqDygUTs|%%U4{x&p$2uh z0u7jhCd|VEEW%Y-f@^RcUV~-00V}WyH{llChS%W^tig}KhabaF;HU5gya{*VE&RO= zEw~3igLT+|Hf+KcyaU_t^S^H$SKvPU;?K@;72btkVqb$_b)43(^M5sb{3g@km?k1^ zr(zn@RP+A$zh6T$cUdAxl%#$yi(;`6CBB)_HsYYqCQ}{_MFEP`Oq5FNGGe2I=p zKMjI?)fv{xfJZcecp3yBTFMCS6@qZc$u#Ygm|mznC|K4=pT&$1vN#BKEoB7PNhY#! z5(GQCx6EwHQu)*WJDemfO}v%vs!4Y@CAv()P- z6r_k7N(H%O>6Ve2m}%jK7uTcYWWw;I9wsM8%!YY6r%5m4i27qgm{o2Ld3M@kp9jGM zLtL1-^+VC6<(C1$n8gHB*$~FsGE1m&>Enc6SXzmrcsgMU*at`*A!YOz6ULEwh^;kn z!BEqwMbT@+5gw6($Ai&Jv#l*zvp0&Y=sQH#i|YX|BztdMTokfiTnMsiZU9*|NiQop z&t<*HZCSI)ENeD>Wz{6Ctl1ouWtEk(YEn^FP4-EzcP2}iU(!2GWksiuEMeNnicS_; zRtb{NTg-37Di88zF;sh$^#bs+qTwv-1*&Du!dNyh16P(6O!I}8;M-7k^2Lj>UPhJ> zeX@bTv6zz;4WfKbch(mr7erf-RRbhhv)IX-77}KG`C??u*DNOTI-%j#hB zIn`z%vj9(d=a z%^Y#|*NV`fu|5&N@EiEE|seNcbsIsNAEbDu@#4w)6HYE%eosj0XIoa4Hu+2C6OywHUF8#lSxt9-y`V{AD-jK20f4 zyA;j{@2cyBkDqkH=d{-)lS!8* zr{NjW2T`w^;zPJG!6%UnY1*Aclg;oHiw(v%i$mDdzNDMD;UvQCwkK1$g!?m3n{@Ug`3O|8~GYX6^#Trk>DHSel{E|NkA6z?Cf6t`D a`|9#Y|A0-o(R7;?jQIca_igolef7VKCJPAw diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc index 6c2f5af1099ce265563f0b28e40d07459c703a37..341a1f1672b8e2b010dc62d516d156da28267995 100644 GIT binary patch delta 20 acmbPaH_49sG%qg~0}#}8KH134E)M`Z5(Q`g delta 20 acmbPaH_49sG%qg~0}z~b*|(9KT^;~B-vvwn diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index d1cdd13729bac87c8a11753746f8811efb7b0b13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7788 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-38.pyc deleted file mode 100644 index 9ffca4712ca1dff4a34f5d0545a62c9e7d8c5622..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7205 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc index 397aa62ac0d44cb250b2bab825b43d4f1d93fcfe..0311735f75a56075e55f683dcbe8e57286b50982 100644 GIT binary patch delta 20 acmbQ3IWd#_G%qg~0}#}8KH13KW&!|03kFaC delta 20 acmbQ3IWd#_G%qg~0}z~b*|(9q%>)2J*akEJ diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-38.pyc deleted file mode 100644 index 6696f669fb9a42c08839ddb5b2bd489fede458dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10101 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc index f20a4b3b3d17d2c3bd0c39c9fc2e48f0d16422b4..132727e277f07856911dda062a51c0a5c53c140b 100644 GIT binary patch delta 34 ocmaF9THyI=0q)bhyj%=GP}ljSk-L?fv6Y*tm794hH_IJS0L9b_ApigX delta 34 ocmaF9THyI=0q)bhyj%=GaMopCBX=t|V=FgPD>w62Zk9Wu0K`!W1poj5 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-38.pyc deleted file mode 100644 index 8f292adb9b48f61d12969d89900ca30e49c1e8e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178271 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 M?O`Hab^7=J15XlX<^TWy diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc index 6ed76f5841eb19f0aac5e84466ae06701464663c..886aef27464cd6e1ab28768dd82aa5f38c1bd7cb 100644 GIT binary patch delta 20 acmaEx`ZksOG%qg~0}#}8KH13q$Or&W*#}wx delta 20 acmaEx`ZksOG%qg~0}z~b*|(AVkr4n-rUyO% diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-38.pyc deleted file mode 100644 index 47c9dd04ba8584406170ab1c0e7b9691f14dcc47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9195 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc index a3583d198a827b6d8c1ff392f338a2444b645e86..8e53292a542f0d462f280a8d3ace2b68a1a6aee7 100644 GIT binary patch delta 22 ccmZ4Rn`yysChpU`yj%=GP}linBlpz30A7&@E&u=k delta 22 ccmZ4Rn`yysChpU`yj%=GaMoqtM((M50bX7R5&!@I diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-38.pyc deleted file mode 100644 index a991779d5579cefb804f0a727c27afb187eaec5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35365 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc index 11409a0e37b2e62dc6fed455e1a78cb597174df0..6970bb0ce19f11b1024b5459a577920c949aa421 100644 GIT binary patch delta 22 ccmaFa#q_d^iTgA!FBbz4)O9}D$Q{=T09a)QZvX%Q delta 22 ccmaFa#q_d^iTgA!FBbz4oORi^kvpyx09Y~yQvd(} diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-38.pyc deleted file mode 100644 index 44206323f953ddf861f2e7ce9019b5e839027d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24896 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 NP5hD({WZ$w{{hr{OmqMM diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc index 650e1f8511343b83391c4f7a293326ad60fa710f..324ad65ff21d11956ac12a4f105bb874e5dddeea 100644 GIT binary patch delta 22 ccmX@##(2Jsk^3|+FBbz4)O9}D$nD|`08<18)c^nh delta 22 ccmX@##(2Jsk^3|+FBbz4oORi^k=w-?08-Hgxc~qF diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-38.pyc deleted file mode 100644 index 33a51a56c5e8d69a040bc333e9c8ad40d61d0e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12160 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 M$*4gb>WR|-0+*zMng9R* diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc index 111f68c5c0a1dc6bd7cbf48cc5af370414796e48..014fd53237dd2b8ccf75ed30087d0105876862a1 100644 GIT binary patch delta 20 acmZ3TzB--zG%qg~0}#}8KH12&G7#|AmUP(n%*pcEQxFc0%+O$v#D1UlSKGSkkuPCA3(wwY1umexsIQtD|E(pdfe zb9SYbc2}Zwx|;i+?>z1~=YO8Z)y|rlkb>U>ukpU6S18I^$`t>6$h70JL#m>fim4`* zZc4SJI;eGPDq&C3GwAL14*I%%gZ^&6s@$lUUek9-F@2+2cfj&me#>VCtze(lq!4OS z2sJ6)RcPrq185mQ%MfxwvkJK?D>UlquC}TN!UHt}wIZz>sGY9}6e*w>)zn+nu?D1b zkTxQni*z2+`A8QaZ9=*b=|xBvAq^v4OzA)k(b&ZTM+9CXaGk(9=p|@-Dbl4#FGIQv z>E))nU5SRyk(9cks$1R1l39!Q8A;oUdR*^jW@laBj-gD_a(z2fES-u|)8e0oOgkQX z5s0O9tESSenX0KBQo22+$MhnF05Oc;ZHOg}+;BW;*mj1eGZxPd$LamTk1#!*cf5tJ zCQIw9+g7jc+1jyf$M)E5R&S4y$@EyMJ+ZyOn^|v<&9YWY#)$7W5|-VQVVRY&Jyyz0 z^Oc$5jKOVmxN<1P;%U=r%?#5-S&C(2u`1%z52C1kHK^t;DwR)bp>5nl?eae_QnF?$ zvy&i)VY|D7Jd%a5M%DY3tcntKRO4&1+I>nN)M0uK1rI9&P>88~6&AZe8AVIp&hT!` zJE9Eu2K@UyBObKz?hf$Y5#@;QuyPdr40uO8Ytf3*CKA1`3qofp7)mM*Pn!6V>WG^w z@z^@Zh;rA0{nP{IGXld%D5IX;!CMtoxf>>eo-|&IW?lKz4J53rk)K>G4%1%OI`Qr~ zntwFldb7hB%MJ7!HjVFkjMOk0)*w&EVq%WMmN+Ra>g5z>Tu-`pfX^Wmq<6^lG*Z%$m;1n9kGYJN00X#+=#>S>}I_$&Gn>_N({m4TI`G!XMHTL+gT2Gv#C~e zv1^x+%s{WZb~Wp}cBO^}^GK8yvPQ~8Wd?6%joze%CawALi>9SBTQ{vfma;Qx6+hkX9Bc=CRdY&na zH$*W+bhNr9OX1ko!M&lclDTHx9*XzthP`G@NVFp1<-66tq~AGFM&&Eo_O-RGZfn*l zz1oU4m)08j+P=OrwX53Nnx_@tB}dKA-r$y=wED6wI?0u@M1Qu0rQ%62vBzqKQuDJW z*{#^u93{bKxn*R*s9{r)zAxG;yX?^O8W5I1a)ASn2+`<+L&+?ITp;6qi?ghe zid)ow8Y+6sM8U8)gzuPLad1(3+ipc zmSes$svT9)`trL&a&wXOW&IT5N7W5*J-AM=i|ZIi`aDImbL05&xj<892A5K3cH8lY zSd^gf9Nw?WCF5c3Ztr&43-$q?ct1a`@d(wyCy@``xt z;a1kw;&E5weEQt#ONPA~z1kFk70ru)8&tgry1JTMJmX}i$d1HH%dOBV#c@+Tf+a1h z4S1kiFX@ODv)t#5WKvJ1Q!RV@u_LgtBPfnoGC;uAC1+SiUGG4er8ubu3}W30Fzk%* z7H>fj7YoVMfbNDSgH#9F*z~UA$;~TfX0pj=;$k^*A;M#?l|@9IjJZ=e;H?-M3)D&^ zu3zpPc^hTGhIqd+8-5v-Z$Rq;3k}6A$m-8D{VRkLu%+XeyU7wP`>8nKS7I&`(--em zp1zkBj!i|Aj}%XyDodtLiW2riE<_Olk2+uMWOLC8iQ`oE)pCI#8fEuP*)i;_9g_D0N+G+VH7ks>k;_%LHX*}AFC$3Y2?7x4*^NLarwcPnvG zY2sKKjjT>9!yY5aOr4q7a$~_paGrdnS z^>^PK8o}$%LFXRlUT4%fnlH&2I8vYtoZCul|3z|p!EfD^u28GF2Kb_j4Y>!YhLY>_8p~Opz&QX|c zk=lnQ*2mAN|K7AYTxsc%r|+pE@&L+4W83oFm4D_SQG5_~ZY zdNC2&rf?m^jqH@WYq5RXOh^8@SjUj zR?x&*b@I-}s>0n1-Noc@W<fOWgX2TZUNP0&+J9N9oY% zkeJ_x(5;I&Gl`8ejuSd|aD(a8#2KovOQs{3EzdvabO>D-Nr_54sAd$emD2?v%3D@V94$Kwr(k(r%*){1S1@!`J9h-hIfz3lu8XfHSjI73 zzZ~x{>TQY!fQ%2UTTFvnt@ z-Sq#-(fUdpt*^`xJ4hVeqJ3J9);}_hqnpcdv=oKy)X)T(t|MB->CT4kYUqxJ?q=vt zhVEj_dWv8awJ1taRH8^k(T5_AshgLWmzqn>%MwfTcDxLBd^sF@d2W8G9pA_;Yj>`7 zx*3b&N+PkN8e8vyOs)q3&Jf-!agOi-i4PHefUwFQltm9w(NT$?A^i6e|AO$i#Ft~? zV^@ISwcnA+E=n}kM>PWyD_E!4To9BmAiP*&o$&P%ZzQ}$;;n>lBdoGJWOAoW?xI9v zF(hoi#0Lq#Ch>O(|AoXqB>XoLzeo6QCH^Vlk0kz>@Og>CGhhgvpJMcXzd9yDl)lzj1XH++ID{Czn}6= z=q`?D%8%kuJ06>kATwKVBAB=d%2mLxZy|h6=>q=fDOvtJZ~%nb{2F-h6M-{G*as5-LmEbX z76fe~9|Jdl05=l;qQvclH%d%jo7j8LX`;{Pfv@_W!0kxb;*$dFNZ8R+0-r#_#(pl_ z|BBjtqRpz%Kwd7VNii!x%ILG48~r;6_oX_9MM@o0?Nl8XU)5u)D89X!UMqktZV-8K zU2kHOj68j;6j$~pF7j!MY*shsXxDd_ln(jb_no1gPrX6N4K6PQQxyeWkux5QD z<3_?r8O`Eqc$1Meb|aU+L7!!#d1(p5^i`|O&Pp#e+QL*@#XNE?(^(P4mH5E^3ihb5 zck-5qJ1%w|$ZW3c6TSW%uTI@w-GY)5-wmL!otid-Ow}u~Ik|Kv0(md3f|rJ%wd&l` z85k}|yfpq5YAUnMI*8RrLEwy!BRO}3u*&{hCYf=OQ%?vl+xjXzYa0j}C~&aZ#1kw` z;A3K&VpoZ0{F-k=afz(xo~j*>jcLp%E86BHs`B!xhP=X%SIvy_D%fOhRjG~St+lei z_*P7aJxS8h_?HQf3(S5&5pG;YxYMhFFMuF2S&$%mN{UgDVl+vN2@<2mR0>ua1uK=! z`7|Oe%pMDkV$TC95h;b5U-Ip!>WWr>nv>EJH05NnLKouAvZsk)!N>j?ZEgBQim}zO z770YcdL)UvwNrBOvHPc^UYbGXkGL z!hR_6UlIO|#7D>=-X??4*t>*(B=KJo{%eVULimitF5$lena$h$lI<{#9X3VMvW8K- z4*dtGJH`^F;eDyJNRiU$L$Rqr5uV)K(pZG=Yq=fMwIG)UeDN#u<&8cYO6}+?@N%@0 zin{Pch+@I?Tdi`3T@O0Cl$h7>LQv(mA}L|cgTi(^LPDh$S!S)7SIX{=euI@>Vo+%% zKFHH+p~p2Kz}FGJ6J$1>da2W8#MG4I`)xC_b{T3*Su?!}Pu{6~a4J7^87Sve9o*=} zX1e5TC(CDGkp44-T?7IKFD5)Lv4Vw<9RQh)S-%{jnb^%o7u+M_@3;K+at!}p7l|_W z7aOf!ZtX2)UY5_m{KGgxuph~D#A(7mllUXT=OteJ8{jX1KtR_JUQ1YI>tskXz+1L(EcD=sDQ@X)ySG1{I5Wxr8VcQK28vBOi?YJ1I=mv2K-W7L&;<}9A zL|Hl^i*v0wpNS2;So%aLb^S7?iO|EzNrmBZk~pWClv`GLJ1X|zvB_@{w1dI%us7nz zs_Mtzibzdleq>ps(W^CjP!^2TiZ`Om`JHI*R^dA|&!*G(*C~p7t{?yBgzY#dg>pJd za2TH=uJ>IJ{`*DpCs=Ez3R<`2;;$3hMr1pYP7v3#e#=(D!+8WN<^AVBIQ0G-@4x!~ z3m-i2{&B(ldHA^Uk0)RG@X`B(M9w!LfBMbSCx3kK^vTn2;qT;+zjpeB5ZQTJP)Mi_z@6-=Yy>aTzQ!fkQh~CdU{oZS59zOE|=;LQzJWt;J;bYH!_~gs~^5VC}Fdu&Z z>3@3VvGZY6oW1v@v-iG3bo2pPaL;$n-h2PqdmcP{&x`ynv=HzA+api@?Dbdv_0iXa zGDOkX8;8bDJ~nppX`ztw3($1z*mGmg-Zysa^|50wj2(M>?AT*t$4-nrd$63g+~8XI zZ(8d}z&4JuSZcy*qo=lUk*D^y$N}Yc{1Xi8?b)KG?-JM-5mJkUFB+b|(#+I}R2}!g{Rw$Z*M2e1L31UQ2KM?4_V7dVe zxI44#nFWdEZdJ;lP0|$|eDKXx0jhGrA-9yPa!*xmsmgUOIV2ZelT%bFGv9l&zaaG+ zR~G1=?wS61{rY=9{rdX!bj85$SO1{besjVw{+%l0zXB=?NXd)BFr*ik!MfEe}2ATUAc;x0#7=HSSlFhxpqwm|;dfgBhN|42MxWERUde z1hpfm&B~*w9Yt*xwP)oVYIEx7j)3!LYu#9~RY4U&Oi7yO4b+`s z-8yebd#MaoGmDAcD1*WG43w)Vm;2>uSplh2S1>t+v!NmljN!aGX# zYt#8OZH)oqD4-P%epH@9x`>oWWL?oUHjSG_{aPw^O(}LQ)NOuSNQ-HyixxZPj@Whf zj6Hi#5a6!ny~^mdm{zDo*W9s$5gksaq{$-`x?&H#ehzM8?bc%Fg}c4^yFC~GVL~~r zDDa~wPTf`I##>73P)Zeb4n?t>w1W+5boV*kt5^Iu*(w|qTOI$2f{GcUg%sY^QCQp=a(pxsnank-+@@w)b#O^~nd4pg{_yo zEfvXFztq}p`8vUXFSXOKG2hzGY!8$l0YwS)hhdl%Ve_AfeCB`5$F^gOil~{LBa=9r zr+$G+efmEt+ei$8Dhgd=7n>-tW!Nlp@!G!7G{?TFkK&Qp#1&>no*k!`&iRJlT$TQX z@1yo#NJeMwz{Gr{J4x6fEoC+0AhQ9~^{l8> z+Sbtoqln%j67SMw6uP1Z0qtVzEaN6Plo}8_fzqpy4dI*ZnqAn1W5#h@T`d&w6zA1p>!JUX5`)u(~U54eHXL=fv54l9i=F_ zk-FUoBbB&*;!?p)6kzJ7u}vO!j=T@#jw3L3kp-6n^slB?&OI=|l+{BRFK8$iD11;*}e=u;)7O*Xj zQa@MMD=X)(z4_LKl@&KR&AKgtu2xB^BoCAWidWS{59$T>qJIKIMV#LX)onLk<3%z( za>)F_l5&!O8HQ~>3-1A|(tPJyF*FLOO$K{7>^vAR-zE(N7>_8+M5S&5iYm$q8n#E) zEnUZZ{U`h}8G}2Ey#{(q)nl}sjEIBU(%C7Ybc%AIpa9!GYyKdN;(7Z41n`#R(M9iij9?mgv~^062I6H}RLz7o>18G3T3tvq|K*QA?y?}06F<#wNL8||pDmJ-AS%G}`B&)o~F4#3x z;LEF&rvebM@WvW<)|b$UUo$~4TNmlY1fV*52RkLPQ@mCZz z{B@3f5#fvbHhY=cr6HfAY>~2&XF75MU&n{PLSk+>LQ_3Jn)ngJ7m&V8+A7}Va4pUS zjoJ@>q}hgowuMS+^u4IOy$`$a`dw zvbi=8Fo$b)|6BPRirWa*`W)!hKc;NNu?18cNCW)1qlJG{fqEXpbo&C80?9iN_?xyq z1w90nFU`+za=qmc`TN%5Wf&ZrG$<78JUV8jR@}l-tf}8b4KEo=@1Q(JEa5Fi$`z_` zpin!{eJR1;LgMt>G%4wA{S;YCX?jM4=$!h}sdF)_=)a(mSiGj-xHTYba} zB#&s#3Jx|61=rstNG18H=Nh~Q8o*68j{8Z!*PxBNx=r3_s9isxGm9J3{=9)hN1(qGf}f>w&+Fs)=EJ5>r_b;WVxBZ#(bq~c~pzb0VB1nA$SV3eSs6_u$~ z(f9=IJ|5ZJx~)IPIGOWPwau|0{Rvg4ng~gGY3v~yv!Aacx5$%-%%(hY8)#cR?^o!U zkh@_B6Uu=+uFjFsa)#}m@Crz$^NJ|wLF?HSh{ix0gKlVLqI}FtfTd#+E$A$!ec#GO zbm%c0;4={kRg@F?YfO=!-N^2ZkvD8H!Eg)BhYY7J?#v7b+(S6xBZM8mbQ4Vfe$Mny zjOg^oMhf$>iNG@Q0-Ws2RNE{L_3-n&EJPXm%Oa~;FY#iuhqC^ZGSbYvR85|jzDn5& zWl!z_1TJ6RZ}2^#un_IR43=2rP|Wy3hi#wg4DmkD1o<+_9YP5)6e^8mz{-gw4ap?d zMZO1gR&Uz>LM%_0btByJ4Myi$x%n_BL@8)67Lb% zXKQ)`<@GZ4_)}yPKq2Z$UorLM)JSp3xG~!U)_0+ZQi$#xM7L+$g42Y!2aFEYxD3NX z0h%RX6|2o7*4 zJMJOw?IZrJ)w;UlX+K(5Ua*1K*58B3TrZi9I1H_Xli&v4U4tf}HD+b4`knLT(h>*1 zG76L|q@;#zyDxBX<3rp-9N-=Z9M5oZuxFqI{}MSCiK84m(fl%mPTk45uK5txCpg}f zcl*~0J7Nc#8O(5q8L|Rr?LSkoS?*#aIrW(drrujNdv>pYD~7_3u#H}^S4yWgtC(*( zt#wQ57@-S>O59X^X6_!^GkT?Nv0Fmy^LJfqcLt}cBFzEEZ!>+STiOxG@kUnX47B+d zS&mFu>p9d`9@;&ex9>W5qV1lQ_lyp+zf8AWp!5=G%~#RIcWmL|#R+r}n<(*_>QxjF zq@^xE1$m+-JW~&PlY$P%fE+A(K84r1X~AEGkwwYIpypy87Aa&F9D&SkX|;tYJWl#q ziQ^==%%GzoHjw-)oDXrzN%c*7C9+zW&_z?C0$d%yGLN86?(07y^{te{HVRhiEZR33 zek)O49@`|##|TPB=h*|Jk_10`jNioi=`F#Blr_732uTav6U|Wck0O6vB)ShG+~4^0 zbFs|i;e1I8If&`mA*9Ff{7*DALsWEL|2l*}ZICC3Cc>F$Qb#z5tDJ8jHci)%7yb=jSUVQ6x1IT~v#L?& z`Vq!uR)&GrX&g5aeU@fwQbr)o?9DjDeO?l4_{{mqgG@iJ?{wU5t!`^NBC>yp3p#bH zjUWN^8oJmtBs&aQ5gs{QHN8nqr;)+1vi=U~MT#u5;4X6%gS%_o_VGo9rpN%r7+Sn| zC|G6$iAo+qIPt~n{T&)5WCIMVS}Nl9t!O%yW8q%Tv{}L)ebF>5|flGCW~BFoBa?I_3*KtRok2=(9; zm0!#eY&ESFH?bR9uTizcRnlxTRDFfAA5!)s%3i1J3T5QxWVWQUY(RA~ZkfFbtTA^r zIp$2;*h+><5f_>H_2C5~Dj{q-SP}hI#Vq!-cG3~EGf2}&<=WBOTJv; K3iJ2X`TqrnMETGF diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-312.pyc index 26b7ebf216334cd67bcae6acbe9954e800cb91dc..583b64cbe245416763fe1aed10f9c6c46fee5c50 100644 GIT binary patch delta 22 ccmaEHk@3YvM()$Ryj%=GP}linBlq150AtArTL1t6 delta 22 ccmaEHk@3YvM()$Ryj%=GaMoqtM((>A0ArR2KL7v# diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 0e87b789e1e066441edff557143d3b3cfa51def4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16595 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc index 92169e2af5e32f93cfcc9072a40be5c93a28a19f..ece57b009fa4662d133879f6d1a870def68d5aa6 100644 GIT binary patch delta 20 acmbQhI)Rn@G%qg~0}#}8KH13K$^-y2p#@U_ delta 20 acmbQhI)Rn@G%qg~0}z~b*|(9ql?ebdZUr|0 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index bfe493fa8ed72a60ae003280f475554eec61aefc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmZvZ%We}f6ow~r$)pKkfhrKYS+L2XNyriqg0u^efL4T1X=KUr%yEOMZ`d=b+DBl; zYp~~OX3Glk1hC?`txy-W+yIPVf*^So&4@a(a#XvY&ixmaQGzxqB4RW z#ImR2GFC~MsI*K~R%WVS_ElcyYETY(5hUdfq>w=$au~o43^#c>gwZOR+_`vq?3lIO z`JypJ&7>^sxpn3;l0qCZg;JHYprn&heI^Q8ew$z5cmme zWkY>ip|zTOPhG1usvmr51;1tEB6~cYPv74f3sdlr+< zHrx{{>U(k=zsnJ!v?-~ diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc index c4131d2b3ce35a7b730634a4289740654f2182c4..869d688a0686dbd15a190a4136f5acf55f01dff1 100644 GIT binary patch delta 20 acmZ3;ypWmuG%qg~0}#}8KH11UjS&Dg00n^n delta 20 acmZ3;ypWmuG%qg~0}z~b*|(8<8Y2KT%>`uu diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-38.pyc deleted file mode 100644 index bd7b9d3da9aa2a44818257f677b7ce34b672f097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmYjL%T59@6rFY$Aw2$p?JNYs(io$WrBNcH$)rhBrUeUqrJWhVFR<}D-1{}Nb;U2Z z@(yv~N$$DlK693XK{o;%zx?_L`MW9p14D5O5hg%9$|8<9RwzRPZ848`i65RjaTc3C zsFrH!B#TkR@gho-6xHp*YNh1r1P`Le6rWi@HrIQ;O0$4u??pE8&B* zhDx)x9>H$ibJC4yB@DOTC(!wfd}IAgKOgs3WEtRy2)<{YJQ*?bvJzxw^HK{_1Tyz_ z4<2dhcT{4u_{`9hPmi&($c>*z1iCFj~R7*47?ltwdRySvozb4|&QTkjMN70s1ikf*1%8Adg18o8R|U&(T9tvJ5{Y zzz$Kx>aOZKzWRM<)t#A{qK4m}{iAIDs-kKCMi1k^3?4o}3jYU(`o2+nUg)>A@=IS}om#c5$Fq&V zkKE6qw&OeNuEd+Xvle!oXamK}X5jf{GtS*!x%Tm$mAKg0a2s28!)dkRk}3z?sMC$U z(9s<}Sh79e?#Q5FhYjg z`exJU8-K3r+Fk7(?Wfu;?Ps7hW}d0W`p%cxZq&T+{=Oa;T)z6EEyKE$epF6<%Py{np!Wuim_TYvs0m*Iiq6I-OP5-?n#9 z{;{{V8hVj?q2n~RK-F-y<8|J&w_RTZ^3BdJ2(;-oB6}kUw!$}Uuia@?I=gXkN8%%! z=08K!AyR4jye?1Re}gDI_z^(~&{vTLLDIb?CB6*!`7$VGayL>UoEWyh((lyn`zQ=}%z6lZmL3QrBB)Q_h5 z0aADpnX3^efs1r-5Oy2L%!mwjG#f8o0i8gcJHE5+cr9nG<@T=M^;#`!&9$WCg|4u? zrWI|t)|zT*H5}g$BB}@V0vS;YpIZ=7ErOsMhLsfbXgZXbYDB)i-q&n~)xKT@n5H7> zG+Y{D--t7z+iJ=e(QJ|i1sf>$BHN}#ht#8{_f8*NLuJsex}S~lk?*u!+m4I2-3~;z zMdgxh-vg$Sn!Ifbu#PP)bU8LE?*WltK97vhz=SX88J*u8AiRkt^b0LyVJqcROmDSQE0q}|sZ>3#Dt z_?U?eo(9PwL2qmFG#X&+Y}oC%l9wEplI>+ujhXhffcIb@n%(sO$6M0%ma9oo;ySI|hlO4)0ay-t~hES^a^Z@8`2U;rNF zcc=+(%Nr;WQbyZCZyHFcAJK(=Uw2!kKLVD2;)NlkPw&#io&>(tR#g_u5$h~i#Ic%? z%|u1wknb>qbiqF5gPcH+qAS8G{-l96DM4IyS zO(GsjdT(iLB}1ai3-m32HbKufQ9&Cpq9?s+AfK$^UG*o=pStIC(teT+!|T~wT>j))goK+u~8ZS>$rHCZH{|eSyzO+yic+!rzvS*lg^G z*o2a;LT4C380S&;Bx(Cb0R5Tkb_BLa62I?5^*7o=zKwD`1N%lgcG6mY5AP;6AU>5W z$sSF~mR;X>xreZTPqb_i0=H<$-$VHTMQKo`C{h1u6pgZ=X=X^%dsjg{UhimhYiGl2 zxu9XEBO&LAw#wA1d|g_q=0{M|7>wl#4I{@*qzGrYb%Xtop zM1KsJ!eAu$<_WTUnWPMbv!~h>`k8)q9d-T8mMJ&Ut3kc?O$PISR0G+D#tU7`@rA`0 zw49-lL3$@4_jO1R=_=+YU`qF1*A2<+NK}?ZjV<6i?6?iD>7m96(U){v5I5T{*Pmx7 z(@@ycptVinBtWB90NDbWG=}_jeB)bT(3K4gD_u94$SpVON*~j;V5SGHZsc0quwdz9 zuwi;?YW~D|z2j64t#%ipjf|>fRz059=)LEMo&f4b!l=Om8(vN3KumhG*mN)RWK~>{FTFeJX;h!KI zx0~QznIZ$HD&uBFR^%RN_w^dwIZ=Qan}^FaC5osmh?m%n(`!@W3_Eaottc#Z-SpbD zc$u9xy;c&hB<|Xbcr|g?X2omlu<5lq<*vawB$4}ieEbUOrNnX}MM~nrmAxNawg#dW zC?W~W`_Ecz2uo7fq16l|V3usF@FcvCK<+BZT5S*$4t`W7GEfR{A?s&^zEzN=NCSK6 zeK6%OH5+yuale+h4fd4a&W z+;QMyC9|_JyJd@%%;ao|RbX}oTf~O&1c)fZWnzJo{V8ppu&3%W{S9&Ifsd4b!G7zq zby*0H_!3?pvo~Bq>49m9oCoJ{Sbs`~sL_|f1>-u;QkB-l+e1ZZ-C~^+UaHe-p(-cm z*V%=}^=snv?bRPbt z_DjfIK*9J6;~rc%WE7m*vx-u4rc1m2l2&o%EI&?1ese6(e zIo;5D-@9@s*oU@HQat!ux>npc}u*nK>@Q8#(io zwWhQsF(jEG4W#fjWPNQ@+k+M)AGTK%`X`zSmavOO;Svh;7|waH+GQ(=@>ofjM%d5WoEmyP7Q7o4SW3KA;$vWj#3Ql?&EZHFc_TP5B^l3Y zYft_RGx;l;61h2=(K~m<;tuIO1!nr3L<=u(9tE{L0XTaw>&Q5B-USUlbR)|d31Q(P z!Y2^&BOy#y05q9kEU%H&AoMygoL#pyhCyJLOr{Xxd`PP0j@wzT54+nPT5U44F23{D z`x8pAJw?7Xf`RNG0fVU%H->{MZyng^4ObTbzg3xs%30#h0ep!8zPhX0?S6bY8g9&02wdOP5dNk6u+G~+i%O6n(#y>cL4MBW9X zfE0{EfwD3n#$c@fjhUcf4v@JiU6=~6)vbE{T!q~93!dK$>UBV%MJ^)?1vsS+{6K_4 zSWAPFNxbz?OjJSTf#vMGI}n8pggD8t2X~Kk>!tUB$ZTO6gTcsbQASn0ex9YRgBW2V zO$Ut*VhV5?VddLH)8SwuA14K-dff(KgB^PiGy)|-u1I#HjotI(0t1v)(O4(kQnmyG z%5qZuF}$p8&*4w&^)b+)XA;)zW|1HoZXWCuin zz>`qlH{-=&-EfB_VLYCjSUVV?hWBhl>?gs-I=x_yaHupP4F3S{{vJt5{COqujjwv| zT{+x@dD?7`<_!vZQXFP$O3vfF#AGWQkyQbgm@IPU6*J+LjPqZRoID5MKU7Mt>9 zUP#fNEJ>0;hx3N&mDmkY_j;Wl$5~*E)h1DW1IJCY;pDM0zYf4RVgzEXL}(rgq8)hF zc;|=?C~lhzdc0)Z}2|A40n!kBrEVh+~tYL4&>y@vAESK$bh1`QEhd33Q2S3v;Vd$3uAmoS+>m(#u)lHy*vDq`%$om$Z>ITu%Z0l} zPSI~|04qLogdQHyNNqQ%e)%b76T;2IyMIAS>-=|**zKo`b+lxAiq>EJt=1=DI24D> zRl}gigbn$BO6w0`cBJA@Ny4-d09g!)ceJpJUwwi+9}FyQLiHMD4az3)y@_}Kjx?#f zmybaB*BJ3=ls}{Xo(Af98c+ojGL4O-|JRy)us;J}e5=ZQ*!dy)JOwz`?d*Ti6@qV| z&r`iA-A*C4Z=}yteI2ITXPNKq!Rn+-fL^C;gR%)|Z{gklASrc?@Y9&Oe*Fk|rw4de zjotg(51-vp$LR)n0b{1(x9_Pd;rRrQn5Xa*RoDV8mtc}8Rhau`?k^A2Aj50$qjC=E zDiR;Ur@deJzJ~IBdw)6<2I_43+qULauTQe(hjdJ=O#TAl-8n9dEPq8w61s!%8J+8? zw-YFBqvEA;s)DY+eu_ECqos&Q!8S@v#B=CQARfA@d2|ec7`1#OGB(XeI6vIPsp1|E zB`BzHQH!#Va*wso|9dYhaM+F3xhUVyMTLG=WbPYu!b3;i(bRqI^U7WxUl;cZ$fx^- zs1(ig^Y_W=(s8m#J5*g&LOF$ zgqnYj77wYJLCt?g$1ny$BZ#sk6%%sn)5ib>D&kM&>aIG$PJrv-ZI6v!#0da-y4 zvpV7y*s*H7bo2VncfR|cedW%LA78VtT)z6F>(y)VvB6vQY~Q@R@{y!dfL_t_aoev# zSJb|MlADFD9KL&P5X#|;cX75uw;<&dO@gES6dhLQo+jcqeBi+M-(nMHu%!DI zd@D=7K_$AlQZA0&l_5GZmDD+c5sA3S3u4mZFrF_?#yJ%#$3;ejvL+=w1uDwKJMW{Q zAiTC5m!tF(2vMlvLoB)`!6#`v;jx_`QX(!~R2K*@0RrkQh;%&t(eXC+)+m{UY#}?J Qn=j1g=X1qUu~azuzfm{{y#N3J diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc index 715b5df5e21372406dc949a6437136e03fa9f154..c89be69689c9b2c20258cc53e2f75c2a6b381b84 100644 GIT binary patch delta 20 acmaFN@tA}AG%qg~0}#}8KH10}!2$q42L;ps delta 20 acmaFN@tA}AG%qg~0}z~b*|(89f&~CS)CITz diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 523e00a673cb350ab75b1db0d9d33c537d6664c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmZuv&2H2%5Vo_~pN4jY1meWO;|kvAc1b#F59@YWK{E zXW-Btd*{HjW3eG!}oRackNK|+c*{78FDLXR!K&IXIq>SDX*ZB6sg_tRps8rOTn9CHC+N#tUyYOD7WUzqkO1O-j8OyjXd1Xzi05=y=bc_LO z_dsUqTrzNC!2~c>RIXJj1E7-}0Sps!qtPW3(p>6t#tI|rTmfPW7x@GdOiGoK6?&FA zri;p0w;g>$4#;8Z<@yNG*vAE%C>*(>E|ByZYrP2$m&3o)9d()wtH9J2^KU|5RC9;( zTM{_GA-0FNwBq}x{b%tBC=0QYm%_%cOLbuNT*U__tqWB;h>xt9Sy2>NMf_GnEpj$- zwbX{~JlWZakM`aiPxz@yVo_DGD(CzX^;bHHK|A&M78c@4S7ScMij5st3uN~k`RAE2 z7cgEcV9e3bj&mfwx&P~cLuz&9un3oJc^>c~5kjqhJO7Z?#m$zi2dK1Uk*mOUuIW{X zq~V+p>*GgV+ri(oFMyxvTs2)U!TR`SaBg(z;r@`d()xJX;@(9CJd=cmbogV`Yxe=j4kL7zG_BMlnMsyeq GJ3j&LLFr@w diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc index c06f1572d81960352bcae131a50290b54c9a609b..5838444d606df90a2e635095d1aeb045e98f53b1 100644 GIT binary patch delta 20 acmaD+@S=eGG%qg~0}#}8KH10}YXJaHqXy>y delta 20 acmaD+@S=eGG%qg~0}z~b*|(89)&c-ea0bf& diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-38.pyc deleted file mode 100644 index 89117569806c67bc0943c2ef503ab706edd00689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9853 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 JxOupw{vV(xd}{yz diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc index 39916c971d7addbc058ff7724cdc1617c0d2350a..0b10265c1a6cb93547caf61283139a6262fded61 100644 GIT binary patch delta 20 acmeyN^+SvMG%qg~0}#}8KH12fD+&NeC>?udZjNr>CcTru*0P z<%tuv2H)@hEO#2GH0>Wa82oVd0sPgfp=nH`8q=8(=v0T+3=CmXQ`eZqN`WOxv;=*F zmJh~Ywj5MMl@96JrWT&DG;X(SxvFdU1DT<3w9xokV-;5YjYfyr5VN7J9gOo~Zoa7U zAznTL&9HV3)}G)aI|i)(W4@m2$D?fcc&sP++T^9zhOXs04_?9Uwcw-}r{lWD$JJlB z%}yNYzt#_Gne`KNV!)<<_HCNT*Yi_+f{n1zBlCM*U4Rv1!8_tKJq@}}AHVw=?MLs< zfOltsSL0`o^vu%JxtHJT@>Z_1@KI+cgLC3MJrC0Q@dY-{&!e@OEf?uUXeWY;;u5_C zJd2$Q-V=lpahYDu#_t4GF-a%I6?#RyPu~|G&=15_dR0u(DKSl_MV;2gHF^!Ksb=!0 zgI|alIwP*r>%yUqn5DB~j?Rf2^oE$H^WrAGnaRBiH+GBO5+BkJ#cg_9+@W{GNAx4{ zG5uIHXhVELKM{B7U2%`z%jC}l3*tV#FCNebVv#OpytBcl;vsz~mgrJ8J{K&DNAwZ+ zdGYu&{`j?i{DfaR(q6;)aQ(#vcAnp67udx=V9XfnTK$su1B8{m#(&x7DpBO|#>Ogn z=5I?+cI;pM+-JWP_7(BMd`XZmnIZeqPZAyyKP0Q2WG@P5$WA25UR!|ZHuu9_<=CHk z%5Rd-mN!USdAqz}+k}vXg$3e^IFbpGg*iR8B=`C}XO}0_Q+r7gtH$i?{{FrbXZtvj z+?}fTS2!y1lD2Z25#z|5pPTE=ZBONv5wxGgGTN1%5MUVzyl}S-22G*)(rHE^xRT(y z4cX?l?KlnrXI7uDZ@jfR_Bui2F))$&&1Aa8J2&o4z4U@MzcDpKU^rh4=LgIibSRG0 zfJf-rwjZK9vp54fn3s6>if#HH#?lXyY3U^VRgy8kLpuop8}rU2oV%E8kb+OhB$@_{ z$=tZfnOrWPnD0-_Pv-o?V!lv#XxkfmoJ7eUm-(Fw4)@F83?(P39plY$My?aZIr+AC zg^m~d-#X+`I|vAinr#6G>Lq>@+Iad2x!b$R{sPH82AhDea{Oq)vF%1PiaXNZ-Afu| zx><+2ym5zYcgW{F48aDn#{J~Lu^WNkhQ9ms~3F!gZS_ zswloPv=;my!e1?bs;+hnF!NeJgdQ_?^_Hp5Bmjho(bbLsz*~lNK*nSirf65&G7rr| z>#&qqUGqo>YGt%^q??+d<#Sz=m0E`S7WH&3R&JG4Q1mM;UA@Zsy8L@r&-Z2;tNzwF z`#&f+2f%{dM=nGU00aO`5O7v6rzI5! zev*zXD#azn_Og_bOwE9YY1xZ0eo_;%H62=h)#Ncsz^c(A;(DQ!juyK6jB`IVp+8p= z-V4~H1h|Dw>?O^;KWXwjIQ7Ht9yYeV1XI)&XZxPqdLHs6>A&P#OGN^zt<|@vxAm2; z+Fn4`lQ#1sNUr($t<}Y~jdgdEZ*PJ5TReQ}?n58y!j|$AejU=Q1u&_$Vn3b*lR_5B z*yYX14(mjC9n$pL3UD!q_F1$aI`yH{3VfBMrto4pff`4Fr1n=>De{0R zBVv0=T7^qPq*1AbJ&BQ8H_}ss8}$RBQV3^PpOXuyc)~4?e!#k~U_y-p(F_C5cSNrm zBf6yY%0K8Li9)jJLu~DM=%_9UB*>Y`dMBB1BydYh+qI35MgsCsE7%9JRH(3VTBR_I78y-szFt2lzX3^!0&=L*YaT2XliE~$jpzzs9LQiA~~h3`5*F1=z@}8rZxCrz*=4`7X%Oi2*sMfYj{F<>^e#lkAO| zxu1bc7Wr}v<|ILK1<7R~>A6f(FI1f@X5dkXP$s8Pz=Rk~D{y~alF0P@;KoHFWp79c zkK;PZPx#>rI6T0|B*I|82M4VU#=Jyaq?dk9(}1(rP+3hu&IEkN4)u_SG0uUSn5VXze zd(}}xH*^c$SjLZ4a~wd?GP2RXLF`}lumNSt(yJg-!xaFVHKS^R7SK?})~o_&OrNVw M!~Ya;YsR?wAMm|-K>z>% diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc index 6066d9d57287e875968a04a09559e88f9ff05f3e..4f9c158efa232b1d3f37c80a20b31b86fe5bd5b1 100644 GIT binary patch delta 20 acmey&@|lJEG%qg~0}#}8KH12f!2|$7^#%F> delta 20 acmey&@|lJEG%qg~0}z~b*|(89g9!jZ!Uf&{ diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-38.pyc deleted file mode 100644 index 6e6ab717d86bac5fbc042fe3c0cef99be7364b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmZ8f&2H2%5YBG*C!4YY!J$Wdq!MJSoKS^OtM*U{1gq{AB+HWJji-sVi5+ZbtIZ=I zcmpJ^a6^Kp*(1CFXHHBgtqNm#^vyROdp_G|<8c(Az5Qm-zjlJ)M;qKU4na`)> z+*oo_mqNR^xu1Jqx&6uHYH4giNS}i=sf(3q21%SejuX{=&<&dLGte4*PEJAjrny(b z!Sa%^EfE`=HPK-u(i}(Hl2-#>gJKR>?zLJ+*zjW#3Bz48Tc zzPZi01eaP>d1W*bL(XekAlT-71=d}%Sh1*8A(4+b7d1+>i0@ouD24i4Rj3rSYd0Tr zo?f+uVThqvV&ZdP+qV9=U+<3g*_p$W7|07@*-H(_R;_>?o3t)Ld&j2MWLA`=(iwZD zTrCPR^R-llBzsB1riZ8V8Gj86CaQ{oUhxaW&((rC<>3)t(o$sLSf#27YSPl!>qnT} ZP#IV2P57iVvM%6hzx@e!(e*n2kKc#GzJLG# diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc index 792bec4de5f0c107d733341c658d8b03c6253629..4df9bd27ba9e7fb5289836d53c8ea67006138e00 100644 GIT binary patch delta 20 acmbO%Fj;{6G%qg~0}#}8KH134!2tj?s|5G} delta 20 acmbO%Fj;{6G%qg~0}z~b*|(9Kg989Gcm&)4 diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-38.pyc deleted file mode 100644 index 9539bbd4a6634298e19d49dbf09aacbf4b631b51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1622 zcmZux&2k$>5T056vbJP97m83t&A|smflRqLsVE9z32;^7xFk6t%Ep`3PRp8jHM`8r zT1cgEfSfq-2+olUr@RGkuvbob1r8KFD=8#~*_y7No}TWW{=V6>TFoUmetD_JX^D_O z?c&XWHu5D-{S*Z!L&7O{B08kJz>ASHEes2k0KG2q(hE8)1(6( z9@@?yowq#w*h=Ne#~n`|%3CXgX0+lZ{3 zCji_kuPV!`oBUZJPR(ybS>FHk>ru-)(+H>sd=@D0o`jCV(!EX`Vs>e?hvd3Y!E}nH zd-sJ-gNXG_%02`}`?cZ3&_8>Pj|4j|d_zQDv78!r&5*I339 zUj)7-6JW#F*o2cn1tFf%O*coRm7rm2;b-ak7Ok6sOw7UwgqKZrH`RuXVB?TSu)MN7 zk+ET?b2CA<9kM4F@W~4Ema?R3u~8gH`2khLYY)CYX_S=xWn~5Q&FXE9*jlc3m5NnX z&N%?tt+Umox|WiV@8O%RZfeb`u@YN0*6z9ozR-UD`1aANEefPkrw&C}Xq~ECxNgwA zkVZYL_&$$A-_INcS$XxBSaGvr7b1e}wtv5U=eXm4+iiEcJ^!SAx9j)1{#OqN-R!;p z-|G*0+52yAVT`kX&)tamdea^(jphcls$rek-a2VsL3?no*UxE{U*e7X+ef1ECR9J4 h#ypMS3rjYA8%42Fb+#QBua95BA!Um5?_$}l{R4E}+PDA! diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc index c8190f056de05df2d025dbf0f73f84099186757f..b3cd83be1241ef1ad9d7fd3204b2c5223aeb8325 100644 GIT binary patch delta 22 ccmX@TjPdj`M()$Ryj%=GP}linBez2^09Qx{82|tP delta 22 ccmX@TjPdj`M()$Ryj%=GaMoqtMs9~-09O?T{Qv*} diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-38.pyc deleted file mode 100644 index 41d32a7efb042d484aff8620615553559a7669ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17020 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc index 3828ce8c8fe91ae08747bee9c44f04124c1510bb..165d3d4a5e60875f4b82b528a333c4a5bfe5c9c8 100644 GIT binary patch delta 20 acmX?aao&RaG%qg~0}#}8KH13aA_D+JzXlKh delta 20 acmX?aao&RaG%qg~0}z~b*|(9~MFs#vj0N-n diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-38.pyc deleted file mode 100644 index 9cb8c8b2421b8986db88af3768069698ecab2ff0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6731 zcmeHM&2JmW6$-VTDUJCS56bX9rz4x~N2CqE?{tt?t`g=1=nv_(-F&w}JvhprxXJ_BMdGGh$ z`_20B+O=YUm-Cq#PVg)@{L{VJD@1l51tcq)RvLxOX*ToIAmc={bTjDjeR>bS#4U8&^D~+K1 z?!&(nwfxmU8f&V&uZq8&If}(*R~gnz#UPeU_4={w$;29FyOQ0@-eQ{vcdNx>Jxco{ zt&Y34&eozbTfgmdyO5| zNj0X^k_ly&T=C6=logzPx;Ss9|!s1hr!Q+d%<6WhWq^_5P6uP!2i7x1X~bq^&r9uc_N@# zBG6*>DCWl0!)(RucGlPkv2KQ=-shV4SP$z=MLqjt`&V1pix{?d2|Ch~4+dIwX0lVXeO{W=cf0H2}1yk!26rIAr4ia zhGE$!flGFaj7@t-nXjD&!>&Z8gO#$GZn~MU z4CGv%15%n!f@C70H1aY854o~atq_=}Qct6U^2l@nZHdAn8BF9sRAHP<+yR)Z zOCLz`T6XH;8e}I(%q&x(!Zf08DktkLv)ftAY=nNDnf}fpQ}vyE3N!~sCnYNtJdV@h zk(NSf%r+lH@26=jc~WIN&TciKjI$pKMJ=llH7W`<)Pvdqm4cct0W~TbP}mDa99G%3 z>~KVpvsM^3^*~PRgj4l`9&JoMt7u=RzrHMeWKrJZ{XUr#!)zL*F`1tLN|lGI1ezpa zH0NHpNp(hZ-rYeigY!6}`LXy408_cqo~dG<6SU1e(%A zp=4Ndx4|N*t?HzZv4JltPG2oeAJpS%Tn|+olOn3ugEyghJYpgpCY1bSmi{s%(eloVZ@79} zVYCVt5GH0(tdPu{HGGm-tM+BDTxEAVtVzYZ!q!S8tc28eB1fe%UROGEoR)T=Q4gP% znoMJGA>TqE_}uQ%qX}MhfH9+%lVP4P9U6Wt>vey_*v7^NvC9;he)2+Qe0qW|_T%Y; zYBpl6gm@rbyVmwiy;h^&wo0n0KCT^0TPn|s$nK{4vR|yoO8UCOi1w7D1JI9MBL#~g_cqwD1j{^-38T{wbR=sry2%44@7}45K zvf;gYRex}t|{n`<-zDRX#Vz?Sed=*T55vp9rX-L~H#YW>S=;THIET?jwGdp%Hz``3D9fsW}-k9gV|F@j8^bN|TWwNh!+;8C&CKDk$yuQzONM3xK&22Vr$e zvGr*fp}uwbsY-SE>xrZr=a%!qc!78=a(xlHXG*!GsBge`=Y#4s^nHTU=g+IFIZZtg zh0)|7-(SJ$!U~^pX2R+WDHIi6?}#8a|OG* zsQVN_`W+zRd=;ar^t&0<(ESAt^K5GP<%IY9j|?vvE3c427ln+al`f-SN(sIVDHUj`b@&+{k diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-38.pyc deleted file mode 100644 index 38edf7bd87f3b5ad3d363a29b7a35020388ccd56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8384 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 K-ShjMzV{mf{Pd*& diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc index fb5a29d43e86118ceb0ce3cbfa86be34e0742ba9..81d692f2514c44372cac4e5077b9e98930e0c907 100644 GIT binary patch delta 20 acmeC<>Eq!(&CAQh00ecNPd0KhvjG4zQ3T%r delta 20 acmeC<>Eq!(&CAQh00d`U_HE>5W&;2-9t6Vx diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-38.pyc deleted file mode 100644 index 6fc78b706452d786283b138cce4ce414e30d84fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1407 zcmY*ZOK%%D5Z={uwOUDeIF4UQHqFaQ6WMTjDvF{-+(U{wHlm~j2myd^N%&Ij~W`^ z;iDYaaWaQEnVZ#^%WI_OT3%;$Qiu9!gEXO;xtmVbIIEG?iZ_wBD=&|DxVD(bJET)Z zwwcenq+4;11-wUkyifXkKn9i8VK?|qa;xG#yUo|gTE)BU4qqqh6%W{5zCkwlCfVd$ zWQ%W;ZN5Wx_&suu-zWF^1M+}}B;*gt!^*$MzTl6@BmS5?=1<5I{**lB&&V^^fn74h zXBVE6=YTk^kuTu|yu@_`FQzWp%j#oi*#Gr!U&6-{lvblu@FLd!Z=Vm}e?O-x zgoT82DoVu`;XKYW23bgXA*2qM(KMlq>P1ME!bAN8^aVg3o-FiS+VT!v(@y6Y3;OM) zt?^}jsSbV|AHO|>RAlgjltQ9o_ZZzIWQR1>!@BWa$Be}Z1Jgc=i-P7e(?2S;RaQ2} zbW$PCD4fRjfYy;Llz@^dOh&LP)kP&r3) zt&50JrA=TX7E!V&Vx`Q+b?bWIaNo3}C=+QEnQlRgQFIP@CZx1kHFdR6CRpV@qWM&q z20BR7qADsD2dnj!X`CvNOYA_$bW_0?q#CQGWXmdpYsx52QrSjTdKNl%zhS>x+D5)g zJfn#TtcthP7DCCc-K|j}14{zT5BiL%A1!+*$-aewg&P)bTDWE5wuLndcPy+UnEon$ z)eQ2k-Py3PX<^I4HUcI(tgwyjbue{`1!zv0h_&hEB?n2< zNG}R>>){s6KrYQc9r=|#+QPrTzy5miLE*KYK!$BFInLow(sP&`iWJYtwVIqrF_SUp z_>#%bRFyFc$GXg@2oLrT4kjnxzk5H9et~3y7kPrWA-X{R6HO+HYIs>-f5kIU6D;fA zs;qlg?Z3C|xlyq&-Z#r`{}%ru9kq+l=ma&d-Kq!mpy9cQ?wT9e+1w9yyoPJ1hx0$} CWVWdQ diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc index 79f3868b2115469da4fb3f110060f21f04611bac..55be857cfc44c9d711929b2ca69c5b8026d558b4 100644 GIT binary patch delta 22 ccmX?kl=0+IM()$Ryj%=GP}linBlo@}09?8U-~a#s delta 22 ccmX?kl=0+IM()$Ryj%=GaMoqtM(%w{09=O$!~g&Q diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-38.pyc deleted file mode 100644 index 29f5b413d579eee9d02455ca7724d85e0035f534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18860 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc index 0ab315da95a3b58dab0e754f1c6d76540f4da84a..ef460c33806609e6493ec4527dfa77fee3e5c334 100644 GIT binary patch delta 20 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 Ifm^Tr2V1)k-~a#s diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc index 9f381bd48cb98c4ff62a11f29250719d52166279..4ae3d3ae9efb270b9896db9a489d3000dccba2bc 100644 GIT binary patch delta 22 ccmZ2Hm1*%*ChpU`yj%=GP}linBlnCh08dp1H~;_u delta 22 ccmZ2Hm1*%*ChpU`yj%=GaMoqtM(!D108b(Z8~^|S diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/models.cpython-38.pyc deleted file mode 100644 index 68b6390dd31a1060df0cbb0f77e4166f1cdfa56a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24388 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 YNc^Rhm3Xq)Ep8j1pZHATGl{eR8+2?1_y7O^ diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc index 9307345f2d6e10d9bde9064893be02e39751dc23..7e421d206150d6b5d5bc37affd275d31b4b74277 100644 GIT binary patch delta 20 acmZ3_ww{gqG%qg~0}#}8KH12v!VCa6o&_@i delta 20 acmZ3_ww{gqG%qg~0}z~b*|(8fg&6=hYXuho diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-38.pyc deleted file mode 100644 index 2ebbb4ab5ea8c66cedb5ab88b2992b4ea6c27880..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmYjNO>Yx15FPI(*=1>?av|yk^_l~lDBMs~6_FD{P!S5!%4p@p)6~@a5sx>ay+$11 zSHO`w692_lPW%No6MXTyBWaTZ~O!DT=%F!~l_AX`27&dkuW_hh(X zl6?*iAxpL$7#+g)lx<9UFoxxDxhL5a`kg=iZFtoWUDOz@)$ECDDOm~^%`b$JXs`Eb zRj2t1OIexJvGn@UUBck9L9&$AVty$WNNNAR3+aknbj!Gdn_iUpj!E)d6?J87p1Y2& z=0cNeX+_pWMI{@JxNzSkR7mp D`q`uN diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc index ac522fc80baaa66a9e6fa4959a297bfb22bdebdc..440ed81c509b76c808b9de5b340fcebd0cbb6c24 100644 GIT binary patch delta 22 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 D#CAWn diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc index c75e0c18df1ca8942299fe67837704b6c67b8ab4..1834610fa08b06c24535181eb275e97016056d39 100644 GIT binary patch delta 22 ccmcaHo9V`EChpU`yj%=GP}linBlp=}09h#q<^TWy delta 22 ccmcaHo9V`EChpU`yj%=GaMoqtM((q{09f`1$^ZZW diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-38.pyc deleted file mode 100644 index 1c962b7f3fb71d1d20572541c18541c491181394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24206 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 delta 20 acmZ3=x|EgsG%qg~0}z~b*|(8<783wAwgq+o diff --git a/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index f3f3176c41a2c86f4a591e273d8e4cc3d20c0d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmaJ;Pm2>V6rX9Q?aZ{ZTR{cE!(Mx^U3(G{acw;;h%W7}LI{Mk$(CULj4zok`VsV# zc=yxf>d7zQ!IMcXRuD|cFYo={5J1;MT~H=?BlL30|WeItOY5Vtdbt&g+kz)A6J6!|!R(X4Hb9UjprDr;x>~3!O;yBIFT@2vJh#26#0(@;ySRl!QR6 z;fs1dtUVO-1?(rZyQ1KhGZHD;w0soZV2suQi{8*m68K>t-hi z4nl8$Dkby=zY(^f@?_~6Cd|q7bUMWsXN$`vdCOOr)-~pOOKyVwQmn8Qjz6gB`W@YH yi)&F&!ar(eV6uOy6srj#LJLR8xc=btC(5u!@~2TTdp|%c{b&Eks;oUs2k9>puDpr> diff --git a/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc index 05ab32b5c8c63027b5440652d961b13020588983..13c06ce9f2f9f6c5ea5890906f0d91e4dfa6d07b 100644 GIT binary patch delta 20 acmaE7`p%U5G%qg~0}#}8KH13qSPB41DF)>L delta 20 acmaE7`p%U5G%qg~0}z~b*|(AVu@nGE_6ErS diff --git a/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-38.pyc deleted file mode 100644 index 197463b518ca1e6b4538040edc82aec4f65ecc5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6741 zcmdT}O>Y~=873uJqGZ`|kfwE#8krgaEDAE6I+sHIunB)vXsZU65(5H(<#KmOPPN=& zW_CqW@Ttuy=r8C$$i27z6JB%avFD!pyfeGAv!oUH+J!kHcW2*uKcDx*U){K|)4=uJ zKh^L*KW#LApdbFVfgg|Y(Vt;?(TE#y^ILp)<8SL{P5fSq*YSJZ{9cPUP8#iN5q8$D zHT-&vkNy=F-Z*Ql;%nbF&aTCq@fQAW#;tf8f4AbD_&WZ!;$6_a zvAES8=uCxC_N9^+BIfF{`;;eq6lR=7NvJi;B%9i2O!04Wq4nGj8JWwab6K5EndUp-=b#KeAlmZpy$8JEIPpjX5|3n=|R3r5!armU$Ahad^Q=7NMA) z^2i=N4OOPugsTycJMN9+@0*Jcj%9WRPD9JhUUp|aof{YAXN~BX)I#s z_4|g}gdYC;_a}$FuQXS>$KzS3dVfy&Qw4?ep2{dE9qS&9GE(7WBGOUsYoYTnVJBH0 z3&|dS{_tV%%kIn5li(E}^up=1$J2{ohVOqAgPs-{zdsG5^KisOo

vZ~oiAFY0?9kIvEb(AN6X&PDR)IALV3~mD{LJ80GmUMIESZ%OiPuqb3Qlr z92x6-YGQ+stSM7?93OJU(}>qh&bd?jFH#B0Z;7`$lGkZ3o=huFyfu zhC=D=Zik)1eG@q&4>68x9PlDca*k6D%*}~Z<>`vYj+8lVq+~v2a>zn8vX;YZ9^;2_ zp>R^VDBSswb!*-Y{;k(Tmcg9$`=y%q+WkJUCn{GZ|1Ta3j_?G-F`vS?(AJzy!Ymr& zHkg@>MKrFYcPCUnT<~Sok!M1t`jGtzt^{`@0?uPKi*f~PWXYW2A!!_3;$)`=V#>uo zdluqgvN9}D3*!U)M6`lstK6_UqvDEaonnhS9zxAoB-3FcqKwT%HumkS*-*&|=_~~j zL4L>qr8(9LAsw~4jGS1l^mk9Qsnl8w67PJNl6WdFBVFknMm`{6m;nWAI;&nP&0q0X zQ?nlco(x3Ia94zJMUNQyQ6~1UAh}=BD0mtGA_)G^0Z%|u=;j0%PjN@bUqJ>23}FYv zXH73;R__gRO>8rCt<6gZA-JAMond!moyxJ{1x=S-DF%{{&O&069E_#m1Rj~?0AlMM z1oIO<830=ktBkP^AMyC>_Z`L)5$_54TBgJRA%Q>uvm{v&0iMK(fCyKZoX$efL%P~A zhESOYtbPg*)@-lzLIS`xo#~zBad*JrY5o4OOgU&%=0jeIC|^SeDM_m?OMB`(g$xy{ zLPW}U_DBNU5D}?_%nfn~t#c0C6KRwn+dv6>smvTZDa@udwgV1C3Ql1KsZcw#YuY{{ z55S|se@o;rZ#aE|TT~4OeCTVQWRKiA`|S5}hPz4l8ukSxQlBT?BP2rwNC0d@8M=fz zXmk(`z?+BojLoDv2Nj5FK>rcjJ7Td+?;#zfat2_EGNjjJ-f1tLKM7Nyo&g1sh>S27 zh9zETl}rP1^pM~X9M-ry9ZT&S(ID55&sf5TS;=i8&bi@rnZpBi#6~cK_7&1~Clgo1 zdFqf6KxitlWj0>%;w&c^ql(Vzh}1$#$%xk?dZ1+!o=fCCXX=_n4kedB?s6tj5MtLGums_;Tg4ygUIkY1cj+BW4r>k~ z>rqCOc`z3|i3!t-PTaHWK6PXf$a9luuCD8-aU-IX`|8D?Y15D?Y{D}(p}JH|unN>? zrdoo5LMIhtKUPB)DP_Z?6txZ9UhMj)uy}tZtd^6;E;&O`^n{NJy(e_wv=t2IJ!iG;OSWRQrOod=dHcr;0H8}IRMWzj zud+*po<)>mV=YoV$%>rmDbN|GoTx#anA~Bc=AXZ!wKePZA3*$N72Trp#(#O_bhLT- zixnL$?>=sCFIquBKpO;$ogkP1;1c@28wB5=2`HXy1wkyMAW$^5R5xjPpO&A{@*yoW z_wp91(-egYeKb{Qt>(sBtJV6Vb*FXRJc)3#c2U*%7$5x^7JrV*H!!<3lVHql?JRdI z-o)5+tD4!qEGDj(Ur_L%-lleyO0+3PvzUe0a@%$`z;@@fRP=XNf}B`+Laf}v@}~Kw z5j5VcVZ~?}$2N~K*=!Zvs#>%ZpQ1QN&u86ReS(+N&uOW&VhUHNTBITif}CiZQnb0* ztVWBa5S?;g&529&`2)RNA0LPRhMrHub839+{^-@D2WavI+Vngt;?yYt`asU~V8WCM zE_Xm*NM9NqyqPFbe3%R*QVd}|U1AWC@dMi+_!-MXuQ0RI1nPW>N|QQwGabRC0ktzV zj$rHpnC5_i!o2kD9m1v&u%r=4;RO3yIsxvA;s;=WLwYVRoR2p8XvMLmd%JLl3 z=@He*ag6>~k^;a3oCuAA8+aOVbUrZuX#hN-nOzt~eCn(C5RHPFGWGj3Bkxe%6`+p8 zE;F^G(FP$yNvC3^hNbE~c*A1T^0n-5TZJm;27~Z=@;{pIQo&`z( diff --git a/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-38.pyc deleted file mode 100644 index 43de87606a574825b69ccf60f0bcd54a248d6ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2653 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc index d943740e1bb82f96f9bd0e8d98c3872115e4fa34..3eb7be9f3c1af2a0183e0e6f4e28b82934cb2c53 100644 GIT binary patch delta 20 acmdlQv^9wPG%qg~0}#}8KH12vr3nB-WCjBO delta 20 acmdlQv^9wPG%qg~0}z~b*|(8fOA`P?F$L!U diff --git a/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-38.pyc deleted file mode 100644 index f1984d78c6ba5534d249e2f74b82090430015a1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7343 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 PRdicf_A&Ol-nRD(CV6xx diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc index dd7b26b43b8dba3db8cc6c7a997f6adbce288936..a0205e6fa946f60e6a5ea0737c86a13eb9476dc5 100644 GIT binary patch delta 20 acmbPaKFOT>G%qg~0}#}8KH13KE)4)X5(U-( delta 20 acmbPaKFOT>G%qg~0}z~b*|(9qT^ay7-vzn= diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 7f15a7e87e904671665f06ac25b570a18b05f231..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6032 zcmb_gOLODK5eC4gC`zk+Kl~c6omf<~T4x>UG(eB!^V@kEsW^INk8pI4qtUv&n z0VQ*b%EitlRd%IPsho7MD<|LcE0TYJYfe5V@xeJHUk~_##9f!GLKRv7W~OJ*{q;B9 zbAMr>WZ?JvzslC%E*r)_=wbS|h=-ryQhziJBy?3d)9OoRUTV(t6~hHt%Z@G?Jh zZ1N?Z|0G+xC~_jlEq?Ym!_V;o-dy76`31bW$S)md(Rvww1(6Y#uNs)|3R*57=lK<0 z{3Kty%3r|qRelYp|Rt?g2;9+cGDAaaXXCM0E6P(eIGYp0S89Kj4yeC z%^Pmmk2-&V|zTqqyMuDilr>m-KVvp$hyj z&A70cjFC&w9~Z|eXs)~zQBV2~t$OsMWmvd2aj9n^A^>y0D9L3R&+J-90Lj4k*s#$8 zLuDWR{Vf3#v9=d9ZI7)xo~_jShrg9D-`a4&Yr{o+2#cx6_8qat_ByU&t)B0Y85r(+ zN^o}A5kAwFm*O`)R|*By!_liHh95bjV=Moq2tGk)@loixjvIM>)^-o@BJjmpNq4=c zKToae2O2w6w9YozaAlJP=}uKy#3#!$5S5HPi+^!p*i#!&w|r^Hi)i`gcbn_=`$|Yv z7yQtc^=)6=mRLglcHs27!jDvaM+R+acY%&}{gSzESMoZrXN+De{BTguTnyvX3%#-)}aH2)Y~^T>jOt${HxKQoUq zk@c~0lpSOqW(L_thG)p-_8d@hZvsK3qhJVtkzt#CCPnDkjt-QF9lB8m&I=GQa_FB8 zENtSO6WC{As8q;u7_m zhjIXq`SHIMRxJb{FO!*j>hXC|PMw_gRB z><~e*WC6>n!c;Fr%p%$kT$_b6Je{~L%@Bxrz=ydUUUwY?l5*R=4gLcE1{xO4p6f+7 zz{#2b6CHN}nQnkSHa{TV;jAU}AhpVrz);Zlw@{WQw3t=Y1QWDex+iqMvJ zgn64HIwXeD%fZY;53I4+Jdjr10Bmg_|AdbFjxy_d^L{V0Of)YtUjr zFA96n36=G_Kc$p#z?QeRe}$F)I$x4TT#Fj^ibqWPY^DwJ+UDN?-0*VJhf_M|f02IB%u0ogtyc3-9F+$1K zl;a0X1ziF7!R_NQ=udba4N6-zO_bv(pYiFtU;swx0A)L}uK|(PHRXKyJ%n@>L`ZQi zsfetUW@BN69$4@4>BEPZ*LffM4Kwt1x-XRr?@!A@U;mY z4oW=pY3XQjF#maWu=s@uYRrNfb9NSq&{k4g0iAueqf4{lZa&NlR;Z4k>TCIp?VrDM zXLIk(ibf4G4Atv)ZRtKj0^s_sAmN+S{a4x0ls~1Y8IK;meEcYKLwX2mRF5s|z;8CC zK#mm&USZVn@oI*SOKTdwM7jYcZ}uY4=(0i#fC;sGm4nQx@_3~Q2+}&IbTviW_4U4> zYXf8(#IY02k5>#lozRL;o@kz#tO0eS&1M5dqRxhsT|ql8nT!HnsRW(D%dEJEmj3bhk;2Ymv8gc4;FagWa)_Ef}Lu7spa z6ZK`-c`RYj2MsYaW2)h{HpDK~;n;;nlzD>8r&x%TQoPU5xZ$Y)#-QM*F2fw)gsSwu zFhbesJaU&TF>0Q;7t^MZGl5LyiH1n=JFqS5H;QILy#7DA&<07f2AXSI)?v(7jIdzspof;Y`ZnlB-7AQFf2!IkErI zj341r48nM!WR^2UE7=3{sII5>!>{vYs@}WEXB&-2OK%J0Evsy0)Ty{l}wDL@8~olF22zXc+V4WQVpX143W2r zCbP=cqLqaimte*V=Au=~EH0f}8m1Nh$qv(t68--M$J76{GN)3Ge`n1+Mwh2jktMqS XS9$GJU%Z7*E9I)uxPO*kFPZ-Xx)_;o diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc index edf9456aacddf157f2c47c27ea11a76c1a442b2a..c2a1b8ca214c2575f31336392459806f53da4e89 100644 GIT binary patch delta 20 acmaDI@H&9|G%qg~0}#}8KH12fpaB3&iw2+o delta 20 acmaDI@H&9|G%qg~0}z~b*|(89K?49wSO$au diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-38.pyc deleted file mode 100644 index e64f2cef3d414759ff8f740124e6e6101c72c508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7189 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 delta 31 lcmX?nlIQSA9`4h;yj%=GaMopCBX=t|V=Fh)R&M4UDgdS32}l3{ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-38.pyc deleted file mode 100644 index 22d2239433cbfbc64d3323d3e4f77227473c303e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132737 zcmce-_xizR4!Xqewq+@Ftshn|Pn_KIv`hP4FgqRbI6>$(!uecvHNo-ZXEz zH^ZCh&GKe@n|YgibG*6U7T%WLJZ~#+zPGivjkm40owvQWgSVr%lee?Ci?^${o432S zhqtGT)hIgiSmUp&yj(4tio_D@?fp?*Ik@qR@V(${~QtvYFa_-Pq{ zmEJ0E&>QlGy%BG5d|srNJQ=iV>8UwXgte(n9n`>ppo?<4Q`-XFX_dVli%?ES_2tM@nW@7_PWe|rD& z{_Xw8`?%*5-X`z~_#|u!6JR1#K{ZT*$xs7RU@A<5=`aIk!Yr5#o5AKV2j;>SuqDic ztzbTE4coxBupMjx6YLDTz^<)Xtp0F3}4g0{pupjIX2f%@F5F8ALz@cy$ z91cgok#H0o4adN-a2y;DC%}nt5}XXDz^QN=oDOHenQ#`I4d=kQa2}iw7r=#Z5qt_R zhD+d5xC}0bE8t4F3a*B0pcbx$7}P;Mco2sL&;X5)fa_o(G(j`8KoVNvdPqSUGLVHu zuo!NDHfV<%;U>5lJ`JCNC2$Me3b(=Sa0e`fWw0FXgu7q`bU-I`K{xb34tk*v`e6W8 z!YUYqAsB`cSPg67ZdeQVz`bxE+z+EL2IG*22VfnnhX>&yco-gmN8vGe9G-wD;VF0; zo`GlKId~pkfEVEu*b?T!Rxls7hHYS5*bcUb9biY;33i5EU{}}; zc85J+PuL6ghJ9dP*bnxH1K>b72o8or;7~XW4u>P)NH_|P4mgJ2W8pYB9!`K0;UqX2 zPJvV5G&mj3fHUDNI2+D^bKyKVA1;6k;Uf4HTnv}MrEnQs4p+dHa1~q)*FY^?3o)pJ zdhj3)3!niSApzIHLTG|!Xn`cO!u61XG-MzPi(oO_0Bz6?H^NPDGkh98154l*xD{@L z+u;sa3d>+Q+zEHV3h01N=z?zOfgJQgAN0dOz)F5s!5|F5FpR)zSOa&%TDS-9h5O)s z7=tH=R2oJ%-@CZB#kHO>c1Uv~(!PD>zJPXgk^Y8+^2rt3Q@Cv*Nufgl^ z2D}NMh0np~;S2CZ_!4{>-h!{d+wfKR8hjnT0pEmg!MEW%@Ll*`!1ww60TkdJco%*M z@4=7Y$M8OEfDhn9_zCU%)TnSMY224g3~<2Oq)j;Scaf_!ImY{sMo6zk!t7 z-{BwdPxu%78~y_y_iRdkuqpk)rt}A!(jPE0go#iE)i4PrLk&!UsW1(u!wi@SvtTxC z2Ajhim;wD4ey~3r z00+WBa4;MKhr(fSI2-{-!clNE90SL~ad14G04Kspa59_%r^0D)I-CJ#!dY-OoCD{= zd2l{l02jhV@F}<$E`dwoGPoSBfGgoDxEij3TDTTsPzUwkK^zu912jScu7icp1kKO_ zNoa-ZAq8p3Ko%CkVz>d?pdD_6o8V^nG<*h@z%6hq+y=M99k3LZ!E(40?t&H20iDnV z-OvL$=!HJ$hXGg#t6&g@U>HVVHLQWVVJ+MP_riT}Ka9c{j6)tCfOW7Q9)ySBVR!@{ zg~#A=cmke;r{HOL2A+lI;CXlfUWAw6Wq1W%h1cM9cmv*q&%)>6^Y8`uB76zH3~#|# z;BELSd=0)1-+*tzx8U3G9r!MM555mSfC9V&@4^q^J@^s)7~Y2s@Bw@XKY^dZ&*10q z3-~4c3Vsd0f!_xFj^B^q_wWb!Bm4>e41a;Y!r$QU@DKPW{0sgK|ACKtCeQ~=pbwZp zA25MFU;=#r?}tzY)i4PrLk&!UsW1(u!wi@SvtTxC2Ajhim;wD4ez1S=djP)&!a;B_90G^JVQ@Gc0Y}17 za5NkP$HH-NJe&Y0!bxy4oC2r9X>dB60cXNla5kI+=fZh#K3o77!bR{YxEL;hOW`uO z9Ik*X;VQTqu7O&(7Gh8b_25Aq7C-|uLISRXh0p}e&;m(lh3g>&X~;kp7Qte;0otG) zZiJiQX81IG2A04ra4Xyfx5FK<6qdnqxD)Pz70>~l&;{Ml13Bo0KIn%5SP83O5QbnF zMqo9pfxBTX+ynQ*eQ-aF!WfK09v*;oupS=iu}31^6O-3BC+(!B^mI_$qu2z7F4jZ^F0W+wdLu zE_@HZ4?lncyaVsT58*xd5&Rh5hYj!ndoCHxA04Znfk!tdZC_&xjq z{s@19Kf_<(ukbhcJNyIw3IBqB!++r8o{97U6X^pc(g#eW512?FFp)lhRU)W{NiZ2| zU_s2^g%xiz)DyJgD?ccFaoP#4crZD;U2gb?t}Yb6vkj2 z^6&txgZ1zrJOmHJBk(9Z29LuN@FYA1Ps20tEIbF#!wc{tyaX@9EAT432Cu^#@Fsi~ zJ_nzNFTfY!OYmiQ3%&wx!&l*J@OAhGd=tI}--hqNcj0^RefR+s;2n4uehBZukKo7f zK5T#w;6wHJPq_Li{0x2$zkpxDui)448~82!4nBh4!yn*}@F(~){006Be}linKj5G6 zFZeh72R`npq6es=2dJV4sG!qU0_$(4R(h;0`}y0FW4LQfqh{=*dGpn z1K}Vz7!H9$;V?KHj({WKC^#C9fn(t~I37-b6X7H{8BT#y;WRiM&VV!FEI1p^fpg(J zI3F&63*jR86kH6Kz@=~*Tn<;jm2eeY4c9;|TnjO%gL?2F4hx_G8X*DK!9r+)W@v#V zw8Hg}f;40x3yWYe+yHIR4mZM0a5H=wJ_AeO7Pu8|gWKT_SPIKvIot_%!3yYrPUwPe z=z$#cLLc@6!b9*dJOYn` z^a8)-_i=avo`k31X?O;nh3DXTcmZC7m*8c11zv^M;B|Nd-h|J>=iu}31^6O-3BC+( z!B^mI_$qu2z7F4jZ^F0W+wdLuE_@HZ4?lncyaVsT58*xd5&Rh5hYj!ndoCHxA04Zi`&_wV2%_&xjq{s@19Kf_<(ukbhcJNyIw3IBqB!++r8o@)AmYWjg{ z`hjZtfol4JYWjg{`hjZt0rrewGSt8nm<9b90dOE31P8+*a3~xGhrie*G(aOH;5t|cP0$Q2kc3va9#W8o3}j&uEQT8b z+W2jU8{sCn89oi4fhBMY+zPkB?QjPyg=MfD?u5Hw1$00sbU`=tK#mq)O;1owPf$%y zP)$!zO;1p*`ayn&U>HVVHLQWVVJ+MP_riT}Ka9c{j6)tCfOW7Q9)ySBVR!@{g~#A= zcmke;r{HOL2A+lI0-oph1$Yr&f|ubHcoklQ*WnF#6Fv){gU`bk;EV7j_%gf&UxByb ztME1WI(!4Z3EzTm!*}4j@IClG`~V8@4!jFLg!kY_@MCx%Hoyn)A^Ze>3O|FN!!O{M z@GJN={04ptzk`q9_wWb!Bm4>e41a;Y!r$QU@DKPW{0sgK|ACKtCeag2q9>R{PcVs| zU=lsSBzl5L^aPXW2`14Kuzw6SFa@T;-$nKCmzB2m8YTa3CB62g4z7C>#cd!x3;K z90fov#2gkz+a3Y)pC&MXlDx3zV!x?ZUoCRmYIdCqV2j{~Da3Nd-pMs0w61WsD zgUjIxxDu{{tKk}`g=--Obx;o;#9;w6KqDmJI#>uz&0ZU;SEQdScE?5B_&Dw_ybQ0vtMD4U4sXDl@LBjAd>+04UxY8gm*Fk=3cL+pg|ETa;Tr+p zG-@@e7dTl0Q(!7ggXu5>X2L9(4V%H{FbC$s7O*AEgRNjbYz^DM zwy+&+4?Dn)uoLVIyTGon8|)5yz@D%d>$K;&8`i=-a4*~k_roZR!8qjM0ayp?;X!x^9)?HYQFsg;6-=|UWQlTRd@|vhd1C&_$+)5J`Z1jFT$7L%kUO_1>T0Q!q?#I@D2DTd<(t} z-+}MK_u%{R11P{d@Gkri-h&^(kKujT03X1I@Dunc{0x2$zkpxDui)448~82!4nBh4 z!yn*}@F(~){006Be}linKj5G6FZeh72R`npp%18`52&FJsG$$2p%18`52&FJsG$$2 zp%18`52&FJ;CvZOg=sJyX249C1+!r@*c|4-T-XA(gn6(P%!jRE8`u`MgY97l*b#Pu zonaT)6?TK&VGr07_JX}(AJ`Z6gZ<$EI1mnkgW(W36b^&K;RrYqj)J4%7&sP=gX7@@ zI1x^Qli?IN6;6ZG;S4wv&VsYy95@%wgY)46xDYOaPr=1-30w-7!R2rTTnSgf)o=~e z!nF{CI;aN^;;;Z3pb-*q9V~<3jHn<(`fTgeumcyNJ7p#B|=!7olh91a4FZ4k_48TfQ1%ogI!!QD?VGZ03YvCTa z7w&`mVHCz-9P;o0tb_INAUp&Q!z1u0JO+=$6YwNF1y92>@GLwB&%+DwBD@4I!z=JA zyauns8}KH47Cr}`hcCbv;Y;vkcniJ)Z^KvNYw&gW27D8~1>c76z<1$$@O}6J6yP0r z7k&uu!H?j_@IGvS58y-i3CKC3TJT^2B;Yz|f)?fiG9UW{Y>Iq6q`00<>-A5OW%+HR z?a3LfPm%`N^RL#jkh50uK6N#}a<)p&P|5izIXfliresA#-l^n#n4FoCcOW_AkOtW= zJriVK^epxpPUfDRU6OYq*`qy!XHVq%c96N{CXj)CkU62ex5+-~*~GOyd6cseNAN4> zBaVS%;RHAlPGSW}<~*lxvU3HeI_3PyWpE{24c9;%{Bsb+vkx)iuY+4bR=rM!Q{YCp zi8SmB`@v~&I@ny%=7auR%b#b-xr|2A?7xG_ex9A>k-43JPN$vUtH93UNE?x}9;-pl z$Hin zSpMHnE89usLnEh@|F<*B{t4yc`Q%EclmEA~$rVl} z$T{NZDdLYQp-rF~YG4XXg=sJyX249C1+!r@*c|4-T-XAnZnq(*ED+rjp* zBkTk_gVc&$VK>+v_JF-%AJ`Z6hXde1I0z1bL*Xzu952e5$s^$?I2w+DW8ru>0ZxRI z;1oC&PJ=VxOgIb9hV$TjxBxDMi-=dwlGH;3G(s!bnVCDez6B&{zA^N z$XS)A;ThtS^C=RatVGLs4p~<^oL@Ur;-4jvH6Q=n)pUN}0T~ngH6A-R;-9tLoO`lw ze3)WqMrxSv`Da4p9Eg7g#6SD-Ny2RkRitGhw(Gf`1)IZc*bL^tT<*!5lk7!r!6+`L zbJ)wE&-%YPyHUfOGkQit%0%|FPl8k7MmUciLeh3V)PV<$^enQB4f#l^l!pT})dx)F4mNOb#@w*&k1y;^pX885jQsq2Jjjr_Xi0);Ox+G_n5}JUO;L6XCKK09Z~^*>Pz95@cPz*leKPVakaj!9ue8lc{O&@0)A&6cj>5jIRh&h5 znOB?-7od|hk;@796u(!()o=~6jQ3LCpMw_^f1NAFGnWu14y};Z5&C_!vf|MWH<984 z_`Ml!1o3isMQS}?aIECJjUm3^==b{gmg6qI-&mtxrCh`JA346`kZ&yB<2}az7T|R9 zF7|q1HH?yn3*b_&A68^FT-JLf35cY(_-!sj%=!Sa>EZJe1uOqZ@{L!^&p^g=amN#Ts}l_sg-0r z5ES1EGb$lo43s%jial2qBzEUa3GR}$9>K-_Jc26?3Fb;r1eZw>UJi25b-Ni9?bBhw z)f>6voG(c!$(wVR1S_%bT8!LrCGl`rkUOqQir|V;gpw?~DkFDXi;*Vh?1>MgND~W!~zcgFdmy6&Y7Qy931eawITs;uM`Ah_t6cLJZn2AJ?c!;>c*ZWw56i8w zbl-2cp0EqEX@kb{TZ23Ok694sE6I>^f(WiYOQ+%*kO(fA2(C)KjNnR2?znOn!BvmP z5nO#1!3_x_qK%i5z|AqqW^u@+w%CRWN6$U~W>urC6f1+PHKesB=qKT85qsCqV?~ z5fNO+BZBj<2rjE4SOS-c;L2VEmv0eVp^D&~ErRQ6rJg#Yl5{6XFl%Q^tp(?-lIA)> zep12wq=NZL1@n^%HqQ5t1g^Qm!Y+FXi$PC6VjaXCE~_$JxGF1xMY~J{SHvQ?A{N0p zK?G+@1m`Oe9u8VzpB0oSU6m5S6^96}wu<12kjhgu{w#uPa3Z)85W%Hhg!R@(t+x6y z7$m31lJgS5Tqb1#V0EnPjvz?a9ibvo!HPr$%eo3?T?JQlCED@8aCfEo#goh}?gyE3 zxPpuwg^_Wm%V`Cf{C-;JJFEEBtcwCMR1no zmDssdDvqmP63i8~2(GS(;G8XjjUh{i&7dU1HFgo4K@prm5uOYj-dU-+Jxeot2&CD$ zY9Jkft7=kLQmm;rt@POM!>;=Ad;}OS;zDtz3|Ud@j_Ls9^q9!LqM{m9`4j zyAR*%=WDesWQ;r%*cf@xztjDg|2yo47JD{lQ_EqST6SA3-7f?W^#!r@-WOa9-V%}Q}hiz_rQiFogb|& z%Ii$_U!~SrZS1mYzAESy2Cb%bb_7<|+k~=vJka#r6kdr1&v+}0OI z>}{)mMR2Rzl09g*dR`1}<@*DN=KFDuIaCF6s0!v#70jV3m_vKbp(EWv+?|%j{{BGI zZ#i^Rz|O}lA-4q=!#4NH*;`)zK0ot=_CnZW{^`0kaLa?i!`(KiT{-ICd1%D{<&{>~ zHW|P4cXhA-yVA|hp2$w~OZ0I{aKq58zk9AbJ1fwLYbt7Atf+mZqV}bV+Lw!3zsBTj z5Y90PaV4UHm52&fA}UyksPJ-WPL@>6Nx9a~Nx9a~Nx9a~Nx9a~iE90vbXcF%V@<4Y z&?`&tC&YZ08UMR2|r!D@frhN#ZF10$nWj-%mnRKem_!QxiI;#R@MZEYlH)7Tu7 z)ne5U!J^bV7NrUnr3w~hhiyIdS{bdgX4k*eyksTPYt1)rE?qlnnY35AwblZAY}Dag{A!`4;gEW+Ga5IArB<+$}?9ad-hEQO;s3mhE^`9lTshYIEo70e$h zm_K?f`F+m@_WNu!=(av?o-)15JUYQ*LUtE?C6v)*`>Em3t@4e7E>k6Fx2m;4sf zVa~aRHYRjif8W__W$>Ke?+w|su*2DQrQB;nLT|{c zc@fO3DwtPQFt4g$UL7_c_Sn3w(>yj7^ywqk{|=i|yMmY0KIb?K(miCEunMqhb)f08 zr*qvlLFf)8J|}`DUIk0M3YK^kEb-k|kvnay9J3VlS(WT}#cf5|XNm2zoOT3blpA|H z*7-#+V&&Fhli7|3g6xb2GwdPjx^ioRJ9%p#o#xxIF+aLtE66dcjJ?5~L7T?p9}Z&a zwM?$G3fE;_;-K}hgO;UXOJ2_2V{H-1@q1Yui2M&#@lAc-C|Tzt&@p-W}A`(Yx`C&Ae1FZ>nJ4RKdKdg7an& z^{}x0LvdmewhY?kZfV3zy1pQpR6>h)T6>a+sx zG0oHa+OHi(YF8dGlw7`Fz|GH*7Vg+uDA&(^$9AZOvw-HJbrj0v%u> z$9Y`^^STP=brsC(D!lCHdB}~9R#EzGoa?fIV$jV6tQ^)`5%pU4F!;2!Y|BQEYrl4@ z$8HT<x?dWA8oKjYRbkJ;GLXC>Tcfyd29xm&HDzBN=1IT5TJRIqYT!OB4eOLd1` zj9Wk5xzx|{>ZgKVt2+bMoer$>@3`jLZ?&ptFz~^EmG6Mns=O_;<=2Fgtb!$31xvCD zmSh!zs?eb09QRAbN=9c!U|!~ zvNmWv>7X^&QER26HbRVA?>}f0qI^#f;h+m_t#rtG|qg{hedE67QuN~1gi^qtBajxKexWLFJtOIyEu3-W{mqo$9P$=d|9x( z1uK0zP?v}HR|l{)uf&$AE5{Yw%~yWNC7@!I8%c-XUq{km>dNT|?v|&+)b>zmI!f>6 z&6{S)ylJvU60D}!(`CV2o&%>_F#l=i^gwNKoBztxX0kLci?Z@VE&)MiOQUp7*QJH- zV1CEA$XO|%9>c8b+=tMxb#`2@3%oNZ+%4G zTIjH~zAkGR9oGGKSbOZTZoAXs>2m$0rFfv<&&!B)spHm#^;>^A77R(lHVF6HvUM*D z+HS~I!CJKn)~Z#oR;_|%u-9JlyUag>mX0y&?nZ2Y>M(bAn8$|f-C!vEZlHoCL+-MotC0b3o~|4;416VS6a6_;2dq`K4670ZqvqY+})4VRA17`4}@>;}%bs z+3K{(P^a1Ivl-7?n=$v=_&?@uS)Ctrqnz0qw6Ynrq8+q(uX_s{w4@GNTkN%%du>+K z8=e)ZV18A>{HlWaRRxz<8>G7|MV&VF><@Y!*C&iv>+Z3Nw9=m9|J?077HsLPx!-^E z;Q{~m?qJ1!b?|$)wS;kV!?1M=9j^vPI;<3P=8$1)9QRsXvL0x}#b*_Gz`CMN>wSAH z%fptR9_uB#ZI`B7c3kY`PX%+Z3g%!H%)u&{gS)L0umpA3Y-;Rj%hxl3TWvJx4r%~h zzdu4*(z`9=-In2QD}hnxam(JIUF5CP>U0Kz)pgey_n8O!0@H(Qveit9HVpc6>EiW^ zA^j_%>z6{;_6ioP>ECYEw%@vieoKD8WvJhpbHA&8)-ZD`13%@hUEgNC!GOg)V14(v z`J+FWptEKpiQh@4-nZSa*L#Mp_YYkk5M2B7^8U3N_`pzrgF@E_hprC^T^|~{J}h*7 zca|g--@^3UDBWS!J5~o3{t^FowOQ)4$}nbK zdY_GTqa(IXGZJd5qas*SRl%C73f5Fr2&(JSpznI<4&V4v%lL>52&*i=Rygcwpzh!f!4Qu1((q5ZB4%@geZo}-j6~wrCvfr}aZ)0h{HHcw*o$9n+ zCU0HZplSN7sg15R&#eu6P6X#U5uE2laGn#vst;3Yzb^OMdwSlwtWoP(^0pa}4{rvj zVAfPHYbuyE70g=R=0^Qi$@Y#5`!8$kVgktUijX>)6M{5V3 zE@?=9t<#n6$dL!tM!c!oh&NRm@uq4+-t=2jehoP-=}L6DG-6-15&No**jH`DzG@@( zM`i7=#Qv!4?MLjZHez435&No**jH`Heo1X&9W*jzlo6cO{F@qN~RtT zy6^mOd7k}6*NWOmo;7SF&#H~&S+yI>bH^*uJeTVHJeTVHJeTVHJeTVHJfkb|GcUdo zKbPu!o25G6W~t7%S*r7Gq6{RL+J~qI`(0~fWA`LR7V6i)e*r>bwqGe9TDtZZq)YsN5lL5Dp*V^ zSWGHdOe(n3l=5D;VR&W5I#aIo>rA=UuQTOZzs{6v{W_yszs`(4UtT7od@B*{HdGra z6V*n_M75DJQEjM9f^K6)rEX(Ir6hEVHj)I@Mv|b~ND@>VN`n8#5Om)9qSeu%a)0Pc ze54OiZ6q)Sr(|CQ5Z;`=hm`I|3v zU{!VaX&x(?&kk$tuc(c|$42>Nr$X}-ZN%pqwsH&+pKI8V&jb4* zjX$d!8F)kf^AHez435&No*+LxvCk~TL~v2Rpu)V_p`+81rqzGx%%hwm@9KYV|s{Hr!% zU$qhYs*TuJZNz@}ZRPg6Z>wZqwGsQOjo4Rh#J*}n_Dj3thoXH>e~C_P)1{W^#B#Y# z?3U}qs_KF^7g>cGl~b;fAxO26JgYX6XVpgXtlEv`xob3<=Te=Y=Te=Y=Te=Y=Te=Y zXLKcgW(z&ix0mVynU^8%d_VWzQts#8TkuDuJ*hV0XVpghtlEg5RU7iNZ$Cd$ zZa=SkeigM5`x-W4U$qhYs*Ttmex}^g@H3V2uiA)x)kf^AHez435&O9(%kAg*LlIH` zt2Sa^wGsQOjo4Rh$bLzk8@Gc6Is3*r$0zu1#ajh?c~im7h$Wbt5sP3m;{4iT&iq%* zG25;jcr4h#<83(D%Cn8oPTM{mvu)VC9aZVHLj&V>B4pgoz1cyGK09g9X&bbCYizRm zXfZj#P!e)c@D6Nyj>FFfPvuwZQ=#wf@~d6(lxzLsDcAbNQ?B)GmuvmvQEkvXeEXp< zBSZGfwUO$fVI$Q;wV}NGQ&-i7s)z59{OVvKz&9HftUCBc!gs7X_)!KWJnS~e?R*I1 zn{R}Pfq$`bAc$t=K&bMmVAfQy%BO-^Q^D#}m(`UH+r1vPjrCP__NdPe=JnZrdY|n= zkJ=f~UaP6S&jo4hv7P!JJ1{W3Cb%_b8~t7O_<&g-w?lIyws$^ak9XUSH%mdj8%C@a zuL}NX+=!)O*nBr^?WM=sRL+hYbeV-tr?De7U1qb(j%jq6&3-GMUi{M_u$sLzT5nN0nSSIs*)(`ZB(v%m$Vp73kQo&+U!D1S)UVqq?sI`;aT~-V- zb8{IN!HncYFe56M5f#jc`+95Gx{GzzCk)sj$^om7c{?)HXMx@4k~urOnG2uYRKcZ4 z?zj|*;8G-lrKrzpV4wAgz1CFvtd^{`P9Sf`k=EL=&hg-HpK&VLZz1D$(Pu4W+#K6; ztA(*cQGG73^&EZH!1}EJT4_C6hjp5xHe(nK&lps&%&TCTSHUu`f@OZp8f1_4N_{pU zkNc;{K3HO5yDS@Hb}Gr8j~@xX{&as_q9-`C=)R)qw60~`x|T63?oKQ2m3G3i$DBLZ zAABN_&oL?ZXzl14{mENoIqP9YE%{wmn(ogi3|phs12$H7RWN6%V9rv(oTWl=vTfvf z|8VArE=Y&2gTtJv4-Rwcb#Rzdug!@=b|lt6NfR_H6)ZI>SZY+T)Tm%FjoP2{(X%U- zFBL2%6)YwdEG88!ru-`FLiBV?Sg@G9aJcU@@s+F{xlNso-L=KVz7eJvkSX2recOTudUkm_)FcM(t05=}wZxq=Lnyg2kkQ z#iWA8l(#;&dxg1PS5?D;Md|M^h3{CD{%%sxY=&)u;qQqA;Z?AhRItRUU@@s+i5s;b z{z`uklL{7-zpfv?V=?)w_|`kv$t-`(-oooreOPb?bzwey$I>)pe@0YSsm=8&SejI@ zm{hPdso-KVkNfM`fiZviIxM)Dbg?>o$6^}3KhWyRv871`OOpx~lM0q56)dK1n*r+@ zu*IZ;#iWA8q=Lnyg2gmyf6G8uRxKtKEG88!CKW6u6)dK_O$EE{k6Y^^qD85KMX7>C zse(nRf<@VFlgjS!q*4VJQ+QITcU(+z$6^{;61aY330g~&3Ko+JmL?S}CKW8E-dlp0 zbm`1uQo&+U!D3RuVp73k8n!>js*6w-lL{7-3Ko+J7Ly7VQ_lW~pDrg^Oe$DRDp*V^ zSWGHdO!?ps*SWu4HD(j79(y0_v9P`Ns?=+dviVz!TCT0=K~Qe zUpMWu;i;?$saS1xaGr9o8OLxUrJSQafe?@^^S|X~uW@-2J3~xZ|U>sQfxNY9Hf|%7^u?WJIt$>mAFp3YKRTg13X! zclmDwtNqSQKlRe<;O#)KgSP{{4&Dy*+TvId#Nm(rejIXbamcmB;SWT`Fy{Lqn{*9@ zCtWI7j#RK5sbD!$!D8yMHr%r$@YZ@;iCb^)Z290t&;G3Ckd;fPl~ljIwdSp}8Go#F z_oXQNADkoW2YYL*0K2U{uC;}>elyemg8%n(EX1I_EO%M^?6>9Z{@^8b#NHlfuciF8@TMFp3#gWm~K?51p<>|0se%3qYXBEuPDwv;F*`GNHzKiEHm*#(I z@QFPw+^?*?*57v8dc>$LjPSvVA0}^}S!J2&vURLcYlA)3z&dQLtJ_xS`piVPz3q2d zGIO>dF=(Zbx2|v8dhWdW*y8K7WzR8d?qim~KIBZh)Eqc! zZ&0Ip2Gd+1f^&fg&IKYk7l>f>V8F_4z{-u45v{NzR(@TUpx!0^9rw3w$8BVAVF#^t z4_XZwvKH&UKkKqAk6YCnF^~0I74Cm7aOz;ttOu<=3@!`qj9D~;=F~wen?al93|hZ6 zXnjDBbtyge)Tk9?x6KB+?UVNI@F(pmn0Hk$@2X(lRUsGx)&!s4@j<=sQd<|y2Y(`O z*oq-(**Z7gFF$Z)l^A)SD6nd@J4q5*D-G#ZP-+F>o)+&2#rF7VO z=m9JF0V{=7*2k=}dfPK>#o+Q}c^S6ewcA#Fd#rAcTW`&`)PAGswti?d=pU&#>Z{dO zF^4V1oz^$33;ybIx78K~0ez<1x`;k2?oLa1mnCW}_~TOiwFAFQERh{n8#}BlI?N#* z*86r?ch}*bvg~(Qv5cG3#w~fB=IUX~?6~y|y=H5`s$;KZH)jp9!-m5#b4k~Vz|rq=j>wKT1%JpVjbqIl@=j?SVk+`?N;u?R)WK>1nucQ z*X>(v9=1NAdufosPODly);n}rS$0@*#%>D&_n6TE>*)qYf?EUD412BqmOPP-?8HLkEjI68n&j@7i?v&?g%F2{#4qZY|FJx$mQB5r(7v(j#m9uuw1ENl~x7Il?rA*Z{19X%}6=|=eoV^ zRrY5dtc&h3FAv*PrNe4nr|WHO=`82Jt^|j-{r8oSU@6pKmO>T$G4F#V)?_-YT69=N z8M1lIpw;!>U?RxhpwS94WCv1$L12wl%WfM%dd=T8wqg9W!%-lLlv7f@? zr}gWkQs`8)R3`^g!k^JgI600|u9L$k+zRgmd zZxfw=_$K(=K6FS&ci{Z9apl^`;U9k=k6dgRDi7-)zA4xGhi_CX=l?>V+pDhlX?!RF zMP;6q0FkS}CBqzzdQX+!2i+KBz&bNi5e z-6o9KS8c?;Y9sbl8?mq2i2dMm`;dLzT#VRPZN$F6MOj|>s*TuJZNz@?xqZlf=yUsW zZNz@)bNlkJ5&NOf?KNz0Fwk#s#n0%A4X#utw!@#%7aMtLII&wEPI4Xk+`iZL8hXR0 zZB(#fMg{A{Rj^K61>4lgX=<}lzr&x~hkT)*#Yak0wGnTsHd32Z8}X)UBc&O9ZXdF* zpT$S)t2Sa^wGsQOjo4Rh#D4I(eaODQDPCSfRU5JIZVNrGxaN${&+ zum8Dy$bRT^`*Ll>zJ`t14}ET59z(=_PKNK&59_Tfh-%e-$tUy@R_#Z$n*WGa?N|8R zK9o*9_!9BIY9skqZ6yDyjrd=+q5PM0gvHP8{pn2k=l0?B>8ovd1Ji>!(ez2!X!=AO zO`m8(>GSJHP(I;L(2M0$uJy~OTV)P-65G z^hjb<8%d06BmPirBr&QDC8ngl7C%|H+Q7Gu?sIodFj+3wiRE&g*e%zIRn>(YU~_4m zG22{P1^bXE__RIb8aKuDS8c?;YNPi3Pus)xbzQSO|DjLY%fm+P>miMb zF+}VKpSFkM)I))h{Hr#Sf7M3pt2UB<)kf?GpSFkW>rujpebq+nt2Sa^wGsQO4cRa4 zj@>8g*81r_OLStpTql;xbz-+%CstJ#v^oFN_E4Vn&|@Ues*U7XwUIolHj-!6ZY;(FHb3bb-whU0}0B7ua;i0{u_h zLw?qipbU^7}I^QNb-_OCP z?IAzwnb=43s*U(rwGlt7Hd4;Pr|lv8{+?j5Jp3_CwGsRNE@8#65&QnWVKJJ8qf}OL{mo@&6!;jj^;@YCGeOo!(qt4l;WzMz_bNAYu z(*FWo{Sox|p`7^f4BKYg*i*qa@G8>`+Tn{XJCVeTf$jjV?hH1D8BNHizcDP=wlOT% zwlOT%wlOT%Ze!M+jk9h0wRTdX*S6c&x|2GVy7hLX>d_#%qjq*++)l2H+Gb~9x4*@b$>_cyKx zF3b-&D$u+dT=0LJ_ci?A?1KyQ!!p|l=Km8P+_GKQWwy1-|4%-+Wm~_?%vsB9uX&mI zod3mq5ZE?tmzk@V+3A#JR#MAs({`C1*;!`0`^&7>EVE60_y4O89FFHLr^_s-eRd|K z$BtX|*pY|#4cS=j zuC;ZsR9)7SfY)bZsYEtim>f$r#JS%RD@;TaPZMjZIWBgQvvsk;%vicU-jYs`n?$+^ zlRT46XHu~yO`BYDQ4?#Ar|M#f>qvP`U95g#Z7h{aE^ePw*%j4wvBp?)3~OAZVhMey zrJ*V2#nX+2Ns`W(mz3M_CX(S_G$gXkg(@_O_IP1p9f`zCb@5cQWT~pIF{^H?OEx7I zC1UNH*Co?rgIqVpQ|7yo=PTL3RM(#jLc1!-&9+WR*WIn$5Vxx z`dDkcc2PX##fdl8O6^FdS_*UONkCnlB)lb_A^TEnX^Ew+8J%B@>B5$jtCVAHY=K{` zQt{SoT~ngIeMWs8XX3hMoGtZfLVaV*D@?3!Of=zoesJK-`oeqy?hTmR-$nRuurSq2P=#tK*?K7<@45ul zCqr?2$>v0h7@KWZEw$#y!sIx8g*Jpjb-X@Hl};5V#v9sNGlePfCYo{6BGpyLrS8+T zX2ofk)UyPoLQ`&ulL^{9-js_pjuh*ZX(HLm)%18am28!A&bH7%3sV;0cB@@87sQ$t zO03Q|(-y>1$+#0IEJ$3JC{!;1u3ajg=s|6Qr{@{rJc+S#MWd}TT48R)%k%Y zjR&Y)#nvI+$HazMoz&b0YBOQ08sg%gLUlttNqZp|^kr1SHUiSs#R`)f5)^L}y%k|e zJqegBzkZskxzrX=LkH%?o08eqcwqw9&4j{J@#dKHdktBVk&d?!g*vT$n*X~`T_T;1 zWkua4#wIq#Xx!~vHpXN0*;Ma(FWC}nDtc&AW3t7gilhshan(?}Q2t5BQnh}SuWrn? zPzBlwlM|k~xjIo#A4Sg(tfr7}&tF4oHJt@J0Jj@QQO>*KANSRIf0LrYhB?kk?c!lWo$N()PrbE`XOv*C(?r8M`yRcqiG^lrC)R zWUYo|kzRx0#lmmy?o(@=w)j+YvL(~l)K<&j7P3zp ziK5R^6kcjk@y=XlDjly+G5iDtR`h~|C;l?uZC!k>jbWn6&qtgQsD*K$Slnd}s=6+o z(sprOGUdt8yfD@tTiB=*jEM{5Ep0TOg$V`=%DhmuFquv+qHA23T}(S6a9gUOtz838 zXo@i$S5Y?@TMN}qapop8^G%!L3~f#EbTZQ@7YT-A?oZ@`d5QdBVOmpyE;hp?A`@rG zp4^nkG-h>bQ`3~aAx?I(sfNOgX391jYHX8H#A!;zSJTWW*uX?YdI@Rri|Kjgw@vyZ zx$+W==zJz{l_*T)-wYiW9XBIHQULbSTz|~l53d{RX4}ll9@~# zGw~Z3O$nD^6!F`0b#t=GOD>{UqpHTZIf-9pUYbHGZ@eYmkdjBZrWk2V#K%xpukj?? zrAx$idrfmHy>D%O6Z5F{dBy8mkCCP}&A?VmM;~wBDs-zU(a@L)-P=BNk9jFGqkYPr z-XR*IJd*j5AR!Agn&~oe7<1SxJ@y`jnwI!ttFDu2BSForZizKh`zh@fyqM)D-pVw2 zN_gfmO&+a}H3h}Vy~VZdamr6-lQMdyV)W)bnqYJ&RO=5hPH0I`Qqx3)7c-Y8$&z+1J~a z-7b5)ux07}ke4SXTXwLiaxzF~>085uqzn|3ldX-3Y<(kDbW*G3XHsiyq5rZl5tlR0 zZNU$-1gdyw&MKpF6{875OJQbftd%zb@qaMAAP#kYTVVn-wQOMuc4XEj9VCy@0CGfJ%9jllQh$kntQW)6=DezVX;Y?CyUdh75>tiyaSEnTLlw=iCEorJ%6iJKc zPsLJiuJdOtHEHI$!8D0$*DX&;#~KnD;*o|q(SPTuNs}`v>Xu}I`@H4&?WnL-NGLDX z`QdwIWz)Vx_-5te-LXQDvSsXBcN=Kk%w`cg1UV`}8fWXfBdU@~asKE>DjjV}<=ynnS&K&|o~ zH#wb3)RLuzG5rgp>CC?J)|qL1b6r!sxvjlM6l9B8UHdG#UPuY2vDXq`lt{Nv7FAQ0 zIkq3t@37nFh`Lpr5SLk-bfQhkmi8@0&1;>!$DsG;idu1rnwgAFvvf?#FyHi(IVnw7 zPg{t$Z=PNxuh=>fT}Ll@rr#^fTGHEF-1g zygx}#-TdY{jJKxVe7L1P(Hd``nAs;4zo9TWlWYwtbyX&opxzg1GO_CtL5rQl(9`a> zjg0i0wCfDBQ?b!LC6i#-*hiW&v)xRxfuS{%T*&;9_Q^$?m|aXyIgxRq0Y~x*-jeWQ zGNsKV>tckTiAn};nnG=Twxy9VJ40*JHkjePl)3U$`IT3F3D-VXBq<2mxxArSfmda+ zxGCE{C%Z3W7Bl{)Hklv=x7#;Ub?Lisdrh`=2kWD%=p1PAh3f1=dC!j*HYXV}Rg$() z%gX_yBvpKRpk?rD;6=*GE&gP*FfF(*Oom7Gx%vrh#wYYaTu>yi=`Ck z`O>Ud$egAvj?W5JI+)Ya+7r!nvAV@f7-B4YP>eHUUL&tbiTbBnDDg}rs+>D zosT$>RikE>M)VDHmRrbLkW6Ok@Hh`Qw>BpIwXAwB3R79jil=JRI@^`?tOnLU7BC|$ z%qd>i(l8rq3En~t(#5ZIBUMX-ZOY&vvCuOzE1;dH3tPlmZb&4vX${~%OA}|7HcRG( z_44M!(@m_YwGkaES^6VaG9R45>k@O(V*FEhPiHyLPv5jy)*t#7GUHrKauJ)8b+TGg z9b1&F=PkdmY3v4CGnIu}EC1F?4x0+|ir3{8VXM%svLbEYK6I~gmDnK~qAZfa{78^c z<(Q&3Suc~5bCqW?^$xmKkXGb5J>bzVYB**@J~S8l8VLlBU4vTgy75 z%;#jSE`CF8Ym(7WIwvo=xTUbyf4f`m>AnAJ;IhQEANXHGSI+H0|I0IFh6?-q4-bXB zvr&gM#TR5Y?hv{AKRZMNm!)$;v6mktR(Q)X!64hcOJa>zCt^Iu9{rwSV_b-i8g zl8qLIAG$25?Hes{KX_%Q9Q&x3z8RA&$NjD~C z?jn+`?$6Z=mVlBs_=AxzOW#L;ke>Gdx?NJ*qKlaPUY8VuEej>tvN*|LRiM94vHU_e zNODL>nl&0mRvt?;=a3#;epRphZ=Ok*Znrx%RSZFKDM7;}9cRI|-wQMTuh? z!h>cruZU>kZDeOM_f!6mJ6$e4hEU!l(`0a)Qn|eTNX((&wPnTGzH{0A%JpQI%Av|4 zD{NOWSg1ZsBY=(`vN)V6Y+4tW;*8_a=4=Dr#u4oa(E3>16D(rY`5aTM6!`(xs->M1piLs-%O(yYvcAp zUh?YLeO$-{HYG9C_|k%=SOX=lcl-p;_5~(n7){ImUc7ytuL~TP=EaXq2famE>$CnX zQ%?4kEs4595M8Bb{1}1>e)~+eI9t4Zcy~#WA*z1+cIBF~f@khh_DH1Yca4OoT==_f zEL>Ufx9_l#fW->Xjz>Zn@vCtAjun*U+1aU5nDPYdQ7KU6Ozrt!f|f_S^Txx5vPNNs zvZkF2Z>6G`nP5SuxO5(UrSso+v9jdaKZ_vd5UFyT?MVoXBcDYd8Ebvb9f_pLAxQ z1#zYuEe-A4l*(nvYiGwi96XZJoy+c5PV_F7LzShUzNOTdA6aQu z9Ffa3Rn4DG1`FJi>U6V#J&>tfvA+}4c?vd3LlNa-SqjmSWQs5Ots=M;G>c8^81m-S zah60X0M(mU_*9nTB-CDxHRxo9H3L0=k=2tC)LvP_;-6aHlUu3B91P*TjPovxk2-In z9;0JrsYF>NN!R(8{w`n_l+z9M8Hr6MRxF{g7{FB%4)<5@=ZB^8a@@M)W|`O9cPzPE zxhC#ZDNI>Jg>5PX3YFbNIl{r*OHXpdI0zvt9x=ZN{^?v*L9vdtlU1);T!nkz$#H69z1eP+R2r zR?3B@Lo&o7XLB<0t6RXEvUe=bW(QT)SGKY%Ke-vELuuKszK-r`i_&|GS(8aK8Kgoo z2jxJ9oDE?jAZJ6EMAdq-#~G9LYSXY-Ynpj}n4-qFCyTICneoc5H|wvgpK+{&V-ai_ z;{%!YOhTs8$*Q4Vu^k+Y1U1NP>$b*t|CdndOiPxDt}a^;tsGoolD@hAlvkWNzP7BO z+vof0%2j3SlAC3Z7UqWUhAPJ_)pM|+mYqf2Z=%=yz#ZeemqGZjA6F$r? z+0m(I=)uR?R6V0yeS$*>x++yw&yp(pI;f;gGykFjaY-{|-HR?mmOXhv;nc(|cPTxJ zmrXCkA5Bz3Og6>jm=2XoCZW?+ly)y`D`~2_+;(!g-?lBgUFL=Moy+c5_T(;=LzP8V z*sfx*kZ)%b0GHA_nVq3MHZHsrTf!)R%xA%gE#54yvN94CEo+{bU|}*f*Qyq zUe=E}BPGY#(s-AuhM#qgv3($LW~0fy#4#5sR#nog!AnBWaY__gmuCb4-0K!)lFUjS zl^?%Fs1rEs)*wX@)#_A3J7bB=9*QW^ElCz83Bd@U?VJo}>uS?k+3Dvp!%kp}Ki3ObfkXJ~Jna5ie5HJuq=@lA?Io)U3bM6H26&Z7P{G;BvN&wT@_G-&T+C#OW<4V6EbQ z&9?m-Y-L*+X#ACReHES;QORqbu5!$e-U?>xEP-sZv6~vCuxULNl4F01{j#R;7t7?d z(Z-<(_3RLlw-hHb*o0%;@DdqbiRBF$K~ANz_o)-=dfXsu98-e}&gnHvy<|4TiAshi zxs;<|bcr?E>5_V;?6Zp3mj4;5k{U;YlfiV`GDUf9+OGV5S&_HzQXZgkE!uS>!OEg5 zY+pHCN$rtgMY6zXDT8DnrfDPe=M#|`AIYfh`$}B zH`Qa}CBr~W_PVBc@z?@eshZAACE;adZ%9wBPVg8h3TQb?%*q(bEH4!^{hcrN|5(e@ zW=IHD$rAM$W?IsrRdIfq5u-58{|&ZD<-znq*$=kw=LC>ZW&7b>n-J4rqi0_pk3(J zqCU5n%Ifx}t31{PrAPCB{Y*~u=+PK2Jzmtb8TsQMVyo0^Cb+x~REx+$GHFb46n=sy zm2#4oZRY$Zz5b@&BCowFzK={cIA$DcpyS(=9=tG{f6D9DW}+*r67BOuS-C#_pZ3nA z$&MpQ%uS#c)QWvy2!L#o-96|g!Dh2tCX<;=ql09UW=x~yLbI}0Rj;ZZYI)UfL80=b ztA2+}ChLQ4`UgDeFXS)KZ_r7fyGLYtdd34G&5UeD0%5F|8Q~cb9^v8P5#h@tmlZy% z@3eW2hBhQslt4u#T|t^PMJM5CpVl2R()^K2=UH`YC`(pn5UabEHa*wnjvnU5dU{-K zS~7~zli8(enrOn#7~O4M+Um{W8==XxGu}ewWDlK)Jxn*)+g{`K9L6%MB!ji}RVqn5 zM_7t0>gw?1fKEI)=yxJ%p*QG65*Kx1n-xBzhnhUsiPwg#{3mFx*0=MMQJ2x(mMDO? zGht1!2PqVHLn>QR%Kh#$vA30cKhC-*JeqLD#nX>k|q%)-pmo8%=BE0gSn{81r zxUn3m-)WOnMOX{2AGE1SU6syOUT&CeCoy_p5AR{H(r;d(k&&l9`BasarIMqRyZE#Sp95C#h_-xxRBZQ*5 zoPu`WHSM}fI~+|;YKTle){i7Xp}@17sGz>QTn8;}AXA!_;ER=XE#Q6tZt8cD4?67WiTCFs(zXq(l$aN zbAP#H1@ES}_2t%CN|UZ-bF5hlT21u31JQ?v-jvTC9K zgmDhryqoeDAy~NJT$GRWD}=2HSAzLv2kRke=$Zh_K3I6|XaYuZ)hC;8-6h@crx{9A z#ew7<`KvdMS$vU61~Miy%dK)n^WP5hQYj&30!~_DOh8p$k z;rMKHFk~I?yc?m>R|xe2iozw*x}9ZQlY<}*pk$JzCpK$mkRa9~i3C{-dC{drbP$=+ z8uv&OTS1VL-Wj29>s&)Ufeo9eFK#A7Hq0NHfxL}m8-Z0Lo0BybZ`*)W_jx>nwG23H zNv?wlj7Q#f}hHY>NA$IM^o1To5-BQ;-> za|{TDjU^|(>@%@_6Y*#bt2)_%GU=Bw-z6VwI&71$u0x;pfSz7bc6wWRXVlcw#4xti zBTX$6$77!tKCJJ$Oh*h`dTywD^3e&GqxqQi9+#cFu+O6;8=6V;w0aWK(Nuob*cn%k zySZle_{!{7>pPaIB9Rm)cDtOGlPWeroBXO6s(Zp~hhzFySn(219A_Smv3TW9_K-Oz zy7oLw)Z}$rY{1YV7SUMLG_X$O7@eaAldsw1B08?yi=GB=+H<~Lv$u5TY%kb*B2p)~ zbk#;RBUYM*h;H(JrZm+Y%zV~MN*tQiP`*>)bE^STT72AjHTd08g8j6RDc3knVGl|G zx}Ck>2Q+u|C$g)%mKrFDL6&b8Y@METGQ+3!J)i5S5F=5! zw3Pz|F%6Ydfi(=zv1pQWp%otGLhQQzDx-ooa4zT)F4P*f-XuvjpEgS$3RAXTP3MF= zQ{nmO41KjQD|W*#7DER7s^2UIEl=66fAWJ+Mg7a4`oeYVs=&%+0iDSe(UGVrZF6ud z0u$H8${g2Z|A*naz%*Rx85wTTZ$ezrCgoUw$;69 zxtb!@?VO+p&|6`~sK+6$aiA+Tks=39s&B7SntUmVc8sJ+_brLP+)}#TaDB@%Op7W_ zjF>o{D*P{O2_g%74e0WbNXS1T))k}dSc6&Saw4r&AXT#YZ{<({(Dn@j4`lc zi}lcoCb143%?}aNldQ0fB{@fa$Rcu5%Bq58Uu(J`mpW@|1S|(5^}0N!{e&h@k40o! zADzjqBV%`2-{cxyJQ2X*^MMgb9j$njd!P4`;^4jLLxhg6zU+gPhw-b0fT76xF-tnvPD>ZFstUy z0W}QlK7`v{1V-`8|mSG+=edQQyGt4QM^puV~j``%^ga2uSy}??y_0hKEl6AwqYpSIP z2{w|87S_=GQ~4sl*&IP?my0TuV4n4}J3`48rh>5gGcHACFF|u<4jhjzM(m;G7JK;^ z*^Zt+!LUp(v6p#b{*quN3EfACv(fVzA6r;8;|;qrLjbD3B|gi zw<7gTwzFY(eXo~f%*8;Nqx5(_T`*$RHr4m#AdH(j)qaxBfs7GX_h~B`mtxc?OoWvI ziKV(BHxhX#!q$9NeHv53jIN&d0K)96zUV=e=ku3~;9`L<767)hIU&-yPLYrDbxQjz zw>NrwWY^i7n!^#kXy(_q^i7t@_5}Ls$&f8Hrf3KVcqSNQtA@-ihy3V1pNN7~y>1Og zk!?3Wv&Np(OGv;7fAUv2GvYqipo_&dNf3P;D#vscfsg^?aK{9Lm6MSw zaxZgZg<8%kdmS}?Tanv#gv0ChYs4>np_9P=miBOGeLB{g!D}aSyv$;b3k6bWLbArX zC3+qlefk^Q4N0Rbki~>f*!#S?9M5+SIo)Tk3!Q|NKAl8>IILgvidaM^v7`hS3w*Jl zz?M#=J2+vobr=kJHXcvcCK_0`0~8$`{69byx8-j@ufC&+u?3GbwT#ANpBFx?@48Ia zT%1!J%I5Nk{EiOvXvZXn+2}-#3nB9Q>7rbt@mr^ZqcN!CcSqqIU? zS8eI{C=cLDgKJlMjK<{G*i?GV=Z1=^&$`*=27g`z3Psh=N>HxZ+P7-O!L^jY+H-8M z_HD`vRaDxyDX-jA?b|LyD8vY$1L7KaQya#ySvs*og~KZKNwLXRX$K-yT7B6ocfoG` ztA&7}$ol0XNQaK~xgIa1KDVQWaIj^4Zdsw4)aRD>zCQ0jghEoEdl1)1+|9^A(PXBV z0j%Wpr!gh=xQ>bcq&E$}=oL|JybesKqy!gH&_ON$Iz%?L&J*m~1qq$Qtb+O$5ztB7 zWQMvb9oiUhz z{{(m_zSdc@xOj&$E{~)k*tsO+aWE5R!-EXcBPwNa^6`SnYjo@KV>^}axdL3nHl$Y6 zt@M~cCuDkw%~QI{d7*+zsWfMn`&Nl7fP`XfP3gk8rn1aRQ@zWjS{J28FDey~HMJtJ zl4S$j>t-eGHoJ_5E=oP1h=`6@gmS3hwd!m~lvM7ehuBo55>YS-C0B|=t9cTgNNL3` zJA7U%k+u1*N!O(%B9!4kLCz&?VRZ?yiAr@oKh#zIJe0VAdUewKa#F{K;%q_e!#Na` zK!6ZEimYF(l-W&-h$v+SkWhK0Gd;kR3FH?EYuAX3cqp`1f-4s4kV24@aS@#m9X!+5 z2-83(xaEXOsx(Zkl1C&NUDUi5NY7kd*@A~~&C{hGH{&Zfce_R!ZFAXvAo^;wRHupDzNduPTH5m~s( z2Si%9P+&x)0d$D4<3>?R3^^DN(fLLl+a&vt7{^5^Bf^9RRLTM)P2cBxBm zx!6Uhp+SgGx?vZ!l=xoMGR%8X%RnE1S^y2j)*aNkunskq)o@=aH<-0@)btWjQCThL zg}O{u%bDe-D~|{up%@djx-hP(Hv9ETSywH)?hTAe*9*%DrQ53I?}&@5RtF#ykvhoT zP`l>oew(|$6TDF+LnNK3out^S${@NBp-$UxcR|WMtnx$=FcfK|TY_}xaJYr1N3K)G znBj6mHAM@T(^RFZUUEcB#k4+DXh-#{VjX#|c1O1Qv-bjrqHAU4{T5iyIW(1$fTQp^ zcc8j&H}h2`c*z+fcHwQFV>Y>+wM-QY$y6O*EKTF0`R7W+jfK>!IYH?c6llm}dS zVi__NYGPp#)b)jK90Z7q6pmQma&xMh*LgHUdPFXFc?1h>X$CUFm66o#cE3@XNJ8PY zu4oIv9kRO118|1-VH~rmfYZE2)Ko5Mb3>(e^w?&X5y>;hDqPfll_FzNuGz{2-^|4% zT1i(QV{?@WT25@L3Ky1DZl?0A4nQcvn4pJn%~O%`4X5&=M`R*pev6IN9&a*3C3bGq zYfl9~P>@kh0BRdt=_D%`uX0q%iluS~#hQXO${g)Y^mo+F zw_I1rN@Lot={mv4FeJvlFig51_O=7MP{e}DO;<8p02)zIj#h?ssHt3J{_;C=Q70*) zrE6&yBGhhjQ5U3)lFCIzz)+-hcnQ*>qYU_bgji$@SRZ5al{PFV)L~MnWtE$&47dXj ziZBN3Azbs6yt3xGY3OnBqf`=8W21FAdqAP`N(rO~RYpbSyG5{};98}O1;7qL6;d+T z1u9VL>~7rsyiJcts*uwEyfG+M zXhnmO4Sv6*j%Z zrYqUxyikvkP0lPgS;;1Vgko&F(1meL)xE`Z4__UsexWqhyvFA0-lEM7HQC;x%`P`t zS$7X86lG%`p?b|e!mGOIs2Yw~!q{uM*-dV!D>b{xeqXaAP$()jJ3zT+uZ!#?Gc;cp z*mG>Kl1$19RhVW#$}2Zj1(GgAD8yve4v1@{QZHIqXamn|0Z%WnnM%DmFH~XFn={J| zRq72Op_nwX)|dtSnFtB(kzjf$H`M@p{J}abWxlVeU6689J20+Sb<;p(hEu&=w605U zv9UG@b7rW5e2Oen}U4FSkCSjhkjZ**8EMh596Hdk@Ud7%;`gPi%E zz6~Iu7$bu&jBBc{efTFiIwN|>p{SARn&4Anqm_ww078{^G0}l2H(%Gj5?mg#r^IeL#nZ63<(48HnAYva|FOo3F%^^Fl>N zJUO%6XyqXRBot%B(}jsmC5(m`s900eOR=drFVta8&6)3MY5)nvSW~+&uBj?xW7nn* zDNvKed4vr{H!U_?`zU~ficQ82Fl97U#x6sKLQTdlf;y!1^j^)RuqGEBF0|6HTG8F1 zCaYOH#_wX)sEjS9MtoJo=mCYs+3v6hRmS;OvTiSe4F%iwZUL~vTV;VtVu)f6OZnKH z%lQKqJVXv+6J>5;B&mDaKi|ZVom4!>V6}yd_L`+dz3yntJ<+Dcu8Ko(99GbYsIzie zz|T~IZi*p_gq_0_VN;w>iCYi#BfOnYj}#d9@$OwT)Ok0rBq^B1+9~0m)Lf3nOLQYj zMTec!AuJvg`Ca5+9AZfzlPyieFUw5NT330+LgC0T85$;fFG0=(cR)B=Ne^*o@8|T; z=_m%-mkSoeXCXU$&iP2^b2m%`)}u)TskPtOAZsXhPoi4UepWq6;AMKU*5<>tp2mq` znX}tcYkGZxmcKZwmloS&Y|_IvC${R-HmlsQ=RJT>1RS!d*NSk>gA&k>CWxTKAl${; zMIVex>=`2-d;@Krj`r~(n|#*6^!#f?=V>=LvR=*57MNY}VCwqQCthWZWvCWj*&Xlt+?%eU#GR-+Z5SU$eu zq>`&ybfd7V(-h43@kwisI=jR~9IGx;#4KaOev`=uFHA2CMEF*%!7+EetB(YcQrmKT zH;BOrzKc)C7)IkpTz?4}&6vq0B20mu_m(|p%PY&W$N+bWca0Ro$I>CdN>J2;IU##V zO}-Is<|mjr?w14*q|#BcG+9!XNx?QzN`UKYCrA>mhv-%?;9F=A!zm0#kCbiP;7MI3 z(HCm924qT64{TfhP1sS&1Tn-DUezC)*`g4yk#jL4^4mRti%XJa@s`gPR1f!@n6uw&IX&^$Zi_ z84J%E&KnvCf@q5;2Zg^TF&EVjiw46~>M?pGgV1@fp8Dn)o?gVBv$Ykwp{~D;qQ!y1 zwA$bhq~n7{-klE?!efdH6$v+i3vFK5b&6LSp3GoL#IhT_`6+|RBq>Z4)-)`ncJwk# z49^I@iD@kE3nj`sW{>NdErB8FLm@dCJ4`l>W<-AezMNXcIH?R?O{fQPjQ_6sRa$ubQ!=gYM$r9Z^mM@ zdp+F*G(Lov#u(z&*Tzt?`rca=@3+D!^g-6Mdy>LK#QT0u4;WNWb4D5aXCXU$PE65M zU#}0=B*#oL70674x;xtXVFT1#YCmnW%1wLT1Bi`#6d~Ls+aM1T(~xwv0Opt2bB}#q zsG)k{Gt13ZfH>T zSvR|k+2=)|P*nY_1m&=6F-s@>*o8P;W`lR5>J~iVmC4U?vLSjK)w-l5e~DYj&cZfY zcRR~O$wQnXU@d~H&cqw~=sjPpYl`}gfDi>xpJP`&a#;bn>bc7+chZYKL@17P_9ng_bPZLM`zGk69tX7l)CyMuTrM`IUgl8YAJZgu2{8 zu@BRKbvOWvM;h3aWO1mWP9wJTP5M<=bb1!|%W@{oc5-wsL6@iaFQpu8d&I4`d@iC` zvInOL7kGYCKMJLgW(na>>-;1BtGKsm&Jp| zAJxX(ImZN=twGm9^j=Dh8_OFxz1dq{r$=OyE7-}V7i`3H9xG^r@0O&0lZu31md7cAh2mIyjgSJILn+T9Z-LUx zBA*yh$sN{#3H3L#r~_0+DbJ!3XehRsMFrURqK4&6Cb0HX3{?V;>!SutXhQ+D#^NO! z4fIiKK|`?x)EZca8tbw$h+vk|aQu)S5zOQh!9ruIKPy+WU~PK!e&|qm{pEYX--B#2 zROum`4OqfxMr1QsXipE>3|A)Ch-`okh4+x{f;(h0i%BLfbzX0?$xA>k3oki4)LZ5C zCg+!t$y_Hug~IC0y}Dqo@mZ2UWmUqWW(m(;BN1lIQf{cMkt9-fx#1bTE>I|{;mRE- z*X#$063GvyESW}oIT4w>CiMYBW2#>-s%*im`pr+lhYISv==GaoedrLs+m`LER9vsR z71BasPJhO|?4$ZtwXBGd3AaX)PEfac^A8Kxv=?0*T zPHtcX3&l0dbbu?MaD0Y+k%%671qdqs4O0y15yRZF2o_q_FvSR0#y2y?1<;}JhAEc8 z9rhX7=E@>%Au|bv^hL-EUuT}U0N$beFreJ(X7>tdvm)A=@8#+oWN2BHd1?W)jQZCL z8<@FvsG`m?-@+;!`gzSyI>ybKpLLEGtob=RRNbukIlqijo;v|56xOWyT`<@9yn*n_ z#f_Bh6XSSgDZ2v`s&Az14p14P+~XzCP;4V*7hoM~c@OJUn43MUON)r*ErtgP4XETHND=a-Sl#1^1JVGXf$ z!Cd3@P?3X?M&-Eqq)CaRk+;AtK&Z9Ke6@urBa!)P4=xng&`1Pyh-8t3yV^7H$j33e z?dY;nZI+G~=+$PqKWB#~G{chf%NXTh2~eT1wvQL-*f!W?HQT0nS(!FaRTi)sE!a?H zBVaWEWdxd`%k?C%P+TKmh2q?Rw8vW`lV*IgU-!h>kvL?|drn zyFy`Q#PYtY3>@*xv#tp3&|E)9Eo~$LY>v2z5?{DixgwT7MAqX^(s+?4(bA|lFjy2L zHtx%CGtJ9My#?J`v;Yx*DfbuQDE z&j}+r;9d$h&sqx}IP~6aLu9mk$#zFyP{it7y=`$dHc-#0az4yupxLi+icfjXvyB0) zykp%4X?EV@cs>i+p|>H;?&swZ{COEF6b5OQ3Ugz&Lf=c6`3-(gc76{dWE57pz|`=J zq@t-{N-qM!@}M8lOA9Mm>pJLym} z$7|h#=M?Sy&2t>tb7#8Ch!8r6u!DzZsP86CmZ#nKerI>Ud$Z>A@cE+7?v|3E`kh?@ zbDh0PZLCxvJD)W<gaPVZX+#R#Cdcqb2^gEyM*nk;Dxq0?>%K!TOUK z37?UOS3rr~%Zut*D)?4@Q4PMDA|*h>g?z6M#P0d7+M`shauzrh1T2Ow&{c|`9oZW$)F;l;g)EOK=>@g;v#*OD2Bt)ISNla5STpA zuN%Cgyejo)(+Kf{p5krEW99+!+(bLMCT|*Ue48g9Y@7m{chiboQ&`oux+#yU_Cp8} z3-GZnNr{y_lxJ0aB{&!|h%hEdgs5-z{bCl1ReUcdb7+Lawj??@$}&kM_&QqR66$0^ z9CM9eL_V54O_bt0=~afC`bf;4u5vPpEECPWGvqpLnf(>=9dO(LqBG_a|Ud!l|!2!WgGjJ^|V;(0GAkRKC5 z%r^W-Jrew~4^k$>uNDFZQmkGsf^_6~OJPv>6}7Astau}(q3Lx|KX5Ni&)ayHwF%Ip8m@bGo0`;hjw2nl8B&8zH%0$9K$P^&Zg9^x^fL7g>SBMsE zyH+`TTN5YfkV&DF`l-CjEaBJ$eLNNyf}umigfW-OSD^`oTVk|X4COECf>M=8WqEDf z#>AU=h7z+;CBm(IM1us4GU8_Yie1#*=|HC`feAcSuTP2WE81|ZwHxV~$a{p?Bj6nr zI%SPi^9SCsoZ$Uz|6+t*8}E}*y*5Rp2NfE3vw38oX2Uar!2?Z*>vLj71NUy6ETpC^ z&x8-2?j0e`*4OP{$N-xv%({66~xW3=Xc9gp@9TEYBNlMhJYExA2nrP+M;S8GK z^lxtyj_m|RRk+%jkd(^n*GN1SVyl;VLVzj5wg>8it=hl5ZKe82;IDj9uy-+jINpJSxTWi!gly29FzQNn9aM> zqxk_5R?X^Rnil~ILU@yEbe`OlsB6+dA#@7D5aD?*DUQ;MK1AsA>dQVzdF;Mg2pEd2 zUoL`dN3>d>j^23%YF^y{u4{BJGrL*FO%%Pg#1G-frpJU0t?%fMnl7jwu$UWKCc$f# zrZ5i1;bb_}ZL@aYhQ2b(WsiH0AUN=7qQ^AKLz;fKNzYN2GF1Dq&?7bT~$jp(m4 zq5iEY*Sl3F=jzV%Y<%$w^II%y8qZ&_PEvK)8SzK%B@*^ypBLz_df_w6#Qd@V5{jvx z^kG^8W@6J+4q-rTRUXCuMUfKw7ttwZr@tc^(Bl{@ z{B2F8B{`bn{8Xq{KuHv?iO3{rcXOI`VNTxC%t{xU)m(mA?FN*weoW3 z?T|2=67Nw}%L&;w+{c8H64NQm1U|!H1YCuENR1C0(^4 zEd3SIlOE&!Vpn6S(~3E}?HybMcyc$cMb3AifC>&#x`)uMdU(sur@@=Pdr z;ji|vBUWb3?3R^peufAJ=5u5`3@A8Q&_`mTp3n-0N|rpRaSj!s!H--=>(qjCX?h{{ zAIOpH74{K_usI|u+4S;kK-^*-!%N*=RjadC6vEoOG{a<|-ryQxD3ei6@V2;o;UwUkYFp0BP44^l}^5k^P#)qP} zut7R&S?+aVJ7P30f~-!Q*^!V(wJE=i#gfQOn&9fASb{%t{v{i`NA9J^dVOBtnbixQ zxq$T+KteI~lRk`Ry(yPn#)IZDHuGVd6H2c>ZL`WveBJ{HMKm1*sU+^$IJ7Ge7ftR8Bnv&=IyYl)xJ`kMUJgSzXsqo2bR>`d;4OE4z1 zO^Wzy+8Lf=S4{|3vD-Pp8X9xI6`s$JE^A=M+q`c8H-tPjrKQhmdv-B?1&N;1e4Iltdw91GXxYU$ zNj}VAp2asr$J%GE6O5eJNbkM?au^ap>ua=;-5p^xZ{;W1U=rM$U1R;ANmG8P%v0DA z;?Eq@X>6L(kZ$4{LoOC<T4V7vDzlr?Wk$Yc>=sKKc6xl z_N}sEU@wU5*z6cqlRujJUUp0q4zus)^gzzl)0|PB56?n&_`H75&39Av9{kTt0HHh= zUU~cNXxBnsvpnpxg0s7Waxd*D__2SB6Z=UgGc=`o*~u-V^H~Wd6jVPg06D~H@cwYD zw20e)b$dI6GV3jUCaSI-HmtlIaV^Cq5>gdTXmEzWgUlj0G_Z3?+~JS_e*yKA&TB;c zX*V}CxcaP{T}J)$B2Xx*epZ5V$gf;5mPl52SdvBNL1tC)h_OUiyPZ-G<$Mq4`I@*2 zrK;<~jSD%u*&R%kMVk1tW%_Kp2sN^?*|b+g4-ppD?d^iSdU`hBFcf45dvbaD$i2jV zd+hT9s?`ghS?;r!1&~lo{iF}$`fH6`g0BzYh;-SzVwY)Zr^~kG4w?X`$U8dS*X>=O zS1*u0D5qXF8TYz6=a=Jwea(u8dlxSEqQ=g~IP*v{plv{3g z>hms4C@A-N2go(}wxI+=b%wfWz&nYt?{nq;!`_9&FAAln+0--mdJkyC>GQ>~4z)ZM zs@a+8pKY|T$pvF!nW4I7EG+l^W6^;L1vO*gfn0-c8Cr6_t6Wz2@QZ$0YY3y`5f)o&Kow_w(M{gWSrD(YYU)E5r@^$d#;5KnmV^b6L<-nz(bE-tq zIlD|;i39^sD5_3`+=X(@zLVS836h$Yz$PAPQ_P}3sfmP}4|)TTra}u)Mk+0VJ+O#Y z8qWyl5JM1=0pOOee$YI|aY)o8;Y~vgRl=x^d>RQRHNgRdB9Pj16B^MC5z0b>+_XHA zcC(FrD$pgx<|Z2T5TVZM%U-z)rfgyyzN`iOH8J)+r0eZOM!@JcH$_NGblgpiNF_QB zKoPIRF9KAVhUG52M;;x|vmV;;8nVb0&7z0djqt=RzCJG>f?J z3AmcOvi+zxh4Wl+AZ3EdbD<9ydp>tb57MENM2&p+n#HaB9_c@E=q5Wq+`_OXNw9Ue!1+$;8o|n=_GiTgEn>oH*)JEp7|rC0A)=W*G;~>2=JdIe4D}OeX0Q)JGXRI8 z>wsn#+M$_b$>gjd%aYl5LqIDr*PI*b%nUkbm(j>{Vv%AOjZ)%N-J)ExGw;wKu4#=d zhH*`6QaO-oo{KIHYn(lKE_#rFchhMO#x*saH*i|#0=lMRJBe|wBo@@tTml07+%Vr-gw5NKtpr%YeT|%vX{S)A!_`J34 zx5IkUp`2(9NJRdw>-W6+N?s|{YZ6?^RuzX7>@|&YH#PQCnlu3@U{R$34p3!cNF25d z8w$?stO)G-CQV9>=$Qpq3-8$-o_sQ8d7(1y5p*l#Dl{Umz!9vB zSXzM>0EeRU(o}{nq1o}>&&`$6hXnu3M>HA;G|*U@sG1d8P^Im!iys;(ED@oH2!&)K zb|9|piN11}hD=}iJq}8uuO>UxmFcU=FAqZ++6Wa2%k&k%+QwID%`8`v_HijQmVGY` zP7F($NH(}N$s`++WA9|VIC!6lhSh=#gv8QfVP!ND$u0nnXr=Y64Bhq|7q&{9$=`Q6 znn-JXCo!U!R)H=|XhmM@yFg|1(o#?a4aMd`D8V|^5_8vRp_#c`=+H3n67^VKs4Fvf z%PcoNbyo)@6qA{|hjC3!L?|}8a`PdYXR0HR=qRSgu}Fj60}G9)5()L-%4j7CW)XBK zyiStQ0&s_HI&sW^cEykV?l>0F=0t?kUb0_AZ`YaRssdyg>2$ik7(Sw%#My-(IK-1U z)iqVlTi9-DL^z340VuR3i&FurjA-ILW!O+~7N?594#BiFODebx%_oiAFzeFREbHrr zD)ZJXXP1#^y5+rrPSaY|Ey^`J9eSY7)z}&4Ll2)8$0SYr4oJiz5o!mfj7p-T5@aYe zQ%nKWA(hSzoqL^pZs?LCN=ba^VTO6S?7-IK{|92X(fBC zOj_AIt4vxsH`JF&D`%IRpGYeJg`)D+PZ!EHJKYsEkw^0fO+p-jbOzbxhZ?K2B(wnK z=BFj02NsIUG!fwnDC8)l4GKA75eiLysIx(#0eC+O5iAtfpb+333Y#Y6Sb)+j2HRU~ zd=eH@W~eG_8Km5Dvy))dg$V^^>AC~t8l0#-#WKy*o~fCJj&G*8>B-IR0)?WQW_O@mZ>OzKcB0e_PIkT& z8lIMu4Bitta-;I+429NdRu@1ENO`wZX-VyP zeF_AXk#e8)h$^k7onqdPlrJqoE<&mg>X1qVmejm6fn}}lfJ!2;oEs|41eUYQ2qXdv zK%uBiU|pzwvy-o?-0bYSs@&|H8|uo<&e`v6b^r=R z0Vp&e?-2r28KtyGD8q(=^B$oHTtE;jNio~lH&gaBz0|CtNnM0s=hNOyNe2m`sP`k- zEiu6^La+qv5KLDLT7Sp=QIbL|MC*JTLl+fG)SCryk!JIoog`G?vG$s(^-2qf{m)!% zWZD#QCxGRnoL6DaqSd-ksUm<%at>&d>-AAmIiDO?$vk?EBOnc|c8)6kcrqC^CM_2e zGuS;G;rU^O0&!pl%w(iym2zZ(WaZxC=soFVhR#K@@}HJR>$4I}D2Tdni6X#$|xg4M<)7C+d&X2&Y&6*`o7ROv0Lpl@E%o7tyVwR|~#bvdrDacZ-3i8*1t zRt*SJtEDbiL(E*Nn-$!3IPoDkS5lPTt5sF$c>MUEF(bzr!Bl=Q<|VKm*3moa=wdWI zu5YD;{n6nFlPob7t#5YH4#XQ%NE*)xsn~&%P>J=8P7=oRp?Gzu5TLNo4^V1C7@%es zgdFaaUWu7!Zv7e7Q<#6L{pQ%Vm*R#774?%HRQ9n_ zL)$4CL*SiF0*CDk>Ys+${Q#J~4}jVK0GQziz#M!4%;5*X9DM-H=mTKhd;ko=Nq%xH zPCfwU^aEhdJ^*I?0Wjwu0Q1KWfSG&%%=80bW*-1E{{Wb`9{_Xl0Wj}A0Os-oV5<6N z_M#!Cjw7+^!q6TsHbds^TP#`ea?p6^SyqefT7FP8T;pesr6~?St_xFPs$-Qx6gX^U z?`!zuDc*v(ff-I%OZSd1#610$W~k($HU?txe50F&Y4KIz{Oj;vf;nmhTlmd|ZH)FT zLi*Lg4Ch`b)r%W1?Cr%_p0o}3I^x%^enAXfJOc1JHtc)YAz7$Zyt>S=dDU2UEBlxN z^4-!9|2{bJq@h^yv%1tPyMqagQi=kTCHz5RMy`tyk65k@$+XN8D&h0Os|e#aUiC`Nn;fX zn)S97EuALjto1`HCo_F@vyxWcYuTKu-aKGrq{aHl_x6by&i?Pzy=8U(L^<8Yr#|T5 zuwmtB18{R7&O3-FY^_R`WzxIi@j;v%5XGM1K9Yr3e85Sd;`(~0hatdK46XHprG30Z z)yra%hd%(8vDfwLo3UC3;s8N>u85If{b&!bHLa}J^!J-@Na7P_>o?yd zsP7u6?^4Qdo0Q+Cls_~ne@H1(kd>Xw`Myc{KEeF1N%>u_|7(&`{a+`jZyTs@Gt}!A z>UDyWB&+Xr;wLblhU+j*#Lu1h##4WHGWd7M7K3pCvVlW%s<(5%Rm&w1ym}8q{32ma zTw@twWEr*pzb2f73ua+E;sS4DZ+wdD)v36csMi^y1K}$0M*zcWcj#`3ji3F+3RATT(1sy(6y3LG3UZC@W#8?wrnbx zNw|VQD8(mXdY_I4^=5iLkgWQF%K44c#l%nWN>ksp99-QT)6`~{usM7)q|1}n$fe!+ z$!`7g;pzCzNbKxKICR6^1M!Q`2kXm1bS<#|9DcCzS+#^f~KTuH#EImejQ_hlz%WGbf;JF@d*KES!@Li|y%JX0EhX<3aAaWGAU zbmp>XRMZyZ8T|{^aHb-AYAf;vXYAtn7N<1Hy~mT7B8)>gLvp(n;AxH-88fjh@AmC0{EcVw+nd17#I$gu#z2;Fg`O+BF# zp?04les~7-cJrl84{?rgI_`j;?Q!-?UI-_cr4xk zGMeJ>05YI2Thf;VJU`^dwPVbQ&=9X@6IRJ*?sM^DD+uFLn69-0BwyO482aVXUbG)V z-{OmHpo!>U2(M!;f#4evw%mDVB-?qhhp)@&3>waZ z*-k>tdS$tmjZzwD*Y@$=c)HWHy`AB3)A8wUXD%W5jK!^QOK>8fj(7M^4&f@?h2VIl zb`|Gr1`}aq>W5fuSaX-T0g$i&;v>{^1zb=f0S{`|IWPr1%5A%AJ{kP@Uj}18?3d>< z4;`}AaPO!Yh518{c-!xP{BJn8*yo^l^mdGKl_NWRG^wYjmOl4K%&r}%cCSNv`)@|L z3c!tE+l~8Uwy1*5$Xz=wyIY!F(8KV%0!IAPZgRNK`<78hpX z2x^l6?L*&v@O`!-ofO@4`&k2Fk8m{QCrKj#;Ae^H)RG!LWR5#$sVzUjz;4W;LONq@ z$LnD9X5_Fu7@bK0ZmbR_BJ(=Vbf9P7f{bu1SGlFLKwjdKlm>s^^i=v}D&oKpzfhSy zjo2!-{dqXRnW?K8pF&+SKOBx>UB0_mIho+>8=9(Q&Gl;;er1^GA~&{N=MaZ*pwupS zl3;kZO9N@jo7x$`a=AZb8*d0XEc=VGoT1{=Yxvn1o951+N{Zd?nD650u1q``DW z4jarnkesahWfvzjvr*NuGC7La7e2MOFXz4OIeJU#?6&urgj3f}k`8x{`Qyg^i2V%A z*QKyoQfg?sS63NV4)5ZCmO*K|1gDmSU1)lU*FX9)+0Y1uwetp|)NP2!jcpf=rjr4? z30E~yNqpnpAQ#B|Z6V$a@Otcuc*AD9)9r8YG!H~Oq{o~M9UrNP))sR-JiGKW@OZ>3 z1DkUtACITwx1OUN&o3AkU-IST@Uqg9+pahnz@%FgIXys3aD8)vcc?SwKud+l@7#m= zrS@cm1j1Ksdr6_a?NrA*_udh{6R}!Ba%pLkt>V#Kh0nGFPUi3MamQT=5nGxO!{0A7 z*nY_SkYT3M_QO-w?ZbgwUpj<@@Gm@*m4r*7j+Pin+UL3kr*W>nlToL7=Br~Yuz1!e zwx*eT`BvaM=xoHqb z5i!Nn22P45bJw?L;!?oPJuf%46olV-wmtZg)rn@g zZClUeotCwOel`M`mI0oPCkNw`<17ccI&ph@1gnyDvgLY!+fqUY$U4-}Mmv^(TyW6a z)~FlPc8Jc22^VHQeFNb?ZwQljoR30aPNbGKtE~iv0~>P0N;C;}Rnk#uwf7ZjFZm`R z{LS5HoFhuAHVSpL3+wp^FX|(f%}oEUdNzNIg{y;pnICqB_?+bjNA5^&V>dv5#1pJ1 z9S(7H#&TSR5qNMXlI3<#cB<;A&Hj7F)`cBaOj1q|*V#ujlDNHvDI<<8W>M z7J~4cN|JQX+inV`B6~N|y5C7o=|7q8u1zBCq#Z`}n}()T2--=a4C}VN=cowH7`GF^ z0Bi!p)G0erTm!d-pUckJbpV0dppfH%h7oDOX1|tg|Lo|;KjGf=vU0sk4!w)$(<0uS=f&jU$<&>GD z2nBOpi;v~O{8PU(nf~~n#vEgv{`eBi`BI%_wo577dmv z^d>r_H$%$P`df0se=gT3kT}b_V`{VUp_dM39Eu7LYuhcyY<@5~bU7RCbDH-BO($-{ z*l`;2gd?K6LJX9%BQKiFnC4w}fCpPSvUe>cK@N$eh^jqz5ICV6c$n;H`%G*$XVB)3 zROY{){#uR*Pt+VJeNa7V$XD|h9%I1%U{h{YoFB`1(a`OV!9^mo2>ZdsF9Iq)rrlbU zvc;z%TS6yUr3?_158Bm@HJ0V?(hc;y+8w5WZo#-dVtX)mUG^5SQoNwboslC`*v_zG zf_N<6j)pUc-JMXNMRziio;{c|I(~zAAwD+?MQmgeQ@Vb+@EWOj7AJ8@p6YeI#yy{(a5KKf0CH(4dyrM}^SL+2 z(=C(JVs>DQ`0U4lI==DOMM*3lrE4AahVwRB-y;oA zpe{)k$m9Cwmabp)a(Cp`i_znf5zp=t|0&;f+?N;53iWc#+<|In5U$P9m7*PNqi%2? zB8opU6SxZJ6z!%@q30?1y29`3RW6)&T3@Z?(vqWdb|A}k1$LDyO!0N?T^g@(%ReMA z3*ES~hgl*J>qi`EN+>_>ZP&O4o0zN6d(9)atY+{cD<3s?Zpx_no3FW1lrS(5(nE<3 z(L2CDm%FyBBZ%bwh^syh0^}|ha-1G>qcxebkGkbESVt%9`ZqaAWOu;X-|ikN2mGy< z^l|B%*Wdn@xCWQ(hfa|3Mr;iSmk1RpGT3T<*nT6L1LG!RS#%lrK)0X6DQ;26oF%da zZW6daCUC_rDp_Y|kkgVXhFuj|<*G;_S4DMf*>uX5xU>X9HQKI<;@Prkq%E7?+mb4= zaicOP3V>YN)En}bepU)!O)vHBCe>Z0+{uZZ$R;a{s9Y@FG(WT&#wFl8ZkWa#3N(puJofYT8VP)RL<}v$ zDDn3Z)0oIONA{_Vs2tOBi6oqnJTwI4Y?Axly?SMolqJ}YX>_Wa$e&zf!4pNi)O)IH zn#5Yp4ZBPgxrjjwcGk}tQxCP671E}|*Yx@bx9!WPV~4x6*+6t^)Y3KU+05lcoZX6Od8V6ZOHy)KF{|f#jV-ub*wMWk_GtHxYvYD3 zUV#KeG2pmfF%R_houo~W`W|q+?{{<}Xvz@EhI29L|Z@bx!GdV##oda@RSa3 zAhI&+9u{FNrOUX!dPqc+4ZAXbgFwik^+dwY371gKQ&b%EquKC6 zb+5R-l;FJzAPeP^4$^(YP=Jzk9d0$%ZU*Y(@6S%HJL~fHgib{komz12+ zsau{no#0nkizsdJx}C(4%ONT~G;v)P4;YXNRIF!QI3hZjC}nr{8+mz=wRy$BX}72p z?C2W}mNM#VO}s*h0yvs-Q;*&QBPqHxfWT;0r>A3OFB)KqO5qMJYSxN{ma4D8_Dqw3 zkWIlL%892nrS~5eW!XB|3@gs&{11j}<~jk3Qj`T_mX! zBo|Srt_d#1MxqVxLd{<%8^%c1F71$yx?6kguy4{txa4G~{0;I4GbHJg|jS1W;n}to8f5eM3)xFKE z-KNowh-x$u;d@oB0eJvD2|u(lv)?Di-ca;?)`_SIm+xnJ8iu>i29Sa_0_jW49Ue_y{z~6#4@l*55~)716(hW zgs_$}Ox(8&jW)4v8a+Bam&F>134LK2Q{upfFnGB3l{`F;~?1Xo~b;mPG72#dzqJnZ$G? zxH|Sjn99XOq1@AA zDhGB2*l{uSyqNmOV(O%rIxVJh`Cn)Q2l|E7x5dSZyt`d7dBq+b4~|MD;X z`9J&9&nEwUgJ99}=YRgkfASB0__rLMPk$Kh!@qv`i?iXMV_-1+;m^l=gg88#O@H`H z&S2p261(q*e>a-q9PjyGX~4bbufKl%`iH;#$N&1@{MF9CAMXCZqWc4(wk3+;5C3Ac z`@@vevsV&o7g2ut!};j^H)!UFYT9quejNRVBQ?>w+#|Zt^w&rb*Zv{W2EqOQ(G|{= zrbkbH_OmOWeEj$Sa}O+i^6}rt9{AV;AA8_q4}9!_k3I0Q2R`<|-~S%C@=>b$*aIJX z;BT=9KF+Ye|6KAT1|NIiV-I}nfsZ|qdmyiB`8TKkZT#j_*T0Rj|K`j5>-R{;_y6_Z zrN4tW3V-wT@b|Gqqv5|kC4V^XQdg$;(pUdC+fu6k!_pSFGUN8szaLi9-+8G2@U#E3 IfB)lu0kAVo#sB~S diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc index 89e82be2f0e15c03da270bf43e0669dc7f33527e..57bc34f805c1d92f254eea68c675656b9fde6ac6 100644 GIT binary patch delta 20 acmaFE`-YeMG%qg~0}#}8KH13qkPQGsB?fx{ delta 20 acmaFE`-YeMG%qg~0}z~b*|(AVAsYZf@&;c3 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-38.pyc deleted file mode 100644 index 3a22a12a9336c7d4881a1116d91c2a31eb87a784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1226 zcmZ8gOK;mo5Z(t#QL?NAsDZ?NplT0=SRi)cqY=ajVjuc&Y*JCf<}h2_$Y z4f>P-wp*b613uWt-h1e8*=tWZ^ zK-=4)iuSd;Q>Zx4!sN+oYFwzcx3+h_`26If!TP`-e!AfeHrDay-}45L<_B@D;Dz$M zjdjnnv}F{1OTZ+o5)~YVG7dAPJ3-?bl+{=}5>zF#h#Lg+VdIL$BF0wkqEO_3UQj^= z6a12$@|qv83szJ4NzJct71lM&n6NI0;>ubk$`bY^J0oZGj7_+3MC(=e)T&u+)#Rl~ z*gbh~4~is=px;30N4bE0ob?UhmC6ME{nsDo>rWn&EwpI6@zum*+D=V*q#-vlg}E69 zwu|!}oaH8pnp}}<;`38_ioj3qp3|CL(QEROp0k>tBb+OD?p> z$V4tzWgP9V&Yy^!v9wYg>yF5Sxq8P`_cjVbdz8^GWrY3h@*X|;_^o^QlROHO^1;e~ zmpxmWuG0%afY~C7Gzc`utu(Z2UMh($hHz<^lx<^m=S3;yyT*3ch$SPI&1vt=s9m&` zMi9rL9qP~}_I_J_h`QI)jyf)|SdyXIM3m;uXeL2-=YL~ZDI1XT19R33_F$+a-kLRK zqgUg9d-YbZWm<1ojkiJV=R&ulJS}4EVva4=1fC&oU^k+H?cPswQ6+$n4gs6QmZ;0R T+{LQiwi)gG#jv^#PWI*6q$}hs1zodET&go*guClCD7hA$GGh5FpSJZ84=pjif9) zhL5{!pJexanq2oScG@E)*+!ZGJ9HQUTO!{hfA1fEPj8<-tyWB;)o zfXOTP$uHn9s9aTojjN5|(bc2i@zvvCvtOw_!QX>Y=lQ`|Z}9H?5QQpYyVXueZ~%{p zD2)6N3rSShdOJ9>Us|v%)r^td>fAhKNQhcghdh{}`Mio?_?&UkM)MIDWGr|Z2a6w! zV2J(q`GQ^Qtd>A$v8Z;O;`EMF7*Uv{0d~zP9iImPuaWfVB!VEbscVgRtn3kvD4VrU zNX&SB`+!{I%M|r-EYS&%`F7psvE&TP`gV_}f)asFNw!^&KqwRJ6Ki*_5f&W>PA(vw z9JAx(W`J=fQ25tRAbN5#Mm`)UyOyASXe%Nj8e?Xm2_@M+pLVS#YNB~Y0~IdNJS21+ zs)dE75sP6{s8rH+oGi;4**6U?#!jo*Y&vi(MBBLd+_uqc5)*+H2~b8=h%NvL(xnnv zY*l2cQq1TLX;6-AyVzQU)133Fh>uUoRO!>#gNCdlDlqDS|5lzets#ZqMvVKI?HIWh z+ZSYHt( z$y9a(0Q-A3Owo4Evv zT*v66=3<|-;J;0TM))7Hu!Q}WDHwv84O;M<**1=B?xt!A@D%>v#BZxZmcYiZW|>OoIy1((lP z9j~-#**(@b=LK1A%4ekqZ>$>Hq~mj zTJHJY#h~x~M20R-5|_jiFN61EI&>vf1fuJ|$73ShgeHzRA#uQkqrG!HGEKNpUfvZN b$?SHk6Y(I0uM_?0BcVB0Hox3_vAOXNX1vex diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc index 5ea95ee23036fb8e0b677792f2c4991782fd01a9..7481e5e14c462140dc5f3f10ee1762fac29d15fa 100644 GIT binary patch delta 20 acmX@Ya)gEZG%qg~0}#}8KH11^$pip8odsK6>L*GSrs|XV50`(nIPh*BL zqvV#}6GRqJ5*!g7Kp?^yv)VW>vMi43WvgvBnJ6O*=z>l!yB3G~3TCjiUitUxL8NLV z(yKUvAmyuX-b3=u`9fe0>mQH18+_;#IIiTi0DfrH9_WeUdqrC2%6P|*pcsS5b8W`_ zRJ&4Soq;c3kGRubtyvTy#>#Qj*!$j~7dGf6 z>c%VMbYZ%-s+Y1t$VA)9Ul!)~sevM03xTjUZL=nY1&r|`OOyZj`UIT7 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc index 4d228a9e931b29342c062a935dd88983a1d8e4e9..91ecb7d6bba4d53767dbd540977d3b47f1079ba3 100644 GIT binary patch delta 20 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 YE>HcddeyA{vGU%<;!;IZp!L80Umgj~4gdfE diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc index 598ad92a9ac9ddd3e47a656e61bb815751a85f2d..b4886a08dd82d4c95a3bd1160f487736e485a74d 100644 GIT binary patch delta 20 acmcboa8H5zG%qg~0}#}8KH10}EC2vPs|Eo8 delta 20 acmcboa8H5zG%qg~0}z~b*|(89SO5S*cm?GE diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-38.pyc deleted file mode 100644 index d566dd7c9283267472ac58ea2cc5dfb36ef8b908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2616 zcmaJ@&5s;M6|d^=?&;~Bo!w2=d=3NygTyW}H!DI8o7jnBO)PtyKxd++cdBN#$Nfch z&wi=*!sdVwMmZs&B$9m$M}+ue>V(9}x10j(A>qC19ea@w-Rj@Gdi7p?yn63f^RV0X z2t2?0tC;=CC*&X4xcV5-xCLMJHvmQ$O-V*VLQ&RInrWey>7kw(p^=%PnOUKg*`W>n zIx|uyb3-@tLXQ$|ieG`wOgot$`dK&ZW!irzRCdR|y!S@5_vRaWZ@)FVBh807=%uq4 zrzzS$qd1r*jWIt4H^lKt$%neM_lmqKV8r!H;XcpVNU8@EesE|Z0=km%w*OlwhELPx@?_!++!W+w|R@tJwWG!)>M7q z*~%EGPh1Gt+J|P?WhR8HFWtMvyj}13_J#fa_2a?yUwrV)fd!3*wsfn5;wZu}N>7O? zKji79x{T`s*}=|eR){RF_l z3xZu46;EgX-{UhPz6p*Ozumhzd025#O*lJ>#pIowzb=wPK6$;EE;F9j)#RQi<|59r zB%e>-O{!&_4j$A?mK1{}(HHM&|M^MotV|^l zQ0PQ-5qbbaSK8Cd%V{Du4U*9_7Yd&;Jq7YO19E7*g~1GFKBi|KW;LA%4s~IPSDVg4<@RF= zHe}(5`%2@2>@p9_UA5_D`RmHc6UU7OANmH&LEkw!^VNu-H+uQ|hCb;$C1-kLlz#-R ze`eI(#yF?q&yZ63IX&y$13 z!Yp|Y^-ULL^oV+3?R-Rqru3%LqlMdOtq1gb(EpppLac*xauzhfq7Uheem7aKaXu!W zYPklL?Wq0Qpg(ScCwqp=vO;y^b9qh<> zRY5vSV^*XLc+wOxP;G1H6o*{Q(&DHc7W3$W4o-c{s=+Kt`OV#3F@O;-=*6>8es$8gr2_Y4PJS&Y7xa>A||AX^}3oyyXHcenkkezFmB8203&}%TP_s~hQcrm`Ql2)Ocg$yTwf%VjNf7)AD0B^R-zD%1Exx)_qEhFeCFPYd4yZ!CUXY!nTkRow$1 z9iRG|uLuCK2d_tcYJlv6@Wd{H=n*}%k diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-38.pyc deleted file mode 100644 index b4b8091c3454312cf18d60f0a919a40d69edd442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1310 zcmb7EO-~a+7@n_|rL;u}A#!rBYa$rpL5VSb5E2uEgf5`XYP0Q3%ZB}8X154wFW|}F z;2+@bPw})@PyPi@zB3E7B$~)H^Uk~qlRF7{Vw}I7(zd_Gd-%{ynw0B zz;MKIh$7s^5owc%wkbw}a&nH_Okly55m+KBg7wKVT1K3HBb@Qd7uK%+GhgL1ke|7c z*C){H6D&Rp6&A0xkTdrS`aljXtT&mEem4|F#m!S#X55oh?D?|5u0x9I&<}H=imDV@ zF5@27k6jK5s|B+MQ*D9C&Nf&$PU2ihyK9sC(`Z*Qf0Pj zcxB7oyr2aO;Bp0v#pkSOw6Y{E&kK^+p;A*)%;}2G*S%dOr1Atm z_NDhO78^1c3U4Fn<&lUpX;ABhL^V`pwAAgZTR~ImR!e*uBzLm}sWJgc-i79i zimCrAK=Tv1bo5#Gp?8#ZO9H;sueH~_ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc index 12e362a8854737895ab6b6bc5dc61676dae238bd..dbade4e049186887d1f4bc43cc71fbf5e2a6ec12 100644 GIT binary patch delta 20 acmX>vb6$q~G%qg~0}#}8KH13a!Uq69!3D|y delta 20 acmX>vb6$q~G%qg~0}z~b*|(9~g%1Efjs>m& diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-38.pyc deleted file mode 100644 index b1d19b504e854fbe22191fceb0f593ed84609111..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3801 zcmbtX+iu%N5amrYB}=}@iWB9k+@oCV#7UYoNrR-h6fO)osFM~T1Q4`lZ4)6WbxGN= zUu~d3(NFLX;71f7f$U12Y|1jV6<6_8Q}r}c^Kxd+(@otQGsir`G-T-q2~^PbB+!`3 z@>OY9H4Ch;E1BbvTaoJeCmc_z%Tehqw_9x0ZoPlI-C=b-QWlpZV=-jhUUgZo6}EY# zEjd9L8Oxo}Y5TStY4m)HM#)~Oy?@A(#3WM&$yCq+4di_p6j1lHUD?c~8Vzznqq8yb zgbrhSnrVO`dU+^dFW5;9G&uAYOrEh)=*H z)J!t1D#0vjkHZPnPQhc;;t#6(Dx8Ea%bTdo%EaRoHk{LTwF4 zIS&``jbptxF2W^zW|kcnECyW0C$7L%)Sc-0ehuo_tFn{g2^#l0+(6AKb~@GEgj=XN zgFI*1xvGR*75Yb6L)#6Q+t*+oZsRlOnTB@UL6!x$i~S3|8M_Dfv3Id&`8V(YdzZk# zh<_Iujjrpyc3g&G*EtKj+;3r&(u>-3zrZ`tP=LH5eN-Be^ildKM_Rz#HC{r!5P$#n z;!*Qmz;}XOlHwwp(3~`C-s}!`tiJ_B_X5Z~p8AUE8g#gk5mjwT0UY z3(Ysre|o!O{lZq8cBj*1{-(8s?ImZm88{)k)xo5+*ICf)IGuTGlljo*^W14|%v(Ns zVy&SobDix-^V-1jWVC`pQg%v-qjQ8D?qgkPaC$#>ZX#_7U#GAeX};|->JC#7aySJ} z8s_ghRqm$&G_4a$=ZDhGAlm;gIn$75EIkeK3RW1a=s1 zAJ0(qortkdlwNfuDq0D*W%-;cU`vD!8+1{7C=vNMY6W{;;gi&^CW_dmI8dC~a1wzy zP;w?02>EI!4H|_i4io+K3q zOD<{;B?B%ePRckR)Hok%q&S~wGge~dV(+gYFq{;Ge0@^TD3lcS3`ajH67&c>7gFm- zR-ur&?#&EGzt9o#S+E0Vr#GF4udS3f2{z4EJcIorXoS4$x9pJ3XH4k3nV?5-^UHsS?&C-BIW1p&RA>z>gzQ6T zSr0Qz{kcuhAsz~?*srOGhPY#|%ez#ni4C`T4ISVI5fWxuj}IV>(ILXYr8qE`BYEv#!PEg0h(3CUJ*E zda&VQBf)^M4-N+8If8NB(08%{iBU{KEyTbbCGjXOLksQh2=1Inti_aA-s$hv0{ZHx zAEhpi5zLOLe! zQzU3J=lJ<0@pB|-FXNX;TqZF_;wp)2Bq+W3brLs7&=(KCMS^xJK1aep5tY8T1NQ1e zi-|8LPAipDMdSBKP(|SnNc0mgEw$n_N&^Q}4h&6^r&PKp#IKC9tj?+x(VIm{t+HCq z6=WTM%0ESeo)x1s>cuD*;-^|5EQoY$<8eGTR=6S@5Y7un$#(vP1RaT^eB<5HlJ$CV Y>D4GhBjZUNkEgWY0ve?#*VIbmKg(;^i2wiq diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc index 92cb3689acf1c1e331d80bfdc8746df5c51563d0..7b51b1f842a38dd7b59239b389a7393da7d273d7 100644 GIT binary patch delta 20 acmcbtaan`=G%qg~0}#}8KH13aAp!tG7X|bH delta 20 acmcbtaan`=G%qg~0}z~b*|(9~Lj(Xp=4X{&&$fBZv3yO7TS8zkc4K#`yD2@vPE-WtPoM-NP?{fn`^rIhae(#gh|2^;dzwaa; z+Pikjl*y6(*}9{A`lWkB(L??h{gcZ@(Q*To?R8Ov2)VwfKexeXF^4+TqX84J3npR` zcEx1uhDJ=mR7}Hk%;=qdPHsb;_07aA?2g%(gSmJSUW}Ju5A2DT;$_$i^Dv)%_3V2& z_QpQg7yDs};FdU8}a3qex5*&@CI0nmbES94c z$KiOip&cjSM6AF{oP?8Y&MLeD9awFXI`K-ZK^MBQ7VEGcr{GoCfL9}rQ*j!4@ER1b z5t{%MaXNZ&21&O{&jF@Qk~;dLmZf?&uG7x5*08Mok8+=kn62kyjO z_zJ#?yKxV`hOgrr_$I!Ed+}|22j9hg_#VEGAK-`h5$?wW_%VKhG5i!i!-M!aeqo>b zFYzn<8V}j${xE)n-{KMc4psaff50E{Cp?Nj<1svrC-4{i6@SCu@g$zY(|88|u%FgH z@h|)vJ28J-4w0>#tvXxvwi;|ru(gY=iMA%$+SS%%`)ac9yV+{AHO1CcThnY!w>87o zOk1;T?QU!Kwp?#yzg<3WPFJ*GuKku)ZADGFv5B39zT)t3v8le=Xrx>p!ob~DSEqUG zWno~J*VlSXt${nezS6^%b(DQZ^$3qKg6jER&-K_|153QV#N)vlxYxdwXNNG$sMm8s z7I#o_76$xb^&Sfz*TB;b9{0G;!obm9pXIT$26ouD+Uc&Ufr3B0-|4LC zDVZE*Bs6p=NV+rEC-t_>3f19G0<{pRg+MI?Y9UaIcV{dFY9UYyfk(J4fm#UE;tw+x0<{pRg+MI?9zjc>7O%@X zlt70P=um=qsPE(dX?LZB7`k4%SJ*r67Gn6VJ3g+MI?Y9a6lS^~9rov{$8g+MI? zY9UYyfrn{%uST(?Ahx6+wxqzT%#7HQcBsYYg}bnWKrIAnAy5l}S_stQ+cOpdZwn_S zPz!-t2-HHLmgI(EXmX(pPzyWMLZB7`wfMu#T?q6p1Zp8r3xP*C7=c>6&R7W4LZB7` zwGgOSDpyKoDES_srapcVqP5U9nsXDkHX77j+B z76P>psD(f+-kq@!sD(f+1RmiW1Zp8r3qPes*+QTe0<{pRg}@_d3Dn|s<}L(kAy5l} zS_sra;9*+UevR;Nx)j7iQxFeLK|GYe&lFCYg7~B<(4pL-LkXTU)HjEd`u2>4KrIAn zAy5l}S_stQ-5CpkS_sra;1NzrpcVqP_`{5aKrIAnAy5l}N6-?e#p}$^mOzIR=um>% z(CQ@L-WGi=O4De+@ivte>>^{VShneq~47 z>h)bcovo|dySv-RrgwF>cC@vwX-mkA_LV2D=G90D$1lmRtrW|Z zd=Z-q<^1Y_Vq3X1TFkc%ZW`$?4h&cFo#nyaa-qM!G|-!0SE`H@`sQ^FkDxR-uVryd zOTM#pO?Ow%`r^iXVQ45{92o7{Z1t+r#(bqTTwFL**mP#0w^+#!m4=#oMvL|ev)o)R zZ91d5C%#H$(a_mrla}@mVx+IQEN7>xth3uSHq_PCd-&CAQh00ecNPd0LYV*&s&Z3Ud-&CAQh00d`U_HE?;#smN|It7dX diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-38.pyc deleted file mode 100644 index e760b5d11c5956b4c93d64dec608ffe16843efc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 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 pK+Q{b+gT1?zGLgSV* delta 20 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 delta 20 acmeys{(+tQG%qg~0}z~b*|(AVDKh{!8bD zph(K}`894+@fXr0Gj@b1GSZA@zvjJpJ6F5A+YIgNPcu`Tv0t=!ZarKaquWCanrWW0 zj0Zduf#3{;7I!>w&Y5DeIjiZ zrKz-wB$LGwjJ&Cnv`TWBB8j2To4$dnHhGKK5~h)XdwtcVhl**$Flxnt>$_ibllZUM zDM~Qa%FuL~7Zj-UGt3s9fDKJLY0`ea$6X=#p4;w@{a(|rRwe$IA(0HJ)Rm-1|Etz` QM;*EMG*_13_k`#C1^wmJnE(I) diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc index 87149c544f32af4d22af0d981ad2cd304ab9e908..04073994ee50308a49f3d170fd5c603894140315 100644 GIT binary patch delta 20 acmeBS?_uXY&CAQh00ecNPd0KlG6MiJN(D>+ delta 20 acmeBS?_uXY&CAQh00d`U_HE>DWCj2;7X>f? diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-38.pyc deleted file mode 100644 index 7e837e4d62cab44f0b4aa998894f39627281840d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmZWnO>fgM7`7cJZL^LO2e{=(B-W0d5JCt4ISu-Dm;U9Z3im{>E9vWNFdjkSwrYk9lTk^)^ zaZF4{HM2{|wFxBXMvC0ZxeaQOlakw}p4z0*7Hu%YX9%}=jUS*5SrbO?qm8HW8eJpi ztvyDsDf7S4Z7bK(4_1e@+kmUv*c8PR0*)FOeXIHj3i$`GOF^X z1ff-OEUUT9%F;4O&bVr_BAV!i@hUnxJUU8_U%fw>q#t0GWObc@Sfp1LzvZ(;aSaD` zmVdOSsHEogFkOIPl^jZ*UkpAE3;cRa2r+%Mwao?l( EA3q1dN&o-= diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc index 45b830ec629673b2b96fce2c90f06e94adbdbf7b..bb2b94d06c23b4090c66e9a57e658820d2f39c44 100644 GIT binary patch delta 22 ccmccpi1GF#M()$Ryj%=GP}linBX>X{0Ao4_-v9sr delta 22 ccmccpi1GF#M()$Ryj%=GaMoqtM(%(@0AmLS!vFvP diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-38.pyc deleted file mode 100644 index 2f303ae091b7d9dcd3dddb801a7e1c88c6acf8bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19302 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 Zp-UWi0X=f3v|udQ^<}`7*dSZL{{dNF*A4&x diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc index 9b0fb54f2185c6e31a6e0c3ca36c83e289cb23aa..c770bd7f796a5d6777a7996a5477b0b92f9f87a3 100644 GIT binary patch delta 20 acmZ1=vp|OXG%qg~0}#}8KH11E$_D^AX$3t1 delta 20 acmZ1=vp|OXG%qg~0}z~b*|(8fln($nHU%L7 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-38.pyc deleted file mode 100644 index 1a0721a00d01b97163c524d5dd19cd14d9fae5a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2091 zcmZuy&2Jk;6yMohufN@VG$AR4?y0H|Bq+Uwf@&N?ED}4iokTLORvXVaS+XDQ%s6hO z^{E_?5U76uLX;bKgb;rM2mXM$Ai*g&4jfR$fj7IGbVIw=jOYE{$GkW5-kbe$xuC%J z<&SjqJFNbcMEcW#cnE_Xz=RcyT*X6uOo>*tvf8W^oAvuv2<>Sx-iO26Pb z&v2C++!$%AN@zS)!FFzzpGhlOo(l_DT~WfkoU!&*Y;`lz&x8KAaxbh$d&Ou0&|hL* zj4*nd)+hq+H{g|?E8tr!Uk2jRc zZ${VxV3`Q}8?f6c>u*8qn~CkWuX$bu$va^=_WH4o4M^3j4Lc~i_98BGb7;FRGmmUWuo?I!KOrWIGmn{0Ovl-`Rw$V8)#x$Xj8>A0S?0aV zlK3>q+DFw*^Aa0 zL6jSvTDM^}Th>mq)e!U0C>gPckF8*2xsFf7Vhk~EQ+@>&VlWbz>o$7UVY3D2VfC85 zorcgDry|b?x46SyQmxRUyor)LZ)k~6xX46TD6)`RvYU!>vVc%9VWN~KUs7E5S!4-y#Z5|6S0!Elm;wokUGb4CVR!EhqGG#l*E;F#K; z=lI8i1BXp)*X;5Mb^>$b-HnaGUaiyXT8HFl00lW9{+Ts}^^S8iV330EjNyvxW5Nbw zXS{Bm!GQ&IojSvlb!!?wA{GUZP(s(n=VHl?-k1OJWCF4dOiFeR>F}$lB~?cSl!I{# z-G;dYV*y6|lTDn z`B_GK8X43MC JI)`p*{{f5DW~%@I diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc index fa6f6b1460f8a20acb3f110847fbcc13a2e1ce66..d098b325cb88fcf8291af07987afd1e4a4db52ba 100644 GIT binary patch delta 20 acmaDX^jL`dG%qg~0}#}8KH10}!3h9CbOr4I delta 20 acmaDX^jL`dG%qg~0}z~b*|(89f)fBiK?TtO diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-38.pyc deleted file mode 100644 index 7fb98dea9351651f6b46c98e639ffdfecdc64f31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1567 zcmZ`(OK;>v5bl@9_B@iwYs2OMxgazkHX(qJ5JI~oz%GPr*gO_2vz9a6nRw&Zv^|+5 zvL(ds4MpMy*Q>j#zUrM;tBzp&_(JY4 zn+W}-H!qJGZ0^F$egnc0$02g`pM*Ff4vDBkBjzxSIOQxfqMB2y)<$SXmSaV>V`C)H zMV;41*lCESAcBb&e9e7&8{J0SJSW`Z_H*V;@LM2niAh043nYzm#+$tL+;G}riccI8 z`2tRv45yLY?_5xINnFP-Q*H zh4lAAq1bwm<;vI|q@lRNAnssghe?upp`Ya)qO7h6LoXDus&@~7t+&~!?PhPfTWu0&hnDNnz&I`U6y&{U`n3LG%1Z6V9!)E(=3mg5>f)k_EU=r3Lmz zf1#j&26~MKfNbO+ds%QQIP9)eO2f4JO0WP<9Ofh9__vs6`mAlQvKbAYo}rCa`>6yRtk$ zco2IYG_<*z#90Cju7T0PReYy+-&uM0z4sUWy)GB~y@TNCVHm|p+K0>xj)o`4r}sWt zUHkO2&+k9@;>-1~HXd$%{b*}@XZP_p-#Uwxsap6S+vAhdD>6Q*DgfT@%qb#;s^ups zG>g_@`$ zv_%!Ie4}!nO0BN5`4XwJZG99ad=QF{^(&I;cCzp+Y2r4i(^u;YuR*7gIwbZVorISn diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc index 766c341321e6d419a1127934c22225f829e77fee..c4cb44645ac02b8fd78e1f90940ca43f8ebde418 100644 GIT binary patch delta 20 acmey&^O=YHG%qg~0}#}8KH12f!3F?B83qmj delta 20 acmey&^O=YHG%qg~0}z~b*|(89gAD*e<^}Qq diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-38.pyc deleted file mode 100644 index d186769610915d4fba8298c44865137b792bf498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 zcmZux&2Ah;5bmCt{qfk|1e9<>q9r)6QdlD&I9L&iaTG4dM0NtwXrxxpblE$2W_r@y z>%wF%6?g&eJk4A=@d})%>b0{=prz^Us;-}}zN+5mySpjF_3Iz@>^f%bPZBm) zg2E&G+%LFkrg_a8o^j5;WjfOFTc%^+%Q%Z5*2zU=-=NK)PMSeB;0y*!mJMM9V;DfR zjF#vZq~WcEQHFYiQAW!s+k!2$PlH8zYeAA8-%5JxlugsW5DS~~K0f^BsHF4edWZNk z)B?-6W?7_p7DIw4hC2EUaqHx5vgFxF4=~=apPW?X`~+GJRuwgany%tbqkdqh)_!QgFKk;z z8=astjubn>&)vh#v!A)<%c%P>oNyqJ{P_B-quYAd-2A&(yXJdcXn$8qx{x;*rR>Ky z8i}(pnk%Qgw}>$=YiDUJerJ}Z{qNUD2l;ac*5#mIDw}`b!ed)qLjKs4iw0Wn@~76E zTh%mGd!GMLxrM65sbA>Ii2X13_w%QRC(lmhk5J^Q>vCu>&cSYFUq6lL!H|9dhJ48}oFTVbSn!9ev?0wtg>6l7wRRdUb zDrIBzqNekXlrIqK&CN(kZAw&cheQqdxzT;%uR7?H!kF6bVAep%#KifUhPaJ+ zl14n}C~u>xRuaX@Go0!Fygz(8tA7j%zJ7n$YV5=lV~(e>-Nh?Ap^fU^NKWms0l`Oj z`WU}J%9vY{dv-kC?qlT85>)|Fh}GXmqGvZm&xq)mM{M>!IdR_)!u`UR}w@w5NS e-H#ux82y@R38T9c-~C|BccLMm@JTd@>GvP)Ghvnh diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc index 5751b87f92b13dcca6c8f4329987578d4a580b03..8fd3881c8c1b8847d28f509c1e185acbec5bb57d 100644 GIT binary patch delta 20 acmX?`a5jPaG%qg~0}#}8KH13aWB>q3BL;2& delta 20 acmX?`a5jPaG%qg~0}z~b*|(9~$p8RI@CH%< diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-38.pyc deleted file mode 100644 index 2424e784e478fa14f828f9b08faa225807cc96bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7903 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 bK5@p!v7}Z&E(O38UmtS)+AY{@^6CEpiTh7# diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc index 56fae2430122dc12bd45a00a3ced860f344bf6e7..f37ad2fa9364881422dc001bbbdcb24c6b2fc042 100644 GIT binary patch delta 20 acmdn%zSo`mG%qg~0}#}8KH12l7{LMUJ$Nof;9Fd>bQvt8?4o5ib@xVwU& zt~yPf_Mx3l=}V_GO*3-))R|77`rJupI&B|1{R4LT)+hf5opc)dJ9jNvgtU)c&Hnb> z?|aWZpL%C}yr|*%;qT<~ul8!%Ke#aZoI>Fo-srEorjbT^pw+UkUei%F0;6fxOr7h@ zz-s1dxu#vSoB3KEbr$6Ur&*{K6m18^=2&e^(fOd%9IuV*n$Y@Xa)fqk+qzMkctfKC z6+hCbDC{+}wq5KHIkA0@Mq?ivRHE^ZtlDE#rfoDq+i3?qMw7IYcG2UsoA%INdV-#$ zee@JPO%-~Eo~8YCfS#j+bcm*?N{8urdV!{ChK|rtI!3efA|0m_^b(zFT;(J0zyWp*0=tPxKFp zL+koQZE>Pj75n>BqPmXy`}*zQpmdlPxJ3GbR=u{t_dH+KQzz=Q+fqbP)l8jBv5?+U zAkyNz*A#TE(+2HaZpVHr^nwjYfrcTu3$36fnOKPL1ppgZ8B|Z*m^wFItJkO9#iV}Y#?k4si-&JirjG#6O@Di_S}itsSEG-K!a2Or z8Gz7O>T1S2I77`Oqh>)qY%)(n5^H(kh#a_PlcmaqVL6AgjWg%dqB|Ex{+-8e9 z0n;Vdz1{JG&6d3DQmf&*vV>h@cr4RxuIq(iEB2U`5t_!)By$X9z^^sAlWB&}KD=TSP$#JwXzYRMzgZ`?e>te9!v zlWZ3r!y7q(qHY-_eL`2YRU<8MFE_@Or?wPvM}`fSjKPx!VdLe?jD86qy{E@oUr#h8 zo9&*F7=45Eb-ix%%$|jkxvqiE_3Xq<^i@l~9$Sf)=!waiu%=(vbS<%Ekl6hk8SA?2 z#uk|g?wWGkBgw6q+$St&^@DO^_4M22M33zRv#e_JlWbnHx8}`cqx*X$77&1nwn_QKR&k*!WUQrDU~kb>y0AKy&PK!nx2e4HnA+AT;7L^jPe zy|{5R%|)>%onLZ zP93cdsAEHFc1XQAq>c}%6GQ5yA$78v=1DAjuu$ExRtVwQoO`Q)>9-14VXJ^ewhCBh ztAM4p3RrEcaI)GhVx7%3)7&zw3rxQV8@_C?6KH|id=1@Q%njA7csl6OEph#@*Csb! z9-ioxYPXP`;uu&oAaRHRi6ab19AH3V`vdZ!&12%N&13G;kV!oKNC_*9l(5K13G0lM zu+&KDM78=#rbh-ubAuhxhQ+`(dqXK08@dfPkQ)UCR)P(d{|#21jol1;7+CZ-SP3?s zWZ1{>6vNXD6^3URo@Ln2aDahTV&f3Q6hoEaFvIfu*|T+aFfAjxW%vvVDtXa!z?<7H#!d(`0C74lligE zwi-Z{8Ro?RCD(gB zp@_?fwOe}603sZT5s<{zn%2uDxmz5N=zW`X1RVyMdo%wcFSpBA!`kR`|aaNfvnYn{8>`y7bu6I<)^4Y$iksVzest6KW4Ak8|#&l zF|=W9e=I4r?~}ETP|0;LgQI3RP7W15(h{d%;!zh7%JjzL@njs|a#B`%IoI2kY@_0; zA=AX_mz8Wgw?9p`#oJcx`E`;um#qKCt$7In<8TMY<_?Yzcks`LdVcvHHb;%_0o=~P5|q1t+Eg!3X~<~U z2J_=T6#B8GKOFvX4a@9S^ruSyQ-7|i5PBr~<4H0Fnp0n>H=-`YIF;s5p}a<;C5eMc zgs7t%6sadb|*-= za5q-06YAttY_R-?1{rI{PmJ3ZcxI}gbK?Oa?&dTg^cv%%ogdQbu30`%Z17N{DKa(kRQMB2pQ0OHswVS#VrvBmB)G z;;~MfyjbvFR^c(&oTV1qVACOL_=aCG#6iajUHiuL`ZL zkW;Cm+MWuLs@pRgsLa=g7$LvQ!)#aO+o{FLh+N~UqDlrb*P=2?c5Z3j#bRDFN(+%_ z`aET*OewahGMBW-+f+9Zr50DEMYXUS-)n!--pUA5ejjfn0b0REz;5BSkr7UU+JRsm zfjp>5-7#&$`P|NNjf0%AXzaxc8fE+*6ixmbYP9`tPoGhu@GCpg#ua$j~aw)8FS-y)L*MQ4Few)BpB8TPwUW|F4`&O;gXo3Aw zco4cMCOB5CCvi3KTtCMgsRjA+Mz*YW`wO)E9dE>Ht08wP>XPg5H%$Hl{#$4T;u>gV z=4>IlxlX)1{c?9KTVUp9+zhJEr-l^xU*cZG_a3r11^!Ydn>IuMW+h`DA4&a5!GePf zL@AO|icE3tbGyu) z)bLyKW7OBoc6^UhA7v%d{P}yah%Q~0pYXtM@xa^?SE&=T(s_3w+MZmwqtZY=yj)lF zuZZ}L7j%TW``UPRd>4OoA*F&cA|;PicmN&o?g*FpGQ#PhaHP)Z>`$IE979IG1vn7r zl0FIX#?P>H!?ONm6(*d?eFjAP|N8s0{gv|jyRaYiGoXCNL~fT+GK$En9lT}ZKbhvM A1ONa4 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc index 582c352b04ad31aacf701564c3458c5696db56fe..f337fcb64165f37395dcad6a6c36944e4a30e8b7 100644 GIT binary patch delta 20 acmcbucw3SCG%qg~0}#}8KH129K>z?lR|a|j delta 20 acmcbucw3SCG%qg~0}z~b*|(AVf&c(RBnDmp diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-38.pyc deleted file mode 100644 index be447362745810d925b54c71581ce55eddc71dcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2972 zcmb6b%WfP+u;)EHJG)ssn>UXkyu8SHC6uMp zYb+r-NI(d1feS$jN3Mtu;LIn?5l;Do5Q#ul&%|B_IHX5iRb5?OU0q#OJ3St=7&oMt8a~81}r;Q~xtVnGs zTMOA(ft`N;?z0MiQ{itPNlrz6UE!}Pe7C}1R`^bZzo_u%eLU1;tHIzD^z;@0MqG&! zSEiDy;Dx}a-cy(=K8@)I2s4<;Y6E$aqS`&3>eRTcyB4ca^PU8*w{EL$o!P9xnzVjT zLDvIkm*BJn2QC6QQ&a|Lw+dy>=l-AI+R|sK<2&HffI6#T(!cJk`uwP6InYk?VR}+f zI7)+c=FAMj#Lqe>oy&eWX3iktPIi?!;Cv?;2vRIZd2Fj}7{uF)=EQK61aaoftg`GT zW3hAG@nJP;pLK$`ACA-D2J0N%+81?iZMy)2XIy_XpxISt2KJnFk}AI709OQi+h~~N z&dN$RiP_4EI9TN03Zil32n9!-Gi=~PaHUR`I4HGkVIQN@nGqrTp$OGkC(ZarJN6U& zNhj@4c$k*j4{vK-9X^|0a6H^y|N4+8R~{ zZh#LHevAkGtH&@+Mr(!Xc|jaxp7%W1lZv8l>5>hfF0I>hAoN54s+P`KHs*039rUCj zjlLIte*p*ze!oV(hbj+Ps;~@L`N07Hs@-)J)XuESv(6)_(@~!CR7c_mK#TBC2@b&! z?c{94J?{vNQW*f*vag)L>fEoYvr*<*%JEcv438(R0fYv<4?TtVg=7THq~v;yPa_qp zxqMB=zA0}gz`?Fw*ZA2?gQF>Jl-D=q%S0lXcHj7sAcdimnK@KaF<(m64v|f11450; z2g!zpcrV$|C*)KiUCJ4`A>>TNAXkIkv^LqWa-IL2TN&U3b5FA#4^l{EYFJ)Iu4PxJ?~>EVAYJ_c{J$*TN7_O$E4=3BEU0p z%+f-EXN*6G!xs_g2(a34w1Q(T;Nm>TklHq1P*^v369AUo^bG*u>?v7-@1ZISEbDMB z){5eD=C delta 20 acmewx^EZb3G%qg~0}z~b*|(9qNDlx{-UiqJ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-38.pyc deleted file mode 100644 index cdd6fed2080e7a32ebacfd5b78e6cc52c4278491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8535 zcmd5>-E$nrao^qB`^4e!Nf7*AQlfw(0g!~K57UxN5CBO?AV3o!X`Y~L4mSf}!M)q# z>>f#=4lymL;s=KnxdN13F`baH;)D(pyDCbYN>r8qV;?Vh;X@wtBBe_C_3Yvf00BBK zSGlsl_ICI5bk9f6bkE%N=H`@w=LesQIq{mJ{09-6pAHb`@w(j+MY*mpg{iiZqpxPG zMJ=ZlBe_UX&*`edmBlEF+>VMjQL3XfmW!!MDJ`jZK(Q!`*@6NM#LwOpE~S&B8W^g}Jz%+ox>n%_~t%Y?iZ$!n3k){xgKd2N!{zN+Th zB;6tDPSEX=-XrNQ&>fQAE9q{~os!-s>HVPhNcw=J4}$KJ^dU(f2EA9(MTCC)Wc!%HFVhi`iUO;&0j~iYId?CH|J(SM1OAOZ;tnpm-{G z3UhoC?fS+;HFttFvliCII@lhzm+fN**dca=9c8bu|OTWLk*fvJU;V8!S^^cev6%lUkvis`RP@4MER(kJInjQA7U2(hac*> zKHm5E4K~6?pHN-GFS1J^{wBN3F28`k#k2hEs>b`wEI-A@_}QN*Kh@a#)CTb0=7W#F z!TX-5s`9CJ=f~6~o&dHF2Xbxd8BfkN14u|k0LC_;-6qGa-Ag}sVvD-pXj-GNMVJ6O0dH$19^qD zK)#i=eG<(jL6Lkr>wrXxH}Uj71+_XKX_&(<@S53?kegxMD2t+W-y@yvX9rNfWlN2N z>=0_SG99C3_>l|F{mLEmdW6qeCGHx9g}lfYFc_}kIfmdR#)UEK+~@8(&NX)zEqzJVieKC4nPh`&-!;QWc^S71fC$UK(#R-VFG$kl!Mu zTfuDuHy(1^L3iNo#JdOlM9A*~y%%pc-hJRFL;ilLbb+bM$DYtA}o=r~b>$F<^1ia6*`JCrRfcZ^CGV87dkM)y82y1@9^ONL}fn2jh z?{eW;g}m*jBpFBrMew{pvLh%0x!?$E*(rID&(xU(;kfQ5I?$1THwV?zgw^dNi3&yP z7BYlwQl2C_&@0ifSsQL2Hmgom3-1x2;ooE?ZkpI7P4gnyZfK<`=$YhC3(8lqb;W~y z5v$V8&+(wQ5fp7a)IoY>b7?rM%1WfFE-GSwRTKL?Y+qGuRZld@jffM~$fE9^@S>n2 z2vTbPR~W3R%B<^IUd7{$O?S=_M!w{D3kXrzj4jW&=ahQ9ji|-2MdbfsriWNZ)P?x}l&kU;++JY-Kf(9v~q1YjAZ12V99$;*PkirEw z@_28ToO>msEF5GlMYkT4NIgBw!j70xB1FRQZTG$YJVVTsulxlj)V+7f% z@g+aB=UGA~%zel~@Cno$~&Sw|oaxrRe^xXgdJ=p(#TpUEK7%W{6FV%^Q# zG_122R&OEi8O%XW0r&ntP0Tcm6dl(yT&rl=c_C+~u7*|xJT`1bzijuMRgktCjc?2z z%{M)=$J_|rN$Sko0`YVSQ|?*roP{RJB&Z-LCL=!%`iRBYluZ|Cm zO_-NQhek$6wmN|r#lY{l8+F1vOt`yMGARgiMv1|PkPfz{#Bw*y?M_0l7`taNZ@~?= zCb^ZNB0aPn)+hZ2hB@oFYZV|(~Vv_w0vll zypOOK-IU!SH3i466iXYaxq)ZLrHc)lmM%VWx0u^?-hCw-_hX2g2#cZ<10s?H_7LbI zuouAB7agngG#0GM4~P>j=Y{8rE3%Z1O@351{Dq)GGlU`F5OmuCl$4Ipno?WU3|43w z*s=^Vp`0HzvJp;fLmQ%4aT9*=0DG`$raY(!mi3lVZBoZq+Bd<^v zld?R8@)IbJqWq7+ZIT+&QleQ(WFV37S{U-`k5zbFqMBH2T}f6W;2ZnWzy6&(?)T+z;yPwTPOP{I z>`T=Uv<{b#%Q-cQ73^rU+~}eC@98so;0`?$bb81Odc-(nvmN39DLF{s5P`!4juCi; zz^ep~6F5S^AaInxYXo`-^b*Jd_^BItyTV6>aD;T{U;#{^D4T9Ly!Z}PxJ4ConOLVb z<>S#H4UftsSzIMaS{UNn1g;U-7P#W%?daJO%G~n+N+uyw&X}6OA0?j~7_F8~JT0LS zM+dJ}#<-Nk8*2z!>nBN4{QKMSo^JSGaAf#@yy*pA6b~k;AA=OkIi;%N6oJzO$OXhC zfo-#wqS*^N`3n^9wynwJqam7Ar?Z-L{ON2P<@6<_P^RgpOta{)icNUhH1FVa6P6$$ zXHEg^2=;Mbr#lJpF16=d1kMwCtPo8AbS7{O zfP|{Ib|1?`GLg>qOsaD)jw}D8Y2=1D;e3@oBc+#nPxkkpOjV6)HC63D3DCgmq!gJJ zvlemHWrk6ih0V=ZRw=rp3a+Yv zHtv^R!rx7(aov>iV^iP0K6GvL<>uD^qPG5NZT%Ou^(Vihx%R-^mY&kQ<9crW*9OuF z>Se07{?FkJ-1_G`@^%s+75`+U{P>lziLom~_gI)JxNI z<5n<9bpG7hbTooSs@@fJ=s|7m3($2W=;KCnJ2upAo_t!k1|FGTg;gJHP?9gTZDC<5 z$F5u*AFcHL#>x%Ng!xTD#h^B(?%S}#94~^sC32n9Yzn7xVYU}^-5)a&Mf$Xvn)_*0HeqLMuCEVuP3q8%uq+4nC0`{C;iiDNO#B1G=_(X9-QxaVea` zHMur^UR(bWR`?IGQhtbkppPXVbNjQG@OKmXb6NRmZT+X%%z`zv#oT9gbGYW0=KeAq z)b+m#%csVXv@^P_B_XW6egKF`8u$B{->7Xl&Gs}sKQj)Nc zH(2Kl=Ja81+snuY?hp9!BCa-ZSDihFEMdv@W8P934G`2YnG*;)3i)Z=0J}J=mz8N z%k9)ec~TZtD(-rr2beEzixpBpXA0>uete@}e*~5v^~h($cL~=$jE#5zG#9-v`JK@z zoPcq*_Na=q8RV+|bcWe_ASn+Q0elzx1vyH6d$BYZwLX>sTbz K0!^K`Q}|yvmku`o diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc index 54d2960531491c4e2ebaad4963fcbf33ec1f24ce..21aae278fbd62335ba7cd26946c01c091acd9167 100644 GIT binary patch delta 20 acmbQMGgpWEG%qg~0}#}8KH11EBnALFIR#t* delta 20 acmbQMGgpWEG%qg~0}z~b*|(8fNDKfv1_eL> diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-38.pyc deleted file mode 100644 index 97d34ec4d75d13595a63da8e45525fa98592ebb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4051 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-38.pyc deleted file mode 100644 index 750ca157bf5071a06c560e4f14cba0969a1892c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 VZC(q92vo4i?MDbB`a&}Le*qG%WUc@J diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc index 6cfa77a52480fe0bc50592bc7b940ec9fe630c90..b1d4f9328fd068deaa582cf835b952106a77ef7f 100644 GIT binary patch delta 20 acmcb>dx4kxG%qg~0}#}8KH129lnnqr#Rew; delta 20 acmcb>dx4kxG%qg~0}z~b*|(AVC>sDik_HO^ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-38.pyc deleted file mode 100644 index 554038aa4918cf93ac8aaec8d1898ffb94d73ae8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1461 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 z znEk70vwbrg-Uknrd95#XR~KuD=Ni-(wDfwGJi-&r8r%e?7W)mn?PnIWK~?71h?5_) z9VQtBq)jX&d;yF*fG1(Hy$0ox-fG_#@sSZFzbys?qs*m8cLW?^RPC7xOMP*S34IKJ zC;>@P)b}ntZeY=ZR46krv>qF=pJRO)S;QXV39R+&s2GeUGxdiedjxH7kdM2W(@jtWnjcP7>5-_a7BHz_n%0= zHfR`MPr~Jg>0ktf-(gtWND71wqVrECk;6HypW&XVjI46qr5DcEGby?W(HuQ(ta~k) zO20NNxzf3J-D?@~+z>}_?E>$|>*#9S>d#{v(GrQ#5&H;iI6UK4TqizC8|dU@bJhKx zxI=^k54;l3zY>2C`fceqaRI)Mz3>i#XvRMgVqi>wHH&t!`2P`XIH16Wo3&p>_0peZ z`JRb<)1fJ1oKh zo9hc}5XhSWRbiiS62c)F|BTSPm2D9ckbt;VSRE{qB?fw_frwOjRLQfA5FCy+S@8O6 zY%PrwVu=mtFlzLhIj_~M4+AhGx{D$@T@76b24OUqjdBfA<}NVqN5hnvN~mcFbQ71l zdv$w~?dVcBSm5iPNJQX{knkrphCG4kA$OT4Cq-uY+-U4IPU&ulF!F0&gspu^tx-G9T!P zivc31+?$ob*?PYYiRQ2meaTNHh}4W-?~lJvvf;o3Si~R-3oIz|BTaUtj~2Y=jg{Q_*h)XbyTT9c3kbJ&=kA9enJzxGds?wW!u`Pe5ALV%RIZ;uH218%h@iz~ zhWCa~14~n!)Rdcp)Bp-~}%!ZSeALnws8z&UO zAY>i{Ze;9-77&V|GVZ~MLP#q5kSCgV?xaf0H&RyvSM)&;m?=@Beg+AECkz+UD^fa+ zt!^a1{vyh|(?@v2k3~Bk@sYlGeK{X`^}Sc>i`7G1oQ_q!?@}W4ZuM0Rl4=9I^(3gZ z5~YsoiW^dKGM5Z{t!Yu$b})|Xy=(`^V$47X1VcCEmTd3CTg)bKJAo;D*O{ajDJF0@ zL}v`d*!#gW;g^1xz4oRCLRr&`4$({K(-IGSuVr8*nt#dphWi+xuc$|)2N0AnqI{Ic zv(cD7mo$Q8HEI2L+=7rgk||{16tXpFmgy0xz@hU%sSN2yG;B7wX6&{x&Rll#a% zyzuw=qayZ^V!TRfsStDtN+J{i#5KYmT6V-&W60Vo0yby_6p9e`+9Wa17 z{I3F@HpB4Pn{nm#`W5k}VC;6(J}J;qydkXf1MFN9+ZY1%G7eZZn!2CZJWKa?Fat8H|Dvs(QC+G&{>rrIwEcCiP>?0 z!oCQVo@&yQyU|;28rxCOGgb#*YINzrL5XA%S`6*?VFVT*aM#>zd$No7X5Ir16z7sW%qY=aN?8P z;Q5u5;0y@vrXox&L4?5#k7SD>g`Pr70c`&9x@+Bq>>17Boe1;NUPn$nq|Bag{pWCP zH;E)~@5B^|ku=L%vz(X_3~(>_)a3zFSLnz?jLD_LrIA#Eq={{brzoZz+|$+ohl@IT zmzZyG%J3ttQT#8uI&Jf=Gnlkbu@PM;g8f<4e?HU_pPi1x35zs`ZN?XB>bU_I4Bt%b zhCGilL`*+s{M`n^gTz)0!5OjUZywzVC8DmnC@R7=)z3}pVE}^ARMXWO9;vo^lZnSd zLgm|av9**(iIf#shAPT=2J4oJ9VPI-FwifCpmK%PdV!^?zRc!;u3=?|j*#`FhxD?4(pirhLAotrz zBe7KSxfQ>dJpOdNtuC6Y-6|3nW2|BS6O1nfvZx*}s#>*|(J7oyv43LB{zdfQ1?`Uf zd0eXwpW&69W_iU##}gh+=nbaSAU;-P7!gGb91}P~Tc`*_ss_xP4?rFYc15*Xb+AGP z9}yfl8L>reo$lBCzaaCjDSgka6fNy^CD>Z9y+WjQU+^BE}G#T$%V5)cjU2n ziDEpkj(Mo!$_!Nm%I#Gf`ZY8lZ!Q5fusrf`xear!1P`VoSio@t)C}oPuMitNYI||4 z@bRoGEt2X0d>jZ{^9Nz>Hj9-Z+j`jl5VOnA18VlOM5id?xV`?sdbi&p*`P!Gw-?7A zk7*RXpT6QCG*^kEi(W*7`=aO}vVy)mLhBhpQ0snpYd)|y+>#etL$QBocs_$6H8@d_ z(nEJxt%N;UdU105-knojagws-4-fU*fkR^85;bKK z0&*@6ng%B!S(v`V6Tf)dBZY8L=37eLU>h(Fs|(mjVo#!*@1^BrK%%<#zsyD3$-#;r zC3qmU`I0}C5g+*{`y0KIl6*0BJV9I#L8Ha1ZnJX(ZTgsx6g>f-;gu1A1gQz9E`bD< zGQffHmQ1!yf0=0-|=&nbwBO2HrxgwLmlAI0diGVG3a(dVSPP)*z5Q z4YqX(G@y}z!!BYA^8aZVR?}fu_?UF_SABO|4tQ@^f#y>(D-!^n)+y28R(!7qR+^e_ z&66y1y&cXmlAVd!ZkEO+i(;`+pYz8YLB7OD64EnLzGoce8Koju`vlgX`8Ly~N&5)E z2Mw25u`1=6UEBy0GGgwZ^k(9857wU|GoI!hL_sjWl27bs@mQCf zrP?tl$ZBB2sp1huqb+NS8nD6W(=X%vCW@DxX4gV0w-9>HDGz89e!ApVs|Bv=5L44sg&?dD)3 zz0z|&raZ%+j6L%i(vC)NBRiJ>1*v%yct>nr8j4yttv8n}!D_NE>4NVRZr%=-T zQ!6ED{t0Q|e1Sm`U;I~-0|ll9iwH7+c1W8^1z~Ievjf$7P(uX?p^tcjeahq+b}<7s zq?`UcBQ~O%ch^|)dQ?wOcfk&nWP9m54=Yk`e=8h!2?6^>qDE1cw^e1p=}*4AA3gc< zRXEwB97SU|jSbrO@cLe!j`Ee@7RQPbdjBJyxvRm}`$I!)T-|}~P>z*nmKutT+0Ww( zw`bp!5H$$9r>1w{IIwg3-l@=-y_NZL4uazCIhH0!Oq_OCahip!S+PlV+n!|F3ry5T z7CBg4V)a&B#4^M2VX9OOU^Wiyz9P!j46cT71r@77HLOy`W)Pi>3e=79;a39<9XkZH zMl^K1jxO3*2ssJPqcRp47N$i^G?o!@2QpObMMO!eUbi0)^mWqHP%z6p5(#ZG@o@<8FY=plOOC_E7jA zp#b<8gGslVECex}Dnf{Q9FJ>KHtAP}&S((kaBu^@L3?2P?2NVXUjYWAg+eH$LERW5 zzF5Nsv9Dr1&3-*@#-$wlTkz0dzc2-p`Q4hujflh*<6<;-u_NWnOLm#xhRD`(L9Ho6 zV#jzhz0`gNg{khC+|*riJCI`R5lAk$E{F5rtd z1}$lNdz_A|GVJ%_{T1}VZuWtP>OPCmIc|a$uop0j{Ex`*@sHg=D(7{Bw4kjU_-s6= zd`CCnl_CL3%e4a5ncNcv+j{Wdv7Z`*QhxIcBC>3T&ka~j_yf#|s|T#}HEf!2;{w=H(yN)kb~fyzMLEqIHuCkvDe#Gazbq! zAi~VBBn{*UmiF4KF0z6Oqf|h9fb%~Jgwi+<(t|#sW$K89y?Hg zLB}G_SS-DiKW2&d5x9|hCA=u@Bt5DwqY_>_;%Ts5S5vu@;Z@+=2kA|ItHgKmb~KS( z#-}6@l4RB9=n{1tAyR4yZ)dE>DQkT%**e9f4>1O zqD`Ry*rXoJE%w0HB%q4$oZv^D26P^_=@-p*d_$B#Kr}iQ9sJCVe;&C|!#G;>>yKpV z%Lz{m*n#_@p_*tLVHmr=gi++Na&5z}Z3Oe}9)Dg~8*o0-G_gjoKY=tIQ!hunjMx!e zh-@e23?eKJ0;_RlqB$>9H|NyA8*Iu9g)kd?K*gf{Rw%-bfXfVgYbYfDwTDrUt`&?`eoJcp*^FgQg%x z@g;$Fv<`(v=g8h(aq7^KDd9hZQzPIwr`F9(zd65Hcf{7{QYsAYkM}{4d&Ov^M6qvw z7!N$Yh}Z2<`%XNo5^5qkNhjm$i~z$V3kYiJ4W~H(p;}|f8Fv=THSC-GtTCZoj@z!TKRDTeK|G9fH#zm<||fT5ypUpBVeC$Yd-{+f3$ee>bc65uVQR z^iiH79mdY(dc_xe-hdm4?-Z-Xm($Q!r^)GK@y4wnAnbfGt!&H2lBI?bi|x>sAY^Y? zqNpTwZ7J%NIyu(RtirU3c>22Anwt865 zQ2@F*KRQ>bm$0@~k|&A9KE?jes}On0`A%UGps$-2E#|iITcfb*#GG!$1kSiRJ=CPY zHSK@ZR>bY&cZE8*b>%ski4&aOZWZ%AtX$}mhS?;{&;<=pG@2qBFV=q- zG{+$Q7_nUjgt8n|54xn4MDA+U7uxWHc-KC-nc+ze?qQT2Tbo0K$k6{Q=}fSOQ+c5h zzk!s|A;)hqasr2`YjHz)flx`zA}fgYe_qWaSb%7wz-NTLz!=~T3QC$UL@fmKPKJvv zD_w{qSBl5WPI;zWDK}u&rL_Y(KW|JSW_(f^cKTFMqOE)6Pg>SCX?zt;`7T0;^dyF$ z>w^%W29kHyM@N{){E=4Pq@B=7;9GwN8OIG}q5`3taE?1TuNaNQ3bZO3PLME(Kq4g~ z`9$fb(NoI76PVPom4z5jga9{*2&Rx7&51f+RSFQMu3bV+gp~YN%~2cjfe|MEtb%rc zfwmyKvV3wxW;(=j>&?kJx5omvL%rF!n&;HU86Aip$`z#|q62g)G)_SI6quoQp{8`= zfNoFc6sh2YKo!ss$y!ynCO<059IW*;;IJ^zJAi19Ta;cG#Zsu?t^>ZS3W|$&3~t7| zgykrp^LRX!(PEPmTYQwkM>df6(G8A(;QXa_rd^4p;3Jl5=jIcrZB1{55xnhb{8paSNrIGbE zGxZ6Lw$Ae8I#_JhO!^D^nEqtRrhr}~pTH1cIzmn$d^)0f>s9UnIH)kc5imejgUZnn zDM)1nUtpF8EXAgPey+Zahd4HDkqo(n4Js%jT|}8!{bHtbVDFMgv?7Ra=1^M|Q7AO9 z{j6z3hMficdq!GujvhGz;~>a9U~q&=ib0WXtFE9T8^SZG0<036g*d+0qghtvS|t_; zjcV3BSQn`@pi*`m>@na4vjlsjG{cgimkYdjs*9A)q8{*GVa@}Z-SR+7&R%ILH}W$ z2Jsj=gj>5pXmA4200>zXFKIHcAxm%_pm)Y1HejJ+chb?$$v{Dc>@+y-Y0Oew zQmTiV3-CIvb5LF;0VCVyQFx9()x!$kJW!|-K_~qI& zHIz_sPGKEcnRU!CM34C;1d9PLsXu2&hxU4%p~}+4w&m% zzb}C&kge@4(~II|vNN5?7zmKK8(;NFPG;J&n%8Y}m^%n;(&2L9t`FMwi$0TewPvz> z>+1HTvSkcrN^bHK+LDS)miHH7xG1sr1d@w6t_5GDjas6#go=>&faww%2X%D9M>I^P!;oR<ZjefC{!Ty}J8Yi2-sWU3|(+DksO*&RVkd{~(gu7>= zm4@}s=yC?N$h26CKWJs1pmokKVx_wp&rnNj31mDX&qN~7TRH}o{D2HG@O$2v!Mp=p zzt+$RW)sIU6Q`S~}ly6Sl2igHzxCIiAc||-RzSTsXYFWfSV1NM)eQ2vR`hg|($aS+v zf6yHA!d0s5*_g2*HCfrL#e+PZA=8xQ)yH{yfu|4PU-02v}x(;#4~XDP4HI3kIN*O=tzmMUtVpIfp)?Xb0=us5=j z^}hg_@n{vX${&@X5wivBVDL*2K9OebFVz@i84i&k*20OJcIgD=>NALYgHlS^un{af z%m{R)IIwi9Le;-wN(*_i8tJO3k}GE=)JeA>pea|*A8AVJaaET`EJ>S==*YU!!Y_Ay zKoakTSq<9Nriblb1V&hw)y#f8RY(AtIA#$VK4P9xd1HBMHjYNQwxY&-VT~{}G>3{u;0_K@&OktLKAILX17neMXBIa zq@=S<@RvN%B-Uw%fbFZ2OR{T~ejF8Q_3iw$XMsr!$pG-AN*UKR%9akQhfG;@s>8*P>@q#^|DN z`dYFFzyA#XhW;#weI{YNw$T{;dNPGACw+gPaMo%8*`rAMakldWPjos{QKV!#zn-^` z;>B1m!)KrY(gl}JFVlj7kNDSvV-*g{$z@vjEG}9pOa~;`nYy^qkbp0aAf6kajL1Zh zZS^eP+3JxecjAcwqMWr0WZI#5X3RM32K-`jIR`CtuE;4NS4`JN8a=IEyVfAP&J>9k z4a9{5>yGz`pCak|>~Cph78xzDw`M?%)Q@;{G;sfsR(~Vg!k&qkPzG89h@6rW;y(bR z{2ZhmsnVxF>OpPD;{l!3%1*I*(*TXnNoz?SaGsV@)LnXEXhob<4%}(T+o}a9IBM|L zey*3Kw(JK{X;WawYoE^wh7u`(revWAucCR5t}f+~G$KmO$iyP=XpRdIcyddxj;Q;O z>KBS>gHM}Yc8#0KJQHefC@+PL4DrkR zyf=R79M)10ObvBGkhzx^A-un=vLt3+Xn9VhRTOMmQzi+eC0?ZoN-opASxEyT3P&%D z^FGb=Uvv)u@ZR>ZrNt{R!H@2DIj!&$djf?kYK;FiW~@sF=k;0(eYGEp)W^I4Kwak? z4bB5TZ|+5^=+2@rs)JA}p=XSRhh5xP>Avv7ry@;2$e0=w|4tITJ9xSqC!db1Zm{p- zi{Kj)Mth7Wp_8(>=$oxCo>G&KGq%cpj&FaSpRs_@w_OOW7u{7W3f%!!Dnd4}k*2%a zhnxSXR~AhisPG!`Ut_s4;NQU14`h3WrORoSR~JyDIwzMqaTnV(gtfzv_@V*E9u@L@dU}jS0r%7){_bbB}9;qBR7EcHI~8aPT3*lhW--a9Bv?2 z#@@9Ma13y#+UD(~^~&6Vf*aC*EE3{Mu`i;Wlzl&hBl zroqC9LBd$?P>z$$;aw#-Ac@=qCffSbrg2|>tWPbxCx{H<_^%>;Np1|pR6Ay$;k(T^ zxr0)HsZ$W|o>YtPUSy|6lbZ`y5@tTn@v{KaIKB`jnX!%9vHicI4?j(8zZPj?tBAjb z1fs~o$B8&S1jcFr+qoLA20r3`!55Nh*hWX}SjN@j2**u02;2CFtj=+sq6yUy5E&+3 z@^=6SC6x&r4#~`XjH}*-*n4pGp7hx?WR|^WWABNdCHf=CVgm{nGr^s%U%;-{*ia{h zy{@yZ?0aAt1h%Nh*$+mEAswH<;DHk~S)XMFkV~J7V>@W$g~SWV7t(Xw5-Ni)bFDaJ zi|<|TN2uX`FgyK_G4_k3^Ao~YWm^4MW2X_axc5bP`a$N{kQBWbq(6Za_{M*h#k1c6 z(*!9bwt4p6^zq96JMVcThaCG5niqDl{1SQefl)&m{>u}|0rl=jI~WidWMGBLg#PpK z_oQA(VTbQNGj|41+7UyI@e78mzmx$8C+gK1E-?`41KzHfgZu?Dsivo>7WNENGvie$ zip94f9PV7ys)2*;M|XSjGD!Dj(^1dNUZi7UcA)k|rEVjb$MX0CVtAa|lqdo?---Sf z>g~n}Sh8yV4^h%f(NDP|)1;yO(_p=(n8(hKFUqLxL;C?BpD9!PSC~5^S0)Tv`(l&I zg7(Gcl`%?K?dyGd+8K;lEi%?KbQBW*F5J>3OYkSl%i)%MZa&~+F2*-?6zZ?kyHajh zQ+IGWk;OHPDr)m$Y^AU`fE1?PCqPi_CwY1bC;BwX+EvzLAT$0SuelyugG24mF4|p& zGB}Hw82=cQjFfGECsH6|8r<2}@pKCx#3f%?2K5xN)&`;~y63YOZmxvAHfs9i%cQ&p zzC$$I+jZ;48DF@9Xf+{Os1t0|9{#*@^K(|8Y=l&wRXdxsZ)(KOCeEVz@Rms|$Ie3X zxDr2$$(>C(i?HHmjNy|c{I@~K2&E>?#x?mkH@Q$R*T5wr=G>z2OqgP*-VPD=-{!3_ zb3s$HDmWpTtpCG?ij^a$6Z|)Cy}afISpe3->~TGc1FZQIu|Fd${r0cJ4a1xt9)Ly* ztkl`qY2yQ-{la(R{RP8*6+a3aexFyN`rl8vjqDS?3OFIkHtrIBxpfad2e&Km`coFL zouJ~}rdZ<#`RoOr$RrE`v~4MD%i4koh1u44309N?KV#<~Q3 zr-yL25i#wQk2Iz5^8Xqn@hL_uL;woP-Ekf=hQzNrhpSMe&@Llli7djOe(1Souf2rX ziZUS?-w=@j?>v3BK+R3bpaIf~vB)1v>+!YyWnM)@GR%}>8DAuG6K;G1f5Z#M>`x&J z7-R@gl3He;rZ7ad?@KNH5c1ps*)b+v)(OH%XmGq0d0s8_$qmvh<&tx(vij**(NAME zai&x>PE46ZS}ahA768;pco2iv4RfbZU9x2xqO;uyfZmp~Vuw4bDjcgP z_H4_<@3gk8q^COT_Xva=sFr$5;kZBtYyY-6+ZUu5j z5xN5?6%hlFe`1U86%2)-Sc2g*n1> zDfS|s{aIMe-O2M|!ltDf20v|)HTwl3?whZ{xGzwt)Unp{HKc8xMFH$PXgAx*&?`EC z-QgSq$t=V~yN``MylFQMXCI|21;j|dp&!)sYlFGldq2EsvALN2;H@4FPm+d@c=M0` zE|_8c4=5>_V0Zi)O0a(tS19c{UP~vnbuOQc`kf0I0ZgX-80B8&0s(z8M7o8*Qm71# zVjETWUqx|(YbDYt3hf0aD6D{uhR`ZtK}ul(=@TN!q!qoA&C=nN1Q9^`#a>V>Mw7{u zJ_n%hTWTy~*Fy|38C=@(Fp$=QnAK0*thORO0h>+m$z;`uL2ch?^_enb@Oe7D_gD8w ze}arh@+V|pCzu^0@{wZwp()`8lw=@8%%_w}p4<;HLO@+B6~7RV$}%ReNNj!HmGz{> z9n^Ux2UZ$Fur5h`z10cI4Xh8^7aLvHDNzcXZ=-JB!sU{=c3r|m^F4H^)|Rs-!Iu_j zZ`aZXQc_Q(tz&jZ@>jM``Ou#a$$#HffZugqQ5Yv;ALA`{BGvL%Mwg%;oWF&BtmAm_ zIlt5K4hkaNmPb8$ifTpMMm+4VVodLhkd13SvH`etAsM@-?ZYS;!PkR<8*r^B@k;5E z4)Tg@8~N?uBaI19Dgjd$s=5h0zMWOwfLvp1hQWeq;bidp&&|G2 z^}$EB6?B}n5?zZ3R_-Lr25^E+h9wo1=wZOj0WU5pu5Z=jU3iMjy2pGUdS%5MT)-Vby|G; z<<@HCJhZ%?+eWq4x7Mfy<}+WY-6(JJeA7TIDetYweqcp+UdfBT(i(t7XlrAY*|Rce zV#6rV{$WM?S5}_~CtzleC7Gf%yfS3=A*VIUo4A$3Q?`M1+R(@?ti{$NRxfc`C z+N-dk*Hv62z7&6^P$R^KSF)|)Hr@h)X-Jz60`vAWh=n&D=z)Am8tY4uJpW?s^jos$ z9q8`%Dg8HdqwcS5jtK|=>Bj#h)e$m!QTf*8C?fxjGOsI9L_!JzCqSwqFJC3uIWb{# zK;aQCwGr)yuvY5T9 zABumz?a5HZA2>APMsR_2m`1U=D|Md5?5WDp()&jRazK%^JHdOXJRs;Ko*%w zHXj67z(=S8@k-DASJDsB>D@D%QXa3^CPOVKRUmPZc7S)~0z#MpFOI5)8fFCXOn_$# zjGx4Qi>voe0mG3al7Cp9KB?HMUG{Hc(#O&}U?>8nL|B$4*%RSbeh*jQ;PMiV9+Y-n z(4xUVAurOl*!wD;eSd^8^q{L^Idx$TMb02rT*&{&*p787oCp~yo0~@1E>Ar?JL@Y8m@EBpKUi zKgS3ER`yS^X~LO$wprXq!m%lLv>U9}Pq9WhqLE&(JE0~}`sntn?Hh`~V2aD7rftwB zZ+w8zW*;L890ZFL7Sdo>9h52aI>Pb(OBx%ZaIZT)UFW^~mvmNbPegI#5b|Nr(o8J# zngL-X#FU7G%SgC`_)cn7ox^#FOmreERQsw~!PKaQ`#6r}MpgeT_5wVsITPmeQ zXd!znKMIW{7)|K&B`a8@dA_j~?BXZBtaLe}v&-?Uf_fA^EabpDMk!MO!QA2r zO%UI#O%&V~#+q|X7~i{OzSBY6Hz=gxU0s71Qiesy+%^i0F4;#1P?rKGxF42y;drAA zl5*K00AP=1-#JP9!?8=o+c{M8lchZ!=K3M*or$3sA_^;`;mHVl<;_G#T2X}t-{BjM0`J2p7&=*Bp9*yW!xSSW zn%I{e0fFFTB#08tudUaV-7>`MtidD%BbQ0cnzzWf^rCWMNTC=|2HJ(f$4wgt6q#t0 zL-T=VVl4lbX($CbpN{poYZuFl<3&UxFzfa>ZNbKw*8XR_b$e;5!_DDKA5n$qKkx)fKo&BeE-V!2xk$QC?Nh7sS5R`6F3|)Q6S+l#A_41 zg6!#*Smbt%*gO%^W7^X^WG0d^Zlu^sLMD<#g!1G*Sd=cHl0pYsC2xyM1#4q0j3V`;XkK8`{+&MqcC&F4(=hC7S>Il1DF1A|2VP*T zTXt%jCF(*bY&^ zfL%HOathxS&l_hH?o)7OHJ4`b2v(mFHIH6yj;m3oy5~q+6uL`betr~Mf9$i3S+6a+ z+~tpgOXl&-8xfq0`DcF}9m6@#$87smBI5U<)72vG*LWpsx;kEX!RrMneQZTMLy137 zRLEujHou9Yto<6k9_|66O4O!)B5F>K=G9&|L{L-phCRisuJ`i0(4z*%&#;c4$5XeL zQU?*RxqT9iOz-KQp<^%tu{dtFS~^*rvtjh=pq(+=>f-jgkSP(_1C9Hi6Mak4zfybKyWxMi-_2gcd*3mx^<}Zyuorf^2k%?ffj! z=pKL;`yp~tt~+J?he{CfURoirUgS&F?h z#N+<(R_hY4h-mJ2L}xQl0$5;oSZB~R#AbB7#Z%&S?AdEe<;hBVTORu3gedJJL>Jyr z%dw)8Dv+W|9V;@ad9*ufWHe|UPQkm`r zC97EUW((!gO^! zTqz22{Vcm0_o^*Pu*B2ylO0%JatF9A3>tG-jC{N9M#G(5=x?DSkCDQ7g9-9+zeu)# ze{5`M<=RO-;0*56XUkZ2sPOQrxnNphIWPSiZbz4Wqz^2C>949t2tNNTJ*Js*`udh@ zBH;@9P=@Lx1b*qc;tYD1t~zkEofAVV7d}%(ubFOUPUh`eU9RfD83(&kDUfqpFno072T6)E$dJ4lcWwBYzD}ZdRTb1!vnv^bq2ov)O89mn4sIP!A)A*l>n^w%Ghe zaT!Ai?02=%<1#uw1Y_S#&b*0C23ML&W}1bXx2U;`ei{>CS93KO;3jiXn}TR2_Byt0 zJx>uXgWSc{II=j%aX8!osFn3i2dK1%DS$Qx=o4dr8^jpEfI?px1Bi^18*nY>&Vr19 zz)ZgYvjdt`!Sy01t`|^|!#fLn$)Ut@|MCD$5?0`lf(`F%GhWL!U@m~orr@>#gM2B`1h;pGitbg-edUKt%g z&CjLCnuWpTs~W@FAYh%DGyAncz{b{9t&Q3s;MS0NAx!`VN}mT^-UD5|uwM{iL7MMd z1Nd69fDm-@TL0G^pr(kP*v&=-$lJeR%dLx=1MF)vo&66~{r_7O{{JC*`A!kdH(w{; zS*9=B4=Fk>>TdmSaJ`8vO**R)Q06Wy`9n}Smqlu%1(4yA4Fz`&Xv+Wk$qA8q2@14+u+D)b*UdwGYtkR(&EsD5R;-{ z?obAu%;?tYff{*k9mxOICA|of=B~|LvW7a9r1Y-*@jmuvjdYOArM3614;=5}-(cghW!N_>e@AA}tD} zNjgf{Iv{`xf&f8)xx198)xwWNZm2Yh729d^FcYe=$5#L7G?^sR>2w;!aof}rw{DX0 zv^#0-q@6fyXWF!WNsL7H^ZlKB_W_W!>bjZ!A&~d%x#ynOJ?GqWe(#^-BskW$cQbiA znH4MCF}}svmS!(`z@^08Zit1_X3K&T$Rv`|L9S9SuP0h%ATS~Xn9v*J_~#xkmY=w3 zKvNX7qj!MMV2uo0d)Y$qV`n7 zPvH%vk+Ki@#Mx?D@{FJLQ)c;oN$|BwCpq%hm%bJ&7vzE#OM~+4xvbndz5JYqLOh}p z`sWnd<%2UAl2-6c*Tog{2~k%4wwdmWJyM!)v<0XpPpm7+UF3I_e#@)NYp$;qT^8+I z8CyvqZBN_i@5*b-rN#X>sr>x(eX{CxeVw0q4V{e-9huKma^jH)z@oPg)7$$mWNG0u zsO}@JkB8*;>Ef@%{Pt@Qzeb8bX&N3r7QQ~*9x3Jn!u{y%nLD*uLB^HwxDP(d!usES z_w`#H>qU7cR$l>)`P5qI&yIe8HSHL&cnJ{N&@deB2+=xccviP4EMu_Gnt61TQ6TJGF;d_AFXOZX9ByLvxv5}oRwnk~ z*dA_@keb0T>i7#$(MVv8I@EcrA3royeEh^wHRaB!x+%s68rN(Wve|n0xXEpat;_p4 zf*?qsOq=OR_yQ4=-$kUalvRk%nDazWUY!^lrCP#h0c;d%SA2~jJ^!TCSgU6pdI{ef=^Bk^|9iD5; z=oP7=zc*N^t;;soe@&-?HM%{d;D`d-?9M1QNKk8=cC!#{)F$~A70Bt~CB=G_BW;-L zTy1%?kJpjoA3S~HgQuMvSZ`{s*7d=L0qNryoj2Dswfh$_d-dWE4M{6V3I)Lf+NXQ( zmthg3Gbducc+U2EBnTZ!Y8N|wYYvToewfB2o4%>(3yOw<7TovMZuQSobxgy8kXkGHV zTF$_EqIj2=ZQ^c?IPnYjHKVv-oowMHs}mA9qDKv0GDs*?IkPs)u3;Qt&-T$oE@pdS z5=tFcS!V^hYts2*M|>DG8s0JF{!DO&Jv9U07|XDdFZ z--DkFsw^82>_v%6zuPIoEeOhvlaO(Cq|L=t_-KF^TBZ@U6)EvSC>NKNU<<)grCQ<^ z#}kSTXliyV#%U6RQ1Ma4H7d2VYsOVjuNFzTxrW1IH@{y~nNLx^mT}v|guif-^|jpA zB=-@Cd5vRSs63$!FkzEAl$ktk^B!azsV6kK` z${Ut5+TX|(?ACieqM&861YlR1&vD(co&5Px*_9E0eQH+vYL4K}9?d6( ze8_2HVQy`1B0?Yp#xGxNanPaAO*Fit=#R|>7o1T_ik3vem3ABW$O+s^aLc_$q%^HsIkk=-7#zaiH3Udn;d-X6tCwVoFLl27OJe4XF)_r?EhN zm>1I#=L$5=nj(J@#(Ou(vv6mv=L=2IYQ|VfVU-Iww~IxtLUjIajf9VXu)3qQz2^>i z>k;z{1*a#p<<^1`-U0D+Uk5d50FNGTp`u4*_M#3jotK)y<`vr4?7X&A=G0#>E)MCg z&*&YAnF;<7_!IdU2jv(^Uk)W4|h^k0$_RJ0y% zCDu}*ad3H=1?aErbG=hx9y9|6#z+nX!$SIo}RO2@df%~MkhrNfKrNAfi) zp~J8=Rh)3bnF3{GvK(O@1P4QNqmX9ma{0Ca!-3W2!Pn4Of7&+m*Q{AnFV(bT-FxX;ik*9 zNd7WBx2i$v^(T*naP^8P=(p7yjx~!{`RHCb$PI10O=cX5S4?suohU?ik6&q7W zEf`l!-8!Le>13Bdu=K5AtY;X2FYc6s@&)r4sLz{zRK*%!v;nTImCDAemaVXrW9sU_yTQmh1XP;)rqi7t3vWcSnICq&p zygfqnugK)W3B_s8naXl|6z2}c8}#W#e-5%;{MG->?+zt>#7p4eF{LNxFvb)Jmx_d}7Azty*;>{H)flb|z6o?Qm}gtOKNfu%v8)iNhFQFN zj@OgH8#Hc9R2*D?V#LV>;9?H<4p2kguFN-8&lfyJ--06wY(3K*`_s!D^=jhQy)9!NQ^fSjCLbLG5`(Z*GK>Hv$K(S735sXRV6HV$LEl(oj^z=xWl#rQ5 z=Rm6dW;dOt4{5PD8{|B^90~PMFAWHnsA^HeI#4`{C{-v$r)QgAZU-S8iiSqnrqhvOJVfz`^IX`10riUruVU859iBs(PpXZ@@s|=r*ZUJaA$EDzfD4(fit$=_5uC}Hj& z_VospOm9>=@5k%(wrG};-W^{s-;J4 zM+u&$HMv;VH%Be?6R!dO1_#uk|3rrj1FYq2$VQy>BQE>u12`f}SS2}_){@hZhSn0p zQMTui`RNH970}wk(>ek+HA<5@ug~%>;HM7Qggs{3on8St8KV5C*W_^$;|Ql+u+nm1 zuu-a{oVp;VuJt;Jsibs6R|{Ar71%hQHj~hI09VyI;D$jOZ_xgN!CXvDqo<97eh)V~ z=p*@O$etLSTL8R562)mu`i{WsWAE~K(YGH$lLBLnit$54aPJPhYJ9A@R@n8uGwQuF z>i?HBDmbiN>v07i)7JF_F(DN{u9Slc45!Gr9rJEqdM&A?9z3c1W7-HT7$+9u6?*)e z+NX?;)*Vvw;~qQ9A`C-$u~vwd!{o>R+Xw#1x{v?o1Fxr@A;LFQcYVjMEj!04g6_FQ zaz~6)R%^dJJB2X&$dnJs@3VTN)-u7k`sgcYK|@3d7~)#S#kLYF-6X7QY9Mtn6?-{Z zmg^{Ij5}F3#tl2>($;eFW$k6Dmm$1?ilFedas?d7bA86Ya(Vr2>z017+w;yyFn(r zn)34(GN1@UekXN;Jow8oywv5dfY7)mGQ8w>`#rBgdAYvK#Xwr9wI}v6tgHF8<<4>z zRAJ54w7*hjzn?^a;X{`|Ki1CQ$Mbd7`z+-Qh|&G?#rgHs;;ZpXm&zU-k|Kykk^c2o zd#fuiw9$`GBa^wZ+PgPaUFBzX$L3f0cE2iy{eEwLL$x^FMXo>cSI=)Gz9Q`X7q7;q zyQh0F>O|W0l~?KCbkF<)vwOH-HNUC4iF}wEpZm+|rs>r%=~Q-ASoRiW*MwzPHOj)8 zyPuwIu5Lt_uWL5zNY#>b=}oCZpGGK^}1sI+8&ug-`o|u>iPHe#Qb&s{jY#r zf|A}39sWMm&=tFopoTA0d#r}_)zwP9ngR{$t#07063sPMK?twLqmupx%eS$*mfR0q zOZl6^+Sj?>F+S^L%!=#CPkTu3Zua|L%9Pht*J>8%eV^Zdy%3s(PnlWxEzE4D+*$2& zIY9jSEsxBuKd5KbmDlfg^13|RqSa9CCibAkdWdZ;7q6ym3_5$%#kLq$( z?|{b1jj6xY-^SX`R<~6L{H#BK1%^R4Q}f%a@mCYUKd26pTVuj{vUeRs7-YM@y}Hfc zu^O3XjfX$P_0TJAyzO9h(0|x|lhf<3rWpHn8G^o=W-c--nU$y~cDJqC)f1}@R96r# zsV*bTR`Y~gs)N-Bt6Qu6{?1pH&hM!10D0X#nnDn*4t&>XWB}Nwe&neJW3GWN-ji|; z8gVc*{ihP|ig1261G(_C+#_WE040j$(J`SZiaMrjaq8meWUB}4?+b%A0k2)}z>tb@x}f`8tvF2NF%*ejDEel|)rl6t_ii1~I{dMCiMmHcj69eb z4BpYL1oy76z|SGj#bUCln!7B1JJc&<#~nO%DkM>CMPJx&{kUy?`XzX-yr@}unPC2$ zQI{qga1a3IF2W0CMWLbtI}cm2#1Sde5ISBG_beju02^-=S-8lI<46m^o>}-SUjsyH z1)xYU(OuDVmvfc=f}qObg%^_o8#CHwr{wKKGLHaO7c!+yicQCZtsDW~tdvwxFVRtr zG>v$e%JY83$a8``Da(@#^9Zy_W8o2Am52NdJS$`^gAe2WO?(g!-Esja&?b@0fs%VI zQZMNUu3NhCLnxEO`J3{Edgs$if;a5mP)?rb@o}Q(c8vQOR8J(qgU-6%39ux|VbNZB zfZaXx4R=atz4l7YnW6eNr`mjmCx7{u^!FbQR3r>Gv!_@w5O&-16Y_<&2WOl!er35< z;x^l9_aIa^Ix{u?Xl0EUAsBo^sLr@Ad+?FW_9G(Mqm^}w9x8nsGR1S3C(l26GyZ6Q zp_X!jUD>J9NJK|D1sGggB5Df<5>-p^t8Hx3BEbjsuq{9>4!=gVgg^yctgyI5E1#-0VAf}=+ij#63};J1-76Pqytks?&>Li4d=l> z1HjRBIQ+i%nyi2%Dg#Cl51G=&=hB%FOmIkyBdp^LDVcfwStP^<%=u*{y=lXaUE3d} zVI!3>KbAfC3!yq=wAM6q9jTD&u^Tgp*Hs9;zo5~EsioC5V|A+uN^)j^Qu~I8l zhbP8HR&S((W`wA6Ori|nComyj0yFZH*KuG3M49r_K$M6y)FDc&Zw13JSAgeXy(9?H zh$n=dqxiM0tvMahHWHTrq;WUsWx@7mWjr7yZUKlh*SX=sp(spw0FCR!_>;gcQY-O zcF5Oe5_8*Pp$b}a)B{aNHv!WTI%m0qiEex@;5;n2n}ou#`hX(+U?x*W{(ZMd1xnrZH;8?`tl1qS58I*1qDWf>+3*f^VkC6HtLL@^OiAfy zqCqt!rG?TcEyqB^y^ZlgT6(GPPR0lAyL*fX6a9$$?tHuv@rBV}`{GOvqso_eH3?aO zEfC~2{ff~2wrg$SHz<#0?UnpqjfjaqO!=^BevX%^wDs;cTqL;4oin)eGkVEnV^kZ~ zekvS#Q0%Udh4U24IQCbjf#y;qW=E22i4*O6>nQmNfci!!h@P`?Q%e` zfJT5H(6nOet%GCgV0{DnWHhz#Fk+SNU~+7>~oy(!!FPGuGRRRY;C3Q$=cDbHQ1<-)jWL)Vss zcVlzq^4!H*M|dl@&9x5PluLidiY;s$J+qtFdKcW&s0-o4 zf_*^EQ)y?$h-4Km)!OVpfq9y7$O0DDujn<+WR!ih|5zhs->{uchNpf*(}YJiab2@k z114!%G5PbOB{NCk1R;WFRF&Z+?lTUL&zzkm&R9dqR+KHg;Iqp9IR(F_;JSieCjbnQ z^Q(vj&6(mh-!{W@0(}lmJFS3n_np|PGgu`XiUU&g-?5*THt_%T&Xn$ruZ7|4+)b=^a}tkMx==46UfFm-=^b5Ocf329 zemm2a7rK_<2|AsHFt4jA48NDoMfHn`?P|-um1)mpqBgM?iCTy}5b0mN^#4pRYgmhH z3?ciy@vZLt%@_*DT-cxX^(sB5&=+$L6QVJ9lf(W&sL9P-YSHuT9x6r17$-$^%ko@=1xx-m=Go3+Xp%BpuqU`;N;ln5^8-cJtj-6)v z@0}hN_^JO+d5M_k&^VpxQR;j!qF$U;Fsk5!0@;YDwS`*U!BPqYLWmupdQq{R3Jg%) zpxCPljwx8CU`D}{3WSga(nkokDiBFC&>0uJs1f*_VkcGorxkO`%81(mbq764c|yUL z6_~#BGm4o*_w9=9Rmne4?B6QT+XW>BX$8+IxT4^<^>n#{f2QEK6#P>KUsUk>3Vv6? zN0ixAO3S(}DLAOKS;hX2g7XUI6o_)yK!Af!E8lM@?H3f2h*|I@1^+^U0f#0&^5?q! zRb}}z#lE57*LC|j1^-^Rk0|(pZbis(YOsO@f`6{GPb&5)1rO*}dR5L(#ot$2O}9@g zHmJaa0wrDI^iuwdo_<}of34U7#USzE(O$Ppb(`TDi*#S*1Own0-ILuiG)*HiB{8{xZP_cvw1< z03M1bH*~kvfvpDEb=O$aXY&o2_fFsT5)sHIuuX=)7Xon+I463&;_{`O|3>a3F)vRI zU4VeyNq)HsNwo1uDY4pgs*^WH7ny!BA-wCYTu*1Vb7}b2Z=uSAwov%*&D{FVj?NV-U0Cl*0c@+x zQao%3@K(Gt1j5lV%I%8111-k#rd{na>oZ{=1LmV~90Zf_wVnkO5=^ytl+fB&jEZ@rap zcC7#ZBR5fRvAN{8=^O3jn$is5|5omC+WTwuP4#&}#S4Jnie)79>qw$2sfA9=pV%Kbf9gi{BLI$-L8G8eN~ z`NWObuU)95l`1|9*amDyX$POR3hb9+P;eoKcpIY8lp zKj0Vtxo%`-D@uBPm2UZKICDluVO_9$iBm>~{ieirf>L?a;rMSB}hT&lXS4jbE53aP;p!F5qmDmJ-nhnX2^p-(YSj*G1Tv!NtL7;c_sx_?tF>ox5-vZ zArDi2;Y<<}I2D0Qzv+&+Eh_sRWynZeMnux!v`)AE3bYPtiP5of5rktwLisx6=pv*H z1?oYdNi+Zld45?kz=&HZXj3BOlvpsLCRib{K<`s)$J|!n^61rSNp;g`ZndNgo(6i& zT1x(5N`W1|c19PJnkH535CgdMO*#n2AS^qg4R|mp%3!xu%3=_kozn)s+@~~y&hA&0 zYZg%|Q6fO{LUQXtQ8{wr$un)vw&?~H->BdLf;0Cu7k9mLzNb{8WKgI%Aqe_Zq@SRc zCxhv(YOo=k8jxV{!DAY8gBiCe_n+!^Krw@BjGk#Q;0~pk(yf6xrdtW0PZ)sC4k1O_dJ%2(mqXQmP>`4NV{t?pfgTuOM5Te;1neC^P?TCV-3XG2Ue#M?v z@P>k83JeVHP!q$ty`Qm?1a`C@AkS7O3zuIC|~2gQATN9 z$^{r>sYZ#-LFuHeL_R6tM+&q8zgm7Jf&%c$zjxAYg?0eQk6?{3-bt)8n@><*qL9qz z@}2qh`4#!i`N919-tPPgD-ln=oo*A@+m$ISFC_9=0A7I@cmKDefQKC^^EjZyLVD(j rw)%GRt>n^9phfNzf=j|YZv(l#nY@+ED~0|;{|$fNO8&1TMtJ@=&=R`1 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc index aaf8ca524f65d6b30d976233a7f376ee7e85d352..262c714b96a5d4547362a76bd2c0199d34a73a59 100644 GIT binary patch delta 20 acmew>_*anoG%qg~0}#}8KH13qi30#eUk11U delta 20 acmew>_*anoG%qg~0}z~b*|(AV69)iBEC!qa diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-38.pyc deleted file mode 100644 index bfe1d4cb471adfc7b68875986a0ef49408b3d5ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1703 zcmZuxUvJz*5Z_(<&OYB=nubscLc)(Vf~3k5iV$j)L@m&!QIfV`Sz0;X&Ba&$V{JE0 zbUd}Nhj_4T}mWVTVU%XR%-ip+Vgv<<2z~J z?^E)ah_0~S6Jbg7o#79Jy-&Q}B}6A4)AsYCit{W?^zh*4-EF@4WP9_+?{^+wQnXV& z_@ORNE2*BvZ{rO1{bw>PYb8^eRi3G>%{(jfMCyg9(uOPb!k)~8RN-MF4^9iI2km}O zmUU7^`0@D#M6{rvf+C4e1@W1nz9H@kLz=SlDG{dV{9!auI(}E!q9+{Dhm(OAzBhfV zIaz2p;YNi3>kH$QSiSIx3@s~q;D_>IimtWFQ5 zLXYS;RAB@>lq-(o!rD-ya=p=TH+TKPP2k?TyD@Lh563d9R%SQb93I43^_81XO96Kd zAiXqv8>e+TO%q(^vhXm?_Ny!ImOKi9)e_IXdDzCj+yy3855$gVXy-aX-Dy6lyGmBI z$|3_?t`_PHo=telMGzA@A)HJYNGQoZ`9OC(riNfq3m_n}S<2+-`s4#qOJMltx6Sq7 zMG15TQk;Y;c%I2E1)K(3c~oQXl)_z9f`n4<_uKRR&rnY;3+`7xY(SLeD$sF)=RKHr#juo=C7l*1c}SZo{e`)P)Eu z$=j+KK$q@8XH54{MI1BFRCnQ``WVGM5PBFL$BE!qnIrtBGU_9=E^>}s@hL*i@lJ{0 ziQ!O(Ez`5l<|(@Ath(TLD-TWMdbI|t<0PGj@J02YiZ#GMxL zCvdfiu8onb8Up?gt)E{1f?7-sx*NczE}VY>5of>#bn!M|GiQ&g0r-18?3*l1CFk1V zJk3R&pg!RI7wFTe#o}D#5ip4(qYW5gwT$_Hjsm|sm)tBv)dvGMSc$$iHLd#{Mi^!P z4xIMgc*{q!qL>$xcwO`>^W^s^KJ-hOMl(NIQdN@H{ou}MBCrCz`ny@ QeTg|OvH=}1lioM}1NEz_3jhEB diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc index d894d07564c8778c4b679aef94550ed55936afb8..86718d2ba55569a36fc6757f2f453922cd11ce15 100644 GIT binary patch delta 20 acmdn$vDJh7G%qg~0}#}8KH12vr2+s!_XX+z delta 20 acmdn$vDJh7G%qg~0}z~b*|(8fO9cQy#0Aa( diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-38.pyc deleted file mode 100644 index b3370605cb4f8b125168e54570483605a5da7434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6482 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 Kr)p@GqyGVqd5;SK diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc index 1e86e4d14f674e1d03d7414d0831280056ae2055..8e07e86a2768a42f2490183c30451a6e85dab997 100644 GIT binary patch delta 20 acmcZ;dMA|oG%qg~0}#}8KH129Q40V{=?4D* delta 20 acmcZ;dMA|oG%qg~0}z~b*|(AVq80#3wg%$> diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-38.pyc deleted file mode 100644 index f1120e3663e5b9b1472210b004bec6317e12ff3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8251 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc index 923d1e9363a4d0e64ec85a4cb4c0b365ede5eb1d..61f5becf849065170b83345821883917a5c2d217 100644 GIT binary patch delta 20 acmdlGxFL}HG%qg~0}#}8KH12 z1utguD!C+fUIH(xrn z*ZSlQor}TMAldX{E30@jTSEb-uTBB!Q;zgEG^3Ok_dGXF05r4P{Z+ca_{#96edI7do>yRTlJl zX{bFBag)uz|Ijbf0yoLoFL$fM(8P@=6jM*kA+kgv((H)j7bEuVaJYHS;S{&-;a zuk=lN`Q$3?(ks*?+mMM0HQy9Y&4Tf^{OaHI(#bV?`4nb6ScfR+HG1hKR{WFW!W*3Y z_jiodr|iB6T=FHotyQ>9O6MM2c0+V$B zNW8%CQUisi1T6{L5}+Q)x&UxD$K3}CZZ{(>GD_0&h*27(l_To=;bB^xI3pTxCoQ>0 zPLP%l#~!D!8!nLB6lb{f$P`{klg%OXMq_T{VpxTK2?5~fy;Ld<{b^=XM5AmXF5=P~ ziiq z#Lp6bmhp1|K1s_9;)uH3ayVy6FHc!S)Naz%OxN*!XXw*pUUQuIC~$4)h@`1mNVGNK z`c53rNXl5ql8%*v?YfS1qey3FGqjjgvK#6r({PCA17@_ zBQ}e&y#Ue$u`DTlMXPmaj&gpKv|=}mvi_+{3ieCpGt|N{;6YU?UEQ1< zJKh>o2RpANsl71dKs6-gLMJ9oiF1#`d}u3y6LBwu-s4z=L%5DC*$`J}4B65a%n|Oq zwxzgxUYvAh9FhN=MY-d`Oo6_3ZGIHdq<5Al>ndkE+}p#JuMHh28*naZAtuXGhGrM27c&3pJck! zccK_}>}8yYG8Zpu7zhg)lhKI-&f(0-c*Nljo+GTD*^47D2;j6j(7=2egIv&Q3Fl=} z7gJNz_rk6Zdm&<5Mr0&s;&$#`)9o;_$)NoplS&3TjMKV)S>L zduR7g&z|h0HQUBhx9xA>by|HK265<9K+C(>rTAjq#qm_Rb!*Hge%gq6$fz8Ti%(uh zA>%7fyz<-K-#=RsExKx^701OUO-p$D!WY)PdkQau)nZy<)P<`OUWOjw4oXV$crrd0IrpgSVqzb6(kvRf!z zdS3{cViw9ekJxBBfew3)TQQiL61E&dZ16zH(uUw79j7JyvJG4e&;8I(Yddhk1*6}6 zD_-+>Drs5lo|dsTV>}ATiij(%qFs2Xq~!<}@w7?B(b$;#e;DjLFe^U)`~LA4gBRdY zJfH+#7=v#Ey3OG2GuRGY;Z!_$j_fnxdBZ^re%*>-?7>)x2auiHDzmpSv$xenqYl%Gj?&u0Nl4%Z{1X2^ z6p!I+8ZEO`tQ5?j{{2{L*9!92P*BrnVWZG0G_qeQTO)Z|7qu#&RS|NOwK5E;n)s7n zlxdqC;OqTyt+XoTXiv(dL|UwgJ!TTbP*Zy%Jf&a7$)^)*|F0chAs$-P3X;sIYn+8(qNr!1SuR#u#ybbRH(AZIBfMbl8%ue zIi))lJMFj)NRGSjXY3c~y3_tbPkSlHYq8Sc>*xKT$mik9<4&iAV7&X2pZ=vI^tW<8 z9uPy{!W0AyK?J8LSpMSxgRiAprUyD!F+DXhGcYqNuxj5(8<`#0H8#^`)(TpHF|mHb zq(SVrMzBWPr1?hUujtwhQaK-WTmQgLXxznBgXN;6iR@}sqhI8rNNM$GMrE{MIVlz* zN|wRsl*V$-sem=67w0quV0oNMd7%)1InNXI+0`%rSTOrA#Varp-JokE@fEtk7)cF0 z3?5bb#>sRPjm&R*TT37lFCI&Ho*6yHE#fc>wxAq6FZ!i1(%L29C=0^NqNTdICU0Go;ie0=d&5hXAa9x3!cT26?u29GLD9m z!>ZYLNA5(y!0wL@YOk`#Zd9Y7tum1}arYBv=6R%WTXgqsTMr%ZCScV(}ZRhGCAl4f0_YTUPfWv}`_Xez!+ zQc>vuKM2b|Q(u9XpgK>zc(DNnX%@CIOwH)5<4ui!sjBQK%3_vBQMbcY72i_P4G^q% zFIZ0rR-d`r{C~K2f2t)fMJagrNlmF9>5}8;pC;>vTl4xOW#fMVVmMZj diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc index 23258dc8bec9e2fa87ec7e66ee594eec7d28186a..e10148a12ebbfe9da6819f7a601f9354aa43eeda 100644 GIT binary patch delta 20 acmbQEI7gBDG%qg~0}#}8KH11UQ2+ore+9h& delta 20 acmbQEI7gBDG%qg~0}z~b*|(8(DMPs}kn`4Hq7zzKp>^^lURbrVyp>PK}~)mPR1 zcyh8#p#9-{wehzSA^$+(WXpkY8$P{62@yolfVlY20va-xg_diDwrf)&EMW(^Fz@CK zp9>0M(JdN2AC$tfTQ+*RLdmE z)L&qaiC{XMac9C=cQ%}J=V0xWsMLvj=2IdjMfHG)s+`}q+_NB0i5kc?nFslttc&Sw z_GhX-0j*;zW`gtKg1Z2xA!0VTfSN($jF=N=o>O;PE{J(?_JGKXvhwoME3!}Tzz3t} zo-_BdoPO!Z%daS`xB?bjg%NAp#vNefN7y5*I>B*4*GZ%P2L0M&eJ_7 z+4K@8@!b~5Dcw=0Y7$66}g zmg1SG+7BXmNBKLleJAep(L=iZP{m#4g`ppH+fRHA3Z3<&FZ|fKdE@5I_QU11N9+7c z`LylzdTkl)@Mpk(?mum7aMZ^=ue0rSrEd59-gUkMeu>p}<##r(8&jISJv9fXIg1Wp zK#J7JKk!l>#%|-J-vc@Jl3(_-epb|**Dte69-D$XEy#koUE)Wvz|nGz+4 z%>}>=Mkck<#c56>lF}USYvB0Ye?$^c>7BdUA0M)+b*kL zQG&lDFX)hd$6l~~`Yrv6MC{jO2q@bwDKR8A*|LXZtMIZ2eby`X3&KE)!Js|(=dz}!B8 zaOBt5oOqPYuzsA_j+xzb?#K-fl1n>D?6km%Cl0da`C6Vj$|#2xoqHRQI%6|LEOqo@ z;>cZJC&z~x)Q&Q(;{|~fPAesi(y1URsPRNy0+JT*%e_^lVr8(K7N0Dy-CJ%wT2HO6 zOdvgNErX5I%a4*!oi{o-_ai^y+yO}=I>=O>;*ZfP{N`wp4yp!k&GFPRmaf3$4rb4| zA&;NI3W6p9wCrQ)q=SF2Wp!;7%Ft8W{hss8Pd1$nSRi#TjsyhT=|_Gi7ScHiwm#wH zA4VIC+c??)mqeisqt;})2JJ%XYmRJoo6gm{G6-U4QHOpY_ZF{QJ;u?Rf&QuZfx1QK zJz6uR&Zt!DY(GFIR;jGO96?Rt?F_}(>I6DV!BY_^jI{g`=9yYV%7e+w;p3}-D&uM_ z+2e*hrnqr+6&Oe|vPHgQg1xY?fVT#PC36(#ExpyC1_rOG`Y}vBF2qL|fSnZQt1y@y z;Y7@{q0Z^eQ8t@niNvkf$!pqzjS!mZCrC~k$~pLx^SdxM-eqLyXhconGQ5z~G!VRn zI-|R;kR_$gJb{*v8}j(Z>A<;2Y!-@}3w!l9M3$DWCQD|9OF-o6gRb73ET@#(a(>j#NW-L?#XI?|nL~;|! z@u3ZePEiX$@YA?ckycna2VVIvV~mzD+y7IkGdeR-wW>BFjI#fk6?nymo*!|J&zF@r z=!cPpAY-5&K^NQ@kiFs^bYKNI3JBtDNWQ-GTX2^WE8v||wczz;%VPj~%f!h=y zYn!|3@4tKgmM#t$)NW%3qz-G|$g0?}U8Z)Gmbx;MyFGQwgS_Tz!Lt;qaZDVo@;txe7 zE5#G0e+M2j@bZIVx)CePNB1H;J({DZM>E@#L#>h#&eO_3>|MO8pP{PK>TXAx8_1M( z69xku_uNU12*YM(pH`pX!uJhl55>HWRU$=dZ%c3h>gRMBs?Xhy>{hQL)g>N)>JP9?R1jr4btmN~aA1 zQl*rufYL`#S0SwHem(5H_0NpZ#uxmSY5zD9`&y2LzpsL1BqD446Rj>Z8;xXi;eV0_ zUP$^j;Zl+9H{09($?oaLKK(3)K8s^tL}Pjj<3l<0jkMx*%z|rnA&ei(c#Doj#FgIC zGPvAwpJX=UiAFoH8Q5R1R&bo#vqs-eW{$079Wyv@HhUW1{_oS%Q4Qzn&{d$#;v?sd z-*xf(lgP5Wbl+aM8FI@E88RMD$hp!ZX071!#9+3gfSDNN++tcs(iqq zfTuFn-5)n?5W+*_5&?MbiW2eV%(TO2@}p6 zEp8I2=bsoXqOUSikb4`AY5m|X5HZ$BS5e$C*La*XrnSbD(zufvUDWsi8Xx^%iI~>j QrB(I4t5bMexBT??8?)9_K>z>% diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc index 5a34a54171ee0aa9f660aeaa564f95df923fd191..4b110353848017753cc999a58ceabf3fc69287ef 100644 GIT binary patch delta 20 acmZ1?vqXmbG%qg~0}#}8KH11E$p-*A2?a?2 delta 20 acmZ1?vqXmbG%qg~0}z~b*|(8fk`Dkl)&(s9 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-38.pyc deleted file mode 100644 index d102f8b64090a38ef1bdc5e7601eac98c4550422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2263 zcmZuz&2Jk;6rb5IufNhHO}}VWEfs<;6t@I%L8T%jrBqaDXwnue!?5v8+zs}wGc#@) zYkeU>MdH98K#`ndFPsp6%v?G3U*H1o?Ix+yvev$tdGlu9?|qK%*XtDm&o6(UiBRiPB`t7CXQB@_N=DWvzvC$X*xZ(=~BXN?sUCgsaeYBZrAUXn`KIb zEx&+0uUqL=n^j6~5nkf{9^t+qo3&lLS?6?>gyk2YgDi)Rv2Ncr^|fzSZnDKMZZ3X# zd-;~J7m^+0+=-QbK|v~{rn-=*cuBNVE+j0SHSt8lSXxXIm3BoNKQ{RsnX(C7L7J44 zrp0N~=9X}TdoG9n%;qll_ME0CN(bE1Gs=Bl-g9x{w7rX?!^tXnPM1U1oMcCE89UT5J;}`V%}#RG2OAqg$`YtBXD2rzh!Nul zL9&gbM0Z10K}^mbp_ zggkt3j&JUAs3>smCb%}F!vD;*IFeKjfS(Oj?j_TG6xr0 z1-Nst_bS3FV+W#);eLUQ4o|(rHX(tiG}P$psL;=t)rd^}1q4u04VctL4Hc?wz(+To z-^lOQF8z`IOg7z-)gdF`%Os;?k6Zh+WsjVZJEEB@zt8M(iQ8j81AgY5A^Vg<(nH%K zKUtrUt;?A;E@cjKw-Q*{@(=iCdE{l@uU9D16%KmF{!_9+xx?K(KeLy}F5Rc2Qs#}T zSqV=*Bp;El$UX8k(KW;eG4_^+m-3Rm423K^dFBSafzrXc2$Ysrf+W>}p%rsHXD}+* zojyeS-vE-4Z)ZnnCmBO*_UQvisV%^N6eBqcQl?rI7VE}|0Pk9jYsSI3JOjHEnN+^s z5s7%xmp87U22|xxiwrNlj8hJ~alMJW6Z5`dJm{1CfiBF;4b7{?%`L!>sJDR-TA_1LxDNcL;hm#3tCFv< zoM)-^uW!%M;fYr~aIBP%6$^Tf({WxdkO&YKc>zkt8bcE1=>=tUm|z&F&{~$*aYIMG z3q$Ui!U69g_n@k-;TD$lM6}$E?m#`72j)QossZlWF|4^nI3?c!AyZ+jm+}F$F=lFv zZ9!`+qG3vm@w5$LK}+OYNKWGkAG%OqNWCM^A`kOHp2rOvf+9b_C90nQmP158OZ>Zl z{aazP@Tp^+_AEN*Oxx3^^SyA&SaE7RNDOGzg=VblLW>JC;+Z; diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-38.pyc deleted file mode 100644 index cf5f307faecc0be55e95bdd8c34ee266d43067fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2649 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc index 525a9ecfd0a82eda7d500da4e27c03daa9cbbad0..6afa366bdd7d2437cd9732336670fdf839653ffd 100644 GIT binary patch delta 20 acmdm|zfYh0G%qg~0}#}8KH12v~* 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 HI&b|KdUgp) diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc index c816561ccd7bc19804fcd87d909fe574ba28b103..c39eb79dfdb4b74add1d56d4c67672ccd30a48e0 100644 GIT binary patch delta 20 acmZqCY|-RC&CAQh00ecNPd0K_iU0sM;{}NT delta 20 acmZqCY|-RC&CAQh00d`U_HE>@6afG>umx=Z diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-38.pyc deleted file mode 100644 index 7bfc3950f5120472f9bd795ad454110bda9c07e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4103 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 B3@iWu diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc index 4e47d62bf3c51530d4b9db25b852acf8f9f12073..e47b0d4fad492ae5ba35fc345f21b5a8eb006765 100644 GIT binary patch delta 20 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 BP2K`BszrG%qg~0}#}8KH13qNCW^!O9sRM delta 20 acmaE>`BszrG%qg~0}z~b*|(AVkq7`s7zU^S diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-38.pyc deleted file mode 100644 index 4e81a83bf81e26d8bbfb57edd231d878b2271be3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3726 zcmZu!&2JmW72lctBt=q`EbGHIibav4A&|(nfLsj2u`Q>Ln?QCgIYk%-ixp=?uDl=g z?9i5k<%t4pqi{||E_DI>=vxo{8+s`E7tAp|si$5WAaUQDC2hs>67%-WyqVee-n`#? z!+Z65)qv+ue-}G9>W1-e>>Phg=v;-C{}Tu^7>SL9v0H;+iUwzi(dnb;B$Op&h$Ob)kW-o>4dKQ?r(Ld#Pi+-MVKv?(KP zlUv;84*qt`6=MZF`kXM6S%+5Jg;9^$&na`53;hc7SOuh2HUqsXpJ6pte@2e4=MHPY z{8`pKw8o@eV{>Sya_@woo#Y3#vvq6U**8KMcV9}m|rb?)U{i)g`#siTW_Ke2Unu&=xzh|)*~K?9A@){%qe z#4oE;AsFDK!(^Ka6eepFv>>~U!u`%*v(E@?KBF(;OAk7Q4FNc}Ay8>VheiuBn{q$q z5IWWt-;<&OVr54u<9o`yd-J+jf&noDLhqpF?d$>6s^d6gnF4+LA6hx zSSit@GblT`t3TKFpTmKff%G#{wO8WUjw=SIhA>05eI&YKRNbs zpp;ughNV-dn}mCLbig6f&%=IYgdWcwFwJnFA#Cz5ffS@;KDC~jPl+_1YWVEZr&OBK zV&pk}Y&<59>0|S;wPQ2N%){Dqa(90A+qd)|NIW3#t+LN@zGJx zndUgz52c@Ex%9hn28n6kPeKXlJ%>3xNI_}2Y_(dQ2FW$i%P+m@;iz_{|Dmn{-$beW z$e)sLTbF!@RhW?svJ?{;hxdulQ@9d~$5(yE>h`vpH;a$-jkRkNH?DnU^|3 zDx4}e)eU@%r~CdafPTg_lkWm~LJMOIejbq#cxPU4k#b2{;GmZgT0%KKEIa%Mc2t zFSF@^tR7)3L|8qJFjpO+n$c_M>P!gntm75JoUJLRCpb^nl)W7f`I_=zFi3cqDib(m zYpJqO_{vsxfJM8Udr?&&RhBhqvdcw;4!d|P-_F085=<4n1j^*gKn&Ud9C-Ri$vmmP zrgZ*i`udnm`(P1TtYIxq1E)+lV`cBeStykW6%NuE zMu3U&n6+VJ~j@8wuRsovL6WgyjC?H!9zb!ONZcS`Sr?K59*V#linxJf9tob7Hb7iJ&O~wx$=jr& zIn+%jYE0HzGmlvGoY^!R%O24ZR3-_*t^n@}-Yp544wK*_tbl^+u4ieUK|XIxnAvNSO^R8VER?s7_nhn59^CKT z?&Py>R(`L<6&gBy&_MJ9emVaa5U6pGg%~2ploSwSjw#f|zl|(O3%YBL3G}`n*@cb0 zvw*L{g6e248Nj>JdSMq%0m{5I0h`{aGOE5AgM4-tP<9rvR?25awNYI}-B}{({0(}Y4a4WU_2FJ8|A0US}2DNayvt?oxq?BK`#|u*u|R9oA~myd P6;m#bG?CIq(;@!{FVljC diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc index 27aea0ab497ece768d7082727740e607cf634e99..1603d10cc4842be09085f649bd746e1d756238e7 100644 GIT binary patch delta 20 acmaD8_a=_}G%qg~0}#}8KH12fs1E>5vIfQg delta 20 acmaD8_a=_}G%qg~0}z~b*|(89Q6B(Je+H@m diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-38.pyc deleted file mode 100644 index 4527bdf0bb2a2505cf3f3e2106d8437a75b72728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7458 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 ZZ+@YCp|mP$4Kj{?A@<^Ag=@Ce{|2t*Ah7@d diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc index abaf0846c92a7c7e800db8d635dff9e646688d13..8d2af5083f70df6e43b139ae2b856cd6031c89b3 100644 GIT binary patch delta 22 ccmZ3ylWFlzChpU`yj%=GP}linBlnCs094}#k^lez delta 22 ccmZ3ylWFlzChpU`yj%=GaMoqtM(!DN093FCb^rhX diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-38.pyc deleted file mode 100644 index 2b5083e3f3fccac6d8de56fa7fb84b417520d8a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27982 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 L>9aCUpY#6!x%332 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc index 70ddb033b7bdc49e34333c44077b6312a655293e..24bb198c11d0a1003d1ab6b57e91e1ad481c67bf 100644 GIT binary patch delta 25 fcmex(isj=e7Vgu$yj%=GP}ljSk$WpQW11=edoKt) delta 25 fcmex(isj=e7Vgu$yj%=GaMopCBllKr#xzv`dZ-8> diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-38.pyc deleted file mode 100644 index 38e8e258daeace1eb1db549db7a45bc644ff6da8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53256 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc index 3247fdfc7e24a17b735a56e25a99fcddf4996c4e..072b686410d699bc459cda546215d5d7d630b824 100644 GIT binary patch delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc index 702e187b5a64c166f2612082d7d3c34c8ce260c9..ea698e4044b895d3fb48d7d8c1eeafd3e2f3c86a 100644 GIT binary patch delta 20 acmZ3@x0;XpG%qg~0}#}8KH12vzzzU7A_Y4D delta 20 acmZ3@x0;XpG%qg~0}z~b*|(8ffgJ!h?*$(K diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-38.pyc deleted file mode 100644 index 6567164a923603ca20acf58761f8235f2c25b531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1375 zcmZ8h&5q+l5O%j6$8nNn7(mPcfsaIJGbl4~7$L-LcCxhX+gUyLMjo6wqXsA3XSE+G zb6Nd6XVl~^=CKCYK5K&AX04&sY5xwtV09d0pBF3RB(c)Q9&&Bk*WX@UME$21{m(C- zJ?RirPgRn|O1&cH!GITx%Xpme>s86k!#JJYa+%J1Cm;1rPP4gUMR{_%P=Za;@>Xzg z!e^eT#hgt#)U=WrPZp6F&v~MaE4g0EA|Y7HZlR7-=)+d;g3#95(qu!+cQjqYME=$2 zhC(0q%MbdPGe{>vTm;+9K_0JyF%M)_E@#1b6%5j3)-_%fNl>E59PG426iQ?~iaNIO zQ^7F+mj!<;(;FT>7RfT_ zg;wE}6jK@Jd0I@vuTr&)vtX!~EEPfT!(K1EIv-pQqp$fmjLS0Q#Z7bz`WNXqRH^0< z%Q#uYQ?9}?EsvucXhX_{bFajh4^4$?)X}YoQsJ3DJ_J&HPowc!1J+o(KEDk zeS7E5UfU33X%GE(&e~big)6^#!PfMr#@hKAvc5Rf{+hr!!sxvGwGR~BgHVeg-T{c+ zA%sbsWiZd+9}E%mQgQ_Y@A`fK>s(INS*4+M-*E8$mKdG0;5;aWhKLlBt@f{MZ*21n zDq`-X+8&+-*E3|5T4p*B6VQ^SQ~*3=`hRiVstk#ImUR>@5S^wu0!X_%NV^DWcgMgA zC!ihI@&NCw6S> z@6+hoQ(vK{jBG^B58s$Y@6P zIzH;;s0TA5Q!H}g(`zVItG~aV!&+&unaB(jPUy0)g+V(+vv!@i3Nl+50Da-(Kn!-Wml#xjc6LBOLnU)mdTc`m#WRC zZ>Ljs_2K$v$?xEviLPUyH++lsXLZl4a`2`T#aB^+Wu59Kd;?mxW@1!PO%8KkbUPDP v94=?WaYr5k^%rYss$tf diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-38.pyc deleted file mode 100644 index ba77d817af9b76c3dcc76923dda03977f737e424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4135 zcma)9&2tpT74Po(*x6-Q2oP8T8BbDi?6ng?5mS|N2muRlC{u!x1lUtbrbgSX)k?E7 zOV2DsTdSmkxTRc`Q!X}DkQ?_@PC4eU=wou?U*KTp_jI|Px_CT^wrTFCpxAYDo`~wK@y{1S@~ATKvo}-_9@knHF@Y;u8u2jG~ec< zU)n|1A=`kgPqOl~a>3>qrY3H6Sg+7y2k`ZF~Jza5t+;I|Vy0=lQw^bU(=aA)tNC%dPj zQ@D>)7@1YGPu`W&PdWOtPfn|u5w`(O&d8Hr)=oF<1ZuZJfo+YXAmis*j zxXW8TWh&I(Nwo29XP7oYeqZS{Po&|?E!ySa$I-b2Dkjk=7IDcUA$jCT0jnHST~s}N zRqI?2&RxzzMO>J-T79jR3?HnkEKJH$bzw=?4$C}T?RQccCZWc@I$km!}0nYyAo_tnak zyw&fjtSnY;>AbCzZWnv6-02ih7%r84*~!CmXV0BmxpjGQc`3fDR#%c7Uu81aXLP5ve#RQ#+tL#-<{k155}gIy_M5^ut+X({ zR%KsjE%M;_Bc5m;RJdp)TVl`nf<4ePu8(7A|Acx9UE?PGGCxHNXcH#%4BBhY5C}=u z?x%@v3Qg1c1e(438}IbmZkp^J?QwFCvreVmtnv`d?q<)Nkxly>kV5+C*8zDTdz>p^ zq+ha<&#+RIC`Kb*3Z%Rv-ACTG7@`<%2KtlI9f~2B-q#2saBR%mP_GQm&!C$_sB~>~6JtkVR~CSLkhSAKVA^b(5BUaz1*8KRCB=@jjh&u|r|b&*-NS9SbcSx} z?g;(2(i@^eOJ`H)8$(h0Lsz2C@9-Vel6!w2y1y6O-nPG88G6!#ds8cex;UE0>dFq+ z4~G?6HT0q7;k^(i@xH-1hyFL>v127MM!I*`g+oXG8y;XAm5l(BfefBhhx{oAUw!Q1 z;>I&TjlG%rV|NL-1AjCI@6V6!jBYF}N=+5u^=q@id+j;7OH;G(g8%vjzwm;GFZjh5 z{KJ9x8Mr3OosTR<5}Ha|l_)COG+w%YQ|lC+tSFPLrHohFisz&%GcFlms&U++u)>Lyv}Q&qoT$GJ|U*K;8PfN`K%axOsnQDq}(+ zr;Ovl2iKBL3XH*8^3$6XpicZMTxcFP6~skPwMtXn(?z&5(qw8tR3H$*voIbCf44C1 zW(R?G_}0y(>&w?~E?mA5-(0xymHsKbZH^xtU5vlD`qkZ=i&sp2ml;W(BT0{NZ_BuZ zVy1fa4=rT@c?1)ljXZrGg8HJBwq{@vVd$$dHZh8YakZmjTl@qK6M_N^L}7)0-}!Ex zPm0rg62TUHFNFARaF!PDht&^<+E~5*0GbC!J{w~-#w}nEjx1VGvz-sA)-{_|-GH!h zD0!;H`HQMRmYB+VQc#-eqZqXs$>*c;Z8NOt9srkLkkDt;9NTLw{?+!){RlG!4KhAC zGc{G?K9UTC5V#+J+i48FqSaLQ@M|5jV}!pBz6G-1SndB){U#(QC0)?2 z(mhj251p8B(VBW13=oe2IgXYD#r$i$IKcs7P|FG1#KNu*tsC&*un!gcD0um{H0`QE z1;HJ20$vkz>)oW2q5jg?!H;aX1S;qNz;o%hoep2K-$(LiYG(;o!$c~<198Z?%GeKOI~rswkuqiOF! zN0#f)>6Qoe%cCcw6h|dnGXUJZORoqdzb%QrOrBA+ngCZ3NCo y+;t{h!B2xe^4Rx+i|<`tV?GbRtIxkaE@-@3L-n2XeN+M;5MKkdPY~1#;{FF6HmGy} diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc index 748dca00a7ec885a86c715f1546b0aab33457b9c..91bbe916d25386a40865dac27262bb904969b77d 100644 GIT binary patch delta 20 acmca?eA$@$G%qg~0}#}8KH129LJ|N(s0NP! delta 20 acmca?eA$@$G%qg~0}z~b*|(AVgd_k&bp~?) diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-38.pyc deleted file mode 100644 index 096a4bd7fa3f316ecf0b8de7676422f5226b2a77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4310 zcma(UO^+N$wW|7adU|GOzwC_(&@6~}q|L^$5JJWZF?L9Z@Fw!w2{aQm?Wx+`-tFlg zSM{vDqh2YnJ_T7qh#L-CA2{UBnIk`dV;|w<3kSG>C1T#Ip4nY*7DTuD^{eWtSMU41 zzSC-X1g>BHL2mqhj*!3N;N<1P;7xec-vMyKX-Wn(q?B;Rjg$?H(9pP_J5#H_e9G*eRxGfg9&vW(?31>ef*^)`b(vBzpND1D2CY=2V z$=HvHa1Ti62NSh}9L&sd7xcGOnYTu%7*R&ZwV+?? zB9L12_--nKA`iHX?+0h)Pck_E+<(3Dq$8)72{tt z1ikCiZx>ZJ7%9PzSVy|Z>nXZ_`OU{CNGmj7a8Xb&3q?Vin1s zAO`CD9}EU@5#Wj=di5DefmLY86*xWPp2uV#bXlu`23ScD<}?R^G7*Dog9EGC-Ef(!8v7 z?aI=;$ax?n7Z5BWI0vAzr6@)+>w~Z9%LHh{gYWC`s5JluDH#Mg-GS`|<$(W!mKHa5 z9JvBxv$TH8xb>-_=V?hIRx*G_X#g}!6QEUE0Bugd!R5lG-WA~Bm==Qj2`{!#iD0A@BD@G*hb&>DMkOR*QdwG$<7-K_3o`Qn;79};pkb|o zl|Vcg3h+^Wh8ZR{2rg!M5j>;at|Kj^>3x7i-jXtx@;pqOr9DussYJT*Ul)8v&1vCd2spC z<;%VIuid)69(^e8_Tu5NC$in>KHxt}?)Fqth*yVke<$7)sy9rAuSL6H{#?E$lm6Cg z+G&P+l^aD#mK0Hh!l(-XNW-U$vgfAZ!rOzlP3wEy(m^%d(WP<;miIA{PcOt#PufS& zlQ`IYn}8pH<+mxkjZZDGwYfI7kl4jBTM6WsU}2XXs|zT98K$(7YVcJUBCk>mWfZN# zNNLxkM?BSEuuM!+W98H-N7Y=SYfY~iK#9Mdc@O%52%-Z9ap=xHN!sIQM`qK}&Ff>^F-BL}9bE zFA&~2PZkJB<(K~9Y}w?UC4z-r@A2zB$Gi7iXY6d3ZP?k;yS&4>5_WO-JW4eG1W(5~ zXZn@9WqZ4M{5AWv=6iOB0pEW<#rLV5QyRd#QF`0f5^z2}C3{!XnFBgZzI+B9+~eRL zl<;^TatF3RiH}Yz7Jz!QG!9tlfrY%OeY^8(m6NDg^^@caF@WB-j^2fdsDLQo>>+S> z19W>p!T*i57q*};;}(Sv24P7)n%k$4U|~5YI|L8C2hIsw+0&0w`bm<6Iqs6a$rP4j-7sy6_M2X}dl$aH2(2#<`@ z6kb%FKF*!)!_)o&4;jDmf1dP=zB(yl1+*Rz`??m*0*Pld(3$)xa{m;SBzO_v$o` zIYDQk%8MjqrwE&c%1cy|sUpt$LbhQ=<<*T)gfy&S8YfxhK>A7JzNng@@;KvB5#LpH zDK+5u3BQFLW&OAil?~Y%l5s65*46Gzo$;2DgRkQumgZP~11GRTR}HL+O1H+IF5D5S zD{M<~Z%Wl3lRim2igt_$&F%igE4~?3QfqN zQ8Enm!Yqw#3tAag8qkm!>*O<5w<29z8~j9#{~pkkXfXL*09~`T+A&8r@DtYd8erLy z7!d<_6#fAc5Yq#J$1}BfM{d?XDF@>CT!%;DZ>3Hl^nk4s`2!frCIC={u98PSbL!w~ zYP>=H`x8Yvy)f8Hj2G2=v;v~9gQVxN*k5EL4X>N_=6?i0#F%AR%rD|ALrgiaI8FyX$@k%#ue%^0GFCR z`J9>1qu~87lX(pKlzQ|}|9snI1m-{Yug*C&CUHLsG=NZzB1oN@o3Z~6B#?Y1_%N3# zhe>RKLSrM(n9v#TR^AWc*Y|<$Mv*(jhuQQ$2UHjd diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc index a7e5e391b3f3d7c7899ccd4b4330f916fbd3fd28..1ea3f16a92cde6cc721fe97f90c6c2e4bdd2f862 100644 GIT binary patch delta 20 acmZ1|w@{AzG%qg~0}#}8KH11E#t#5E+66@b delta 20 acmZ1|w@{AzG%qg~0}z~b*|(8fj2{3vrv)hh diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-38.pyc deleted file mode 100644 index 8ffa208acdeef5e09933aedfafd6b346e7245f2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3010 zcma)8%WoUU8Q=HvEm4vmvfW~u_8_(?U8xS>7-?)nw(25{BUnt0Y-ntkoFTRH>?1Qn z$rP5C%0Lf={sSMRV-LOM)c>HD+&kB#Ky~b?O&SFKW|yWZ7Y4G#e*EUakKg0>JwC42 zD;hk1`kW1}RyFNQwU~d(u($&+|0fWvVV!D`?&-SX4QfQDXGWH1MYd;0j_1I>i7o0z zC9jn8HZ4aLuaff)twuGkmh&#HM-8u$^Ch|vEqaSl(`)J)F_{1vWx5nCd&_WM!Bt!X zTEX=fHf|7`G*>mU0w0@P04}F^0WZFAaT6~+cf5<_5?+34u&+SJ6?!>Z^;SXd>X8QY z3b_K3F1#@DMSSVG*%}ajLTnS7QU$1_rL58k1V)p479NXk^vQ$;`~k058Y(Da7`(-;0I4#mvogK#GnR zk1dFDGx&?4X@!eXIu^T0jP?T-DtB`f#wb9;aG%5|_fWf1LGavVLw+mg)G9wgYcEl9 z3*ALgff&?JViANfIDaM-#X$s;gBZgW9TDE13CiP&*7E2iQ&6>Tp_lkV`FR`NBZFW> z1xF%550jX@5->vqTI(eVeH+b5xgRT&kh-GONd_nsB;x1Ab=YW5+&NUeS!8i7P)UFa z1fCbV6;M7W^%XeLS{RFSN`4qT3!_nl3h*i=ryeAXqaGO~jG&;`V`M*s|BHw4W0v~> z!4Zm+xx*xWXn+6zzGo(YFrGP7GGgWb*g1CDlF2ccBl@}Fl zb^(4eOJd+PbNcSUH@^lX(;&(8iIM3iQ0Pzfng*PHstpWC7UOVZ2k?V+L|Xw3v}WZ5X~s*htrt&#m)C<0ygsZ+jG}-_CvVKt^zr17T3VO_S9vE<=GZ^ z(?GvEtQ8yNGq8d~i>dCuY8kJU;g@%N34?|J?o;(z)`}%ScuWbq2wSZtD=8gRb(YqU zg;-VqB7Q%iqbO#M+BN~lOqnGuRVt*TOdx=r+-O!)C#8UM5&@2xLWXpe43-=)H7zhT z6i9OridLPisEs!@5B6hqvzp8Gg-Q$dmb(8_MU=0kofkq`0zdfz`d^NNg8WFG*NQ|a zoUS?+zX3$MbL+v~Xi+(YBsf=86Ruc|q}38bc9HfjK7^;tA5z2?lo{562s WaB^rnI(+}9cC!TFcZ{Ve$Vr$-wz11pMFz^pSy(o zft}0Eg3g!l*N0#P5i}(kjcCRqMu}j;O0CR}?8diKCvzjW@txGm{K%(7GPMtJZraI$ zD9E}|H|s^ctRMBWK{TLbhX_yjPl@o)S+pWLdt?~Ag0skw8UKD+B}E>mroaE)gFAfd z?wze~zTVw=MRA@QZ%)eC~@#KdokOe@R1*33V9>%~a04~DaBA4xsstc5v z-~!9;SCC_;Sz}h?vP_dnjQQqSA>`0D-HTAIR$#GO#T{HFtGUW2C<1H@{?78b15f=i z7(oR?sV+d8wOw03lbUc=Q?ORez}kWU>DI1lwWNBm2-I@DOv({I2Koy%QpsdCnzZt1 z0@MJaE}%fXtz~+6F{0kV0Nm?WqTYkYpXXZ}<40O5J(l7mR^$7*+*Zl49B&tsIf_@0 zAE;ug;tbL{9Y0R=9Fn_N%|%j#>z}Q!j~{G4+~4Eh%7Za*G?w`>KLP(wy+j<=$okdUwci^tNOCa?feO&vG!FzJtB;4CY&7CBoni+Q{lj*E7WPiw-6dJ3H z#gI1s84LQuF61{klkH?@Dl6Wq)t#3juB7R;3gu~%OWleCm1sH|LuYX*TgloOpgfow zcGbJ^P}kAiK=VGD573~*&0x9Zl568MdmBHOC(SX&#(PbDgbPq$t+|RzS2@SL^JTs` zzX_xILomb&=v6wPHua%g;PYZDIX3~vx}2xz_c(t7 zGF{GioQq-t!z-M}d0tda6>C6)rKwOD#y%*DR9(Y9qPhgVc?ra?`e0C68dVCwJl|oI z{cSS_LIv-yULT-S_D>VJi#KLzX?qWTJGPLd2=_l eC5|Zm51#RFx9|T2-WVEde3kVm{4ATUb^Zg5wA$DJ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc index 22426800e4e6a7be70c50f1478f257a75e9c8825..c92608a757208fc96d7920e190229621ffaed538 100644 GIT binary patch delta 22 ccmZ2;hjGmvM()$Ryj%=GP}linBe!B609t4VLjV8( delta 22 ccmZ2;hjGmvM()$Ryj%=GaMoqtMsCGC09rK%CjbBd diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-38.pyc deleted file mode 100644 index e4b77b6c2c97dcd1b302cf850d90ad9f9cdbfe95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20577 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc index a2f21d5b5ee381339983c649aa5c32380f5c057e..88d3e64848067fdabe562910520fe6a6bb96c317 100644 GIT binary patch delta 20 acmcbue_NmXG%qg~0}#}8KH129K^y=@RtB8_ delta 20 acmcbue_NmXG%qg~0}z~b*|(AVf;a$0BL;y0 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-38.pyc deleted file mode 100644 index 1d2cbffb8957bf0993022bf307930ced524bab13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4383 zcmeHKOK%*<5$^7J?1RhYilQizqU4br$K1fC6d}$*5o{@xU<-C=hNLWeKw~i6?p+Q! zk5zZCWGX8l2o(fKKsdQMi2{&E-*d?&hy0AW<`C$XLoQJeDOEko$5Ju!2QrJPt$x*1 zS66*ieRp)UO5pj`A7y*;6d`}b#_^{DjT`W)8YP4iPGgc#pC-&_iRD{~?c0gtJCtz7 zt=LUUe#!85Tuv%}#qdsCO-B3?!@F@U8TCgg5w_H@rWDtcF@G#+_>JV0e<~UG$IZNQ zd^(x%Cn$NJ@CvU!A-uZ7{4-*bk8H7DQ&|RGYVp}*%AYdxN8{;a#-A~KJwBJr`m=@~ zi_a$){0s2C8Q$Qho)GbxDD8RsWQX2@myg5m^seP!6c@y-xX35?89upd@w0qtmwnmr z&xULP>UCsbZr7AY5US*TvD^Lo+3#jD$06i`{w+eM>=njU}3(6|Aw`XvxS ze9DQ>_%xm&x1Ta$aYxwPohHJ;GkWUqGOs)-`7W>W5nkh?Pc2^OV^3_qggv5cdeFYM zUx76aAAidDX+8n%DyJZW@iVaIK&maAY4n)Mr#4#piR+JW1~#3^ODo+dO@++KVh41C z=kM<|S?(y@3;cD3;BpMQWdjIWKMfO++Zv1|PhoaZbFnLScdrqJ2 z(-eC8Bye>}m$fxb`e3eUvV&%{ehwUrRbZ?N{WkVPdxTp+Ykj1neH&<T-0P%AH!9=f!rx4Tg*jN|R*ymw2qL-1aOf-YSe*2EmSH+Sg8Lt2<#uMIK}zHwxv zA*qX5Do)5nAM)nfaTe-fnP#9Jwls)E(cd8QyYp9$9mH}NDRJT`J`~%xrOf0t?@qfo zmq?{=f>}~?D#kRuZa0$}GPX*5<7sv{0gVRpbGI$wc-3NFj#4e;gE0OZc(Zw$ zrzE;~UOvzuuSP0Ll@8OE$SpVqIfCOOZJ8xO63VS!S588Y#0ZfXE^-PdIL1738u=Z=tAtc*fe|xH<<*too>*TCyWKUBJ_sHH|53EQrXnrg?uM(g6Xz@$C8Pxk32fJ2-B9?(UAK!7xa`@Gx{#aT2h z`8uqSb4Z#<(3S=HHgI_(2ylzRK#d@{0=)_knplsfj`Sa%G^8Ku=D@oEuR_N_{W#sH zk1b92Sf2v^S^J1tY*CuzX36isG>LUXZh@*z`=pk}7rsH&q{xLq@D6?uzfP_% z5H6{Qwm61OuO*@>Og_siy?^2nXCbOa;p(f1ZG~;jC~X6@UaCLj0tiBi!^1 zMjXM}AgAB>@`fCTBl(&Zc!Ht!oO-eZ|4_J;x*_Kv2f)mO9+S}x63L6$L;x#5$^!h$ ztyrXmm`gZdylWP@^FZ=)sFX+`RY|OKbGsuWo|iy=AhU-}r|`|oX66B&0rnxj=8nb` zcOs~acmDw9t9c-#Ql&1d)ACEk>=(Ahz(dL}UAsVuGK{&@2GnRUM3G1JgP1Eq83K41 z7a>-LI|{(SxWeZEEb!k1L~KhWz41+S>?~w=TfJOezrkn5X;~ANzj^@xMxl z;i_b@S(1k?Tln_{IND>*fUbRjq$gbD1d_T%68;<(D9lKtZqpfXLUhC<2P`HvsR_eo z4O1VMk3o=EgCNOxFGju=1ot7)79%E}Bto)$4au8G-a>*{FEJbn=*Q?d7Bxmc%tsRL zmjv^px(1|dlYcXZQTE(sKp{|o{M>)Oyj;B= z!(FkJCEa&_0;^4$a~XRnKY-RMNT{{UHiC8};ZEs_FS=pM{qg`kRBo@wJpuC^9cj1~ z)z&i!l|f(%=4V(%z_!PwXiK3sf-a62eDD13xA^?&y~XCG+{H3H?HsH7%+X@Xlz3Ch zD^SOotC%WE%F-a|7RQZ8Xdtz4QiI8+5E-t5imRF_{P4b3SnE1+h`I6x5G<3-p~;)r za$v6_mOn(^j^XGeLS61EQ!MB9me^K)4JzRy^^PLo(AVta#e-Mh12PL3Y<|q9 gQ?zE)+f`aC`oIBQR()aH;Aqd?3f6q=g=;bPA5{293;+NC diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc index 4a204cfd54de91499c44ace26d8dbb3cad9a2d66..08e48c93f01c8417599ae4c4054580b341c2b673 100644 GIT binary patch delta 20 acmcbwe_x;bG%qg~0}#}8KH129MH~P{_6Df{ delta 20 acmcbwe_x;bG%qg~0}z~b*|(AViZ}p8!v>82 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/status.cpython-38.pyc deleted file mode 100644 index 427e78a196aa81b2e6aaf3e563fc1dfecf89b307..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4599 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc index 95bfec1e5ce4cc6317c00a498730b78bb5b51058..c4fa5cfb65dc78c208d291c4b5892d7477a03926 100644 GIT binary patch delta 22 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-38.pyc deleted file mode 100644 index c4da3f4478505d4617e7b112e79c1e362e12c794..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc index e945efb4022718ee585528b41b4bc3f954720f5a..3f48df42d14201d05cd81b0eb06fd5b0ec6396d4 100644 GIT binary patch delta 22 ccmaETh3WMbChpU`yj%=GP}linBX`0o0AwZzE&u=k delta 22 ccmaETh3WMbChpU`yj%=GaMoqtM(%`F0AuqA5&!@I diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/table.cpython-38.pyc deleted file mode 100644 index 1cdf515086cd9a47b69786732afb5ffe544cc3af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29724 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 bU>@ZW0EG#a7j6?!fN9$Vx{rJrmNNerfx6~7 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc index 2de4b12851cb67748a4c4bb59047dd01e8da72e0..6383b1d2007bd547996723fefc5145414eb378f6 100644 GIT binary patch delta 20 acmdllwO@++G%qg~0}#}8KH11^!V3UA_yv^! delta 20 acmdllwO@++G%qg~0}z~b*|(9~gckrj#RYi) diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-38.pyc deleted file mode 100644 index 8e82755a1543bd693d2344a436439e5fbb63105d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3232 zcmcJRTWlOx8OLX4uUW4h(}W~W+hpi1*)*|>lhV{lQ*Uh7cH>*(by97&9oGJi*F$z^ zmNT=tR7PA9#3d~)Pe2ReBE;=20v=i+gb*N*cmN?Pb)G7fmr)-owN(qPQ2YJQ*|j$X zA$VX{`#<0Lo$q|-JC`}LOTE20gFn}PCRY#i8pbQAbbs<(8RcIvY#Ig`WY&#_SvDJ1 z*=i)p3DY2p67^&wRZb~8Sx+}I<&0^FgvjE%niw$3TP6)kQTnPu=_^(_CvudbEPuC9 zj(R9hz0^lrYgy{257AAujkeQ=X$NI$*(=F%4}0&VT{J+u>1MixZsl?h?IpXmMUjuR z$!)a^d*|8vcDjS^q`PPz?WY1Apu4$#ki8GlAPvzy^idk7!^*o?Wpae>rH|2lbd>I= zBQ!$C=oot+rw8Z+JxHTeq?5|KkG;oeoF?cYnxrY3ribYi*Js#!mgZ=l7U(pcp+)7r zl}d|7VJXIH77|f%#tp(KJKqdl->cT6RH@ahib`-s+=KxweUYhJZSsvz5PJ!c2_mk zfW4$W=X+vf&RDq6x20%`YWOdS4BF#jwc4tO0i4iL=QLMHMY+xOj&hr85~cNQqO=}4 zN=p&8q_>jdBh&f7PVjGxf58Ek&{#LWVyqjE$(E%oD@?2>)|1UW>xrGl6_eYNWbg?x zd2pHLK2iT>29BCv)W4aBCK4w$>Z$UwY7lVd$w1UshH#uH=Qs_YT6NfY$N40u z+HT1>4*4sLdz>+K0pL!M77rk?IT8b^1?iG)U|AL{Ux3xhn#rxkyOw2{mYL?ftans< zArZd^-`yQ4BqXkzO<|AEd;sXin>&=dD7zbM#sKYjDB1=aw(88I{0i}I=}4!`Mq~ym z$&JVil)XVa9^GKWTXpVuZ1lS!2KsRxIAZeFjxcx$_MVO~Py_4*fG~IyHiE{E249E$ zGUN^o{t5eQkam}E!4@p-#NtN){tS7Qg@gVE_HQ9S*I*g;fj z&TH^6>>on@raw+*N&~e=KZVD*0`bRTf0;#IRzP);Sa5ksfq0FJ_&Wes6p$wY zo`ZZtgWa(2Vv&vpI4kkz0FG;*hP?_<)j*wl9Kbl%K*cx+550u({ji^e;F{^24|Pbe z5Oan8C>>sI^4p{9zD;sV)T`cPPN@Hk=@(t5ssE4Zw^@S!C&&TB#_mTu#wQ*sF3psj z(!`nB>AB*JQ<|EXorp5C^K#o-RkM8Y4S#L cKr!{IxS{oJD}O`%AJ*&1UH>QF{~?F>0pGRb>Hq)$ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc index 00b2a6885739134109e2fbe81d04eba884f7316c..e4939252b967ffd308a7e2163f3dae54794fd4a6 100644 GIT binary patch delta 22 ccmex&hWXzaX71Cxyj%=GP}linBX{vL0A_#)l>h($ delta 22 ccmex&hWXzaX71Cxyj%=GaMoqtM(*Ng0A@`Hc>n+a diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/text.cpython-38.pyc deleted file mode 100644 index 1cc43c451110b4d6af0d77728471999437ea2eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40550 zcmeHw3zQt!S!PxByQil$8jU4cmhHA|OEa=Oe#MW-vSL{eTedt>B-u{JGOgBB&8SEH z(yboJ>g@@MW!933f`KF~L=Gb$VHFk@LJ~+IJd*6P%V9a}5;#zY-DQDY$nIfxIh+lN z672oH|5jC3^^C?2arPW?cBH;tU3Kf$ef;mot)~VD^9KID|5IxE)F%z&&-o+zm%@*S z@o^uq4C5)oHf*zIO!C{RnRRQ@swXBBCVwYt$$DxsCCABHx}KTL$Z@Kct>-3l_55VM zJ}@~@FH9EdgOh{x;$*SDVsb@&XmY5&a&l#Tcybu^({`q|sy;F~BFEXnE?5--X%@^&2N|l;go#seaSsO>$hUZK&To zd9xg^sNGV(b@Em@9;$7uZ<^dB$17{2^|8q@IUcTUuHQC!TYbyq7SnKYub65rdbg@} zdwqOzyne^z9rZgW@2uZ7c^7JrOx|r@+t(J=T`iF z(Aj3+c*1(cQrj`lrP@R60s8cyebZTUa=WvA;T`sd8PmS`l7+MUbqjvoD!<0h8k4s> zw=Xg}^TobC1|d-MY9-oCKok|Ey@+hdXIo9)}|Ef=t^u^P8WYK+@=EK%dm zNR7MfyW=%%^N=xi&sPXt6JwT_X;oCaTB&(y<=Asm&Y0;XW~OX><*RL{KI638jvC8* zgNNUJV0U@vW4m`gv3KH8FR`O>#>?)k)M}MuHOEWts!p}N>|WH>zxP$$wwIr%)E)cq zTnja_`&;d5vw;Vt^oi6{4gCI!iGJW=xmvT?D%UD*n?G9BsT1X6&1MZh2JGsos_m3( z)do8^u%lL;X*}t)k2h^}KRe~rYUP^K@CIF{U6x;NwZodJeYnHL!78_{s;%-=v(Z+~ z8oq5gUD#c3&Q_nUsA{FbrxqTcYn{OWo~%A!ZSYA?Iu&IaUTl5d~cwKMs@j16$oj#+x>=pN)a@2IKdD{P-v7PD4T&=Bc z!bEs0cJ1D?G=@Ai_@&6=$?@Y+ytZU57|5ANBw|CvtmhDUh=T> ze0vHtVt*mUcp0Z1W74#ZNeh(2oJ=@LCuLi}3w|f?opv%#mN(sf#9Qz>CSr zoRgPdSv!Yc1GuMP8_u9@XsogG7cG0hF5p_xNdhnUd(bZ8_lofM3VR5@hwPPrykReS zs8wlnN;^vRiaO!grMXr~IWvHTQngWXn{}tu#(>7Xl-mYqdI_gt^B6OJ*(8*<=Tu{g zU=#fDID^kleB8q*+D6xyHQUx%OWn<**@U{=HgS~v2nZ&=Q~tO45z9`znmL4N>A%`e z^Ukv-YD$f<#5vOsgd>Y65s>hDFz}(wg zm8lbz8OJ@+so?{axNez|PQFvADx zE0--V-JG5VR;$}_c}gm=BL2AA1aMjLr*Y8b`WYt-HQdEoPFsic8S_L+-4dQLjwI%- z`NVv(ZFQ}7qMPWNXRU7XY+^ozGpShRY`=S~|t81MczWikK zlv5IHD^(hH37}FscBX%P`FzR$+o5LMt>G`8)KgFzt%6c+ElteTk2wk_OH;=ysxk$d z>T=#Hw#~2DgT{N!9u&;(Ynil-1KkRG(Qr?ez zOeXs?J5{q)Y9Ggh6QU|@IgUY6Z%W>1rgxN1Rcdoi>6p_#?EnnJABtsbkL zDYUSv8gnNIZ}MyuYzf>bPm(Ro#!ISvMl(M{rtn?=Dn%$iBFvqI*vS7Tyq zB}qU7;z7CW<;&%I)1IsGxKJ*i1flbg+ z1-U+jOR+yT{xCl7p8y;JCQBA;gRj_0J4GgHgLT^ZncQU3{2&e|(kIytgqeCOrYfK#{@EEjhTU(DI7?2#8UlY?N**ML#4w$}*z&B?E| z_O-%%Q}Sya1X!?MFm~3Yc$=JD=?sHW-vCB^qg}%9RnCZ$lixSl8}R#@@b}I3E%?0} zeat&+*hk!VEAHE9Z^HSt&b59IM(wc|lMsT};f#I~L{~X;owFX|!Ip5`xA%=XhY?;c zqwbA8g{O>P%tExi^Tjk;y+PXO&D>pmZCrKU(9Ydx=N|iQ($0-&=QGlidoNm;+Y;tF zd@AbRcQIw(Z$I#22G6{y@0kVr?H4m#D+oUucrRyTI)R?!+%oHz$M|kWjbYZ8`P+*1 zd(hq{J-Q{FuZQgIGGDhkx6W?FQwsJwFwYN%XRn320tk>*++jZ=bvHSiP*Ll+bFVf!guzg@=pH2V0A{Vw!s+RyecO{yh4fa_+WW)NG^XoP7$Tdk|;zil0WC&)a8Ecbold;XHM4_Mg~Y z)O-m2n77{pn8Yj!_UCZsd(rRr+V4ZZxBLBm!9I&N-eLbb>JdV|56}9i_Dg8tVf!~C z=g!&Zac+nGn~`%b+ux6KkJw*ucKT=EkM=LvAHdmN_7|Nr;5wzL5ZB%Qfe>C_!Bc+F z{vp)c4Hz=)A4b1FXnzPj*@M|3E@YjORt7MB!~QU?|A_t1aQ#vIDoFhwwSNr1AG5!N zan9Qx5$wx3IcKkZ5xscT{wUV)akNHSx7Yr0w6I`b!W~c8|4LTnCvoPd?2n-j`_N)R zsOQIVC*dW6!~7+5bFcl=7c=%hw=ZM%p2XR`_9xK7&)EM0ZBC#?Lc!14KZjrY?SF0m zOZ(^TUqGKUtp#qQ-=9S5zi597{W@S5z_@=)Z33OId=*kCMG!51Of_pwRk{Og7s`n* z$;4SUMeWikIMkL>)7O6?AnnpBUuh1?1MY-Wglgl#X_1vSZ0PY`sZ<&jefe2w>kw~y zF4pEF6_+v`&X=aqspVUw)C84uanF2RwFC_Y`t{b*hMF_o-ms;#VG0_Fqj)quSF7<` zxcP>7uP2%f%!4l`mLN8Xrn~qt`-3atb0{}R>ri+34XwV~a;xsL4`?*Yr&Xm@8YRz< z&Bm^(OFM*2Ly2`-P@+&nmDoj@Az$xaZU7X77cJh-K&GWE%NnxA6i4GtZ8&nI5n04` zf7pizbz zh%(*Hpv-i$t*tYV^vl^c?mNr-@;0P=MeTWPK&{1>dYpxr02w@hFGrsg4xze=>*exURCY&D7=G!m%?8L|A3{txehH6U3)lzCbdfM#~FuKU+|wL7ZyDwTo$g8w%eSAfl^PZ zrS{_NRUao({;Q}FJSrHLHXtl|*40J?(@d&Wt5h3T8xv@5xx5g0P%tLBu;@9VYPcG= zh-Jxuor!iQZEs3}pTL@w-bR3iDGC3#!(#F*Y72BM)eTW@elpU9V657L150SC38hjk zwv`YOLVEy}RRVt-*0E{Y$6y^|wt^%x7XKrcDf zgzYE|k_zJI6(^eQy>%FPX|i(cv4jTaGHb$C=hCv-2crNISOUuBkE4#uWjA2XplJh& zVlc5%A*OQ^P&gC;$&EPB!#HcX#Wu}7#w?5)vxyT{6GNKCP-c@Sa9$50r3bSGL*S0QNFB#J&b=emS^J2_s8|eE++L4H-U2_4Jv~!s7vw$7g z*I-?nPjypv>V%~x&lw9T+SF#OOD3#pX&cfxW*}`tt9t}acm@H(i{y1 zB<0VIqsJy~f?YJ4#NbaP)rKyuhRH_KG)^YZQKF>*C-H;UN!T`lrlcZ@7CBjv%Sq1~ zzq8M<2h(M$OxCNdezI_4_RMc1^POteTibsPEeQ0dt*mK*MHOD_yxm_hI9=#_DVN8$ z)tXb4n!9}*r-a~_EA8INUTf-|Xbzn_%zka=aZ=lB1bjkhM~$tlA>2j?_zC`$z70ek z@j09oLx=&Sw1AuiEBRV7Wqm!J>)iULIw>>MxmBRe)zUHyb*-Box~o)CP6<|=k~`OG zH5G|QM(trY2>D*7+OPqkuA*62@YG9d50ICmt7W%RO%)hbkF!pL1ud&Eu(z8nmQKq{ z(O=|hq>+*8L6*zmnXw#}WGDySfY77*VDA^h6A7TuY2mn`MTQH{H`>3N$dX1hH z6vC_vAIHhLDnu^IbPA-C;@QoK>#=K0C}O8wsC-2hOip{{~Qj zpe~g1_i#WgsTp;19>jfyq#i_PK0&0$QDQm)1c#yOMbglu;87;}s|^$eZe@eIA4<+A zyUE#fJA)QrK(})j(5?+5de@rG0?pCJa}z+U%zPFSR;HT*QeA{31vG+GmH9pxLe7GC zfYD@dPfjUZ%c@V>`ECx*mVs9j4JhWpG3%XF_TWOUOCpl*=7EI8&U-k^zDz8BBsh`! z=2h0PXG&etx(xnJ!!o|09>9p)1`~rX6lTyV<-p8{lXOzC@yd+b6R`!l;UY{s?o>rsH(jF2?Vf})@_rxQ=Z<$Dq&3?36}4_zkW9iZ@d*;2Fk0wj}$ z^wIs?wi&14Jl|5={~O!pLy~~U&J8kP-Q5U@2r7R&y*nH_bl5xfJd1d*R0rq&5}&X? zhapuZPB>>e*0Xn9F`v6)KC5X|-b?E~s#9!60A5<9Tr5bBVS_9v5`R@e;U#CA@S_Z9 zM$Nn67@BLh=GvM(6m)yOo{b(%b+Z+tHGMe*9r*GaQGPa_Cm}2IZ@KO1qaM8jDcp ztR}%S@Rx9xI>+J(7NQNYQk+Q>qx1NLm`y4XVs;kTlm&)She_Ir3rS!ea0@z38f5}l zn1fD}1MVa%TL7Co3Eqx)Q{dFnE==v!@&TxaIB|nU34f$mq8G!Iu_HhpU&(KAYF77I`gr+CX;zc$umEaStymdV!k9 zW}T^a;BEG~R0Pp>OdQ%<(kuu_hp3i_H}zXb+jv8S$Kda+H$bxG?=s~5P8%aRWp4$6 zU^~HIV5R%c8zloGGO(lJR(CmsR;3OCeU>o-3O`*Ww*X7DR5gqPNL6`CRlY10*rUx0x~%tSO}S(OT@7L3zvH3w4V z6RuFC&`}yRHQx?{QLP%-nr#}QHCYMHGq#5M(CNyV(&=VnQyWnYG=AG5M}vUhsz852 z>_nUV>-2GiJRmp+H)&de=D#fpxSZf}H5v#R=#Y3_&^r$04E2zpi*flS>eC?xeisnH zaBY^AHe|K>VIscz{-ja=f_Xr*x`+t!VL&DHtqgBsbZ7disOAkw!%LgT)B4&rq7nh! zxTe^XwoOPG4tbPp7&@u!bDSsK1gZO0ec@!Ua5=9p(p_bh# zIRMkr^i9k{YG_kF$U>vOWxjwQwL*8Goe;zA_HMpg5bbyak3K+Uazi(xo`#%}>}CW* zDeqgAgFx>nhQ?O|fnKmj9fQ{Zl6$4(!b;&Fo{lY ziki{kizWAXbFPL+GQ?THIRO%7{vuci2HXNP2Co&hIE+s(5Kl`ZXZV*r%YJIB{2a_0gn6BTtq-I0!@g) z48EeL@hI&xeSt?y89r$sdV!-9dYvemYZ3a&nHd+C9b6h&tde$yiZBCtB>dCHF@Ic- z;WWrBmXk{=%gK4;ps`41XPk>vfs#M%K;H(L_xUcuD;6hYm=qU*0v{Xd?Hlof{zC#VJ_K$qGwtE<`_GaCX9ybPpPl`h zM3nUU67>2kCvb>TuocQBglY8HTw7cmlmj*NGxS8y&A1ZEkV~KYv{d^4=(<@Uc+;yL0~#)4I6)8Kho%9Tjz!ah za~YW;P9DsTvsoMdZNVP8-V&V~!zp8@$mB(|4@5vc1ruXAJqNO2%T9zqVE_d`g}(Jo zfjWwFKf|%F#sSA3j+;jq`w)V;W%TTjCO=6nyN%%n9e5%zLy{5vQ4gZLCg3`YgRZHj zIV~U@AP^vqhFTA6kF|zg6$JgB$g0t967EEJMsV!`Tua~@+>71hiIn>oh>3N=RQqf| z7N$;|r-%`UKSg51&9e#0ZM-^`sB|!%9imZGv}hC{D+!J-MA3o9%o&+sKXInV+ZNk^ zt|mZ*T1>D+0AW%^;U~6eNBCp=$W8!iF+vRkTg~UScda+I%mB7dZ z7`*T(aZXeK0otqjAdW8knFRv4ArN_K9p=;zpg)2;J{tn)AX&5ir;moLF!+H>1Qlnh z9}uZ92q4yQ06;wc)&io9sDwUHL~5cBil6xhf}&Q9sX^3gR0IND|CoaqMF{`CT7aNM zhzm9NBsaujf+^Ep1wqc~qhpqYllvR-V38g;;N!?l}$Fe2%V+9JvMP$X)gkRqG) zt+Y_ZI7q3BsQ%Z4BY}Vcs3ck-iD*j+ffz4)9C>KSLUI?2kd)&HF;C#*ZbQ+9013WZ zs2U9fCD9nX0J3E#5YJ#On3oLgWr2UxV5pMzyohy#5^=Kfr4XJRB=faP!IMj)v^_Ep zj*!jV%a&@=9Wxf8OuL`2F!n8;47YvzcI~oZvgJ5|vQ({;QA=1+wv=&>cMjyD^lQ;6X@@z91-Rp<10yEy|LYjl&`vuO->g|{tc|5pL?C$R!# z&R~nn!};dT!Srk`J>i_eGi@4tK)gZCLAa-@&tuNS=)2+J4U`vx2;<!+J47g<6}yV{e{ST6#c(eMV0^@Q z74rQL>!2?4iuth6KfpM}JT;HPONlDiPZ#ssND?H3YXBm%sHJIG&9g@5IzkH8C*nE? z>%w=Co@+rnaJ&>_yIesYowxQ0JS`CQ1&w}&eTXBEXEht&Ans5MFjfpf4TeaY@t+7S zIPK0&WBL~(4CQ)Gg~$#%A9U6yvTB`13Tnb4cv5<|I+cU)z(Z)OKvZL!r79MqU4j7T zwwHG?`t=zzPgbn&#@Zo?9t}no3#>tunk=L-m++z!^C)WtV*V#_+&>9$60@PQe$EQc zztEC2!X1ZYE@BnbjchN0_zxXDuY=!2%qM^Zf1FZk$udLJIPgXL5iMc);yq$^DA%694J`nrOh%ul&PV}D6TmyCrR8Rv5k%nx>R z-NCb_Zoiwildzq=?6>i9*hb4H~utImNs8Rn{P)#E|(aTFsHRq5jK7eHaYY`i(qQb1%O-km~%L)oJwlWlN zy#cwTsf3p#@bxpF6(Krf+YAhoadg`DzKTjb;{$1prLBEEj)oA|Jp}qOgkPNzp&We; zfNB({khTY-9-<0pCjs3^QK<6WivN}!Uqmnla5iLDE&Q;160hmU6p=L{yC)`S1kUkVMxkc!GP-~k+heCm|;Gx4|F9um+2n8XqQcW04aTp2(Cfc zu%IqNc~jFhL_q5(o}7AtPwhit=?SwMG^*wIK02}g;O?C}4(%3H4&ryo;WWMyy1guD zv^?9(GUtb!T77|41Zls-qYy{?M&(5iQkpo(5w626#>x>vNE(4H2)~8b^NAu55gKPd zBFc@iB_K~mLs}Z77yzV!ynG4Yp@(9_A?_$ey4`lrD>Aa#xb-ael9b*|`k^Go=SH zryzg_{Qq&(O)eyDgz&(K4QIzf3OgM!#9xAX#J82`e8ATLA_F|;oN0m&K{$o&2)Y;0 z-6kK`$qvED{m`5U*I11H(Ja`*xB+pCk{2Q8V}@*UGXDAgLIgKpuwD`5x7_O)G#{s; zrjGj*Uf6`zCLTm>_~FDn@dvzffb2BLLrpu+BhAG1hI&mQz!cm%c1GAqKj7u{3YDq6 zaP`C;m)7>&0w52&^JvRPuO3!2Pd}w^9TuW4i;jNrFM$sceH(Rr;OC-!cCX||MLJ@D0i#ds>)H_He4Dezrt$1JvC ztJq~p^OpGxRMh{3-l?Bv(I-sjVe|I~_&!cc9(4?GLH--E{3+?xQ6*ePqZHn~jE*ny z4L+QW;E%E~TbjbheJ={;P_!^^mXMXHk(sRhgh^s+SAWX?tw+d{sZ2EJsvnb`qx5Ej5Bt=)!gJVxIyjYjDS zMZ3bD%gJ7Non$TRB<6#-1_fp_zTo{Qe(Gws@Ms^4jVQb%)6%_Mz4ClnP)X4rs$1B^ zqZe45XCW;`HJ$&$v%Q9;%{I*gQJ$apBnxyeuMA8%9ta_+vvh{_CG!z+_)y`J^!R~G7Re=P$mrvd zScz*;L;V1YIKT>9{0YtjF;9|cMx!IH>;30{9@ zK?fE#0wosPfk{#u_7$r%4ox7CT}T}9NC{{>#UlZTBEd_jo`$jC#ucxKZONi1 z6L_nJ4&yq{zdi#Hx+Vw+o^^0CD?f{Sm%MvZDywdtj?m|d9e`^N*IXHk`8z{YeDjU{D=kP5mfj20=@_5i}S_q0QNXtk8B=^?rUU$1aj0J6vh2( zn2jVP^Faxkfa-tN5{Um=*TQ{=<8w8(vQotK9t5M3bVJ_;gy0;1Gt1@m=g_3I*rF8p ziQ}R+#emU3ClN9{l5oKctObDe|wTe*LZ!_+i=U^6`1vF`!v5*qb7Mhwa zYpXE~yYzBvY1h=2C_ya}VD)n-K2Jm<;L~7?l)W2;+UOxfWbe>utcCA{eC=6GaoAx} zE+K>3visa>C~y+hr1K1;S%&H~>W-OOp8j7rUWy!kp+|etK~CYK4hG7>qUrlqdh<`% zgFk0+wZ42Y+Lyzs%eq@oOyLv$1(P7F_6Sb5jhB+Zf5{9-zBo97W-9Z>InWr;2Z&F0 z0;2FZ^Te^LJO>f#97JV=w2|E;J2w;Jbx8ZvoWcYkAc=admh%zuFm+-)HhOebSQ06* z1fgh_gyxZ~-p7(;-k~1MqOO9rBa>7d$w=uHLSM(2t5FAI$t zerI)?5s(U23|fholE_<#%{uuyfg=vh^$Js!spCk%lAqpStS$I2U`1z~FdP^%em~H< zEH`;8bkF4nQ>@kBqSw7acq-w2P? z8Yx#oBcHe{lMU=wFXwNKbcu7ld^vJI8?r*U8CJUKsffdS&mpQSI;K0b!CdK$b+N6@^ zFtX*ab!fssUTXoCsRHv_A@`wj#>La24@9h9Ob3dzyd*E=U38%=3QQ)Oqgqa7jt$A6dOS}D+ASiU z#1*cZP%Xy%or7+rHiK+p?yv%D!A*=Hzp4v#J*UO%Vk3Xfi0VYaemxXb)k+k!UT`;W z^@{w^ki*ABXhM$jA%f`tCdd|W)d0}>MpUb_UMPV~OSlh4c*|mTNajO4mcfkT03^5s zsS4D69$S<^1_Z#MM6@0NEJ(kHLMNTq{i@75p<2O{(L?*;jZ} zYrISDCt=Y9OQ^yN`1u!{;te=3@(|y1S}TWv4AJ3vO!_*rh%G*{$s(~{M@n+yf%Bqg zF0xl}be!y+__#^*RPS?iBBP3o8H0ug8JG;g}BzLx)1XOXRCW%H=z42oBiXj&7XFF+ppw4=yif$I>uk67wM#0L6NP z#^QEpZ1@%$p|6-ZZ6cG5%EJ&OR#qERwK?pXAJQ!Kt5_-Z919vXk*p}V%GLFXJCIHw zfuyp#iiY0`s|t*6=g}{+AUNxQNP?^Ybg+S$G?YLhkecEp-p#$=C|L*%P#@vxkIHF1 zB^t#-JR_*X`isOZjCFwcb|)$u8FDU)25E3ClvY}{zouuF`?VBI?#I9^hXUXjVE}sX zmPk{30K@zE*aXa3z>@!pV{L}PODy`h8E`~68A*vi_A5B(TCD=w8}A#*L1Gdl@#gKgy+#o#y<)ZsX;AJt>3awBvg`aDPV;~C|xo;KaY{3Fd<*@+iyZ5u_sjT%Y&T5McGbXgsw{RFjRN(-751(LmY??yqRGhccD zn~HTlw#ODhkOCFIgY+Mp+s7w65BbgltRlAY=C-1h2KEsLF3Z#c3>oT+Rg<}=i6Cm^ zk98=(zg6teHWac;*V`z8%z||TSGcholsX)hx@KcF^{ZKKIwDT`?4&pFo5xPeP5%=r?|Jr+F306R{ag>>>tunAQ!RY-sfhP5x?24sT- z=oohp3}`43$?+=G4dv{WWOs0Xq+AzVg%4O;y?iHhMu$tdk@tM zOpulq_4aQOB&4M1Ly&e@hKx)RbShj?c}h=UME{or7Gx3#u&g3X#32T7L~&L>p@i#R z5v`QN#rN&}8$xIzPkWlrCX+YPWR6*3k=((plNI1a3o#o$;Ut8Y!}xI(csZcqC4dzK zP=0H0@|y<$Cz}2OR)j7G94Z{pn+J=D-u`L#5vWBqj#epzA$N`7Jjnb(& z1K3cCY~m{br*6U=e+QsR$tuRd=wu9xZVHwUUbg8a_W_(xH=}bfNXDT?!)*v9UKV4O zHm2FW7-2F56@COzbgpPnYZ0^%Vs_#qBHB{Wg8Y;%K1Bgd*3t~2#b+5`IN(Eqco+YX zgF@ghRXzO0E6w^Dw))SQuTz|E(j7yl+uyH)(<~Fg@Sh4_Z-poz5LdGHYU;LG25H z@$kv+S5gCCl5bCuOb zoC^XE@J2g$?O6!)3f%o|J>FPv8I1_5fUL=m*-#qg8WO$E*I1ZkOhpbABJeka0C=eU?2lX9orP*@vRP zHLP|3A~%&{tG>#f=yB@a@FhKvU%s}3!H+Pj_=E`QltF-`=&#H2B)QMuo1f%)3q=pH z_wj&flsxN)ra}0P^CoG3F<;u@dm9*r7-vU1NioEQWsHRWB~hAW!+YR@*av$(=#1`f z@RdK2eojFZLVATZSnEJr_J5*tx9+M)Slqo8m6+lwd+_MmG(E~#1K;2x9!XFnW0GAK z~OQf!$(=BZh0!9P>L0g82x^cs&WvJI!<>I4Xh$&{T(jbiDzk9wW>g^4vwH zx!TT1I+O#b zT`@E>HR%vE14@gY_)9w^CKpPA&ijnP%6RE8H-GYze0anJQEaU$8Fz5MiHDcBjO*cU zDIv)|#DgZ`7_odOTmf~d*Rzj(dsq_BEFyfp6>zKs7JAYi0r=m=0Qly}XvO}!6cp!r zfT`)f0IPtlfU;QZLI8!r(gV;qM1~>LZOrj+vLhqtk&&T$C~w{X{u4r-HnHhtkdDFF zpKdo#AawTX&Y_)X%sq|*kj6+4n$Ikz)F3*U%!Et@a0esrHaH!aOoP2kwc|%1^nk=Y zVE-}H#d$zy;P~;+z;K&7S%MJ5_cjpXtP0t#4|Gx23+WwW>NRoqV~73Vfr|e#pkXB7 z6`_!t{`Ioqm*onrN)_+Ci#UO}*^%DRCJ2If_7H8Ol1T8}68<4^(z;Q%4!cb+51rAy z?!RSF4uM60MPR2#@&t-V_W}pSU6@pLCyOuQtadt(!bz4DJE!4LpeqD#Z!iEC0h2Ei zzE9^#}NG6H$e2bE+d0we#tV_ z9W44LYk;k4+qwHcI8_|4k@ihOk&9?)821Brkv4j|EIWHZiOBV={=BU2Wf9{GY>;Y1 z79UQeyMW>xd~n?M-xtHcAIJ~j(ix?(n=YFfT*J;4mO4O{0Im;Y*|t*)X?!y0F!kq5 zrYBL{nolY~lbYnE0vX{PqIjIey}XZtWjEnoJclq$wugPg zlM4gfbVt&OvXy_2k?1#aGMZ5fZL~%=v2hKyd*7mW4^Z@{`wPD;nuhbVSOhzy4M=EN z0`E#l>x}Id(f4{EDjbV^E=yRX_iDe4m_d3^=MZR@<{09S>9arcF_E=i;sKi1l`16x z25B-ddkZW>1od}x16d0l+OeVe&kULClI(LI0xF(8h(#c7ASA2zUZHSh;K_ns$M+g> zV1d=Q34N}Lt%iCC(YY?{h{hgYzI5uX_L-OvNw5`gCCHL~=qMYed|z4=W%K8_4u&_2 zFZCrBaV(SQ&jGM=EixiepmROPGA`@A1g~8>_9&DE*gEqx@UeQh@Z9=&bdtE^2WE)_ zy{lvPhI{W1O6p9GUt>Q{v0(ZW6g%m7Xu-yC?jtUXpeMtj@aqjCIfEf@dP}Jxj){nE z!2HkrMSpA4zH!CwS#p*|R9}yFFw6el_2;;E7A!jb;`tE2XOIN+l5AcYyBZ0Di z3#f4!B4?~Dz=H^N8WAsfbLjPaYAuq7^RLtMoeflLnJEZ08SNEVLaMn2Erm+;AL3C| zYeBsbT;i_7)?$ExkXk}oMr>&E93o5c)&+!~bQxPpsRy)^>N4r5q-sj^Dp*8p&78lSnS@-GB18ksdm90?$DdYjJ*M<8Zf_H0D?OPfB%HhOG~}h`x)ygK*KJjIKiMU(pO3N{Yy=kCo^`a3 zpQatW3wn8PzYkOq>5!WnLA=;6>DI1ndP|n3Uwa}?j&QN7P-AcoBw`}vBcREV;G*F5 z!2Xkalvjdi#Hbxta!6wd-a-L3;{X(3gC<}Q37`me5%X{@;=Ev$v25c)(x(R^cY$h& zTKoj=6G!NTU?ffpDee)olzNp_!g~6)IBgU1aUaPCt<=d(`U*U8lBHmM(^v8JG%Z1} zmn3S3(2P5RLOebN?OL2QBmSL0JgcyCKfpqWS&yR8zw-#Ygikb(cTq<|f1tVzBm$%n zr7#|zg}%wtwh79M2&WKe6OGTq&XaWX|99T@Ad0bTv}*Stnm}-3 zK)Glp@rt@Rowk_qZcuXNQ6JBUhp8Mt?^ zrt4%EH*y({;=ssdLD7ps+YuRpZ~lWvBV&C%i_NiaSsyPGFb51`nnZ#?NrnXzO7a7=rKWse%Kg6kJxY~Av$wDJP`Jbl1|k>*!NuXr zMEF(syfuz@bv+k~es(3k?l}4ob^1N)+TJ17etC^}1fxSl;=Y=KDS|U%lM_|yaXv@1 zRNumJfKQia_B`!7P^rlWi^B^M657)~lp6{2_2|2nhpRtBWrSyZnhlHjzDK4Q>ZB93 zV#anZ_#i%<$DR1Ne}V$(X1(AcgtNA=<;twpS_i8~mX-|sNd5Lr6nQ<82Y- z)zFXd{s>w`erP_AprHJTw3_VZ7m(E=Ho3H#MQBi-I@$aH6o?$MSMrF^u)0}0eF9-| z*sr~S`q<(D`WW6aftHGVgVI7lJBv-k!T5xHCSEAQot`j=KMi zUZYF*SrDkS?3;8s&sUE^+~vQo7&Wk`Z>P^C5qb42n|b5+VD#R{>o+WZ`!}g|YB?t^ zfA!{TkGd9!k9SXLo5xC0fm?xw;Jy4(AJ)eV&w>L$Q2G|0@5O8NvM_}~OYGwsHbc^= zy#=DD{73#2=bu>q2Q~LymRxuRj=bz|`|l0PuV8g`;O;AI^$|Xfe7s-q_zPV9UJ|f7 zabT>)o2e{vI&wA%8^Rmx$kXUHVB)*{dp(`d`%w5%y?iJn93g2jlMtJvGD|Whx0)o)Q2$MrQ6)`eIT3Jp`rtyNzkkST(b%HJb5N#uiUctz9e&wIy zDDdjYl(l(DuFFyhhY4Ammzb`$f1V3eKs5tm2ZL5AQ23EIxEvEoDIZW%m-(igpfhFL zn)icI;D}5>oGbHYXMGzjX4jkQU>Vrb+UgPQC8w@$rx!n>QZ~thuA&=+ITSDL z3gb~c)4wGLCRKa zzr{%>YEHj=SxRI~v$@>kUNarLT+L@Zzca4fdF{(a5B& z;n&hB%UTW6!ocg!nyd6)N5y{dg-*_{*0HIO<1n9qVGyF@z)8r!kC2WRm~+lo)WG<{SQx}oV+&EnVe1GaZiNH0b&~o0co8P| z&`Qnc>=ZY=!KUBH91?Ns6A+d%h$-VSEaYtba$m$ASllNofAWZ&E0>@H zcJt~rY{)a%F5(`Tj4m(|JU;>q0baAWx$c0_+#}sQj2IhrUA#cEuP$a{g$;piVW`WI ztn97?B`C~&KPC_%4~*j`fR<+FstlF!Z{JYUsOlAb;-N8>CYlg;$wR#ywq(&`6zN58<|9`I^mg;YX>}rq zbn6+k?-izzo9W-@dMl85sUuW$bd=sO#cy?io$BMZ!wew}IwnBu{sGAps~N*1lEpY8 z0oAkwFr0!xRJ0!rBhryO`Xy1)4xC27Jhs!+gluuEpjz+b^I3q>N53ptExPnDAOwU3 z-{!;^|NC`$#MGOseDU%@eR)W}CdS^W9>I~KV4!xf*o^{-0cE$=Y~zLBS`uBsE7!B2 z;;Hts*u!Fgg{a4rD%87KJiy`zi~CrRo+=v!-llqt8{4XBo|$2BoW&fkWwGlm)T{Ox z9pm<1o*S4#W}mA=HPp4N`hFH4VnG|b`cW2CvQ>`7kFyXag{^wvr%?Ls5CU^Yc};-v zGLJ5@_yrc9V)0oN-q53cd+@1$!)tjKzt7^!EJPmvQy#5n@s}*FWAWE4&a)tVYm5=O z{Stpl4iMw@BtBD(@SKF~Rd^(B?t6IkZ7g~kL5o*+u=ooWhj~@7az-li9HCGb_wtBn zR>jBtBh-McsTg}-3oV*|mn?#7{k@fnT={Ae?=r~y)-3MK0^8^RDXb|b^uM9ZP--Z% z7Vmx;O5$^U?B2h_y?}n+#eZn^tHm3asu5gAov#*ewUT}xuJGBGJlpzuajk_XME;@m z5y2e4ZQvH}-hy7Fk!hT_%#mc$T%8;qEUv_;z8Uny`bOdUzTaG>*D*?nLg>M3g<@%B zC^x)DdhreRp~!w*Dcok^7qgS)*Y(BZP;n>^9mh<+Rv6(o?k%i+aAec!jX36=s4aD` zD;7tF@NZ!CHTp^D>uZHALnFidUNe+8UX#(uJ-CBU+cI)s_!>Djt*=F9f;0Jdg}a7^ zifejzLF$ydV0gtIQrKOk42-@J?at<#(dI}r&HXwc>;2PV$-~hW^S1a``CA^K?g|d#Qk~tfja5`$L z>MH~w%9Z*QTbSmh09erX11O|Xdk)5+iFnGN0LCv90daO{+ zl!HA!@wPtfLc;g;HA<(NwYe4^=b$?nDPCd<9zKP)1OzjL0nL@B=Vq#KtuTYXg7AEW zA9HHFv>PF`t+s;+!wZI>$4yODoGH|snrl`0{uRD^rGZF*Cd8TsXOT07hfdAaS{05P zs^4^Vs#@XJV-C`&uyshY#%@$NK~+o#)I%BlTzx!0nUeMMlE?67p2?IfBZT`lrems8 z^tJhiHqq9z$xGl3?}`k&GZbFY5yP9jl!(A;Ge81-;x<$g3q)r{SW}FjoA4wA7{bC& zYh>gJ6HL-ueN`2hIM&z<_70%PLpsgfA zKuJom9Vg6BuI3%9c_I&RVV*kob|*R2QA4U(Q&g|?n}x|zyv*!e>kN4XRYeS1@5Lk} z9j^g&X6jU}gw)GK3KJCO^J%t2+*2hMH?i2j;uaQP8A#gh$rNi|o)sRe?y>QYq?uP0vWE>aAIiN(Dxes|287?l@v&V SL*WAf)z<-~ungfiDE}`2grR`| diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc index 65771786d1a85afcadb931e376901b72868a49a3..e7e84517c8b42cb2850c42531e1bece727bd734a 100644 GIT binary patch delta 20 acmaEF_}-BFG%qg~0}#}8KH13qL;?UvzXsj_ delta 20 acmaEF_}-BFG%qg~0}z~b*|(AVi39*hj0VC0 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-38.pyc deleted file mode 100644 index 804038957c9efcca770c7a2a71ffaab7efb32178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4720 zcmcgw&2tpT6`$^z*)OdYA;~r*#2G_Av@tA%#HmEV1R)U@DJ*0pY-b~CJlbwaBX(z& zo>{QARykNYq$;LzNL4N-RZ``|J=gprbIpl=AqOkJ*S#aHfZ~)&S9Ndq^w;b6e(%?> z_x|{J#X|b?Kh^sCHOu-pHAa(z#tr1;Pbh>XSlepSFK@FBZ}N`av^!4I>9|d|Q)m{L zC2Zlei=9%lr0Z_G+^IAxow4Q^vp%v!K@|5aQQYOtDq1B`Myo8xckN~k?TQ#fdknp& z7LX2p+#Za0iJ zveMmd8pcu3e!(!b&a&FVt>4bwzq8^mul)Ybt>rq;+~st;Ewi%zS=sK&7Ogs(ifG(G zPQFGVttJyzli!C7OEXgvyRp=YOjtTb}*XMPcRXHwQQF_Ki zSyc9%UDmA0Q({t1NEahZx*QWY`7=jU#rU3!5vMU?3hUAL+A~|65)=CSq_ClZ>C9c( zlpPuT7{{CQT5*&HVI-Be9xE@Qb9rHedM6+)T=aU06yDmlH`{6lNizGzA63}eY+zav zw`F7A{C?4>R6L|PwUNx~8nyIli8n)<{zH+&>CB zGV$WbOXJ}h4R1lN2fcQh(6_}nl3LurOX(=ylQ7-%qNBk_0))|~RAK7Pti^Hr#ICo8 zJ;E&e+HF=;Pd4;gS-~7-aiz{x6&B5k!=+m`T6vfC@wrIhXS0Y6}W<&T_Y>p2$7Dq#{vNg6~gsmhq1x!ph|^0}Sy#+A$= zeP^ydqJk@1y76RDC_DV_vs^=>2=RQOn~F2t=~M@DI~x}@R_6?8gqo7GRl zq!+Yd;hqR%@9LGSS67$j?yW5QpUJgVSa?-NkNqd8-wD@NlQ5N+x#%_gPR|F|e3jsO_RO2MFy{`Mzcz$%FgtusFDPMmQt%Q_g*^{iq z3JhX=>m2rLC&hTqvVxLnPemsT$T5#7K_lZwsF3CNHRbJDDKls|00ImO-m!MrfauEY zU;0R<+DS>_0)25pt+=3jT(J#Z#;KIp+O2#TDL?8?iCnuCW6hP3K z96{dzb_4#6^>_PIi&>Aj=1ShTy$`)bqm9#;aSRTnl~ca9AtU)^S6zRP7Nyl4RE_b{tPV&;i#LTzoASyYU-?l=Qy3yw8_BA#;iBo{XP)Pcu3 z2iitEZt4u&fi2vpe5Wudz*dFe6Zq_%I1sRrHix&a;tn3 z)RO49tX5(*HqEN6f9fT*ud6~ z!JpcnK`kFxpIG;-f8c7O-_Jp5a0Mrrge%;`0SW#3iXOTGZTvZTcao?Y$ zJkndR2JS;pvb3FUB2E}pGdWt1ye!8t{r(@Z9K8X{8CNNgcx2f{#F7pLJ^$w>C|Pa9Un&5=o-<;CqmbeO@%qd2^+0L&T1AvtX4UjC~^`GUkc=k zjDK63;!MwL;roe1VbcxdggiYDyeaG!oZ_m?c*Amv*yEN`vFd+tGf1Q-zidezlj<8) zQcvP3*+#4&2!a6d5XcClS`QnGFxD09pnggPxrzE26|Xzruh4NDIiW+8n4R49|o-jL)Z6bG1%j&-WxLXcabEeKi`tFZo* z7FeJ3C>~tF!dlGZi=R-HCz?xbE$cN@5UNi@N(5$SNpAKxMAG!T&krokd)B@^uqi;# zM{PMc3yeds>i=u0muz}D+0oO5026ofTi2k*Jd%izUcLE^sz-FM4+ZAJRK)FX;4>NE znKp9k=WiPm37R0J)l&)z&P5uELy}NZzlH|zC|0Bi6OFxtT2?^Zj<8&Phz0LK^dYz#AMVMZ+{L7J7(Z`81k;YJO-hKB>-Iz6g} zd>9dS`L&cnfq~{(MG=Ym4HY-3INnm%v~$qK@G-L9vBaFhgfm@J^p!4y4qp1cU!PVK zCuD_moBr_7#IML13|VW6C$i6K!`HEIkfa||YMKV>Sc4b$?yrqW+irxSJ{MJo11WI@6mJXzx)wnw*UYD diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc index 281c45a261250ddfdc67bc1887ddcf545e5819f0..300a64a34e56487bab24acb506d866d09164d87d 100644 GIT binary patch delta 20 acmaFL^puJFG%qg~0}#}8KH10}#RvdDdO} diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-38.pyc deleted file mode 100644 index e2487fda465edfa990d6b0c81124882019bc7f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmYjM%}#?r5N7#FjcNM~J$T`u7>>pm8>uIvjeth73E8p(-N*vjU1)ml(I@fl({T0V zD|m8gJUGdG^L_J^nMr1|Q$ySPrzi>?zee%jOf7D;%QFqspr|r9N)Z~lS()5QEo6WN z=zvn2T9M(}-$=K*XqX49`(+ZwSros9t4L>@cncgJTxXb5C`ebSOsahaQjBW`M~!7+ zjePPq{9%ZR)<^g`++E>Bf{+;KjtKl%Lm*fWIB4>YL#-rUi>4HWb5@u5naPe+i%4~p zH4FdJ_wjo96i3+$Y%pnC40WIFG!NMZOQztwCHWgELE@IRUe-fR8{r9-Z@uGb@}k`j TC)d28T?IGeo6^=WMN{h+>f&3= diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc index 248022dcfdba6f6b7c8343b5f7e8b055d80be081..203645a593b0cda4217c810bdadd9762cc8cd10c 100644 GIT binary patch delta 22 ccmaF+S0BBSQH2?qr delta 22 ccmaFzhgC9)-IC{b@NmmN>_zpdu}z|*up=FQ+I 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 AtpET3 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc index b6def84eb5109598e00967f965f091a21e5ab7c1..672a5f6e59d53ca7b3b74ddab9cf93cdccd20b9d 100644 GIT binary patch delta 20 acmcZ=c`K6pG%qg~0}#}8KH129UIze6D+dDr delta 20 acmcZ=c`K6pG%qg~0}z~b*|(AVybb_L_y*?y diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-38.pyc deleted file mode 100644 index 1018ae966ed7e1a188acf3a5de2a750bbb15cb54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7285 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 Xb2rdzg~$h&!_R{{IQp?ETDATM!Z2KO diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc index 5502f9ad9cc8388856ebd47abebfb425c278714c..25cd132985479dd1deb9c650f5a409b4558f8556 100644 GIT binary patch delta 20 acmdlcv`vWnG%qg~0}#}8KH12v%?SWHYz1Zj delta 20 acmdlcv`vWnG%qg~0}z~b*|(8fn-c&!IR#1p diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-38.pyc deleted file mode 100644 index 056b1f919fb90fbc18cc850d282b04fdc664d783..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1273 zcmZ`&&2Aev5GJ{+)q1VC$`1mkJ#-H_Q~@FfJ_bcm!4BF0sTxE{oeB%AS0bg-UU9cW zt`ix`DFs@fFAyLpkQ{yQ)9{*;ULmIpS90JKC>Q+pBWE}>oEbj3bSWY@{{9yxubPCs zcZ-X|!^QVF^$>v*PIEF`{ppYja>O|MiVQvBiw5`JFz)llAO0}-v<`R^*G)l>LLMS+ zOxO*Ax*Mn)@lBLPoDN8*wM6@*zhsCVW}9W9Q&r7u0K!zD#?*<|!*Lha9!{MgEHJKP z1})A8j(fZ&j07Xjpr8Rb)C1D^fmbhbJ(GM*us5q!urN5xPnU?nc_Sv zw{WdpDhY+Fh+V8a8;`){@-vT4XA@^#@mENul4F{Bj{7& zzE5&*Ex)#w|G1L>N)&raR=A)#G5(^i`sp^>YyhD3fK$icvD*Im`M)ln=j?5Bfe~Q0 zczARFRQ(`KoW)ElU-;*p3;D0nqS zt;0hQC44g;bq)_>scUn%ohcr#UWDM?+QzCmX}8}AZGgRirM9g!b^e^EG__kjV?d57 zBklndV8b+BOMK_UMrk@jues9=q{6l|);}tw>M(E(Z9^@lbyNPgl$WQ%q~{l{jdoFA z#|Wh1Q%2i#YmF_}S&XrOUctS9!q=$N*|eUXYa5t(iG6OHv+TK+r^1Fm^`52&z59=? zCzU}Z19cnLU1GyM%xyNxh4p%BUR$~lnR{SRcUt)E>R#WuE$yCVNW(_twcBm~Bkd6^ AEC2ui diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc index 2ff9d0cf1f4e575fef7d6f13d83be6a06289c034..22c11b0487af0177bdd422b095b969d4ed8058f1 100644 GIT binary patch delta 20 acmZqXZRX`Z&CAQh00ecNPd0K_umJ!vy#+u3 delta 20 acmZqXZRX`Z&CAQh00d`U_HE>@U;_X$iUlM9 diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-38.pyc deleted file mode 100644 index 7ac3b5d9d8acc8ab752fcb1221766e705544575f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1238 zcmZ`&TZ>dV5KeL~eVOUT(bZK}FfZyh=oy)P6A`t&tSIf^=q}qFIHWu2p6IzWNqUBE z^ljJ~@FzHeKF+&8M)K;De?e5Nq-R7}HiuLyl~mQ2uj)K)wVDXVtM_X3AwuY*+x$Fg zu(<(Ka}XSHoTI*5NsbHBCm0FzEKrF*3Hu?e0h~nr2qPYH%%gq6V_w?{`!R3vhNy`; zcrtGvaQzLT?TKlmuYSv|WzG0XVDu5dY z#4agk&a|`H7&cQ?4zY7T98Pz$3sZ+6dKnGX>El4>Yy!iZY_iFl73#C)Rx0y;GmEyLNTOz$(4X1@DjZW89HCC)BAV&I^ z)Kiwz4KwAkqH9;y*3$KxkDqL0e~UrNCX-Z@TiG_~59J`$(um6wHhj*;LZ=fsSu>Ib1O&p$RrGUo{z~%4Xx`4N@z}lPA*@1mLK{1a zP__YUmWwTs+ol%7Y*eX&85M)`(D8dT9Bpnon?4Hys!DjUPj=BR-X)^|>KyGXzYJak zP`!A5>wme0gqoU)>Z%ZQfdWVubRQcP;@wsp&QY+yHdGLX8CM?mBQvrAaz98^BYPqu#EJg~{CE07{sZtPqxrN_zt6 ztxB#lEz6;B?W&AznkuUlmnF+>`|#meIV}c4sX7EZ2viFewd_RO3EzSZ(0mCqX)b`S z-Ccx3Oz@>|^D~Q{06@vLyaFWpdIB4`>%BYSBAgHGW1a%%Mc|W8^U)hWf}8`J|7}q1 zbY1-lyAD>a0G%Zpo7n_7u)jc;CWl>`9Chh}j@FZZ*6(E9KksxO-0$79HCJ+Q@zwQB zY6Dps8^9lE>s_FY4RYbrEFk^(=N7o?*NTcyb8&se!8#41PL@fGK?cWa=qmvZ+}Hl{ E9g%}WfdBvi diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc index cd1465cf0cdb7bbd914e4ab348846a19dd6e1b38..ab41a8deb77ef3f020f3e1016b19fc56a4a0866f 100644 GIT binary patch delta 20 acmaFN{g|8kG%qg~0}#}8KH129gB1WlbOu`h delta 20 acmaFN{g|8kG%qg~0}z~b*|(AV1}gwTK?Xkn diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-38.pyc deleted file mode 100644 index 6c6efd4e35ef85b4214fe9ff600e454e77687c22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1130 zcmZ`&&1(}u6rY*>$Vby?YZ0sm7cV8CTj{ZsqNYW~5=+x6hK21WGuf{07c-NTgnBEq z;GbZH_L#eW&0IbCFL)5&Y*JbfhwOXv-n{SM%fbA76~X!XgZB?Dgnnw__5mGw4xcy# zLJ`F=>S#`4oRAK|h@npgcZ(OZV*)qe#p+lXQIle7T@Y&1(y7_8X_=M4x=hUwQ`{#H z5UpGov`XjTwL)g3u-m6vi*UKVga}M9+Q034C1&g1If4n789c8xK{f@>y!<` zfTumI-DgMN_1ANa+OGu|+itu>6R3UEJWLl$!zEPI8Q_JpHn zt4F1|SOx+J5^7wKGjs-s0ixDv?F%^}fR#O7|NkT*hj3)(h%8~wG%<{rIf0Zc$)#JM z*y1|ZKcH1Wc~2MM0y)Q*=p4$B_>!E!s$Jo4uzVnyAX$ZEe7CM(5h;SA%+`1j)`UxF zeTpy?u`<51@&wXH!hxSIW4z$V2rAP%pe-ZmHf&`;p`6+=Vtn*u(@of5yu*5FxL- z5oeH4Y`P$TapB%DrlE?UdL+}Ji~3eXuHFQA1j=H~k#WDomq2P%l`Tg(^rx0!o7~wp zx!2n?ZFPSCpA)5d>+KxGfr}M(nhxu)t!q94V`=cDE#@ zSb}sjU;{<^2jT$n(f9ruUVG|a2vVR!$_|nO<$}ZEkn`ZoH~V;Fqd{=|{-+%3Dj|Q_ z&D#TIB_kCPFJgM|6ln7r?QMq6u5YMi>7FuR{9M=k4Ss-Z}dcZZEAvOs?$s%xA_RPoOk0aJJPWR z>EVqlW}4E9BV}bKz|B1T&wU<79$x? zCTJu4DOJ-r<41Zb(t_`OwYL`@e*Nh9DEb)&VO*9WJfU;B0&Gy@Z=sNO`?1LE+LS-H4!D2HjMkD*Chq!`l z`zEjwkfx4nl)(%#Q-hNvN^{IjfJ%u?^Ubi?v(w7d$4IcaOn4XUjGWOkHuSLEmDASB zTY6Z;V6p%IDMo*a>w>Fd0(>0=<{o&gHB3s~apmnv>+PLt+B!6GzK>J=fn-U>WK88f zyS`+XWQCYo(y=%8pCdw-^f`IqF|uMS@0`f}H@E!Xj)k}K^KIcfS>=+fZ&~R%8wclz zTU~uw!_)dDS`h(qjd2sX>XIR?Ej^_57xkqt8qYk$I>ARbdkDffRUj5@pC6do8j-lI zJN#ny`NHRE&KK`-1xb+$#bd=&&0kS&Xa}*@!e_NxrdmvOg6T2AFitZNrjC_?Ql~|3 z>QR(ru~JcFYEhKO6F?5pucnzc9_CZp!kb$o(2)iB0O91W88*yKGlvr$#fdXjaVTn6 z9K;QS6XVZ74oqbhXHzhU88i^xfa1z?;YnKqX@48*rl?tO7EDp9KSy4Dh=kA@ZO|R& z(-sTZ7WI*1^fqI!7yKQ-qF(2Y^P}!|)<&G!w!e1aoY}0%Pc3n6$SvpGZvEHRCwSyK zom6+W?V_ROh;JVV+b|A| zu8EA7=Gyp!qQFkEKcje%f%CBr>&-7>9b4_rq!7~#?%uL7?I5W!Oa?{jZB@xX3=?9% H&DZ||6n%JT diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc index d08d01b7c31c5be3fe851656c5d4b51b45183b58..a9e91fcba53b0660646b531eea2521b25ade087a 100644 GIT binary patch delta 20 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 Dl@Chq diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-312.pyc index b750cb9af86a2a24f121910498da83c9912b5c01..c8ae3354c75d1e3143ddb23de0c0d0eee27c6708 100644 GIT binary patch delta 20 acmX>qa#V!-G%qg~0}#}8KH11^#RUL84F#A0 delta 20 acmX>qa#V!-G%qg~0}z~b*|(9~iVFZd+68<7 diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-38.pyc deleted file mode 100644 index bbf691c41e274d6c242289694688f2a70de92d7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1774 zcmb7E&2Qv16u0v=naoG4rHBd%s1QPov`kTt2q8*a3Sw2N?Z>j|3?@xHL#7!gwLRUP zD!tH^_ORNXIjm57+&h1bublW7;KH*rEv4c@B0KNHdH%iU-}7Fp6(D$C{Kf~7kI?U0 zx&1hxd;vq0FeNC#849Z}4l(FfW{vI8#@c3s?1YYy9gyA7HL?q`7kWnavf9`WeT*m` z)%g$bS1k+1jj*9Dm(9e#!eMI@CG{kDhLV8V=XTgm@DA!U{s07MtAkbZ%Sh0NRPt%c zhM?Ei^HnM7xR9XK*7Kc=(gMV`S+f>p*^Z1P1&ckT3_jjh6FK2j`2<$%N7-(yL*IV9 znIay5K#@*0w5UCD1~|dg9eIhB*stv82y`cLpS8joc>ToFKI5+?{wv3%;hf{J{v0_d z40IZ5Za3#FO7iOrPCt~>0y61pq|sqU4-N)d9?Aawr3&Z4R?cX@ztypoD|BwkJ9-lF zp->*DkO+&dTi9)o^=QBli!e!ajz)NZO6vk+RN@j5D?tDSR}m)#6w6s{w^hB6ZpXOR$uyheY%So^fMCny&^ngEvGcZ{y{^n~`-^LR3*Op4w%&xbr3 zk0G_*ekvwWwzMNBNt!RMe6q6A+g^RRyF(t)!(LPrJ<3kV6ObRIhdq%>`f(A(N70aq zUXd2dcSym;4Kf1+~w*lZ1458VIa2ua4-l=i-I=$1M?iRb-?cQIS z8TVM4vxAwkNg3r4>~w8dWz(CLM!u%cKPPo#>Gw}p{(qc~qpSf_jy_ydcHV@9{&l=H zFhHZC9ESK6rV?GED}<4RgN4JjN;|m@#OrCqwxIkz}Fov+qh;C*!F zJwoh#2TAuR;6GxB0rYS#Jz2Z-uh12cqVSOHfJZjcSXjP(J9u=|Qdn?d4QVGRZYV)MCMD z5phZeIVX%hl_aX}kBaZQ`IQIl39Z$s@i|cMVCHY>C03H_4m5G^=|yIGL%X1zV(4Z< zJ^)R;4HK&Q*1Xlk0k-fwP;|k_K5kq8Mb_$PxGW$Li^h}?6%aDclS!uKCLzbrPnCyj zyau`QD#|Gv=xMq_)#IG!6PW^)H5ApFHE~Qex(cy@J+Fgk?7R-sdoYAIJSiy zc&)#TuQSKr(d#~fNi9Hoc4zI`y>3sg?;~?irry;_)@D6x;HuW{A{RkitCAC}Mr^RW*VHm}vRJlwPb F`)@-**xmpD diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc index cdfba870678d27c8c4e2156c0879497f57f8b919..e645369a936539e42c46685d71fcc5a129269514 100644 GIT binary patch delta 20 acmZ3HxFV7JG%qg~0}#}8KH11U*8l)Se+Gd7 delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc index a636ed1282fbcf00085926bc631778e1adfae7b0..15bdc2397f6d8b87cc4d778a04c808612a3e21d8 100644 GIT binary patch delta 20 acmaDa_g;?sG%qg~0}#}8KH12f!VdsN3I;C# delta 20 acmaDa_g;?sG%qg~0}z~b*|(89g&zP!*9H>+ diff --git a/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-38.pyc deleted file mode 100644 index a89b51eafae00eb201eaef10b16702fb25decd02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2874 zcmahLOK;r9nXlz?xhw7JVaG|FmVj~)ZA+Gvmu&=5WqAV>uw_G%9e~;eMR8^&I(#gK zL&e&XEehpU_|{upK)w{{y~q9%9@~>oy%Y!#1a-e}xGT$UfR3O~-+Zt6-qho%DN};; zhrhAG@0ybIPrO__I$VAwNpkuRK!`--P>N(nmJwG%B~l$VQXD1H94)FjwMcjLsP5DS zUk#0@;WPxUg{EVIPAzOkEvE%Eoz%mrXxf==)mqGf9 zkba+h0MhTl{X=qBVuvJsu=+YU`y&JWfjkArB&2 zY63P85*l)^G!PvnF)ejI3gSTmHX0$zT;KDL=oZ}6jrio1Tv<0Cc`T)0hl$5W-Nn6? z)&Abf((Qh}27f;3+joGp^jSrF`?9!xr?-sU+x_3H-uS$*1$xb1_x8cGxnhEVX~B7h zjE$wQy`@1PXzu!jyL}A=7OW%sOo-+J9-tRv$<@9PK|62Gf^`tY7Zeh(_{Bs6u>Vn6 zuo9n}wwarI*O&V1V0$IsTLsV0{Q({O{DB3FQ2&M%#GD>dW(_^YA(}^D4lql2`${|x z%DrU~^;>4vFW5b`t;clDjM_38QX*^)&`+> zn2z?%aS=W(?4`vO5mvqm_SX7u?t80iWuP?#XffGa_LNZDfOC#TquQFXhp5ii+W)cjlwLN zT+ZcF8K5GddMc}uA{DJ-s+i6-B7bYJEw1FPd@7$lRd*zigc$``6Hp(^w~J0Olh@gA zfm1(Ii9*zuU@=yRR?OxN_D8PeX5P#jr)n`5cXETB@!C@zaCoDbJ@LYfb{PY?U|{hhIyOfVV8Sx7{Dd)@LQ4^R!n2OOFd!oR!VKt59$OZKtyj2y zOL>J=Yl9hZwT)6gWJxwmOBH5?sVGtlpJpj98)DfImycK-$!f-ZrlHb2n?{0hLOtfD zoRy6ziTRO0>%=<|h;fu;71xY{IODWpr_>h+5Pg=U0&k46FmuHcY*!8Dromw>coV|8 zwVAQR1)~}|0xgG5lqxt-YA9anl}xF^qjmM*ywiJ}QkM28`Oag# zhcUg!f@9jdm-tx(qnh>}vE-0>5g0n`Jqgkb_P`F$NRU`-D{E`LM;qI_JMK61pyv&T zJsKao-vNFS+|Z@R}cCJDRAlPC;sx-dP%lX6BhiOUmrQms$H zv-B1KX;%NYBLD1muu6{b!)mFFda!HmvJ zM0*Z11yfPm`cb~laLQl3hJy_AEBi2Rtc`5*1I;ISHz-&!~L0un_qcL5o%8*Q>~a*chAOXCcJB+7Uxs6~yd zKz(QRz*4~vySBwTV2RBj5aXn=S;R3Ch6_&kVe4X0-Xxt}Mb<|M77<_w^RHzUBver>i>hEs72M}w@ZCV#=YhmobU@h=$c&>f zp>Nr3xZCfSrt1ze_&!kAW$2{XE@B6X^i|D)yGQIQa3_m>o+M$)8bB-+hW{U(3}H4! zHcH)v8%;%i%9e{;*oBR}v%6i^{UjO&Aua1qy4!aj?sUrraJC*lxZB+>TY%nwxVdp3 zHOeO3CQDq*Qq@=@^XT}6U`73~FH7UgC?Q!$zrt2aaROV41);*2Dy^CZW2tnsf9Z23 V4y>m9q#N1~`c!AZkT07Z{lB`;)z$z2 diff --git a/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc index a2f24c92e4d68fdc331a83ae79135ec0db80a5a1..f5996fc1d193a68d63ddab1fa717a6417a056807 100644 GIT binary patch delta 20 acmbQqJd>IGG%qg~0}#}8KH13K#|Qv4zy)al delta 20 acmbQqJd>IGG%qg~0}z~b*|(9qj}ZVgjRj2r diff --git a/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-38.pyc deleted file mode 100644 index 1c8a60ee6d2aa8f486382d4a5e7be199aa3308cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmYjMu};G<5Vhm9ltP(U*t&M0MI9IrLR76-KoHRuq{vd_*4N0wjx9TBm7R?*VdrbS zGVu!x2#1L$-Me?vo!+};uh&HZZy$E^6Z&T}{09lcbtrcph$D_AQaHsbN+U&5f)PXz z=NRxNIzed*2*f=4({0#GJDkkXApQ!sXh1xf6t(Y6nUriL!M7Hbkuba;?E7|E8&Tvo z3X8V!v~eI$TxoqbVb;No)U5R67HUsK5mchxJF*AOZbRR%(+j$EU>ya%W0pP?FtcI{ zbf(vpf}(UZu{yU*so+GPgsYhB&&!Gn-5;Ng$26HdF6P-YtSB>vLb1(uLEniLb)tk* u!`3e>2S<%CqihQW*LGBDCB-NU@xcvE`0i3^UP-uWg-os;=$IVgL;MS%u4U%{ diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc index fc4cf8e01bbb71a6f282ad1a38497e34d54c08e6..a1b2924235f9f2efc6059830560afbca22aad8f8 100644 GIT binary patch delta 20 acmbQrI+d0CG%qg~0}#}8KH13K#RLE}X$4{c delta 20 acmbQrI+d0CG%qg~0}z~b*|(9qiwOWUHU&li diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc index 150b80d07edaaffb69434474d5b89c8638c0a078..c7e2a635230d17d1f5825c4f864b95acaa5e392a 100644 GIT binary patch delta 20 acmaD*{h*rrG%qg~0}#}8KH129)fNCy^apAH delta 20 acmaD*{h*rrG%qg~0}z~b*|(AVsx1Ie!3RzN diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc index 97d36cb3ddf1560825487b469b79b9150d0d335d..7aebd222cbf5ab4c06ccc22be867fc1981ff89c0 100644 GIT binary patch delta 22 ccmX@u#CWiYk^3|+FBbz4)O9}D$Zh5b08k7Dp#T5? delta 22 ccmX@u#CWiYk^3|+FBbz4oORi^k=x7>08iNlg#Z8m diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc index 25d926161a6061006229d34d227c25ddaf3251bb..85c8cfcb1135fac295bd5dac880f46c3c9571ba2 100644 GIT binary patch delta 20 acmca4cuA1^G%qg~0}#}8KH129oC5$qrv^6w delta 20 acmca4cuA1^G%qg~0}z~b*|(AVI0pbfbOsv$ diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc index f2971a7780c4727b036d7aabf7c906234d350b5b..68dea1388f1232c8e6cd06d40ca41ec55cb52838 100644 GIT binary patch delta 20 acmeyy@r{G~G%qg~0}#}8KH12f%>n>I{{{^J delta 20 acmeyy@r{G~G%qg~0}z~b*|(89n*{(u%mwiP diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc index f1a7cb8a2a9466b39363cd9e2c2114073b45836e..8551973cf69059dda1ed020fcbca78888859099a 100644 GIT binary patch delta 20 acmdm6xwn%0G%qg~0}#}8KH12<$p!#RGY0$s delta 20 acmdm6xwn%0G%qg~0}z~b*|(8W8Tb3O=o$M+WW0`UkAXpf|CXSuN25hZh$?M$-7lR?YNRHe+ zGwJS;OhGyAB3NLN{~#T5$UQ$Lr@8LQe_?Y;Rg<)p1k1q`t7^JyYO22a`q}(^-ND~~ zepG|ar0uWHV^W`C#7q=EQK|k7fW(ESeC7zC0BwK>uZQrc`3ML z^`^Ki*Mc>x&xbfUvAL;s*Dld=U1S5c#E&|s}#d}uAyh^cb?n7^K@Q&s)ySc_bq-MrSftdMX2x6U_NhXa+$FjoS@twYjJIfOD7 zCe9*d!a=Gek4%KY8x-zIlte>NMRQN3FUK=$AtUQzq$a)fDd-II1dQC2(F+JiST#%+ z?ebGFYK%(tAeNBk2G!aSOgO@-oqT^2^TCRL_?3o!uHYXx8N4(qVzFi%G6ns}0JlXv zj)h=7UmY$@Jar z?IAWf?{)gA+@5ZH{cl(5?VXSQbmx^vE%AyPWiw3GxTtFr^7 z=P}k~%rJLM4ZE{%aC+nv*UY5Y0$`KR>9A)S2DzY(HV%hgJ{;n{PTkrFn_MN@ZW&D` zgGB>_ubPIBO~)=g+1S{OG|r`jwq_ffwkb(8wIpbbIBx5ct$Umkl-Q)KHV;a3797)? zq;{8W==NMuB?}i6bBNZ*wg*Km3@LIL7W2RQwxX%Qe1Q`b8O*Sld!yDd+i3xc8ZLTF zkSWUcYjM=dHrt{yd2>;nCi8=%Hn3Iy`}h63U96MRUEtX9?q3pkpyDIwK1lnygv97B zj^|KCQevjvzs5R`1eQJLamse??Cf;+?ma!&51&J?8)aD+lB4h#^~Z6qt78MVGej|# zM|ZP0+eU^-c&c7cKp4hJY{IaUjnx{a^9ezSfa=WE-I}}P*70h(_E}Mh#Bns%2RPmp zd=*A2svHIp63nmgNZ2glZShEeCp>Z&QAWqz1X&;dKV(hNPhE?U3}&M~n}rD;ib_08 zkZ^ZtU}ul8LCCfOkgu^pZC9=0n{ACJ;yp62py=VPY22NXwc8&Q)iC5~AA4R8!wKJn zp`s;foy08?K8nIoG-wEtDO0NonG0_in2wDL({CrbMn?#pAa;_A2Cb13?!7<{G}c8; zO=;G$MbOMmEIJCl&H;DR^au5+3mMmv$#f0P1~RXumY`^Q?yZG%qg~0}#}8KH10}Z3h5R2?qZF delta 20 acmaD>^Q?yZG%qg~0}z~b*|(89+719v)&}DM diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-38.pyc deleted file mode 100644 index 4e2e4a48bc0008ba606afb9810748a5ff356cd73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10738 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc index b6d8072bd7aea4676a299b17e6fd989bf74427cb..3953050d5e834007c2f76b472d7eed6264e2b28d 100644 GIT binary patch delta 19 ZcmZo=YGvX+&CAQh00ecNPbPBz0st&=1&ROw delta 19 ZcmZo=YGvX+&CAQh00d`U_D$se1pq8s1#SQU diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-38.pyc deleted file mode 100644 index ccd659c59818ff773ce55569b0d6c6236ba06839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmWIL<>g`kg6=IvX%0a8F^Gc<7=auIATH(r5-AK(3@MDk44O<;?1p+qW_pGuewvK8 zxZ~r?Qj3Z+^Yh~4S27ea0ab#DUmea?F`>mkshHH1^2DMT|GZR}qRg_?7?=Fy(%jU% zlH!y!4o`%;M6-9EISL(v-}61tS9^qnH54ppfAB@YJN3#DapD)V#9z zav<9$GbyGxvm{lwATc>RF+H_7rXaIGALxj@l>8$7(xRN4%p_wFAM7Z-g34PQHo5sJ Or8%i~Ajf?MVg>+~s!2=$ diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc index 373d6df3ba0db3aee702924e6cea5fbed84b3743..cbc37b0bcb77d14ad78dcb1a30e960279d49fdc1 100644 GIT binary patch delta 22 ccmaDfpYhRrM()$Ryj%=GP}linBlmTG09z0T%m4rY delta 22 ccmaDfpYhRrM()$Ryj%=GaMoqtM(*qW09xG#umAu6 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-38.pyc deleted file mode 100644 index 1ed299b42107639ca1fa73ae6bbd70dd9f3cdcf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13727 zcmb7LX>1(VeV=Q0XLor^q7KXQ$d)XvEmE>pA6m2tiU#eM6m=4- zzu%kLgOt-YOU#=$Z{ED)e;-i@Lm@2O%+-qXdjyl09T+;uNqGmBaIt$}*3m`6S3q`iUKU~y2^ zGu}{bxHux~ChDWbQCZJ=W3_$7eX7zLlOygg?sxaE9w?5#qSVhAihIyKRMFOQ;+v|% zKSwL>e^zmFPX3PK;q_LFdpHwc=B*w*5ipFjkY=(Th`V zYWqXZ5%jo#UEb#$#j20GBkqT{jN&j_?stx%<(NB+eP47QaI8B@@gvT0=Rw?`#`}ky z6L^0D{q^FsyZkJ7u}1+XB=%_DV+Q^DW;%C!=OzbP^gMEYSF+mrNEt^zcS19%)O&Wrft_tHP^PI zoNd>9r|GdiVB0sFB`<#Sjv|IJk}Tf+%*@n{mjYJ=H(Y1EByL=-yO%`umV4upUvAdi zdKlceCj4bls@1CX!@F; zF5L*Kp*ztimDftkZg8VfZJf1lxpl`EXPd(Fs!NZb#g-EgO*S?Jnf4Gj3a(U4RX+bn z&=~H4JO+r!cQ)GFvKV38D2n5_I&<;)N1N*z;jg*%Yt@GPf6X<9u^;K1i_aY*dCo04 zuDDb!hwrFS-Ufg~0E)5gf)VXYwzCk^n4BgWn{(IqY%@AA-&|S+sZD#~9FYG?Nz{R? zXmoxf2;CY#PnrsPl%Id$`D^xbv(uMmucHSZu1!C4Wj1MA@DJ-wpD}E4?hQECc5UlgYi8bde{K)){<=3sLvIj&>EfNTmWv>dpo!l*g7OkabXhGQAsyc39mFgBm zjVM{bb`XkYIrN1batZ7TIp72nWxv)ah1I31R}D8Tue9L`Ysn4QUAJ!e9*7o$I9AjpQ$OUAxXLO7EJd4f|m8D^|53gGA4ef6D-YNy<*Q_oq1t) z;Y5!cA0ma~@?4o_MdzoZLP2;HSFng8R94ks ztgUUs&~TI;O;u3W9c@Q#E4Crq^|rE_+R^Zwmd`MfgwISBp>X)>( z_NEF`Pk|^)&qe8&SEHercRF0f=YGbBQj$2L0ePdgfygN2MHs$lUbi!~v!Fh=wtbx3O++&%1MXVhH)C-4dM8C=q?12C0s)lqk(U03=tUUuo}SvQ2_v>-oM zd?_}CTk}EmrTT^i84dvr>^nYKFI*{w-~~sjPRRuwl}T;`fn5IRrMWJfS=RG)YuT;4 zqU4>iU`1Ng)rsN-zx(x598HQ?IavQ>ooOWHb(dOcdfvtaZA}aViR1XS5_pqJ`;62V z;Yu@*a%v+P{}#GBQ1lc54N5qOovskGtn!KrVt|NP#yBABQvZ;h{mK=_@&#akVC+c) zGF{E>t`Eix4G)WaMcL`zhPaj7CET)0NkY-FYoAjIeIGJDwTx~-4yG(b@vqJTb3xnI03vB zDgOcGn@x-wB!ZLzK2j%PeP(T^9!SG9N(&0K#yhHb99+FeWWY?t-tUmz>D?%!t$lms z1mBnCJHE${bzU>L0{TX63SUGk==rt&zKewUSUhx0jztc%m{3XBQ>vEr3PeT_z^emT zASWc?6C;QgSN=hf z*bvZ8OQIyI_^9H0p1*Dd&1x9yCxR93wfF!wThJsJqZ9;0)7=A2F@+vqAY3HC%w4jT zij3fraN9}-fm&Nlqg3BiH#I~` zUNw|3gSd(p$4Nr7jmQuBWaED0%9i#i715G&=$Avkw^e0RXIv-Dqo>i<;~uXlPa-z7 zssDujsuIUm+Ke@%TmEd9WJ`&eu!~4Rhp??6vK$wdIO`$A25jXzaMCA~ri2?dMSaSG zmw4|uJt#{}DK%p2+)U3T1I?cV8NgwLThRn-pH4VMwxQ+2Cxb%k^kwKA^w`B|CAtEA zYo5YLbA^H4MB*q=5sfC!V~+zRwj+a~6+zTRgY#1VCtj}@N1MbqTvz!*x`g5&nhQou zBc}9a?6vjC;JA^xmtMf8SRHML`VPJesK1qz0mYrucxkGk<`mS_fUE?V#BR&2Ecam)i=;7CVQ>*z}^Mz>HEXwiG@*OdD4d6v7?BixNAF%GE&Ou z(n!>g_p&G;!?389i0ETc%Mq&2AQp}^v-{1-uS5u4} zSSewiyGE*Ycn?f_^X;Ndf|z9SEUw@NijW+m-GSS22|(OZgNH+P6;ipaLMm%t(%uB6 z*3XCfw$WC%Q#;Cz8m8AW;?*$Y=#H@swT zY1Lb(w3XKnZK_~hHN*h^IPTh-_A;iuiS)p{BCenlJcV2pyb0l5FT0Tr13(;MyB2Aa z=OXpi9$-b;3$(XyH^jw%L^nx#29$j3(R;zPA|r#77vPtcyx`(w_siC!oyY}DNN=() zo)@e1pxK}>4XjfqgHtWz)EVp4TwyTM;V#5T&jJbY=&=)(bL#Yz7shOh*i)Bu2#o8pTU2JQg(+h)`#3TZS5K zJKhF)Ufe|SuehWmOG%p6P2e|ouS8Ae*o9ZR(8Mbxc7W^=aMef?r(F>sF}Vc^3zI9g zmflRmpyE9Pbz+NQY)qitJjo9*ll z;u<%Ljw!#nBfrTyIkut>p@O^af(ix`sFc|E{Pb!bt}<4u2thTZ46& zKs*T^&}U*ykB*Hr_q!vIa$={mywa@G<96$ai%H)U#wV2%+(*CeS~5`9{q7za z^8lSn8h;xN7bkV+)d5(9Ig~lthSH44p}wE(@^3(I9sA$W59=DnAFjiKhPN1GK>-7+ z)kY!!sn8+nMtcb>oZZy!5i)^P_W9%`?BQ19Q>cUkU(Sj)77tt2yI9eWdHex?A z#ubgmfyurmLH{B$1kZS zDvI|@fjK&kJm@&?pcjz_Lkdhs3QR`|%qR}P+)Do3!POzwD<+RWAaOMeS(kB4)J7c0 zRiwB^la$z)Lsw`h8YVjDXSxn(>+@2uyvWFAk_PI__DIRba9S^CC9_G4=g00SgH3&j z5`;A6crj8f#L8LL}G9W z1w-atGoK1c{i4>+eL;r2p)M2~hCe;4Hk<*3&=EnfQ*EdsJMA!tj4#4_O7&74AkgDOM6?0X2IKhBA! zSbUhp&$3`tMf@C#-ZFlkk8iVhlErRWEf-dR-j0LeLr39JCx3~@+=t*^G`t^{tkbNM zCIH0{)UFECj`11z0c%-$r>lVPrd~JcVnJoMDHVxVpMD@ltfTLvW#hLWh-t6jymumVa;Lhiwe-}IPhMWk|xu}P2N4<9D~ z89XEK#sF7;#*)!?*jWe{BcdgLbA@3+Fh+SPH#T@S1Hmw~^uV6r6yh_G7{Jk!IQvdz z#1Oi;pCf2~fN)7ET!FH<-9QqS7F}ePOET3SMERs=4bRSA#sgR3N-b3^+Z~+qA zzsMSM;Bpf2ORW7ei{03cOo%Z#(F{>eC9jN{5Yst0^IgP)0LJhaTlW3v?|i(=Y@qz1 zxR&ToLuta&fn#srZmTkMr)>i1K)FJ{T3iD$7~%qLG@xJI(KFD*X@HAFE0LH^p@GbNzkS+N}j(ief7_)6|Kfijk)l#^doJ{FD5h@X7G;uIE`q|9cQXrD=5IYV`B;>a zmDX40++{yR>V_t_Y&x6tpx#Q16z<(|5h3Hz7$n7Dnalk`C?(lp2dNaR6V$(Te)1gt ztd4@k$bbdI0cBn8R4|2ET0G0GGWP-m^cwW#~n;_eR?&sY^mTEc^;Qn++E zgZ!*yEyf-W4?Hc(rnv*UH&{}f&eVj0ro2!*pak^kh`0J3G%!wjN*@Gx{ zfBo`|b^fWxoqd?-*n$M2qJLHj}~;K*dIlmYt4 zU=86I-+{TGzdk!NJGWq8nqHWVOoZ!r01Rq^wJ1&WltOWsqexwTjJ4w|ewBsALaKr< zvL;nQmzohzC>!tgrHjJ~Uhx2WMbl>!6@0 zJ2QKI0cS+!X2mRrlWONIYlk?}u)X`ZS2QU5U!VQxOV3}Qy(Hd3r$RPXWz+n?>?+7# z=OAQ1X`&NOHsnOKuVdu*+eQom^S~vdBv{!VJtt_FJ5+IBM@7+wpweJhOT}gwP<47* zgMF>0@y5U#?XIS4KhO;Adq$4!@Nnp}yl19xI3R`0f@Zv@=>~gzUrU+a(=sNq4$M3B z{`jnY7qD1ZTd#F(to|GtWM^M8suL8E zo*FDO$^=?$c;g!|i$7#Rei7eb@n) zIpdpbAba#p{{|obg2isDPW%qqB2qg8tBOHG4%9??RJ9+Z(|vRb`etiPwWz(D&LUqX zeR(5IAHJUsbKs8FgL|C3$$LdzAv@Rk7543M-Nk3P-p{i585ZvcGbzRH=i9Hc;5HHU zeD=!KXQr>%mu4?dzjS56UU>e+*{d%tNPk8A3j0aln_KS#hXjoDu0M|#hY6DlsKC2U znc(=ozm$ZIgb}%2`)=+ithwEP-_0F2ZwZdHE8StBfliO)xg}H(MuxOOq)-bH&)ibQ zIBZt6H3Xi*JJLRq&`%+`tRuO6BS|hF361R(oJUw~J33>QZQV|P3O$iz1_$?&%!zB+ z(wiT9z4dgz26n1(Y)=Z@tTx&Ew>^IR-qbaHk z+TAk~s6}}im&|kYM^fa!6zI|LrDmIEy0$;4F4~n(xiEWpc3~YzJ>x(J%1Tzbe6@J z`J@R~GLewtMrW^&u;5tYB72yfbNw<(Sv=NxoWwssO!9PEFiFb^*#aI$jw2Y4@oVCs zn3I_+DUF4chLm@a+4)BXdGa4IIQjn;v$WKsq3O;6;rMxwXP>+OPa%)=N5c}k8og?Vt03YE?C;yxg#77Qzz#x{dw3`^wt$H%K7bnM#qOq8j z`=C(~d(FrAjpPc8wc{)vL{U80?YP^tk&Gi*D9XZ2x&kD?Gm$v{OMWcH-tV&ZdnlN< zt~Ka&T;)^Rm#6-vc!`w&iB#e_I{0!Dp4=mR-;cH<^FsWeA{R-&GW|LLQ>XVgpblub z_y?wAkai3NH4Y9$@HV-R;LaY0()(4*9MN)G&KS~i`q(FxxsgvQpD@P}oJ>=#{128w BMT-Cc diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc index eb8625510a5d343f003668809efbf506b9fb16b3..6166888ee7c6e3a10d036c9cea1f1eed859ff427 100644 GIT binary patch delta 22 ccmaDfo9WSPChpU`yj%=GP}linBlq=Q09w}w1ONa4 delta 22 ccmaDfo9WSPChpU`yj%=GaMoqtM(*pq09vF6=l}o! diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-38.pyc deleted file mode 100644 index 61e359ada64d84b66c711ac71cc0d66d1855dad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25412 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc index 5a1e28d153a2802cd59bfe72a73712ab80282c54..aed0232d623dcdbdaef2ea7e02573328d209e792 100644 GIT binary patch delta 20 acmaEm`5=?~G%qg~0}#}8KH129)dT=eV+TC| delta 20 acmaEm`5=?~G%qg~0}z~b*|(AVstEv2Fb5$3 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-38.pyc deleted file mode 100644 index 6323c7c4e2521d9938c9f675315cc6796ff26b4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11682 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 CMoKyW diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc index 7b36ad5ca942d3661f62e1c43bcc9938bcf32795..92f213a9e3ecd6ea6d08eb6debb93760a26f3b41 100644 GIT binary patch delta 20 acmcZ-cqNegG%qg~0}#}8KH129QUd@<7Y5w` delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc index 4014132d0db3be7c3dae0c0965a1161f47cb9f13..7ee18fc58c084b5caf1b61851c64d61982a3c50a 100644 GIT binary patch delta 20 acmcaBe^;LSG%qg~0}#}8KH129i5~z%UIu#r delta 20 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 Ty8o$^8}{s%j4v6F&c^=>2u|C8 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc index 0fc0e75f199e67179485f862bec0b72828f12442..22976b78402158b2f14c5d6d192fbd7ad6253ee0 100644 GIT binary patch delta 20 acmZ2!xzdvRG%qg~0}#}8KH11UPX+)!^9CRQ delta 20 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc index 1581b7035869335f26790381055bf4396846e622..1a15f23303018cb2e3ca93242449ebcc09f7841d 100644 GIT binary patch delta 19 Zcmey!_>qzOG%qg~0}#}8KAFh<3;;W82220| delta 19 Zcmey!_>qzOG%qg~0}z~b**B5<82~#}1~32s diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 14d3d301700360127378ff0655cf59993c84149a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmWIL<>g`kg6=IvX(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o3NvvsFxJacWU< zOlnGbVo{8LUaCt`W?5>COMY@`ZfaghaZEr_etJ=2Zf<5?dQ4bmacN?XLU2iGN@l)- zk%5s>On_rhNN{|3YEn#MK|xGvURiuOknNM16jPj8lB!#fn4F!Mo?0AJkXfJ~UzVDe zl3%1>T9lKMnPjY=oS#=xl$oR-AD@|*SrQ+wS5SG2!zMRBr8Fni4&>6$K+FIDkUT^` diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc index 296b52ce2974e2068132c06e8b38441b22dc0cb6..903e455bb393c3164582647be8bc81148301a12f 100644 GIT binary patch delta 20 acmaFN_n43SG%qg~0}#}8KH10}!43dG;sxUX delta 20 acmaFN_n43SG%qg~0}z~b*|(89f*k-ruLZ{d diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-38.pyc deleted file mode 100644 index a3ed6e5a52e925ba75dd2076442e1ff714de51be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1459 zcmb_cL2uhO6s9Q0R+VI3f}%iyVj#A|5TLV$?69IJhNX>L6xiIrc3L11Ajsm2#YQFt zl5(0{+uQ!ZPVKSxUH3-NkW*8@K1VxrK(~Ms3^R73IMl!s&@qCd|J=0!L6QZ4DF0UI7fi zP%Pa@i3u_x{nulmjb$^CpmQsfWG0tfsbOsPTUp|9AteB(Hxdw(3mr|e> z)fqEZRF!j`fAn*YO&iOE_1;{qG)2iOFbD(;Qc_sd;2tyT(!cX^rW$5S)l^)5ZJ7k% zu9%7viW7FMGqUtb%@_=E)VG30H+ljK#ci&6AJVy@z&d z@8DoCeEMuS$VP|5$+MpaZB(DxQpw%#cS6s9OOF1gFB5|Ak$3r$Ky7uix#Jmm`}m=H^Qm++Rehx6t0{wY@CEYRa+;mfh|2+Ip@$V1Mw_ bNIppP@Zy>L!2$I-bvjWPb)q=xM%{k_!cJ)S diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc index 903acb6153cf35a78e53ad8db9f28e02d4a1cf70..8df6d70734ed38b44bc70b12713d860e311f983f 100644 GIT binary patch delta 20 acmcZ}bv=svG%qg~0}#}8KH13aqYD5@*am$7 delta 20 acmcZ}bv=svG%qg~0}z~b*|(9~M;8D|r3PUD diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-38.pyc deleted file mode 100644 index a5beb18acb66889a015be66eb42563bdea636ae8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8309 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

@(B3RZn|| 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%0DGxvWyC{t{_4jegPp(V934*Ne@y|d3?cmx} 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 CfE&92 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc index bb16f02d0a63ec45261d42a8569bb422db622b1f..cd52414e9ec5c6ff3c2900b1ac4e86408dc7b9cf 100644 GIT binary patch delta 19 ZcmZo-YGUF(&CAQh00ecNPbPAI2LLPr1%Utn delta 19 ZcmZo-YGUF(&CAQh00d`U_D$se4gf3b1!VvL diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 7ff2766840a2fda698966242e83e5a3f4d8cabe4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252 zcmYk0F-`+95Jeq{0wLuNX(_;H=@3Fhq(l(01e%d7?|QNtv1?m1_C}n6Q&7@#8d{D( zM}@Z{U;6L=KhpO)927WJtK-?-hvMn{kKgy33)l#<0J@!J zxc9hX8WC2Z%>()*u;$RQ9R~6pJdtGEFY1&Xg++B%Rj^(@Jl5tJ8?Z3~`qAu4zoiC* z5}riczSs^0B1LUR^e(W@-1pR+>o)kr)Mz8vX2!(UOAMT}G2|&3a~fa24ljq`a*tQj I>p#Wn51buKQUCw| diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc index e996807fe2d786f6476cac6dfcb4e47ed4b77c87..a6f60c9e12ad0e5e984c06fd00223e51af15bfea 100644 GIT binary patch delta 22 ccmdnj!MLx3k^3|+FBbz4)O9}D$ZhNb08n@arvLx| delta 22 ccmdnj!MLx3k^3|+FBbz4oORi^k=xh>08m8+ivR!s diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-38.pyc deleted file mode 100644 index c66c301f0ea0fa8977c836e217e966d398552ad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10770 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 bi4bqQl)$pP`wjXJ(zvH-3Zw7s=-c;y@KCfL diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc index 27c1ae7b97eab058a1dc019505a24388657f13dc..d7014fb56cc2d2ec2eefc6d8243942af19bacec7 100644 GIT binary patch delta 20 acmexU{HK`vG%qg~0}#}8KH13q(GmbuFbApt delta 20 acmexU{HK`vG%qg~0}z~b*|(AVqa^@S{RfT! diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-38.pyc deleted file mode 100644 index 0bb1b6f97f2b9982613b211e4916d607c9b84551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9144 zcmbVSU2NP|b|yLG42Sx)E!%P8BusYmGl8un-mM#CQ#bZVO0=yb51!&kjm~*{OCN&*@Hh6WvK~QrCoaFcnzBdN_S( zcr!scsC=P$vwj zt@eih7rLf7H{;#Q9kC-i?w08EgiPFaEZuZVxND--mttM|QPPWL>NdkD2&2tp-f`Bq zL?T>Y3ir-lx)n!myC1dEFpd(u>8Jc8ic>cTrD&y{Jy(j3pNhauWA1t@+}tWgy?$po zahm<&9nlg=;>$g1xG7R<+@BbnO>qq{k=!z)izTH+FwS>eX!U!XWiQA2Xen&X8 zP`}fSlhj39tO+YpouzV*dd3X>oj4qI+!6kE!Xx!$yc5#4Ieri2o(!=M{G^|VcE98L zm|K$i82ISs2w7}TD-OiG^Aw=eR-Qs$TCJ2<>PvNOb(&8fUubT#$ij3l`2kv9rr(Xl zkCs>5`r_*P^3rns`uZZ*I&aRu^_w+^%Zn=u&pdC@NW&kMNj>T~k~y4G?LbepheoEQ zrA&LGAC>?oeX!%W_xjev)#3O@Sw?0y~-jKTRM5&}{jgj*#=*pk_)FlgcMm2X!7RKeJt5y58x;EkBLr zf@u5wPMViGBC6@0GoIU*nyljGuYXp5f8%Zf^lyk@*Owc&Be5W{l8uG9)hB=?8+T;9 zDgAC2E84ghCVju-uBH7TjNL2mT)DDw=lbgUTI0TGZa~l*BHC%}qI@%KZX{tUF8BP_ zHn5g#^upfT4Qx>m%eVWo(+Qj3dmFgJPBq_dB&>4jQ03kRq#LZ9^S!oc!6ZXmd!GCQ!}*kH*x}X#{@{ivvIHhJrq)n#J112?F*C_=+1z}GDdf$REL1| zIW05(P}?_0cO~3eseVAu&CJZKOh*Yd56g#Tz`z`QatsC?fSZ)FuoG#&*AdAW5kN|k z#4S>afDjO}6@dXzvOTs812Zq-Na#3+Q>J}7y{~6_pk2`JX}b0ZMjBHvBq4T%1^cCu z8}skvddhd|MB9~DKiCwJ_`D~tU83#?L9~5?%e={>X{fDMv!4He;M7U3&5z#w73W7Q zQS+0ND4v*`oI%}X9HUv)Dw5=I_9iTCm|kMH@Nz8E#A!Jnx$!%L0#A_)f~H@C%Jl9zYrg~Y1>l2qYUQBZX!R+B&f z%XjoOTIBOMX{KG8*7?r>j&+0oQ2JV)!P8^gOc1beFq&Ny$Q)(bA@H0Uz@-6P>Zt`h zmiCQ|Je@uWk72UFBK#S78q%mSAOXTPwpt2+@HnorVlG)E_kXuWmAu?avGqxAw;HW2 zUp9IyH}Ar*XCFqU|n2Be#8n|GP zHeF9{b{U(EYBK-HG)|i3U^{6;&Hpwn`5bDFZ6<9b=>u=(FHi`uje}rl;R7Qr9hk87 z)*-As>00tuS`JE2^vBrp1?|(T`$k&H4498nR!WwJ&jz#Tp_=Jg>Cn)%``WLOkZj!P zy7oYOG=E=>d5b(j}j8@!t7^7puvPOZ|3gUJ8}rmdfYXdmm;2j*t}w)sH& zkro*bw2XA!8vNxk(Vj3j-zwr0Hs@A9^_v}WT}r>OIwW+TZvPK5=h0XFFcIYM-6ZME zudUr&loBM0c#$7=K%x|wR@g9o{rugC24vEpJd`L1$t#14-|~#7^1l08Qkzm1V6MKz zvsFMU=C43R?m4%bds4I+OJoF8+oAI36StWB@Dv#kIV?)yU~^a$ZhpPjgNtITkWbx! z>s|c3C3?iB@)Fhvrco@iX2Gi_sYiIkL~|3)t}D;eG<0zio#z@Y_Rb2V05`qj?=7Qs z@)k~7g^|j5b%0k>xA~8*hCXYY)@Sj|(O=c&>uCK9l1D5h!c)R97>aga0KY)qp#cM7 z9+1N-Kdj&m#v#zRZTWyu7Z@-gB|K-;0{7I$+y?@a)zm2vUwSxEyj7JCGlLL{x0I2w z20v#kD4_rh?%gOP_BOO1%y#^deJM!LybIb9jA}66 z;AXzI`f2;}dq5wf%WV0eo|QYdmsi#oSINo|^Br2bv%?oZ5@})H?!Ziuag*e;^SJ^7 zuu=qoX20DQl04ZOSBziFE4SBphPlO#B`*hp_OoV5a*o~%*Eam57(XwoF7vYLGcQY# zfc2dO;aT!W#pr3==qo90q059orB&wOf(*_4#w^*u8kOmf?g@uw9F8uppk<5v`0%F~ zL}5ucP@BPCZ5wiuf-QwbU<{~BffuruWLYzyPS-LJuWdVdAJ-DzxB6VOl*(iyj?z&-{nj)G3E?}(~ zXs|;^u%?PkpmJ?6aeHko_0xVr)~6!LTX+``WYmEfmdz~+*EWTc9d8PoDESgv%2(+0 zDo!;sw|FdXW;B;Zs{`ui%|ICZs1QkBMvT_$KO?nS2par6ZA7tZ|2ycHqY=%rb<>z6 zu^6+uZ9qhZM2LUfJRIY|Ii6EPigDOf63<~p$WSv`8sMX-J3~zsW55k=wVX^s0$IsKrgDL7IGXVq(eNLl90I-rj zKcyZB2Jsci3l;$gNEo_j@4xQ)rS~SWRo|q`EsF5GNq}ckRzkJyV(yrf!Y-n?!Hnx zl~-WUJAO;#Qw>OEssAecMj{ z3C2vW;iQ!(4H(UD$}pc!!S0oFcMJns3+-hyi|`93mJF@~ZJyPqO$XX6Z=i=~;6v`D zj)TKMg3Y0(*gxrS2D8ho|2G)7t85n&cU|^j_u7E!CZ{MyVH6v~qq0>1MqYvK-TCAD z3kOA{YI#9%v5ET9sOC#UeixIF3{=3N+xL~!|whO4aTeah*pDR^dns# z#TdVf8xmLm4d2%&V1u7T>fxux1&9vj76x%BN=itmdU#D3UL;qLrtd5_to~C0JG? zPV!10iL)T?%J)zSKk@EWK|wSUg>-MzAhfA@rMn%_O>WX0a`RyvMtQkt%Q`=Oe9qpf zBlpU{s)WoOI#x!R2uH2rO{y8FJwQuG9j z0={_Pz=6*kNcthh4vZ(pA5HIDnZ-u7OmX;cX{(6h2Y(IiHIZ(yvT|A`-2x%1psoU4 zG>Il<^f83~&>JE#XerU1Lwny&Co`LL5v`}FZoisNXVoV}o*wKwsGUJ-(E&-Cz+1D~ z1V%Z{5Dv)`eK`P@Ns^ZkW%&WLx6@Imm6Q@v-W}#cWwQ$oMR6^0Y^8IA@u9R7 zhQCEuh;StDbIm%R0O&|ZbU8`A8B0tR&ql&nV;0o zh6B#IYO zm;a8I$q#X&90mSBQBH%tpacyobF2t`JN9S)hw0d5N1w#sG{O=p(Rmgm2o%SVpP{#7 zexEdvJSA;H@-H}zwUJZvMQAekD-JVWhsQ&tm|0JZ4P(E&U&%_yZj=kHurfyWql?JP z{eD_zt+a8q@do_u1ud-}I2i&CXl)hY3bc!2c|0Op;CWiBRl)@oafcf}t zs}q8A9bJ%{lG)(d9SN6?;ea9@I-dE`A@ND3_|k#!siv!s2t@$I`f>uz{4HS>c0D0I zC#;&<;4Ou4H8sWE)l8oKz`?d-rFJ^6Qgo8WaVNuJ_aoj_pOkp2#i(F&jtCTG`Wga2k}Z-MI1eER`&jZhVX+(phxVxU+hD{dWEK&BndO)wSi@ zD{Gwi>$g&(bFFPAX0>Ww*}>Ob)W{m8p7^5<# zCN$F{Yv$0T#`+=wgy diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc index ee5d11175961f2a60f4be82840d695c32c432d0d..6199a658e54b2806593ce87b3972f704db0e8fd9 100644 GIT binary patch delta 19 Zcmeyw_=%DGG%qg~0}#}8KAFh<8~{6z22TJ0 delta 19 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 592f094d4a88300ffb40b99298d9311c2d9d2892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmWIL<>g`kg6=IvX(0MBh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o3OOvsFxJacWU< zOlnGbVo{8LUaCt`W?5>COMY@`ZfaghaZEr_etJ=2Zf<5?dQ4bmacN?XLU2iGN@l)- zk%5s>On_rhNN{|3YEn#MK|xGvURiuOknNM16jPj8lB!#fn4F!Mo?0AJkXfJ~UzVDe zl3%1>T9lKMnPjXFlhjWFsw&7YDk;{FkI&4@EQycTE2zB1VUwGmQks)$2XgdhAZ7pn DyU$3F diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc index a995286a0c92291e74a01576c41f684a5135f137..af2ae324f0e966a1a1f899e96f40d369e28162c6 100644 GIT binary patch delta 20 acmX@ZcZQGqG%qg~0}#}8KH13a$PNHKN(G(( delta 20 acmX@ZcZQGqG%qg~0}z~b*|(9~ksSa%7X^X< diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-38.pyc deleted file mode 100644 index f93e7ad002e25be34834e86c5013ce2f6c3dfaef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcmZuxUuz>b5SMn>yX*BI(rf8!bq5VKT#z@&)?Pm+Q!mO`x4cqnY1~W;7aUj~k5u0sZg? zPrs`m^p{cY6JY2C46zQ3qCTRSS~>1xnC;ve*?k)$>d^{yzr}rrT0PYAuYV4bcrYB7 zT#EK69U zi3?bf6=$$ImccYGq#&{+1I}W}NK783ko*x@1S4f~!3MG&+(Id6uZ6YWn`hbG*O(7n zgWgdCW~0A^A=WTL5-EIRYPP6-ZVxe}!PHSW#UG*@{0-m=58atdv6;u8DYuShp7KOj zxuPpA@UZ6|KCR5E%Hw@irT7^F+2tw7mXW2ckgDETvp^vST{zTzhAb30%A(%T=igI* zW`SHCBL1VST)20d#eY}6_ziXxn7yc=hakgSi2PPoe(_WQpY_I`)rxh%HDLZ6u>ko1 z_V=gRAE4DGs(k*ps`U_HfvPE6IjZu;nbj3m^{A%m(Bs$S{(IRAY8uM_!U|T%9WZ_mh zn2Z=an(%;^XFMK_AVv5(6O%Y6JvpISNj9ErY=j4!hey5Wge4)=5whYknu7c)OF{u< zemaI%9G@`}jU@HL)mVB-%VMyoQvZF@kiiuR(2mV+qbbuejn@ne|Z ifw}YiyzVh#y!2F&pwjRV4h-u(+hSBxb9 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc index 3744ff742dd8cc1318e01fdff70efae6cf808133..19401d69187322600462b04b7ae23d25000c41ad 100644 GIT binary patch delta 20 acmX?SdCrpiG%qg~0}#}8KH129SOx$@y9SQ{ delta 20 acmX?SdCrpiG%qg~0}z~b*|(AVunYi1hz4^2 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc index 8903c53ff43a79cc5e4ab71251004912835af934..496a8c73c311712a65d64a4c461c988348789025 100644 GIT binary patch delta 20 acmZ3=xs;RpG%qg~0}#}8KH11Uiv<8Tdj*^T delta 20 acmZ3=xs;RpG%qg~0}z~b*|(8<77GA3NCkiZ diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index b03a5781ce5ec4ee6c07794cd6548156199431a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1145 zcmZ9LOK;mo5XVV9Og*TlACcoEby}c+4y^&C#&=1mkKFwZx%2&uKGjviFrJx^nhFtFdKQp}SbXpEv??0&PcQwcP2ZR4!6$pNT zzy1J7oW$jhaEa?WNhPWBil~xmxvue=sFS+bAv?k&UYV=&hG>#zx!&O|(I)M3?Qvgp zNJn%@SM*3v^hsX~$UqFqQ0$Uju}AjAKG_!sFxaR#r&_LWnHg8Cw@L+*g|Ys+P>N-S8c2+5wtA_!ZQL+J-$-q2Gmn*K zw18w==R8FLO5+(`LJ` zJj6Dje!0w`)F{E$7520gYin4=d-4CXR=O(vl{U6QQKR*+vQX-Kx9HJUp`Q1?w;s`y ztzi|nuB=CC%sHihJL-G5U*gkWXFo@mpioCF*~BVZWb9m}cPu)W>q0;;brdLhqhcXo zSfbadE@FNhnj%T%@#(YE(5uta+juTyQgHSHKQN6A@~ghP=lbw_=J(x^+pl~E D>9;pV diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc index 94fac106b2f3f55e52c3329528325ada47cfc63b..3589710fb5fc8ed7ebe40a9ba91d1adc174c4418 100644 GIT binary patch delta 20 acmdn5x?h$1G%qg~0}#}8KH12ti3TtL delta 20 acmdn5x?h$1G%qg~0}z~b*|(8OfvZ_mTLOue`=@b~<|+}<4473zOu>{Xd{I8QBV^=&#wtKXP=H9Ajg__9D3=pz0X z=@q(!|10bYz53GJTcTFes4u^QEJoeT7s9SczL`Xy7G{43?tSOM7Bw_&@UaTS{`wZOpGzr)i99Qhh5?_b=A2 z(KH-GT1P&AWE$%CIjq|>p24Efw;W!_bw0uKl*tiK1ZnXRBT=8o14epjlCYlAi$sD@ zo!h{lWkd9(Xy4Vw^g3%RUGg%#mJRInAtD2xVulC|lh}F)4l*5%?9I-^MJZiPJ z*U!0kNZLKbMN=+~RI*h9E0JLwN*HD!NE{t8vNjxUXw%<;c#!BgienPS$Ki<}T+2^7 zoy{;7tkWSf)e^)^YF%cm$N}V!U(=1V-U;MN_KD^K>6Z96+A-XOS3%F=@&XjZ$*&!+ZDI+iOo-&0v>x+X%!q zLNGYS{BhK6i%7B$hGFk0+-IUajD~lE=PaQqzdPb_9Cd$wcO;|u?uAoVh9~(Okq9m* z!PLidkX0<b7xq~xvZAiFD(;b z!O7}Tg@2dTPUka72%5$Jg;gzslvveH7qa%rF>k~ueyEL_=Wmk_~XJe$o@P-TZO)(mb>;c%PiG{7X|1w_RZgVXN>`Q(x! zQ6gjr!8MOA1L_z7l-K~g6(-YJ9)dz!eUiX5=NBOfh|zF}q(W6rD0uA0X&0!WtRIeI zpuYeqffSlyVM-*j?g?2{##-$ZCS3uBr-!CzI$9=NGEzBCUw>PqBi>`dxp$NZ&@Yl? zFcMOw#E=x$P5Y!UFVUveyi`uPq&t-BM#!h3z^Q^WnQ{gvZHhs7G_&>vP>ZCrmJsDW zf{Sk6Br0FRh2%pbSsV*}&6B3GAEei-sdB~P@69j9))!wkawnomIDY5m4RP}hiNh|7 ziL(8PVkpy;#A&iW{+Y^e2*@bur_)>uk(24pI1;kHl>2Zbm*O~*2YE?I9u4!QFpkq> zMuYt@3i{z7icfMEVVY8wS9g*~O>`OLE>cMD^Dq)D=<{^ION!tYuF2;v-Jj1jpRE5r zXtthitbLka4PgGD*cKG=DDs~KzkB@Tw`-4shZ~z~JC9pIYwOdECp#^OsG>k;?c7nO z&&yM*<|U@;c3#pIt-hF-r;gw%x#hLj{jSyuhUYgr$`iSxJdoSql)F=HZGbqp!hY_l z6Y^xp^3sr}GR-T!FhPL`2Q0TlsOv;-GF>Q&*MhqEN)K%T8j%a<-vC*Bf|s%6nLd6_ z$+axx<{C1!Z&?5Joj3IyG~2iI4!zH}memeq^S3~CEdCLA^i-2Edu&Y9SjQ08@j@eE zps}b@WWdZsuB}b1%s528{3|luSBr{XHybF1%CbsBxS(zq%9LmBurc|8Ui=!kQ+16h zmWHY@mWNV-c~22$k7|e1&=M_UB8@|Hf|iCaVrEZJZIlG#f3{RdFw1?qUtuEJPk?hE z;5g++Br4Jl3@OOM!KV93L=bpTcv$Dm=Whwi)a+n%f)eimAfxEU}=G&>VCd zGGrWZ9gvVbY&4M(Lf$*j9Yi;k2V`se`2(F-F}V-?^iod6O5NdaL!-QmE4CUNt=xOG z)(p0`KYNf@&Tp-oypByjG~XMb#TbS8N-iAhnp{y|>mY3q&O6917Sx=e6i+N^oSJ6_ zUsm0qv<_|lbo`#QPA$wG6l!#krzP~7c3&4n>P*l}Cd(+&E{gPaQKUaN66+blg8u=# z%c}Hcs*5g-@BdggDNY2EIziA+b6zqvOHt=m8k<}>x>fhMYA^C-v?dqLwt%&}>5IZ( z-a#mWX!!g=?oCbifd5pTscgLHF37ALIMjUS0jDel_=lpg%&>%z}U`3{8Eh!iz`ULIjkN+Fb^X9yF{|Ak1y;J}I diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc index 51ddf5749d5ff40ff9d7da3bf739862082b9bb54..1d74923071936f7c213e3bce2582951c0f7243bf 100644 GIT binary patch delta 20 acmdnZvzv$eG%qg~0}#}8KH11^zy<(1Sp{YQ delta 20 acmdnZvzv$eG%qg~0}z~b*|(9~fDHgTCIw0W diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-38.pyc deleted file mode 100644 index 049151832d1cd6c002e099c8943474ab5b081d6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1389 zcmYjRUvC^W5chij7=S+aNR8PEL2^P4@{+1Vm6e*H@?9!G@yjhpr1 z!{#fPW)BuYgqM-rJN0sUN^}3z_lVdKz6gHyP6IIzp@={V1wAIi&3`<&GW6T`Q!Tlb zNv*R?&A&*}vas@{ZEtC5%4{W*RBD@O`P{VcT^$*dB`c|oDvN1~7_J7&6y^k`xd%%F zn9c`!8)G(9_~%sbI+;8pB7oi9#>4pxRy-FWV2k)e0Jp_p97$X2!mydHB~uG#&m;qc zg-k63X8@~KfQs>geK(sOvdPow^zmc{cDk&WXU@LT<;#oFmh*Q|am{mfa`c3`V@&(N zX)qcdmtBzl5}x*V4$;k|EEa0n-vuDBxxVf!5FVV?nmdFGUFNJR%Pi*wUrIfyF4ln< ztC^6-s=}EkCOwn6ymmQ*e7mzNU~ASR_L&+d7c$y_Vd=BB_@0F=}#*S?*RLRD7$K&|$>!aCm@`IemysBbZ ztdbWXKT-48C@Vj&czO?0#)kw(p?A+qNG8+@2jsTE`BTTw-fb zWC1dB7Z!4J-~~R+VDN@g`kMN|D;fsAz6rWCM2mhv;}N{(Nc|-UmRPSLm!74Kcj*c5 zH~Lf9P&00Pn1LBvzkw#Zq=37}vUkl@e00`2`Z&IfGK_k&~dnH`W@n-Mntx+gZs)(#LWQZHA%7 zM%9>@#szoJM*1Dpyo;Ja%DYSLjb2KG((U%!4Y$0D-Gg_u=$0LHu-pG* zIzl1H-tZI9nh#+i8`O)u=yep)z8dru4F>9kv-Hb560euUm7fpv4H gYtfOO+CdoH&r4Bf@&W$#45oDlQzzuj*2mrVe}+7eNdN!< diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc index f720aef5b2dd689f27b8e8c50877e0b896dbfec9..5ee3888b17ff5067d1d6eea0606efd8ffc3a3cf8 100644 GIT binary patch delta 20 acmey&^_h$NG%qg~0}#}8KH12f!3qFE&;|(r delta 20 acmey&^_h$NG%qg~0}z~b*|(89gB1WmodxXx diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-38.pyc deleted file mode 100644 index 8d65e9c7f950ed66567ca89b71d96767c24f7508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmZ`&J5Ss|5Z?9LJ_E-?Br$`TH+VG_K~3Lpi2G( zl=S&E+oqyTnJTk;GO{2UX-4y~=9~F;e7w54j6i<;l#|~WpKm}xO3{sf&I#ldT$W(n16+s&)rl1l0*T+V-)u8pc6X0bHIjJ z6D7XhV(pzZyy2-Sb%j8%3#zuka1>#NB8Oq-T%m|?cY+yV?iG%_1ytm-9t)t>V@m+F ztd|bNq-34=oTM_M6aY}mhrR}WudgkI7}!#_%?L3 zt9UlinBF4Uhs>YvdoSZ-#ifclJ5OZ%w&43x%y_(CrcKU^TE$1QoXRB6MKO&(3e_ap z*0^q%D7Qx2qfvbH`u&G7{lrh=q^e?G%;-7z2jV1FqUO)5B>j?1xr!@M4e5**tdzq> zW|=s7F>Gp)4K06z>YMhcC`4_>Qg&s0v3^g&z}C|LQekdkj_2qUUBXkz9)!|dK zoxlY)@`oe1v})?j&H!tj0icw^W#5bO@88}oY~gPn0+Xt<vYbj5p==Gw9PU+{J^^ zVHoIu(jv(@rFxmtykt#g{63{;@brs{G?yn0anjHrpBQ7>cJRzQO2f1C!K{F)08D@b z(kB72*>FjkoDSM6k%r!AvkeFEiw*K}#?^vSa`btmJ^NQgPia#$inDe^o3&m4HG~dc UEmqkvEGolZ;Pi3d@tuJD1xK>*+5i9m diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc index 7d13fba529164d7373fe15920e7a601c1d9ba365..648d8e97a568d70f387155cc375cd5b29cc35d21 100644 GIT binary patch delta 20 acmZotY*OSt&CAQh00ecNPd0Lw3jhE$Zv}4v delta 20 acmZotY*OSt&CAQh00d`U_HE=Y7XSb?JOxt# diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-38.pyc deleted file mode 100644 index a6ecc1ccd0604c1830ad1427b454a49f4d6f64bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3393 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 aWZr6$(IRHLz*ZD%+LtxP9PcCVtN#FF9+@iu diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc index a6d50df1cb4f20990a349810d3b89e954b50ccf8..20a1cb53d8a013c508bc4ef9f9820b8fb7e980eb 100644 GIT binary patch delta 22 ccmaE}lJU(-M()$Ryj%=GP}linBlp7)0A5K50{{R3 delta 22 ccmaE}lJU(-M()$Ryj%=GaMoqtM(&3p0A3ac=Kufz diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-38.pyc deleted file mode 100644 index 655455c31e8ab97148c0233e58093d449d400de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16313 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 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc index c612793fdd0acc614d93b430884d81dfa69f0dc4..f8b701ee787ccbe2e240091ce9dbba16bfc1e79f 100644 GIT binary patch delta 20 acmeyR{!5+vG%qg~0}#}8KH13qUKjvL3I^r? delta 20 acmeyR{!5+vG%qg~0}z~b*|(AVy)Xbs*9OV} diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-38.pyc deleted file mode 100644 index 8017e4c164a9009957b034cb32b6a98634db6be2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3305 zcmZ`*L2ul+6&5LJMl&8yTqDgU#iAh6W}9)HapE*-5VXM>j3`yIkNdA2?u*(>ceBpV@H!7(kREj z^ESRyoNhRsnenHOb_5$nI^GF)GNsdKC@yzcf0V{L$x_yr*^oWl*E^7}ck#|Mp_E8< z5)Ihij!4-^CFwTX*m%%=gIzeQWsGYp3r9}TSB3d3ikXi)Y1&52UBR?VsUg2@~f^*>G zizELdg5Q%4 zTV^+}E#8=CN>rhFv-`8|^=6ad+0i<`y|AFOY@oV{(EV;Ew-_o%o)oz>{vg{E($o-X2qe=~I+9xL zC3?qDDNIeMILd{oLwOLz5aMi@Cj();r&*Gk=KW7r*Vb2-mo`?6Uxr+#X(&%kFv(*x zJ&az2Cp$4-9%*I#+%98+f#~ZYGTt<#7)D9TVN2tba$iQ<#>J5D5=_?NDANvks>e&DvqS%20&?*?R+en{j+=*QOilgG+FN*Vkg zLC^?!O`HMx5p1Vy9bbbv)BZ^5cc!v^+eP%N?4Uv`)?e(X}ME zp21@C(F#^M4pawZw92?JS za!7$}__N*vG2ZbU?P;e^L5{a4U zRzM@*D=_Sf9zF0au5up;`PYJ$BVX%!QNzkqzP1Dm1a*Omz+E7mJVsMl>Neyzx&d7Z z-EaPfuKP7nKLj4vK+{+iE8eo$jc@m4zEC`=EZ0Tv;Mh|egPtTPckj|gzQs}18Z55<&`Sb;N?^q{5YukFdyda#3IyitQ zLMHuv1W}~foJGSqb{V+Hg-sJ~0}N2WBE_W8BblOUYrl*mTnjd`cvtA|w$Ql{(hk1d z=~N*u6s8nxZUR_yT~^}!;;n195W@Tf^vk&<=wGo&3amG<*vaSF7Gn2whLqiD23z7- z-2QG;hqmcgJF>5FnSxUYwXJU1SH@zc@>^c%eZ-dWQ*ALbBzR^+(~_!$?q}(Gp6|@8jPxopj?1~@~W*Yx|-JG3Z2VaqG>N_AQ8f#QZ_E)tRxqC z#*VPqV%&j9OX8LG4rbh8l*?&IoxpfD9;Kx)dENE}$JD043sGv^U9oTc=hhZ9jJDoK zwsz^FlZ*2frcmpsoWLWLP>>&`vt-r}NSg+vhT@SHUXUQEo%+_?8PWnZ+MYIEj3u*g z>D!vuCg-S~N#4V(9a3IZIxSNVL!QN9D8GkhIcF>DCNp(^m}gQ~zL^SfMXh)(l((&p zWv0qI)|I7q%85_y%aU2e^T98wEB75s&FVZV4;u+;6lS(blX~uq*Ss0jgVuimNM(YQ diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc index 4991458d1db4eb79fecb60ca475eca2626c5fa11..87cbb3e707c75aaaa8086f0850e5964c611bb3c2 100644 GIT binary patch delta 20 acmdlVvOk3TG%qg~0}#}8KH11^q6Gj&Jq9KK delta 20 acmdlVvOk3TG%qg~0}z~b*|(9~L<;~#3I+-Q diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-38.pyc deleted file mode 100644 index 84dd9380e0911ce5b7f8b4a155b8b703d6566903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7479 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 Z%q!n0#QdI)5y~;pAyx$&T{A56e*v|Y5nKQO diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc index a2a467c29874be364cd38e6f6d6897f7951c74f7..d89e03d50f5c0073c8bfb233942be6eaec8a2423 100644 GIT binary patch delta 20 acmZ1%zAl{mG%qg~0}#}8KH12 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 M&U^F4QgNa1Zxy&t1poj5 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc index aa2672075f45893cb7815faf6eb734f75a4a8d2a..d153b7cd4e5b4773da84bef23767aef2d3e8da71 100644 GIT binary patch delta 20 acmcateXpAPG%qg~0}#}8KH129*%km$qz7aG delta 20 acmcateXpAPG%qg~0}z~b*|(AVvMm5maR*2M diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-38.pyc deleted file mode 100644 index b455504afeac81abedd718fd11f51fbd20d4ba10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10838 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 delta 20 acmcbobWe%MX4p)4vC|XZOnFNUK4P??`oCG!$!-gyx0)(YNQlYe1WHQ|DC5JmZ zv+U_5MPk+mlSpC&4sysLM=>|u^Fw@|YcA1W@F`#Qkd#RHluL%}M|JmhcYXC$RX?4Y zsxy3l`IqY5d55uolkoQEL--6O{|=R4f+wt9wY<%ZY_%=4R$>pFw!_(B1CpJ%1F!9I zw!zZCVY1e*t98!k53>$tU7CH)QtKHLuJA-{%WnH$GT{sN7$b7x$ZprAwR1&G^j&o< z>f*{VYfq-Wn5=r@wwM+($Gkly?udrCir%!C71yw8M$CzK&^E+%apRapSH--zDLky0 z6+aTUL=C-bg0HdW-Ph2HwVJ%F4I`!FC_#5(kfoW<(zpx3(eXf*w_4dobg+&p*2|e% z%esB3A1alpa%vxAVJ}mml94E<&&7QeYuTm!-~Kp+&rtG7RFV;fz>n@?DHlVnrd|4B zm_`E`hGjhr2bmZp)SnE)-BFZOGq0Gsg4L$_{+kD%be`r?E-k$s%dJFg!3SOp|&RDxWv4*ETw@ zNwY2uoqg1&@&F|#juounM+5_J8Ks(5Y4y^wM(}4N{YG0wz?IWLTdRXGOT#$T>gTkL z*`KSc=wCR?!2prmob?ZM3V`1C)vN}ckNDV1>zW^7^adMShxO_v8*Gg^Ok3LCae5Z$ z`!~+UHt4-v*gLMUZZYlc)cUqs{hFl&qSk_k7D!zHSOk`J=t~B&> zBDIwpAd* z$B4rxQI@-e;n_!6l0glg0-b{Ajl#+sm9}5=EjD&g+=8oj3+E*-*a_#Xu+&F|dnOrV z?ZPSC!aZ`vo^}eau#c>cJ+6)Y@q~7Z+VBsBk1}C+VYR+r8jNxs>2oC-#B8x)6V+MuN+03$}SudR&u3b9D zm0hz<1*50B+Y&S0zG)4>rKf1!0R~Uo7pA=gb9ue8Sa=>8=nScsad>_m6(LVZ(_fv6 z*WeAV-owlV+&v7C9f%M4?@?XG9h`H3`A-W+^BrpiRsiN78p$R}^Ow#E`-c6Qy>!8H z=fvXdPprp}pTfU=LWqAnvx*9h_p=*d{)B3vS!*TA?N(vNBPyLws0aZVt z%6N@4i1NO=N3sdC6kn>qGxtN6d5-BzrZk3xStspDSN#I>U6k|hEc~rt#AJdq*D+zh zY8~E9v!J5Q2Xc25??nm1co6MHaT0ANvdK-PePyW|*rD|L2>V<4W#Y}HBY=DfxB(q` z8Y(|R|H8eXBVd9w$m+Kd9Bo~N#-%E=KgTOzjUk`g zYv2RInbR`dSzd3tm8+2zDu0{)Tx%6?j&$XgYK~?M%I9gV!h1H{j`n1@pQ%1_m*K}Q zU5*&T9193H_$>D=^=rr%bRivW6oWBst=SQbsCi_ib98soMa^p$vZKAoA`J`v*NU~~ z!p)l5*4VF{xddcc+m7-GYE-(ByD9=yEm3t*4fPw0eT7op+w-^wSNAN3o0$vgitc?L zUMZJq@-LHEz6G*P`|yt&$hLWaH-`y&z$MUGuqog012Hj(f-SrO(x8eq3-tiss?;Nu z<^hGtAnpZvTb|Abac(vvcHIlG^D><4e9dVV4&;krtfZ(mTgQ_n!2OKNys9(-BaJ_i z7hT4HT>4v-iha)it~ABv|EJRDaYB7eYJTzqy4EoE_cyvW?d4^>?5N`Ae@@+`Ur_=o z?ff7wCwil_tC58ADm77{uQLCYM}uLePG6g~FpS{SVL9>eMOO}WoTVlbl#_dS|3SiY z2)v-sW)g^@ZbeIS5W_Y_hER0Fw=87%YQnI8zj|_hO2Ht17Zs%^L^8{QuTAq=JQ5nW U@l~zo{9*`~Uy| diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-312.pyc index 5d14feb4c222b11da7a3edb8ccac64e3084c1e2f..e7cc3d5548acce3a467fa95cd9e0f1a5d60be05b 100644 GIT binary patch delta 20 acmeB)>xtt&&CAQh00ecNPd0Kh>H`2ivIV99 delta 20 acmeB)>xtt&&CAQh00d`U_HE>5)CT}Qe+7yF diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 9587817802764c3c7ecd4ae36faba5e2fd2a84ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9775 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 Cm^Ci| diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-312.pyc index ac0e6ca5086aafb2476587f1ba45df672423afb4..55989358cff6887203637efa0309016d23a772db 100644 GIT binary patch delta 20 acmZp-Xt&@#&CAQh00ecNPd0M@kp=)deg-!H delta 20 acmZp-Xt&@#&CAQh00d`U_HE?;BMksLO9mSN diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-38.pyc deleted file mode 100644 index cce5b9d4f711e83a7bea22f76a462c2cf9aa1e3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3873 zcmeHJOOG2x5O(%qd%dqbAVA1t2uWZelep*Q@d_cxEC0eLs=LRYo;<`E34ii*Rdr2OO?P!wKiS@H)!_Hj@9glx z`?cENg3*6}0rMIB`JZQMHCzj7_>9B~R#?R^Vhz8Db^IdgxQYgTJ(~E{*ubws3kz&k zu!RM-C3bL$U3_+lbNGCL3%JA^Sl~^Gi}>I078ZE>HFyULT#|Sf3tX1Cg0JAKFX0+C z@Ow*K#{%yIZd7m+zl>Y>7XAQ#2-w3P{ro&QgFil~?cL7)XtfOZosd3B;uO|G9!t`xWo3|)WP2YFBrlrxgMmrkqYP9}tN0a;Wt))%hr1Q-shuS)0>x`o_uFiP#`Y@%w z$%=87Z;YduCexH3%{NbIg3}Xj`W$ja-=oNn7@YgOCb(zd;{ZELn|&9*IU`(WEHY}>kRhpks^qjqWAS=x3q+m2@2 zS=e?8+fIJIT$APAHWw7DSDZOc>C9a^b2VqK=FC;j>Jf|jG|rk4AE#!g?FVWb#G-mc zXJ~%53}*2biN}$Nki!}xl=A3#CaG{#Mq!G*v^r&&-ZD&23)9oW^weJNmaYekkYUy= zJo|Z*jM8b?wfuZtPUUqu_^er39m^}-c9w2Cn%j=%wj1lxt_l zW1E!^chxt_Q-a#T;vAtiB(YZ{n#Z;l?U7Ya8n78-i53LtT{yDx5MU+FFf3%al-|7YnAP1XAZ=Wdv5`s-vtq zuRBOMQB~vTek?! zWpC@Ap{hyGE_+88gSHfV?2;~q)Rf{5dsi2C3bD^F>tdf>5$vwYh}n=uG@(%f`E>+s ziIV_&&7dzEpeiM%su&sE%ChifGBl z69$*~THcDeY|PM?^X8a`!zekXnQGQ12-yvxwZ?(WmRAxR9cT4ZQwRe%WMF*Af^9f$ zJa)Y{5)G2wl%W^jhMcZAbd11R+8OdN4uu}1xZin!@8*rdO3(yC>XnYWU`JIW@eM=9 zZh;r}fpAq<_XqZ&knF+ZtG$)H5r#O8!!W2n`uyI*M+d*u*rAvgkNHpc_j^xZjd+jX zlZf@cPRIjBpOW5#G@gw~GUdI;EFG|DJccW9?>kv1jf3e7(-dy2meqUw`8VGlgx`~X zFPcnxBzYRbow@gj_IsR8i8+blVKgATH=&ce;Zp+lId)gSRo_*YZi>kF{U_0dzG8TL1t6 diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-312.pyc index 859dce4834ccb465d10a45ff850f01ced765d800..ec307ad93670cf9957228513be7fe0f034798877 100644 GIT binary patch delta 20 acmdlcx=ob(G%qg~0}#}8KH124BA^2H~B=y9{_ulWvrzbNrK7#h+ zFS5T-LFhNLINLl}d=6dpK`^w97-m+CxA9>eW_D~P_O^}DGn5hsac9?;D;Sxl&{j(A zS17f%5OY}N7;U@EWmOof++*IZCA+-FtE_f}k1*`AI;i0v{_6V#+CJ~{v?o}U4pcMQ zjcJ$1s?dCMQ7bn+;sc&iNi`>Who84mS|EvF!@;6-PauD&8XZJMBfHI42tq*48&W>!dFvVO-NFR$%&f$QRmd;JiAN zvB)3}Y~H+WW^O}YgRZWE7{N0^CurAFb&bEpBh*2sc(Y;Um00X^na|!+ic1}dbX`gz z!LX~egv^{GSp@^He_Cq=Pv8?3aJEln@MX%|GJ45_w&)ELo@y05lwu%hlEALuX{3fU zCLKLwk$`ZQmxG7*9zE`a&v-YWSr+j0We5NS8&Nk(#|w6{wKTm@N_Erl<6%7k1x z3(?XPqGooGU#5k>Vd1@rP&ptFu47q)@mw}cCS2%dEQy8(cnm~i_A%0Eg0(e5M|fhN zpoznr6MTZ(upV2w!Ya%?MkC9tkMIv@geUHIsE=6{-h1Wy6Cf76uQJcfSZ(5sz=9## zCcOek+`4t^0>1q>+sX}J(2PtOO5T!73&Xoel9VR@Gsg6`v- z@^~jwq#wncz(|K$BveN|8pj6&ZU;BFgBg0CLCp6z?%iMC=#bCI*Zw(p3~;6nbPPNj zAO=9z=j|~bVTKk^8$JJYY>h02i}{CRTO*A}wgF^fG3x|t0EpQO2Et<9w|;i^ZtT_f z900+|Yts~}+%1!s<6-WY{59;{kvx+HXFzKxpTQQZc{lfZ5XC^qgWQ`MfXiZPL~$WX zVf@bhl{iwmCz5P+(Zo;(;o27VQPKaXM|&bYvaK6IJ|y=gVQhn<(RSgiP>%f2FE@q9b@1a!{5WDG7ertR{@#6J&)eHYO1e& zIBRO}9o4#{KrZ^PG1-*!U`Ad80Z~*F`YMD-{_$BZfTlRkaK*9QH#r{Xs8P$E7fPh2 zhEb-Z1xkY_Wx2~Z6n385U@Ld|D-Go&ccJc>(Rm@F6ri`Ebmojq?pZuZAHLy)cyT8%r*D6-V7NnoAFoOh{eS%6x$I#JO6Dw{v%QLU)5CuQaq9&K diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-312.pyc index 7ab3640670430071cba76086b5adefb8fd270520..fa3acf8c76d0ccc4ba745513072863af720de22e 100644 GIT binary patch delta 20 acmX@-an6JLG%qg~0}#}8KH13atO5W<-v%`R delta 20 acmX@-an6JLG%qg~0}z~b*|(9~Sp@(^tOgkX diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-38.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-38.pyc deleted file mode 100644 index 3a846632689ab547f035fdd048ed2b1a97ff5a47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5135 zcmai2U2Ggz6`q-$ot^#hPn^U}-83w1KrGZwZQ9_PsA>|sYLMAhb<)CWVHxioJ5%o; zcV?4zwXUk9;wLQy38{jY{0JUuR6$iC9*9t-ga`g4UU*?1K|)%os*$21l!t`xoVhz* z+o{;Axp(e&&bjx_x#ygF?w%PM%4qn#@oTyAv->sepVS%r8R$HP$NwHGp_MeD3!|pj zjgp~jA|cFLqHdPVda{(PTP3TWDy8an$*!kM>3XJ=sb@>sdajfMZ&FyVYo#HP5;odl zkro-WBO)tuXh+467)HBCjEGURV`7gOL%Ub(75mWc6Z^$D+Wq3bC9QCv^L{3i$M3wm z>^7=R;WbwMslfFEpW#<`{UY|``DMrVs(Iqf`)x09^D9l6Ur<9#MO<^$X6qH{t)30$ z@+bSR`I$$jXY$Lh5SE9l{9yWwHUZl#9#rBm~JIuX*LRckia+O5!9Jbq$faVfNfOMIclpXi2J z;;$$$>L|+CsYX@0b+-{XwRskj;ULBz=*rMMbNcDoD(z|iXX3@i^DG|!D5}nISMM6# z#9O+qy{I+DO|7e~W#nO9qw;mwz>@YgEr1<#wQ=pDenBUsU=%xh<~@;bG=sc!Jm1ZK z#-G~I!{Ot;@5;byHWs98%7PiD-IuFwi;&P>X*a6;W;$}!53RNH)NW{UFIIB<(#g5< z8A$tOSAbA{w&Bi8@0?qnZ&us%v3~hE*<6)Qy^j4azu@_8r*s8xfuDI zLWW}GUkVvkQpCp-ow6~_a~=k9-rxCJij?PJNx((lhg1gC-556 zCHT|nQ^n~{iu;q(JP@$ozgL_tBqX^&Xf~X>D~IvQwl`4GUWZvSgi6g>c5D8F0Q^I! zG<|Ga8P!LPJ~FDy32HLqg+Yl!QR`w7vyCK;(PMe+w&6VPAsXldq8c9U1JD)5sT|AG0FF9A{fgql2q z8Ds+OYW5mt!J5a{EqomrWv*+1=R@ZCkd47A-hy7VP{VdmFq8>Yy&S632$;zgui?}R zLo!Ju(jf0yv|FT9Nf9hGYn~s-H1)|fWtPB%?*^fD&Z)IsU*dq%3aK#3`xsi%ZMhDp z&34dg2ccdGQ&Di0VJZr&l0|kJ!w4ILQ>!V1cof4bgRu1pn1rqG(?|6~Xvg$%t`8V6 zh|hs#MBZf=AruK{Iv;$wA%RS$x z1c@D#evmXp3KSbM2#zfC9VL@y%HU{M6(ti>5FT0Pw~CUBDF}*8=?BSSri@^ozRX8T zW;CWK8HCAsC^reOA$s7b)77+=-aBe;4hWF^$F?SP91L#PiXZMB5tk?U+Vm zZl}FZG&ZvF;w^IA*W>}z?F6cSTzL0ZWMpz2UHJu6Vbbxdp7$~B_|1zqHe>-Wx2SjL zuGYJ4Q*@s`y6iG^_fAjiLp9frxO&mxAN~9_2JYU`dOVBP!;ydkWcuid1qOOrA6Q)I zSP`jU?u;H}p!c-sDBwroU=d7y9+d{~K7@yh5w!=6gE|V=auz(h%$tzB~Fof zBLt2GNS_!nq1q&n!@H29F=Bxy1)gVO#8yZtM$$m&{H_tg8Ita++ljF&qvADd9r`trc();6`bpks?j z_2kq5xFyXVz{`{mUl=$qG>dh=H|uFDx3>M>NzcbDmRdfd^XrSxtO zzdYH-O=wcM$c0?N8SL53D;rpz9D-;;mrv0!JM=gjoy%L-#x*ecuc6X(J28edg~~Vz zwT5nJD0k8FV;i4{5Z^XV8iR_G*g?CA-@KkloDhM z&wwqm=N`JqrjL;v=fs~F$Onuhiss*?K^{V-=?D0%%j;3GA_GwyZ^BIESHQJx8_9Rb z@K56LpF$<{b>yt;h~;QaTwD-DC{gQDGS^SkK2J&r5?w-Y;elF?#cHvN{wT(oc_f#e zc=qoP|9Rw(*Mq;l^QSgl!6I<;%1P^wExlhspd`id6T+VpJwA1!pl(apL=b)YYA3pA?P5=M^ diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-312.pyc index 761629bb35c7c4263ff6e399f6522037ea218256..78f6325f437cc79437a6b51fb02d1cd774340d0f 100644 GIT binary patch delta 20 acmeB@>XPC<&CAQh00ecNPd0M@=K%mVuLbo0 delta 20 acmeB@>XPC<&CAQh00d`U_HE?;&jSE9dXoS_I_2KT~jsnX8pFS9gu7UNcIDuI6UdESa}zZo*A&)7+#m*CocxQi3HZH_ehX zOOh-}vLxenu%v?}DVC&Il65;-(kT)wOOGW=X_n>OJj?R2EW@%4?{&CcA~B||%f`G@ zBt=SOMB1ITGhNEL-KD%R_jif>xL%s&nnkTJd-Jc^ti@x47#4n|?t1=c(7VxY2144d z81a1J#`}+-c(fEO@-45{sEV5KLnrj=zEvNw!nMNMIA1B7KdH=WTj_0m)>o-FHc4-E zZP;fGw5Qg>%dc2y4R5lFUX2wMordSfr|7GC72yY>&stm@oM#0>Sj(3UEEy^;u}13B zaz*HP)qqw1&Oy)$deq(YJ@!i2RWB6MsRlz8wKH>=yy#~NEM`J0=^Q-6O}mC`ZqrL9 z2SbHSFD2X*1J)5G2UuSvN(G_xDq%%^-X3b6WEx-!x|oI9etnC+#R!dYMtedZDwt79 zou?8+U6r+ttT_!kMnptiZDj1w8Lo;6GfD)aIua#4ztIe%l#sG6g9%OMS@EBH2KvgY z8P}jJ+zpN_ukgj7^wx{=V7<~*F$l^lWqnjSwHk-Ce2*72ovKv~o32-9co!}#uUxe1 z?xMX$440ioqb&UOHs?Tjxi?%67_0dWr}D5fDuQyuYb>zW3*W8F1v9f`!O>aL+t|cs zR4F7*Rqh+iG<|a}Myt2A@o&JA3dn*fQ~a35ijiXjQCIwA$68oPReUinEvBH4QmuDS z=lL;*X>AM@beZ7I_9Gc(Y}YDboJzR_Ct51%S>{({tDdS$VqoRc6C*f>RZXUw zw$2F6ansf3YMgY&kkomvkcgp_X`aiRVi{%=rc`ZBb~1~ST<%WwSf7-~=P2heb6M2-Zg|v)v+?d&SCO$@cwIN2LsVU!d!%QSo=}bqq zGnen0)jhlCq&X*_a_VVwPe0?#v(7%pI`_QuFSzici!Ui$dfB}By$kp%y7H>4uetWR z>-%oF@ur(^>0h*XU~tLOTW?!-`yI>g99psRu2sdmSKqVd-up`Tmmhf0e#jZF@MSl; z)?4>*wdU6wkH{cwuHUe6)8? zK(LeGMS_61+z6I>8$RZxXyk@HW9-f_(%)fCT#q#t9A(yhHFV z!FvSn6C5NsL@+^cnBW6~4+%aZ_?X}mf=>xPBlw))3xXpAUlM#p@HN3V1m6;TNANwt z4+K9F{6z3G;S+>U5GfFB9$}+)cQL z@D;*W311_8o$w99HwoV&e4B7D;XXnjM8f@qq6GFA2XQ{F?9^!fy$`BmAE52f`l-ef|1+pSkx zeSV}FHYN9YsZyiWB26_@-6$@+xDcdD(x@Z8%$E85Ut{VXC}q`+RIxoJRjne*w=eeL zrdM_2Hha7}h%z^}?wFgE<=|3giCoUeBzrn~l0C^ei8-l+Zs;lg8Li(Rscz#hW2?4R GOZ^QA_#9IJ diff --git a/env_web/Scripts/pip.exe b/env_web/Scripts/pip.exe index 13c7fd5643fd560f922543535728bbe9c4594904..a27b14fa3463116abe57e83ae48f527acdb1b996 100644 GIT binary patch delta 29 icmdmVo^8{4wuUW?Rm+&e=IKtaUB>tc%qUvU=l}r3y$nhK delta 29 icmdmVo^8{4wuUW?Rm+(3XYx<4UB>tc%qUvU=l}r3MGQ6o diff --git a/env_web/Scripts/pip3.12.exe b/env_web/Scripts/pip3.12.exe index 13c7fd5643fd560f922543535728bbe9c4594904..a27b14fa3463116abe57e83ae48f527acdb1b996 100644 GIT binary patch delta 29 icmdmVo^8{4wuUW?Rm+&e=IKtaUB>tc%qUvU=l}r3y$nhK delta 29 icmdmVo^8{4wuUW?Rm+(3XYx<4UB>tc%qUvU=l}r3MGQ6o diff --git a/env_web/Scripts/pip3.8.exe b/env_web/Scripts/pip3.8.exe deleted file mode 100644 index 0a0265537adf2216528999908b8a24c8949b944d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98226 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

XMwe#*Lv$g8jIpIBEV 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 GKJqUmsP;4f diff --git a/env_web/Scripts/pip3.exe b/env_web/Scripts/pip3.exe index 13c7fd5643fd560f922543535728bbe9c4594904..a27b14fa3463116abe57e83ae48f527acdb1b996 100644 GIT binary patch delta 29 icmdmVo^8{4wuUW?Rm+&e=IKtaUB>tc%qUvU=l}r3y$nhK delta 29 icmdmVo^8{4wuUW?Rm+(3XYx<4UB>tc%qUvU=l}r3MGQ6o diff --git a/node_modules/.bin/glob b/node_modules/.bin/glob new file mode 100644 index 00000000..37412d3d --- /dev/null +++ b/node_modules/.bin/glob @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../glob/dist/esm/bin.mjs" "$@" +else + exec node "$basedir/../glob/dist/esm/bin.mjs" "$@" +fi diff --git a/node_modules/.bin/glob.cmd b/node_modules/.bin/glob.cmd new file mode 100644 index 00000000..3c1d48a5 --- /dev/null +++ b/node_modules/.bin/glob.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\glob\dist\esm\bin.mjs" %* diff --git a/node_modules/.bin/glob.ps1 b/node_modules/.bin/glob.ps1 new file mode 100644 index 00000000..71ac2b20 --- /dev/null +++ b/node_modules/.bin/glob.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args + } else { + & "$basedir/node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args + } else { + & "node$exe" "$basedir/../glob/dist/esm/bin.mjs" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 4b09dbd2..92930ad3 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -1728,6 +1728,23 @@ "node": ">=10.0.0" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -1786,6 +1803,16 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -2094,6 +2121,18 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -2224,6 +2263,21 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/browserslist": { "version": "4.23.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", @@ -2470,12 +2524,24 @@ } } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.5.18", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz", "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==", "dev": true }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -2736,6 +2802,22 @@ "flat": "cli.js" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -2754,6 +2836,29 @@ "node": ">=6.9.0" } }, + "node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -2851,6 +2956,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2878,6 +2992,24 @@ "node": ">=0.10.0" } }, + "node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -3079,6 +3211,30 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3151,6 +3307,12 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3175,6 +3337,31 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", @@ -3539,6 +3726,18 @@ "node": ">=8" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3567,6 +3766,102 @@ "source-map": "^0.6.0" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", @@ -3928,6 +4223,127 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/node_modules/@isaacs/cliui/LICENSE.txt b/node_modules/@isaacs/cliui/LICENSE.txt new file mode 100644 index 00000000..c7e27478 --- /dev/null +++ b/node_modules/@isaacs/cliui/LICENSE.txt @@ -0,0 +1,14 @@ +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/@isaacs/cliui/README.md b/node_modules/@isaacs/cliui/README.md new file mode 100644 index 00000000..48806426 --- /dev/null +++ b/node_modules/@isaacs/cliui/README.md @@ -0,0 +1,143 @@ +# @isaacs/cliui + +Temporary fork of [cliui](http://npm.im/cliui). + +![ci](https://github.com/yargs/cliui/workflows/ci/badge.svg) +[![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui) +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) +![nycrc config on GitHub](https://img.shields.io/nycrc/yargs/cliui) + +easily create complex multi-column command-line-interfaces. + +## Example + +```js +const ui = require('cliui')() + +ui.div('Usage: $0 [command] [options]') + +ui.div({ + text: 'Options:', + padding: [2, 0, 1, 0] +}) + +ui.div( + { + text: "-f, --file", + width: 20, + padding: [0, 4, 0, 4] + }, + { + text: "the file to load." + + chalk.green("(if this description is long it wraps).") + , + width: 20 + }, + { + text: chalk.red("[required]"), + align: 'right' + } +) + +console.log(ui.toString()) +``` + +## Deno/ESM Support + +As of `v7` `cliui` supports [Deno](https://github.com/denoland/deno) and +[ESM](https://nodejs.org/api/esm.html#esm_ecmascript_modules): + +```typescript +import cliui from "https://deno.land/x/cliui/deno.ts"; + +const ui = cliui({}) + +ui.div('Usage: $0 [command] [options]') + +ui.div({ + text: 'Options:', + padding: [2, 0, 1, 0] +}) + +ui.div({ + text: "-f, --file", + width: 20, + padding: [0, 4, 0, 4] +}) + +console.log(ui.toString()) +``` + + + +## Layout DSL + +cliui exposes a simple layout DSL: + +If you create a single `ui.div`, passing a string rather than an +object: + +* `\n`: characters will be interpreted as new rows. +* `\t`: characters will be interpreted as new columns. +* `\s`: characters will be interpreted as padding. + +**as an example...** + +```js +var ui = require('./')({ + width: 60 +}) + +ui.div( + 'Usage: node ./bin/foo.js\n' + + ' \t provide a regex\n' + + ' \t provide a glob\t [required]' +) + +console.log(ui.toString()) +``` + +**will output:** + +```shell +Usage: node ./bin/foo.js + provide a regex + provide a glob [required] +``` + +## Methods + +```js +cliui = require('cliui') +``` + +### cliui({width: integer}) + +Specify the maximum width of the UI being generated. +If no width is provided, cliui will try to get the current window's width and use it, and if that doesn't work, width will be set to `80`. + +### cliui({wrap: boolean}) + +Enable or disable the wrapping of text in a column. + +### cliui.div(column, column, column) + +Create a row with any number of columns, a column +can either be a string, or an object with the following +options: + +* **text:** some text to place in the column. +* **width:** the width of a column. +* **align:** alignment, `right` or `center`. +* **padding:** `[top, right, bottom, left]`. +* **border:** should a border be placed around the div? + +### cliui.span(column, column, column) + +Similar to `div`, except the next row will be appended without +a new line being created. + +### cliui.resetOutput() + +Resets the UI elements of the current cliui instance, maintaining the values +set for `width` and `wrap`. diff --git a/node_modules/@isaacs/cliui/build/index.cjs b/node_modules/@isaacs/cliui/build/index.cjs new file mode 100644 index 00000000..aca2b850 --- /dev/null +++ b/node_modules/@isaacs/cliui/build/index.cjs @@ -0,0 +1,317 @@ +'use strict'; + +const align = { + right: alignRight, + center: alignCenter +}; +const top = 0; +const right = 1; +const bottom = 2; +const left = 3; +class UI { + constructor(opts) { + var _a; + this.width = opts.width; + /* c8 ignore start */ + this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true; + /* c8 ignore stop */ + this.rows = []; + } + span(...args) { + const cols = this.div(...args); + cols.span = true; + } + resetOutput() { + this.rows = []; + } + div(...args) { + if (args.length === 0) { + this.div(''); + } + if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') { + return this.applyLayoutDSL(args[0]); + } + const cols = args.map(arg => { + if (typeof arg === 'string') { + return this.colFromString(arg); + } + return arg; + }); + this.rows.push(cols); + return cols; + } + shouldApplyLayoutDSL(...args) { + return args.length === 1 && typeof args[0] === 'string' && + /[\t\n]/.test(args[0]); + } + applyLayoutDSL(str) { + const rows = str.split('\n').map(row => row.split('\t')); + let leftColumnWidth = 0; + // simple heuristic for layout, make sure the + // second column lines up along the left-hand. + // don't allow the first column to take up more + // than 50% of the screen. + rows.forEach(columns => { + if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) { + leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0])); + } + }); + // generate a table: + // replacing ' ' with padding calculations. + // using the algorithmically generated width. + rows.forEach(columns => { + this.div(...columns.map((r, i) => { + return { + text: r.trim(), + padding: this.measurePadding(r), + width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined + }; + })); + }); + return this.rows[this.rows.length - 1]; + } + colFromString(text) { + return { + text, + padding: this.measurePadding(text) + }; + } + measurePadding(str) { + // measure padding without ansi escape codes + const noAnsi = mixin.stripAnsi(str); + return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length]; + } + toString() { + const lines = []; + this.rows.forEach(row => { + this.rowToString(row, lines); + }); + // don't display any lines with the + // hidden flag set. + return lines + .filter(line => !line.hidden) + .map(line => line.text) + .join('\n'); + } + rowToString(row, lines) { + this.rasterize(row).forEach((rrow, r) => { + let str = ''; + rrow.forEach((col, c) => { + const { width } = row[c]; // the width with padding. + const wrapWidth = this.negatePadding(row[c]); // the width without padding. + let ts = col; // temporary string used during alignment/padding. + if (wrapWidth > mixin.stringWidth(col)) { + ts += ' '.repeat(wrapWidth - mixin.stringWidth(col)); + } + // align the string within its column. + if (row[c].align && row[c].align !== 'left' && this.wrap) { + const fn = align[row[c].align]; + ts = fn(ts, wrapWidth); + if (mixin.stringWidth(ts) < wrapWidth) { + /* c8 ignore start */ + const w = width || 0; + /* c8 ignore stop */ + ts += ' '.repeat(w - mixin.stringWidth(ts) - 1); + } + } + // apply border and padding to string. + const padding = row[c].padding || [0, 0, 0, 0]; + if (padding[left]) { + str += ' '.repeat(padding[left]); + } + str += addBorder(row[c], ts, '| '); + str += ts; + str += addBorder(row[c], ts, ' |'); + if (padding[right]) { + str += ' '.repeat(padding[right]); + } + // if prior row is span, try to render the + // current row on the prior line. + if (r === 0 && lines.length > 0) { + str = this.renderInline(str, lines[lines.length - 1]); + } + }); + // remove trailing whitespace. + lines.push({ + text: str.replace(/ +$/, ''), + span: row.span + }); + }); + return lines; + } + // if the full 'source' can render in + // the target line, do so. + renderInline(source, previousLine) { + const match = source.match(/^ */); + /* c8 ignore start */ + const leadingWhitespace = match ? match[0].length : 0; + /* c8 ignore stop */ + const target = previousLine.text; + const targetTextWidth = mixin.stringWidth(target.trimEnd()); + if (!previousLine.span) { + return source; + } + // if we're not applying wrapping logic, + // just always append to the span. + if (!this.wrap) { + previousLine.hidden = true; + return target + source; + } + if (leadingWhitespace < targetTextWidth) { + return source; + } + previousLine.hidden = true; + return target.trimEnd() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimStart(); + } + rasterize(row) { + const rrows = []; + const widths = this.columnWidths(row); + let wrapped; + // word wrap all columns, and create + // a data-structure that is easy to rasterize. + row.forEach((col, c) => { + // leave room for left and right padding. + col.width = widths[c]; + if (this.wrap) { + wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\n'); + } + else { + wrapped = col.text.split('\n'); + } + if (col.border) { + wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.'); + wrapped.push("'" + '-'.repeat(this.negatePadding(col) + 2) + "'"); + } + // add top and bottom padding. + if (col.padding) { + wrapped.unshift(...new Array(col.padding[top] || 0).fill('')); + wrapped.push(...new Array(col.padding[bottom] || 0).fill('')); + } + wrapped.forEach((str, r) => { + if (!rrows[r]) { + rrows.push([]); + } + const rrow = rrows[r]; + for (let i = 0; i < c; i++) { + if (rrow[i] === undefined) { + rrow.push(''); + } + } + rrow.push(str); + }); + }); + return rrows; + } + negatePadding(col) { + /* c8 ignore start */ + let wrapWidth = col.width || 0; + /* c8 ignore stop */ + if (col.padding) { + wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0); + } + if (col.border) { + wrapWidth -= 4; + } + return wrapWidth; + } + columnWidths(row) { + if (!this.wrap) { + return row.map(col => { + return col.width || mixin.stringWidth(col.text); + }); + } + let unset = row.length; + let remainingWidth = this.width; + // column widths can be set in config. + const widths = row.map(col => { + if (col.width) { + unset--; + remainingWidth -= col.width; + return col.width; + } + return undefined; + }); + // any unset widths should be calculated. + /* c8 ignore start */ + const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0; + /* c8 ignore stop */ + return widths.map((w, i) => { + if (w === undefined) { + return Math.max(unsetWidth, _minWidth(row[i])); + } + return w; + }); + } +} +function addBorder(col, ts, style) { + if (col.border) { + if (/[.']-+[.']/.test(ts)) { + return ''; + } + if (ts.trim().length !== 0) { + return style; + } + return ' '; + } + return ''; +} +// calculates the minimum width of +// a column, based on padding preferences. +function _minWidth(col) { + const padding = col.padding || []; + const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0); + if (col.border) { + return minWidth + 4; + } + return minWidth; +} +function getWindowWidth() { + /* c8 ignore start */ + if (typeof process === 'object' && process.stdout && process.stdout.columns) { + return process.stdout.columns; + } + return 80; +} +/* c8 ignore stop */ +function alignRight(str, width) { + str = str.trim(); + const strWidth = mixin.stringWidth(str); + if (strWidth < width) { + return ' '.repeat(width - strWidth) + str; + } + return str; +} +function alignCenter(str, width) { + str = str.trim(); + const strWidth = mixin.stringWidth(str); + /* c8 ignore start */ + if (strWidth >= width) { + return str; + } + /* c8 ignore stop */ + return ' '.repeat((width - strWidth) >> 1) + str; +} +let mixin; +function cliui(opts, _mixin) { + mixin = _mixin; + return new UI({ + /* c8 ignore start */ + width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(), + wrap: opts === null || opts === void 0 ? void 0 : opts.wrap + /* c8 ignore stop */ + }); +} + +// Bootstrap cliui with CommonJS dependencies: +const stringWidth = require('string-width-cjs'); +const stripAnsi = require('strip-ansi-cjs'); +const wrap = require('wrap-ansi-cjs'); +function ui(opts) { + return cliui(opts, { + stringWidth, + stripAnsi, + wrap + }); +} + +module.exports = ui; diff --git a/node_modules/@isaacs/cliui/build/index.d.cts b/node_modules/@isaacs/cliui/build/index.d.cts new file mode 100644 index 00000000..4567f945 --- /dev/null +++ b/node_modules/@isaacs/cliui/build/index.d.cts @@ -0,0 +1,43 @@ +interface UIOptions { + width: number; + wrap?: boolean; + rows?: string[]; +} +interface Column { + text: string; + width?: number; + align?: "right" | "left" | "center"; + padding: number[]; + border?: boolean; +} +interface ColumnArray extends Array { + span: boolean; +} +interface Line { + hidden?: boolean; + text: string; + span?: boolean; +} +declare class UI { + width: number; + wrap: boolean; + rows: ColumnArray[]; + constructor(opts: UIOptions); + span(...args: ColumnArray): void; + resetOutput(): void; + div(...args: (Column | string)[]): ColumnArray; + private shouldApplyLayoutDSL; + private applyLayoutDSL; + private colFromString; + private measurePadding; + toString(): string; + rowToString(row: ColumnArray, lines: Line[]): Line[]; + // if the full 'source' can render in + // the target line, do so. + private renderInline; + private rasterize; + private negatePadding; + private columnWidths; +} +declare function ui(opts: UIOptions): UI; +export { ui as default }; diff --git a/node_modules/@isaacs/cliui/build/lib/index.js b/node_modules/@isaacs/cliui/build/lib/index.js new file mode 100644 index 00000000..587b5ecd --- /dev/null +++ b/node_modules/@isaacs/cliui/build/lib/index.js @@ -0,0 +1,302 @@ +'use strict'; +const align = { + right: alignRight, + center: alignCenter +}; +const top = 0; +const right = 1; +const bottom = 2; +const left = 3; +export class UI { + constructor(opts) { + var _a; + this.width = opts.width; + /* c8 ignore start */ + this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true; + /* c8 ignore stop */ + this.rows = []; + } + span(...args) { + const cols = this.div(...args); + cols.span = true; + } + resetOutput() { + this.rows = []; + } + div(...args) { + if (args.length === 0) { + this.div(''); + } + if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') { + return this.applyLayoutDSL(args[0]); + } + const cols = args.map(arg => { + if (typeof arg === 'string') { + return this.colFromString(arg); + } + return arg; + }); + this.rows.push(cols); + return cols; + } + shouldApplyLayoutDSL(...args) { + return args.length === 1 && typeof args[0] === 'string' && + /[\t\n]/.test(args[0]); + } + applyLayoutDSL(str) { + const rows = str.split('\n').map(row => row.split('\t')); + let leftColumnWidth = 0; + // simple heuristic for layout, make sure the + // second column lines up along the left-hand. + // don't allow the first column to take up more + // than 50% of the screen. + rows.forEach(columns => { + if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) { + leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0])); + } + }); + // generate a table: + // replacing ' ' with padding calculations. + // using the algorithmically generated width. + rows.forEach(columns => { + this.div(...columns.map((r, i) => { + return { + text: r.trim(), + padding: this.measurePadding(r), + width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined + }; + })); + }); + return this.rows[this.rows.length - 1]; + } + colFromString(text) { + return { + text, + padding: this.measurePadding(text) + }; + } + measurePadding(str) { + // measure padding without ansi escape codes + const noAnsi = mixin.stripAnsi(str); + return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length]; + } + toString() { + const lines = []; + this.rows.forEach(row => { + this.rowToString(row, lines); + }); + // don't display any lines with the + // hidden flag set. + return lines + .filter(line => !line.hidden) + .map(line => line.text) + .join('\n'); + } + rowToString(row, lines) { + this.rasterize(row).forEach((rrow, r) => { + let str = ''; + rrow.forEach((col, c) => { + const { width } = row[c]; // the width with padding. + const wrapWidth = this.negatePadding(row[c]); // the width without padding. + let ts = col; // temporary string used during alignment/padding. + if (wrapWidth > mixin.stringWidth(col)) { + ts += ' '.repeat(wrapWidth - mixin.stringWidth(col)); + } + // align the string within its column. + if (row[c].align && row[c].align !== 'left' && this.wrap) { + const fn = align[row[c].align]; + ts = fn(ts, wrapWidth); + if (mixin.stringWidth(ts) < wrapWidth) { + /* c8 ignore start */ + const w = width || 0; + /* c8 ignore stop */ + ts += ' '.repeat(w - mixin.stringWidth(ts) - 1); + } + } + // apply border and padding to string. + const padding = row[c].padding || [0, 0, 0, 0]; + if (padding[left]) { + str += ' '.repeat(padding[left]); + } + str += addBorder(row[c], ts, '| '); + str += ts; + str += addBorder(row[c], ts, ' |'); + if (padding[right]) { + str += ' '.repeat(padding[right]); + } + // if prior row is span, try to render the + // current row on the prior line. + if (r === 0 && lines.length > 0) { + str = this.renderInline(str, lines[lines.length - 1]); + } + }); + // remove trailing whitespace. + lines.push({ + text: str.replace(/ +$/, ''), + span: row.span + }); + }); + return lines; + } + // if the full 'source' can render in + // the target line, do so. + renderInline(source, previousLine) { + const match = source.match(/^ */); + /* c8 ignore start */ + const leadingWhitespace = match ? match[0].length : 0; + /* c8 ignore stop */ + const target = previousLine.text; + const targetTextWidth = mixin.stringWidth(target.trimEnd()); + if (!previousLine.span) { + return source; + } + // if we're not applying wrapping logic, + // just always append to the span. + if (!this.wrap) { + previousLine.hidden = true; + return target + source; + } + if (leadingWhitespace < targetTextWidth) { + return source; + } + previousLine.hidden = true; + return target.trimEnd() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimStart(); + } + rasterize(row) { + const rrows = []; + const widths = this.columnWidths(row); + let wrapped; + // word wrap all columns, and create + // a data-structure that is easy to rasterize. + row.forEach((col, c) => { + // leave room for left and right padding. + col.width = widths[c]; + if (this.wrap) { + wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\n'); + } + else { + wrapped = col.text.split('\n'); + } + if (col.border) { + wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.'); + wrapped.push("'" + '-'.repeat(this.negatePadding(col) + 2) + "'"); + } + // add top and bottom padding. + if (col.padding) { + wrapped.unshift(...new Array(col.padding[top] || 0).fill('')); + wrapped.push(...new Array(col.padding[bottom] || 0).fill('')); + } + wrapped.forEach((str, r) => { + if (!rrows[r]) { + rrows.push([]); + } + const rrow = rrows[r]; + for (let i = 0; i < c; i++) { + if (rrow[i] === undefined) { + rrow.push(''); + } + } + rrow.push(str); + }); + }); + return rrows; + } + negatePadding(col) { + /* c8 ignore start */ + let wrapWidth = col.width || 0; + /* c8 ignore stop */ + if (col.padding) { + wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0); + } + if (col.border) { + wrapWidth -= 4; + } + return wrapWidth; + } + columnWidths(row) { + if (!this.wrap) { + return row.map(col => { + return col.width || mixin.stringWidth(col.text); + }); + } + let unset = row.length; + let remainingWidth = this.width; + // column widths can be set in config. + const widths = row.map(col => { + if (col.width) { + unset--; + remainingWidth -= col.width; + return col.width; + } + return undefined; + }); + // any unset widths should be calculated. + /* c8 ignore start */ + const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0; + /* c8 ignore stop */ + return widths.map((w, i) => { + if (w === undefined) { + return Math.max(unsetWidth, _minWidth(row[i])); + } + return w; + }); + } +} +function addBorder(col, ts, style) { + if (col.border) { + if (/[.']-+[.']/.test(ts)) { + return ''; + } + if (ts.trim().length !== 0) { + return style; + } + return ' '; + } + return ''; +} +// calculates the minimum width of +// a column, based on padding preferences. +function _minWidth(col) { + const padding = col.padding || []; + const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0); + if (col.border) { + return minWidth + 4; + } + return minWidth; +} +function getWindowWidth() { + /* c8 ignore start */ + if (typeof process === 'object' && process.stdout && process.stdout.columns) { + return process.stdout.columns; + } + return 80; +} +/* c8 ignore stop */ +function alignRight(str, width) { + str = str.trim(); + const strWidth = mixin.stringWidth(str); + if (strWidth < width) { + return ' '.repeat(width - strWidth) + str; + } + return str; +} +function alignCenter(str, width) { + str = str.trim(); + const strWidth = mixin.stringWidth(str); + /* c8 ignore start */ + if (strWidth >= width) { + return str; + } + /* c8 ignore stop */ + return ' '.repeat((width - strWidth) >> 1) + str; +} +let mixin; +export function cliui(opts, _mixin) { + mixin = _mixin; + return new UI({ + /* c8 ignore start */ + width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(), + wrap: opts === null || opts === void 0 ? void 0 : opts.wrap + /* c8 ignore stop */ + }); +} diff --git a/node_modules/@isaacs/cliui/index.mjs b/node_modules/@isaacs/cliui/index.mjs new file mode 100644 index 00000000..5177519a --- /dev/null +++ b/node_modules/@isaacs/cliui/index.mjs @@ -0,0 +1,14 @@ +// Bootstrap cliui with ESM dependencies: +import { cliui } from './build/lib/index.js' + +import stringWidth from 'string-width' +import stripAnsi from 'strip-ansi' +import wrap from 'wrap-ansi' + +export default function ui (opts) { + return cliui(opts, { + stringWidth, + stripAnsi, + wrap + }) +} diff --git a/node_modules/@isaacs/cliui/package.json b/node_modules/@isaacs/cliui/package.json new file mode 100644 index 00000000..7a952532 --- /dev/null +++ b/node_modules/@isaacs/cliui/package.json @@ -0,0 +1,86 @@ +{ + "name": "@isaacs/cliui", + "version": "8.0.2", + "description": "easily create complex multi-column command-line-interfaces", + "main": "build/index.cjs", + "exports": { + ".": [ + { + "import": "./index.mjs", + "require": "./build/index.cjs" + }, + "./build/index.cjs" + ] + }, + "type": "module", + "module": "./index.mjs", + "scripts": { + "check": "standardx '**/*.ts' && standardx '**/*.js' && standardx '**/*.cjs'", + "fix": "standardx --fix '**/*.ts' && standardx --fix '**/*.js' && standardx --fix '**/*.cjs'", + "pretest": "rimraf build && tsc -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs", + "test": "c8 mocha ./test/*.cjs", + "test:esm": "c8 mocha ./test/**/*.mjs", + "postest": "check", + "coverage": "c8 report --check-coverage", + "precompile": "rimraf build", + "compile": "tsc", + "postcompile": "npm run build:cjs", + "build:cjs": "rollup -c", + "prepare": "npm run compile" + }, + "repository": "yargs/cliui", + "standard": { + "ignore": [ + "**/example/**" + ], + "globals": [ + "it" + ] + }, + "keywords": [ + "cli", + "command-line", + "layout", + "design", + "console", + "wrap", + "table" + ], + "author": "Ben Coe ", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "devDependencies": { + "@types/node": "^14.0.27", + "@typescript-eslint/eslint-plugin": "^4.0.0", + "@typescript-eslint/parser": "^4.0.0", + "c8": "^7.3.0", + "chai": "^4.2.0", + "chalk": "^4.1.0", + "cross-env": "^7.0.2", + "eslint": "^7.6.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-node": "^11.1.0", + "gts": "^3.0.0", + "mocha": "^10.0.0", + "rimraf": "^3.0.2", + "rollup": "^2.23.1", + "rollup-plugin-ts": "^3.0.2", + "standardx": "^7.0.0", + "typescript": "^4.0.0" + }, + "files": [ + "build", + "index.mjs", + "!*.d.ts" + ], + "engines": { + "node": ">=12" + } +} diff --git a/node_modules/@pkgjs/parseargs/.editorconfig b/node_modules/@pkgjs/parseargs/.editorconfig new file mode 100644 index 00000000..b1401639 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/.editorconfig @@ -0,0 +1,14 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Copied from Node.js to ease compatibility in PR. +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single diff --git a/node_modules/@pkgjs/parseargs/CHANGELOG.md b/node_modules/@pkgjs/parseargs/CHANGELOG.md new file mode 100644 index 00000000..2adc7d32 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/CHANGELOG.md @@ -0,0 +1,147 @@ +# Changelog + +## [0.11.0](https://github.com/pkgjs/parseargs/compare/v0.10.0...v0.11.0) (2022-10-08) + + +### Features + +* add `default` option parameter ([#142](https://github.com/pkgjs/parseargs/issues/142)) ([cd20847](https://github.com/pkgjs/parseargs/commit/cd20847a00b2f556aa9c085ac83b942c60868ec1)) + +## [0.10.0](https://github.com/pkgjs/parseargs/compare/v0.9.1...v0.10.0) (2022-07-21) + + +### Features + +* add parsed meta-data to returned properties ([#129](https://github.com/pkgjs/parseargs/issues/129)) ([91bfb4d](https://github.com/pkgjs/parseargs/commit/91bfb4d3f7b6937efab1b27c91c45d1205f1497e)) + +## [0.9.1](https://github.com/pkgjs/parseargs/compare/v0.9.0...v0.9.1) (2022-06-20) + + +### Bug Fixes + +* **runtime:** support node 14+ ([#135](https://github.com/pkgjs/parseargs/issues/135)) ([6a1c5a6](https://github.com/pkgjs/parseargs/commit/6a1c5a6f7cadf2f035e004027e2742e3c4ce554b)) + +## [0.9.0](https://github.com/pkgjs/parseargs/compare/v0.8.0...v0.9.0) (2022-05-23) + + +### ⚠ BREAKING CHANGES + +* drop handling of electron arguments (#121) + +### Code Refactoring + +* drop handling of electron arguments ([#121](https://github.com/pkgjs/parseargs/issues/121)) ([a2ffd53](https://github.com/pkgjs/parseargs/commit/a2ffd537c244a062371522b955acb45a404fc9f2)) + +## [0.8.0](https://github.com/pkgjs/parseargs/compare/v0.7.1...v0.8.0) (2022-05-16) + + +### ⚠ BREAKING CHANGES + +* switch type:string option arguments to greedy, but with error for suspect cases in strict mode (#88) +* positionals now opt-in when strict:true (#116) +* create result.values with null prototype (#111) + +### Features + +* create result.values with null prototype ([#111](https://github.com/pkgjs/parseargs/issues/111)) ([9d539c3](https://github.com/pkgjs/parseargs/commit/9d539c3d57f269c160e74e0656ad4fa84ff92ec2)) +* positionals now opt-in when strict:true ([#116](https://github.com/pkgjs/parseargs/issues/116)) ([3643338](https://github.com/pkgjs/parseargs/commit/364333826b746e8a7dc5505b4b22fd19ac51df3b)) +* switch type:string option arguments to greedy, but with error for suspect cases in strict mode ([#88](https://github.com/pkgjs/parseargs/issues/88)) ([c2b5e72](https://github.com/pkgjs/parseargs/commit/c2b5e72161991dfdc535909f1327cc9b970fe7e8)) + +### [0.7.1](https://github.com/pkgjs/parseargs/compare/v0.7.0...v0.7.1) (2022-04-15) + + +### Bug Fixes + +* resist pollution ([#106](https://github.com/pkgjs/parseargs/issues/106)) ([ecf2dec](https://github.com/pkgjs/parseargs/commit/ecf2dece0a9f2a76d789384d5d71c68ffe64022a)) + +## [0.7.0](https://github.com/pkgjs/parseargs/compare/v0.6.0...v0.7.0) (2022-04-13) + + +### Features + +* Add strict mode to parser ([#74](https://github.com/pkgjs/parseargs/issues/74)) ([8267d02](https://github.com/pkgjs/parseargs/commit/8267d02083a87b8b8a71fcce08348d1e031ea91c)) + +## [0.6.0](https://github.com/pkgjs/parseargs/compare/v0.5.0...v0.6.0) (2022-04-11) + + +### ⚠ BREAKING CHANGES + +* rework results to remove redundant `flags` property and store value true for boolean options (#83) +* switch to existing ERR_INVALID_ARG_VALUE (#97) + +### Code Refactoring + +* rework results to remove redundant `flags` property and store value true for boolean options ([#83](https://github.com/pkgjs/parseargs/issues/83)) ([be153db](https://github.com/pkgjs/parseargs/commit/be153dbed1d488cb7b6e27df92f601ba7337713d)) +* switch to existing ERR_INVALID_ARG_VALUE ([#97](https://github.com/pkgjs/parseargs/issues/97)) ([084a23f](https://github.com/pkgjs/parseargs/commit/084a23f9fde2da030b159edb1c2385f24579ce40)) + +## [0.5.0](https://github.com/pkgjs/parseargs/compare/v0.4.0...v0.5.0) (2022-04-10) + + +### ⚠ BREAKING CHANGES + +* Require type to be specified for each supplied option (#95) + +### Features + +* Require type to be specified for each supplied option ([#95](https://github.com/pkgjs/parseargs/issues/95)) ([02cd018](https://github.com/pkgjs/parseargs/commit/02cd01885b8aaa59f2db8308f2d4479e64340068)) + +## [0.4.0](https://github.com/pkgjs/parseargs/compare/v0.3.0...v0.4.0) (2022-03-12) + + +### ⚠ BREAKING CHANGES + +* parsing, revisit short option groups, add support for combined short and value (#75) +* restructure configuration to take options bag (#63) + +### Code Refactoring + +* parsing, revisit short option groups, add support for combined short and value ([#75](https://github.com/pkgjs/parseargs/issues/75)) ([a92600f](https://github.com/pkgjs/parseargs/commit/a92600fa6c214508ab1e016fa55879a314f541af)) +* restructure configuration to take options bag ([#63](https://github.com/pkgjs/parseargs/issues/63)) ([b412095](https://github.com/pkgjs/parseargs/commit/b4120957d90e809ee8b607b06e747d3e6a6b213e)) + +## [0.3.0](https://github.com/pkgjs/parseargs/compare/v0.2.0...v0.3.0) (2022-02-06) + + +### Features + +* **parser:** support short-option groups ([#59](https://github.com/pkgjs/parseargs/issues/59)) ([882067b](https://github.com/pkgjs/parseargs/commit/882067bc2d7cbc6b796f8e5a079a99bc99d4e6ba)) + +## [0.2.0](https://github.com/pkgjs/parseargs/compare/v0.1.1...v0.2.0) (2022-02-05) + + +### Features + +* basic support for shorts ([#50](https://github.com/pkgjs/parseargs/issues/50)) ([a2f36d7](https://github.com/pkgjs/parseargs/commit/a2f36d7da4145af1c92f76806b7fe2baf6beeceb)) + + +### Bug Fixes + +* always store value for a=b ([#43](https://github.com/pkgjs/parseargs/issues/43)) ([a85e8dc](https://github.com/pkgjs/parseargs/commit/a85e8dc06379fd2696ee195cc625de8fac6aee42)) +* support single dash as positional ([#49](https://github.com/pkgjs/parseargs/issues/49)) ([d795bf8](https://github.com/pkgjs/parseargs/commit/d795bf877d068fd67aec381f30b30b63f97109ad)) + +### [0.1.1](https://github.com/pkgjs/parseargs/compare/v0.1.0...v0.1.1) (2022-01-25) + + +### Bug Fixes + +* only use arrays in results for multiples ([#42](https://github.com/pkgjs/parseargs/issues/42)) ([c357584](https://github.com/pkgjs/parseargs/commit/c357584847912506319ed34a0840080116f4fd65)) + +## 0.1.0 (2022-01-22) + + +### Features + +* expand scenarios covered by default arguments for environments ([#20](https://github.com/pkgjs/parseargs/issues/20)) ([582ada7](https://github.com/pkgjs/parseargs/commit/582ada7be0eca3a73d6e0bd016e7ace43449fa4c)) +* update readme and include contributing guidelines ([8edd6fc](https://github.com/pkgjs/parseargs/commit/8edd6fc863cd705f6fac732724159ebe8065a2b0)) + + +### Bug Fixes + +* do not strip excess leading dashes on long option names ([#21](https://github.com/pkgjs/parseargs/issues/21)) ([f848590](https://github.com/pkgjs/parseargs/commit/f848590ebf3249ed5979ff47e003fa6e1a8ec5c0)) +* name & readme ([3f057c1](https://github.com/pkgjs/parseargs/commit/3f057c1b158a1bdbe878c64b57460c58e56e465f)) +* package.json values ([9bac300](https://github.com/pkgjs/parseargs/commit/9bac300e00cd76c77076bf9e75e44f8929512da9)) +* update readme name ([957d8d9](https://github.com/pkgjs/parseargs/commit/957d8d96e1dcb48297c0a14345d44c0123b2883e)) + + +### Build System + +* first release as minor ([421c6e2](https://github.com/pkgjs/parseargs/commit/421c6e2569a8668ad14fac5a5af5be60479a7571)) diff --git a/node_modules/@pkgjs/parseargs/LICENSE b/node_modules/@pkgjs/parseargs/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/node_modules/@pkgjs/parseargs/LICENSE @@ -0,0 +1,201 @@ + 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 [yyyy] [name of copyright owner] + + 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/node_modules/@pkgjs/parseargs/README.md b/node_modules/@pkgjs/parseargs/README.md new file mode 100644 index 00000000..0a041927 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/README.md @@ -0,0 +1,413 @@ + +# parseArgs + +[![Coverage][coverage-image]][coverage-url] + +Polyfill of `util.parseArgs()` + +## `util.parseArgs([config])` + + + +> Stability: 1 - Experimental + +* `config` {Object} Used to provide arguments for parsing and to configure + the parser. `config` supports the following properties: + * `args` {string\[]} array of argument strings. **Default:** `process.argv` + with `execPath` and `filename` removed. + * `options` {Object} Used to describe arguments known to the parser. + Keys of `options` are the long names of options and values are an + {Object} accepting the following properties: + * `type` {string} Type of argument, which must be either `boolean` or `string`. + * `multiple` {boolean} Whether this option can be provided multiple + times. If `true`, all values will be collected in an array. If + `false`, values for the option are last-wins. **Default:** `false`. + * `short` {string} A single character alias for the option. + * `default` {string | boolean | string\[] | boolean\[]} The default option + value when it is not set by args. It must be of the same type as the + the `type` property. When `multiple` is `true`, it must be an array. + * `strict` {boolean} Should an error be thrown when unknown arguments + are encountered, or when arguments are passed that do not match the + `type` configured in `options`. + **Default:** `true`. + * `allowPositionals` {boolean} Whether this command accepts positional + arguments. + **Default:** `false` if `strict` is `true`, otherwise `true`. + * `tokens` {boolean} Return the parsed tokens. This is useful for extending + the built-in behavior, from adding additional checks through to reprocessing + the tokens in different ways. + **Default:** `false`. + +* Returns: {Object} The parsed command line arguments: + * `values` {Object} A mapping of parsed option names with their {string} + or {boolean} values. + * `positionals` {string\[]} Positional arguments. + * `tokens` {Object\[] | undefined} See [parseArgs tokens](#parseargs-tokens) + section. Only returned if `config` includes `tokens: true`. + +Provides a higher level API for command-line argument parsing than interacting +with `process.argv` directly. Takes a specification for the expected arguments +and returns a structured object with the parsed options and positionals. + +```mjs +import { parseArgs } from 'node:util'; +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); +// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] +``` + +```cjs +const { parseArgs } = require('node:util'); +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); +// Prints: [Object: null prototype] { foo: true, bar: 'b' } [] +``` + +`util.parseArgs` is experimental and behavior may change. Join the +conversation in [pkgjs/parseargs][] to contribute to the design. + +### `parseArgs` `tokens` + +Detailed parse information is available for adding custom behaviours by +specifying `tokens: true` in the configuration. +The returned tokens have properties describing: + +* all tokens + * `kind` {string} One of 'option', 'positional', or 'option-terminator'. + * `index` {number} Index of element in `args` containing token. So the + source argument for a token is `args[token.index]`. +* option tokens + * `name` {string} Long name of option. + * `rawName` {string} How option used in args, like `-f` of `--foo`. + * `value` {string | undefined} Option value specified in args. + Undefined for boolean options. + * `inlineValue` {boolean | undefined} Whether option value specified inline, + like `--foo=bar`. +* positional tokens + * `value` {string} The value of the positional argument in args (i.e. `args[index]`). +* option-terminator token + +The returned tokens are in the order encountered in the input args. Options +that appear more than once in args produce a token for each use. Short option +groups like `-xy` expand to a token for each option. So `-xxx` produces +three tokens. + +For example to use the returned tokens to add support for a negated option +like `--no-color`, the tokens can be reprocessed to change the value stored +for the negated option. + +```mjs +import { parseArgs } from 'node:util'; + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); +``` + +```cjs +const { parseArgs } = require('node:util'); + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); +``` + +Example usage showing negated options, and when an option is used +multiple ways then last one wins. + +```console +$ node negate.js +{ logfile: 'default.log', color: undefined } +$ node negate.js --no-logfile --no-color +{ logfile: false, color: false } +$ node negate.js --logfile=test.log --color +{ logfile: 'test.log', color: true } +$ node negate.js --no-logfile --logfile=test.log --color --no-color +{ logfile: 'test.log', color: false } +``` + +----- + + +## Table of Contents +- [`util.parseArgs([config])`](#utilparseargsconfig) +- [Scope](#scope) +- [Version Matchups](#version-matchups) +- [🚀 Getting Started](#-getting-started) +- [🙌 Contributing](#-contributing) +- [💡 `process.mainArgs` Proposal](#-processmainargs-proposal) + - [Implementation:](#implementation) +- [📃 Examples](#-examples) +- [F.A.Qs](#faqs) +- [Links & Resources](#links--resources) + +----- + +## Scope + +It is already possible to build great arg parsing modules on top of what Node.js provides; the prickly API is abstracted away by these modules. Thus, process.parseArgs() is not necessarily intended for library authors; it is intended for developers of simple CLI tools, ad-hoc scripts, deployed Node.js applications, and learning materials. + +It is exceedingly difficult to provide an API which would both be friendly to these Node.js users while being extensible enough for libraries to build upon. We chose to prioritize these use cases because these are currently not well-served by Node.js' API. + +---- + +## Version Matchups + +| Node.js | @pkgjs/parseArgs | +| -- | -- | +| [v18.3.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [v0.9.1](https://github.com/pkgjs/parseargs/tree/v0.9.1#utilparseargsconfig) | +| [v16.17.0](https://nodejs.org/dist/latest-v16.x/docs/api/util.html#utilparseargsconfig), [v18.7.0](https://nodejs.org/docs/latest-v18.x/api/util.html#utilparseargsconfig) | [0.10.0](https://github.com/pkgjs/parseargs/tree/v0.10.0#utilparseargsconfig) | + +---- + +## 🚀 Getting Started + +1. **Install dependencies.** + + ```bash + npm install + ``` + +2. **Open the index.js file and start editing!** + +3. **Test your code by calling parseArgs through our test file** + + ```bash + npm test + ``` + +---- + +## 🙌 Contributing + +Any person who wants to contribute to the initiative is welcome! Please first read the [Contributing Guide](CONTRIBUTING.md) + +Additionally, reading the [`Examples w/ Output`](#-examples-w-output) section of this document will be the best way to familiarize yourself with the target expected behavior for parseArgs() once it is fully implemented. + +This package was implemented using [tape](https://www.npmjs.com/package/tape) as its test harness. + +---- + +## 💡 `process.mainArgs` Proposal + +> Note: This can be moved forward independently of the `util.parseArgs()` proposal/work. + +### Implementation: + +```javascript +process.mainArgs = process.argv.slice(process._exec ? 1 : 2) +``` + +---- + +## 📃 Examples + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// specify the options that may be used +const options = { + foo: { type: 'string'}, + bar: { type: 'boolean' }, +}; +const args = ['--foo=a', '--bar']; +const { values, positionals } = parseArgs({ args, options }); +// values = { foo: 'a', bar: true } +// positionals = [] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// type:string & multiple +const options = { + foo: { + type: 'string', + multiple: true, + }, +}; +const args = ['--foo=a', '--foo', 'b']; +const { values, positionals } = parseArgs({ args, options }); +// values = { foo: [ 'a', 'b' ] } +// positionals = [] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// shorts +const options = { + foo: { + short: 'f', + type: 'boolean' + }, +}; +const args = ['-f', 'b']; +const { values, positionals } = parseArgs({ args, options, allowPositionals: true }); +// values = { foo: true } +// positionals = ['b'] +``` + +```js +const { parseArgs } = require('@pkgjs/parseargs'); +// unconfigured +const options = {}; +const args = ['-f', '--foo=a', '--bar', 'b']; +const { values, positionals } = parseArgs({ strict: false, args, options, allowPositionals: true }); +// values = { f: true, foo: 'a', bar: true } +// positionals = ['b'] +``` + +---- + +## F.A.Qs + +- Is `cmd --foo=bar baz` the same as `cmd baz --foo=bar`? + - yes +- Does the parser execute a function? + - no +- Does the parser execute one of several functions, depending on input? + - no +- Can subcommands take options that are distinct from the main command? + - no +- Does it output generated help when no options match? + - no +- Does it generated short usage? Like: `usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]` + - no (no usage/help at all) +- Does the user provide the long usage text? For each option? For the whole command? + - no +- Do subcommands (if implemented) have their own usage output? + - no +- Does usage print if the user runs `cmd --help`? + - no +- Does it set `process.exitCode`? + - no +- Does usage print to stderr or stdout? + - N/A +- Does it check types? (Say, specify that an option is a boolean, number, etc.) + - no +- Can an option have more than one type? (string or false, for example) + - no +- Can the user define a type? (Say, `type: path` to call `path.resolve()` on the argument.) + - no +- Does a `--foo=0o22` mean 0, 22, 18, or "0o22"? + - `"0o22"` +- Does it coerce types? + - no +- Does `--no-foo` coerce to `--foo=false`? For all options? Only boolean options? + - no, it sets `{values:{'no-foo': true}}` +- Is `--foo` the same as `--foo=true`? Only for known booleans? Only at the end? + - no, they are not the same. There is no special handling of `true` as a value so it is just another string. +- Does it read environment variables? Ie, is `FOO=1 cmd` the same as `cmd --foo=1`? + - no +- Do unknown arguments raise an error? Are they parsed? Are they treated as positional arguments? + - no, they are parsed, not treated as positionals +- Does `--` signal the end of options? + - yes +- Is `--` included as a positional? + - no +- Is `program -- foo` the same as `program foo`? + - yes, both store `{positionals:['foo']}` +- Does the API specify whether a `--` was present/relevant? + - no +- Is `-bar` the same as `--bar`? + - no, `-bar` is a short option or options, with expansion logic that follows the + [Utility Syntax Guidelines in POSIX.1-2017](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). `-bar` expands to `-b`, `-a`, `-r`. +- Is `---foo` the same as `--foo`? + - no + - the first is a long option named `'-foo'` + - the second is a long option named `'foo'` +- Is `-` a positional? ie, `bash some-test.sh | tap -` + - yes + +## Links & Resources + +* [Initial Tooling Issue](https://github.com/nodejs/tooling/issues/19) +* [Initial Proposal](https://github.com/nodejs/node/pull/35015) +* [parseArgs Proposal](https://github.com/nodejs/node/pull/42675) + +[coverage-image]: https://img.shields.io/nycrc/pkgjs/parseargs +[coverage-url]: https://github.com/pkgjs/parseargs/blob/main/.nycrc +[pkgjs/parseargs]: https://github.com/pkgjs/parseargs diff --git a/node_modules/@pkgjs/parseargs/examples/is-default-value.js b/node_modules/@pkgjs/parseargs/examples/is-default-value.js new file mode 100644 index 00000000..0a67972b --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/is-default-value.js @@ -0,0 +1,25 @@ +'use strict'; + +// This example shows how to understand if a default value is used or not. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + file: { short: 'f', type: 'string', default: 'FOO' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const isFileDefault = !tokens.some((token) => token.kind === 'option' && + token.name === 'file' +); + +console.log(values); +console.log(`Is the file option [${values.file}] the default value? ${isFileDefault}`); + +// Try the following: +// node is-default-value.js +// node is-default-value.js -f FILE +// node is-default-value.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js b/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js new file mode 100644 index 00000000..943e643e --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js @@ -0,0 +1,35 @@ +'use strict'; + +// This is an example of using tokens to add a custom behaviour. +// +// Require the use of `=` for long options and values by blocking +// the use of space separated values. +// So allow `--foo=bar`, and not allow `--foo bar`. +// +// Note: this is not a common behaviour, most CLIs allow both forms. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + file: { short: 'f', type: 'string' }, + log: { type: 'string' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const badToken = tokens.find((token) => token.kind === 'option' && + token.value != null && + token.rawName.startsWith('--') && + !token.inlineValue +); +if (badToken) { + throw new Error(`Option value for '${badToken.rawName}' must be inline, like '${badToken.rawName}=VALUE'`); +} + +console.log(values); + +// Try the following: +// node limit-long-syntax.js -f FILE --log=LOG +// node limit-long-syntax.js --file FILE diff --git a/node_modules/@pkgjs/parseargs/examples/negate.js b/node_modules/@pkgjs/parseargs/examples/negate.js new file mode 100644 index 00000000..b6634690 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/negate.js @@ -0,0 +1,43 @@ +'use strict'; + +// This example is used in the documentation. + +// How might I add my own support for --no-foo? + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + 'color': { type: 'boolean' }, + 'no-color': { type: 'boolean' }, + 'logfile': { type: 'string' }, + 'no-logfile': { type: 'boolean' }, +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +// Reprocess the option tokens and overwrite the returned values. +tokens + .filter((token) => token.kind === 'option') + .forEach((token) => { + if (token.name.startsWith('no-')) { + // Store foo:false for --no-foo + const positiveName = token.name.slice(3); + values[positiveName] = false; + delete values[token.name]; + } else { + // Resave value so last one wins if both --foo and --no-foo. + values[token.name] = token.value ?? true; + } + }); + +const color = values.color; +const logfile = values.logfile ?? 'default.log'; + +console.log({ logfile, color }); + +// Try the following: +// node negate.js +// node negate.js --no-logfile --no-color +// negate.js --logfile=test.log --color +// node negate.js --no-logfile --logfile=test.log --color --no-color diff --git a/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js b/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js new file mode 100644 index 00000000..0c324688 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js @@ -0,0 +1,31 @@ +'use strict'; + +// This is an example of using tokens to add a custom behaviour. +// +// Throw an error if an option is used more than once. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const options = { + ding: { type: 'boolean', short: 'd' }, + beep: { type: 'boolean', short: 'b' } +}; +const { values, tokens } = parseArgs({ options, tokens: true }); + +const seenBefore = new Set(); +tokens.forEach((token) => { + if (token.kind !== 'option') return; + if (seenBefore.has(token.name)) { + throw new Error(`option '${token.name}' used multiple times`); + } + seenBefore.add(token.name); +}); + +console.log(values); + +// Try the following: +// node no-repeated-options --ding --beep +// node no-repeated-options --beep -b +// node no-repeated-options -ddd diff --git a/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs b/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs new file mode 100644 index 00000000..8ab7367b --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs @@ -0,0 +1,41 @@ +// This is an example of using tokens to add a custom behaviour. +// +// This adds a option order check so that --some-unstable-option +// may only be used after --enable-experimental-options +// +// Note: this is not a common behaviour, the order of different options +// does not usually matter. + +import { parseArgs } from '../index.js'; + +function findTokenIndex(tokens, target) { + return tokens.findIndex((token) => token.kind === 'option' && + token.name === target + ); +} + +const experimentalName = 'enable-experimental-options'; +const unstableName = 'some-unstable-option'; + +const options = { + [experimentalName]: { type: 'boolean' }, + [unstableName]: { type: 'boolean' }, +}; + +const { values, tokens } = parseArgs({ options, tokens: true }); + +const experimentalIndex = findTokenIndex(tokens, experimentalName); +const unstableIndex = findTokenIndex(tokens, unstableName); +if (unstableIndex !== -1 && + ((experimentalIndex === -1) || (unstableIndex < experimentalIndex))) { + throw new Error(`'--${experimentalName}' must be specified before '--${unstableName}'`); +} + +console.log(values); + +/* eslint-disable max-len */ +// Try the following: +// node ordered-options.mjs +// node ordered-options.mjs --some-unstable-option +// node ordered-options.mjs --some-unstable-option --enable-experimental-options +// node ordered-options.mjs --enable-experimental-options --some-unstable-option diff --git a/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js b/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js new file mode 100644 index 00000000..eff04c2a --- /dev/null +++ b/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js @@ -0,0 +1,26 @@ +'use strict'; + +// This example is used in the documentation. + +// 1. const { parseArgs } = require('node:util'); // from node +// 2. const { parseArgs } = require('@pkgjs/parseargs'); // from package +const { parseArgs } = require('..'); // in repo + +const args = ['-f', '--bar', 'b']; +const options = { + foo: { + type: 'boolean', + short: 'f' + }, + bar: { + type: 'string' + } +}; +const { + values, + positionals +} = parseArgs({ args, options }); +console.log(values, positionals); + +// Try the following: +// node simple-hard-coded.js diff --git a/node_modules/@pkgjs/parseargs/index.js b/node_modules/@pkgjs/parseargs/index.js new file mode 100644 index 00000000..b1004c7b --- /dev/null +++ b/node_modules/@pkgjs/parseargs/index.js @@ -0,0 +1,396 @@ +'use strict'; + +const { + ArrayPrototypeForEach, + ArrayPrototypeIncludes, + ArrayPrototypeMap, + ArrayPrototypePush, + ArrayPrototypePushApply, + ArrayPrototypeShift, + ArrayPrototypeSlice, + ArrayPrototypeUnshiftApply, + ObjectEntries, + ObjectPrototypeHasOwnProperty: ObjectHasOwn, + StringPrototypeCharAt, + StringPrototypeIndexOf, + StringPrototypeSlice, + StringPrototypeStartsWith, +} = require('./internal/primordials'); + +const { + validateArray, + validateBoolean, + validateBooleanArray, + validateObject, + validateString, + validateStringArray, + validateUnion, +} = require('./internal/validators'); + +const { + kEmptyObject, +} = require('./internal/util'); + +const { + findLongOptionForShort, + isLoneLongOption, + isLoneShortOption, + isLongOptionAndValue, + isOptionValue, + isOptionLikeValue, + isShortOptionAndValue, + isShortOptionGroup, + useDefaultValueOption, + objectGetOwn, + optionsGetOwn, +} = require('./utils'); + +const { + codes: { + ERR_INVALID_ARG_VALUE, + ERR_PARSE_ARGS_INVALID_OPTION_VALUE, + ERR_PARSE_ARGS_UNKNOWN_OPTION, + ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, + }, +} = require('./internal/errors'); + +function getMainArgs() { + // Work out where to slice process.argv for user supplied arguments. + + // Check node options for scenarios where user CLI args follow executable. + const execArgv = process.execArgv; + if (ArrayPrototypeIncludes(execArgv, '-e') || + ArrayPrototypeIncludes(execArgv, '--eval') || + ArrayPrototypeIncludes(execArgv, '-p') || + ArrayPrototypeIncludes(execArgv, '--print')) { + return ArrayPrototypeSlice(process.argv, 1); + } + + // Normally first two arguments are executable and script, then CLI arguments + return ArrayPrototypeSlice(process.argv, 2); +} + +/** + * In strict mode, throw for possible usage errors like --foo --bar + * + * @param {object} token - from tokens as available from parseArgs + */ +function checkOptionLikeValue(token) { + if (!token.inlineValue && isOptionLikeValue(token.value)) { + // Only show short example if user used short option. + const example = StringPrototypeStartsWith(token.rawName, '--') ? + `'${token.rawName}=-XYZ'` : + `'--${token.name}=-XYZ' or '${token.rawName}-XYZ'`; + const errorMessage = `Option '${token.rawName}' argument is ambiguous. +Did you forget to specify the option argument for '${token.rawName}'? +To specify an option argument starting with a dash use ${example}.`; + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(errorMessage); + } +} + +/** + * In strict mode, throw for usage errors. + * + * @param {object} config - from config passed to parseArgs + * @param {object} token - from tokens as available from parseArgs + */ +function checkOptionUsage(config, token) { + if (!ObjectHasOwn(config.options, token.name)) { + throw new ERR_PARSE_ARGS_UNKNOWN_OPTION( + token.rawName, config.allowPositionals); + } + + const short = optionsGetOwn(config.options, token.name, 'short'); + const shortAndLong = `${short ? `-${short}, ` : ''}--${token.name}`; + const type = optionsGetOwn(config.options, token.name, 'type'); + if (type === 'string' && typeof token.value !== 'string') { + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong} ' argument missing`); + } + // (Idiomatic test for undefined||null, expecting undefined.) + if (type === 'boolean' && token.value != null) { + throw new ERR_PARSE_ARGS_INVALID_OPTION_VALUE(`Option '${shortAndLong}' does not take an argument`); + } +} + + +/** + * Store the option value in `values`. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {string|undefined} optionValue - value from user args + * @param {object} options - option configs, from parseArgs({ options }) + * @param {object} values - option values returned in `values` by parseArgs + */ +function storeOption(longOption, optionValue, options, values) { + if (longOption === '__proto__') { + return; // No. Just no. + } + + // We store based on the option value rather than option type, + // preserving the users intent for author to deal with. + const newValue = optionValue ?? true; + if (optionsGetOwn(options, longOption, 'multiple')) { + // Always store value in array, including for boolean. + // values[longOption] starts out not present, + // first value is added as new array [newValue], + // subsequent values are pushed to existing array. + // (note: values has null prototype, so simpler usage) + if (values[longOption]) { + ArrayPrototypePush(values[longOption], newValue); + } else { + values[longOption] = [newValue]; + } + } else { + values[longOption] = newValue; + } +} + +/** + * Store the default option value in `values`. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {string + * | boolean + * | string[] + * | boolean[]} optionValue - default value from option config + * @param {object} values - option values returned in `values` by parseArgs + */ +function storeDefaultOption(longOption, optionValue, values) { + if (longOption === '__proto__') { + return; // No. Just no. + } + + values[longOption] = optionValue; +} + +/** + * Process args and turn into identified tokens: + * - option (along with value, if any) + * - positional + * - option-terminator + * + * @param {string[]} args - from parseArgs({ args }) or mainArgs + * @param {object} options - option configs, from parseArgs({ options }) + */ +function argsToTokens(args, options) { + const tokens = []; + let index = -1; + let groupCount = 0; + + const remainingArgs = ArrayPrototypeSlice(args); + while (remainingArgs.length > 0) { + const arg = ArrayPrototypeShift(remainingArgs); + const nextArg = remainingArgs[0]; + if (groupCount > 0) + groupCount--; + else + index++; + + // Check if `arg` is an options terminator. + // Guideline 10 in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html + if (arg === '--') { + // Everything after a bare '--' is considered a positional argument. + ArrayPrototypePush(tokens, { kind: 'option-terminator', index }); + ArrayPrototypePushApply( + tokens, ArrayPrototypeMap(remainingArgs, (arg) => { + return { kind: 'positional', index: ++index, value: arg }; + }) + ); + break; // Finished processing args, leave while loop. + } + + if (isLoneShortOption(arg)) { + // e.g. '-f' + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + let value; + let inlineValue; + if (optionsGetOwn(options, longOption, 'type') === 'string' && + isOptionValue(nextArg)) { + // e.g. '-f', 'bar' + value = ArrayPrototypeShift(remainingArgs); + inlineValue = false; + } + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: arg, + index, value, inlineValue }); + if (value != null) ++index; + continue; + } + + if (isShortOptionGroup(arg, options)) { + // Expand -fXzy to -f -X -z -y + const expanded = []; + for (let index = 1; index < arg.length; index++) { + const shortOption = StringPrototypeCharAt(arg, index); + const longOption = findLongOptionForShort(shortOption, options); + if (optionsGetOwn(options, longOption, 'type') !== 'string' || + index === arg.length - 1) { + // Boolean option, or last short in group. Well formed. + ArrayPrototypePush(expanded, `-${shortOption}`); + } else { + // String option in middle. Yuck. + // Expand -abfFILE to -a -b -fFILE + ArrayPrototypePush(expanded, `-${StringPrototypeSlice(arg, index)}`); + break; // finished short group + } + } + ArrayPrototypeUnshiftApply(remainingArgs, expanded); + groupCount = expanded.length; + continue; + } + + if (isShortOptionAndValue(arg, options)) { + // e.g. -fFILE + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + const value = StringPrototypeSlice(arg, 2); + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: `-${shortOption}`, + index, value, inlineValue: true }); + continue; + } + + if (isLoneLongOption(arg)) { + // e.g. '--foo' + const longOption = StringPrototypeSlice(arg, 2); + let value; + let inlineValue; + if (optionsGetOwn(options, longOption, 'type') === 'string' && + isOptionValue(nextArg)) { + // e.g. '--foo', 'bar' + value = ArrayPrototypeShift(remainingArgs); + inlineValue = false; + } + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: arg, + index, value, inlineValue }); + if (value != null) ++index; + continue; + } + + if (isLongOptionAndValue(arg)) { + // e.g. --foo=bar + const equalIndex = StringPrototypeIndexOf(arg, '='); + const longOption = StringPrototypeSlice(arg, 2, equalIndex); + const value = StringPrototypeSlice(arg, equalIndex + 1); + ArrayPrototypePush( + tokens, + { kind: 'option', name: longOption, rawName: `--${longOption}`, + index, value, inlineValue: true }); + continue; + } + + ArrayPrototypePush(tokens, { kind: 'positional', index, value: arg }); + } + + return tokens; +} + +const parseArgs = (config = kEmptyObject) => { + const args = objectGetOwn(config, 'args') ?? getMainArgs(); + const strict = objectGetOwn(config, 'strict') ?? true; + const allowPositionals = objectGetOwn(config, 'allowPositionals') ?? !strict; + const returnTokens = objectGetOwn(config, 'tokens') ?? false; + const options = objectGetOwn(config, 'options') ?? { __proto__: null }; + // Bundle these up for passing to strict-mode checks. + const parseConfig = { args, strict, options, allowPositionals }; + + // Validate input configuration. + validateArray(args, 'args'); + validateBoolean(strict, 'strict'); + validateBoolean(allowPositionals, 'allowPositionals'); + validateBoolean(returnTokens, 'tokens'); + validateObject(options, 'options'); + ArrayPrototypeForEach( + ObjectEntries(options), + ({ 0: longOption, 1: optionConfig }) => { + validateObject(optionConfig, `options.${longOption}`); + + // type is required + const optionType = objectGetOwn(optionConfig, 'type'); + validateUnion(optionType, `options.${longOption}.type`, ['string', 'boolean']); + + if (ObjectHasOwn(optionConfig, 'short')) { + const shortOption = optionConfig.short; + validateString(shortOption, `options.${longOption}.short`); + if (shortOption.length !== 1) { + throw new ERR_INVALID_ARG_VALUE( + `options.${longOption}.short`, + shortOption, + 'must be a single character' + ); + } + } + + const multipleOption = objectGetOwn(optionConfig, 'multiple'); + if (ObjectHasOwn(optionConfig, 'multiple')) { + validateBoolean(multipleOption, `options.${longOption}.multiple`); + } + + const defaultValue = objectGetOwn(optionConfig, 'default'); + if (defaultValue !== undefined) { + let validator; + switch (optionType) { + case 'string': + validator = multipleOption ? validateStringArray : validateString; + break; + + case 'boolean': + validator = multipleOption ? validateBooleanArray : validateBoolean; + break; + } + validator(defaultValue, `options.${longOption}.default`); + } + } + ); + + // Phase 1: identify tokens + const tokens = argsToTokens(args, options); + + // Phase 2: process tokens into parsed option values and positionals + const result = { + values: { __proto__: null }, + positionals: [], + }; + if (returnTokens) { + result.tokens = tokens; + } + ArrayPrototypeForEach(tokens, (token) => { + if (token.kind === 'option') { + if (strict) { + checkOptionUsage(parseConfig, token); + checkOptionLikeValue(token); + } + storeOption(token.name, token.value, options, result.values); + } else if (token.kind === 'positional') { + if (!allowPositionals) { + throw new ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL(token.value); + } + ArrayPrototypePush(result.positionals, token.value); + } + }); + + // Phase 3: fill in default values for missing args + ArrayPrototypeForEach(ObjectEntries(options), ({ 0: longOption, + 1: optionConfig }) => { + const mustSetDefault = useDefaultValueOption(longOption, + optionConfig, + result.values); + if (mustSetDefault) { + storeDefaultOption(longOption, + objectGetOwn(optionConfig, 'default'), + result.values); + } + }); + + + return result; +}; + +module.exports = { + parseArgs, +}; diff --git a/node_modules/@pkgjs/parseargs/internal/errors.js b/node_modules/@pkgjs/parseargs/internal/errors.js new file mode 100644 index 00000000..e1b237b5 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/errors.js @@ -0,0 +1,47 @@ +'use strict'; + +class ERR_INVALID_ARG_TYPE extends TypeError { + constructor(name, expected, actual) { + super(`${name} must be ${expected} got ${actual}`); + this.code = 'ERR_INVALID_ARG_TYPE'; + } +} + +class ERR_INVALID_ARG_VALUE extends TypeError { + constructor(arg1, arg2, expected) { + super(`The property ${arg1} ${expected}. Received '${arg2}'`); + this.code = 'ERR_INVALID_ARG_VALUE'; + } +} + +class ERR_PARSE_ARGS_INVALID_OPTION_VALUE extends Error { + constructor(message) { + super(message); + this.code = 'ERR_PARSE_ARGS_INVALID_OPTION_VALUE'; + } +} + +class ERR_PARSE_ARGS_UNKNOWN_OPTION extends Error { + constructor(option, allowPositionals) { + const suggestDashDash = allowPositionals ? `. To specify a positional argument starting with a '-', place it at the end of the command after '--', as in '-- ${JSON.stringify(option)}` : ''; + super(`Unknown option '${option}'${suggestDashDash}`); + this.code = 'ERR_PARSE_ARGS_UNKNOWN_OPTION'; + } +} + +class ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL extends Error { + constructor(positional) { + super(`Unexpected argument '${positional}'. This command does not take positional arguments`); + this.code = 'ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL'; + } +} + +module.exports = { + codes: { + ERR_INVALID_ARG_TYPE, + ERR_INVALID_ARG_VALUE, + ERR_PARSE_ARGS_INVALID_OPTION_VALUE, + ERR_PARSE_ARGS_UNKNOWN_OPTION, + ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL, + } +}; diff --git a/node_modules/@pkgjs/parseargs/internal/primordials.js b/node_modules/@pkgjs/parseargs/internal/primordials.js new file mode 100644 index 00000000..63e23ab1 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/primordials.js @@ -0,0 +1,393 @@ +/* +This file is copied from https://github.com/nodejs/node/blob/v14.19.3/lib/internal/per_context/primordials.js +under the following license: + +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +*/ + +'use strict'; + +/* eslint-disable node-core/prefer-primordials */ + +// This file subclasses and stores the JS builtins that come from the VM +// so that Node.js's builtin modules do not need to later look these up from +// the global proxy, which can be mutated by users. + +// Use of primordials have sometimes a dramatic impact on performance, please +// benchmark all changes made in performance-sensitive areas of the codebase. +// See: https://github.com/nodejs/node/pull/38248 + +const primordials = {}; + +const { + defineProperty: ReflectDefineProperty, + getOwnPropertyDescriptor: ReflectGetOwnPropertyDescriptor, + ownKeys: ReflectOwnKeys, +} = Reflect; + +// `uncurryThis` is equivalent to `func => Function.prototype.call.bind(func)`. +// It is using `bind.bind(call)` to avoid using `Function.prototype.bind` +// and `Function.prototype.call` after it may have been mutated by users. +const { apply, bind, call } = Function.prototype; +const uncurryThis = bind.bind(call); +primordials.uncurryThis = uncurryThis; + +// `applyBind` is equivalent to `func => Function.prototype.apply.bind(func)`. +// It is using `bind.bind(apply)` to avoid using `Function.prototype.bind` +// and `Function.prototype.apply` after it may have been mutated by users. +const applyBind = bind.bind(apply); +primordials.applyBind = applyBind; + +// Methods that accept a variable number of arguments, and thus it's useful to +// also create `${prefix}${key}Apply`, which uses `Function.prototype.apply`, +// instead of `Function.prototype.call`, and thus doesn't require iterator +// destructuring. +const varargsMethods = [ + // 'ArrayPrototypeConcat' is omitted, because it performs the spread + // on its own for arrays and array-likes with a truthy + // @@isConcatSpreadable symbol property. + 'ArrayOf', + 'ArrayPrototypePush', + 'ArrayPrototypeUnshift', + // 'FunctionPrototypeCall' is omitted, since there's 'ReflectApply' + // and 'FunctionPrototypeApply'. + 'MathHypot', + 'MathMax', + 'MathMin', + 'StringPrototypeConcat', + 'TypedArrayOf', +]; + +function getNewKey(key) { + return typeof key === 'symbol' ? + `Symbol${key.description[7].toUpperCase()}${key.description.slice(8)}` : + `${key[0].toUpperCase()}${key.slice(1)}`; +} + +function copyAccessor(dest, prefix, key, { enumerable, get, set }) { + ReflectDefineProperty(dest, `${prefix}Get${key}`, { + value: uncurryThis(get), + enumerable + }); + if (set !== undefined) { + ReflectDefineProperty(dest, `${prefix}Set${key}`, { + value: uncurryThis(set), + enumerable + }); + } +} + +function copyPropsRenamed(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + // `src` is bound as the `this` so that the static `this` points + // to the object it was defined on, + // e.g.: `ArrayOfApply` gets a `this` of `Array`: + value: applyBind(desc.value, src), + }); + } + } + } +} + +function copyPropsRenamedBound(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const { value } = desc; + if (typeof value === 'function') { + desc.value = value.bind(src); + } + + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + value: applyBind(value, src), + }); + } + } + } +} + +function copyPrototype(src, dest, prefix) { + for (const key of ReflectOwnKeys(src)) { + const newKey = getNewKey(key); + const desc = ReflectGetOwnPropertyDescriptor(src, key); + if ('get' in desc) { + copyAccessor(dest, prefix, newKey, desc); + } else { + const { value } = desc; + if (typeof value === 'function') { + desc.value = uncurryThis(value); + } + + const name = `${prefix}${newKey}`; + ReflectDefineProperty(dest, name, desc); + if (varargsMethods.includes(name)) { + ReflectDefineProperty(dest, `${name}Apply`, { + value: applyBind(value), + }); + } + } + } +} + +// Create copies of configurable value properties of the global object +[ + 'Proxy', + 'globalThis', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + primordials[name] = globalThis[name]; +}); + +// Create copies of URI handling functions +[ + decodeURI, + decodeURIComponent, + encodeURI, + encodeURIComponent, +].forEach((fn) => { + primordials[fn.name] = fn; +}); + +// Create copies of the namespace objects +[ + 'JSON', + 'Math', + 'Proxy', + 'Reflect', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + copyPropsRenamed(global[name], primordials, name); +}); + +// Create copies of intrinsic objects +[ + 'Array', + 'ArrayBuffer', + 'BigInt', + 'BigInt64Array', + 'BigUint64Array', + 'Boolean', + 'DataView', + 'Date', + 'Error', + 'EvalError', + 'Float32Array', + 'Float64Array', + 'Function', + 'Int16Array', + 'Int32Array', + 'Int8Array', + 'Map', + 'Number', + 'Object', + 'RangeError', + 'ReferenceError', + 'RegExp', + 'Set', + 'String', + 'Symbol', + 'SyntaxError', + 'TypeError', + 'URIError', + 'Uint16Array', + 'Uint32Array', + 'Uint8Array', + 'Uint8ClampedArray', + 'WeakMap', + 'WeakSet', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + const original = global[name]; + primordials[name] = original; + copyPropsRenamed(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +// Create copies of intrinsic objects that require a valid `this` to call +// static methods. +// Refs: https://www.ecma-international.org/ecma-262/#sec-promise.all +[ + 'Promise', +].forEach((name) => { + // eslint-disable-next-line no-restricted-globals + const original = global[name]; + primordials[name] = original; + copyPropsRenamedBound(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +// Create copies of abstract intrinsic objects that are not directly exposed +// on the global object. +// Refs: https://tc39.es/ecma262/#sec-%typedarray%-intrinsic-object +[ + { name: 'TypedArray', original: Reflect.getPrototypeOf(Uint8Array) }, + { name: 'ArrayIterator', original: { + prototype: Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]()), + } }, + { name: 'StringIterator', original: { + prototype: Reflect.getPrototypeOf(String.prototype[Symbol.iterator]()), + } }, +].forEach(({ name, original }) => { + primordials[name] = original; + // The static %TypedArray% methods require a valid `this`, but can't be bound, + // as they need a subclass constructor as the receiver: + copyPrototype(original, primordials, name); + copyPrototype(original.prototype, primordials, `${name}Prototype`); +}); + +/* eslint-enable node-core/prefer-primordials */ + +const { + ArrayPrototypeForEach, + FunctionPrototypeCall, + Map, + ObjectFreeze, + ObjectSetPrototypeOf, + Set, + SymbolIterator, + WeakMap, + WeakSet, +} = primordials; + +// Because these functions are used by `makeSafe`, which is exposed +// on the `primordials` object, it's important to use const references +// to the primordials that they use: +const createSafeIterator = (factory, next) => { + class SafeIterator { + constructor(iterable) { + this._iterator = factory(iterable); + } + next() { + return next(this._iterator); + } + [SymbolIterator]() { + return this; + } + } + ObjectSetPrototypeOf(SafeIterator.prototype, null); + ObjectFreeze(SafeIterator.prototype); + ObjectFreeze(SafeIterator); + return SafeIterator; +}; + +primordials.SafeArrayIterator = createSafeIterator( + primordials.ArrayPrototypeSymbolIterator, + primordials.ArrayIteratorPrototypeNext +); +primordials.SafeStringIterator = createSafeIterator( + primordials.StringPrototypeSymbolIterator, + primordials.StringIteratorPrototypeNext +); + +const copyProps = (src, dest) => { + ArrayPrototypeForEach(ReflectOwnKeys(src), (key) => { + if (!ReflectGetOwnPropertyDescriptor(dest, key)) { + ReflectDefineProperty( + dest, + key, + ReflectGetOwnPropertyDescriptor(src, key)); + } + }); +}; + +const makeSafe = (unsafe, safe) => { + if (SymbolIterator in unsafe.prototype) { + const dummy = new unsafe(); + let next; // We can reuse the same `next` method. + + ArrayPrototypeForEach(ReflectOwnKeys(unsafe.prototype), (key) => { + if (!ReflectGetOwnPropertyDescriptor(safe.prototype, key)) { + const desc = ReflectGetOwnPropertyDescriptor(unsafe.prototype, key); + if ( + typeof desc.value === 'function' && + desc.value.length === 0 && + SymbolIterator in (FunctionPrototypeCall(desc.value, dummy) ?? {}) + ) { + const createIterator = uncurryThis(desc.value); + next = next ?? uncurryThis(createIterator(dummy).next); + const SafeIterator = createSafeIterator(createIterator, next); + desc.value = function() { + return new SafeIterator(this); + }; + } + ReflectDefineProperty(safe.prototype, key, desc); + } + }); + } else { + copyProps(unsafe.prototype, safe.prototype); + } + copyProps(unsafe, safe); + + ObjectSetPrototypeOf(safe.prototype, null); + ObjectFreeze(safe.prototype); + ObjectFreeze(safe); + return safe; +}; +primordials.makeSafe = makeSafe; + +// Subclass the constructors because we need to use their prototype +// methods later. +// Defining the `constructor` is necessary here to avoid the default +// constructor which uses the user-mutable `%ArrayIteratorPrototype%.next`. +primordials.SafeMap = makeSafe( + Map, + class SafeMap extends Map { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeWeakMap = makeSafe( + WeakMap, + class SafeWeakMap extends WeakMap { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeSet = makeSafe( + Set, + class SafeSet extends Set { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); +primordials.SafeWeakSet = makeSafe( + WeakSet, + class SafeWeakSet extends WeakSet { + constructor(i) { super(i); } // eslint-disable-line no-useless-constructor + } +); + +ObjectSetPrototypeOf(primordials, null); +ObjectFreeze(primordials); + +module.exports = primordials; diff --git a/node_modules/@pkgjs/parseargs/internal/util.js b/node_modules/@pkgjs/parseargs/internal/util.js new file mode 100644 index 00000000..b9b8fe5b --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/util.js @@ -0,0 +1,14 @@ +'use strict'; + +// This is a placeholder for util.js in node.js land. + +const { + ObjectCreate, + ObjectFreeze, +} = require('./primordials'); + +const kEmptyObject = ObjectFreeze(ObjectCreate(null)); + +module.exports = { + kEmptyObject, +}; diff --git a/node_modules/@pkgjs/parseargs/internal/validators.js b/node_modules/@pkgjs/parseargs/internal/validators.js new file mode 100644 index 00000000..b5ac4fb5 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/internal/validators.js @@ -0,0 +1,89 @@ +'use strict'; + +// This file is a proxy of the original file located at: +// https://github.com/nodejs/node/blob/main/lib/internal/validators.js +// Every addition or modification to this file must be evaluated +// during the PR review. + +const { + ArrayIsArray, + ArrayPrototypeIncludes, + ArrayPrototypeJoin, +} = require('./primordials'); + +const { + codes: { + ERR_INVALID_ARG_TYPE + } +} = require('./errors'); + +function validateString(value, name) { + if (typeof value !== 'string') { + throw new ERR_INVALID_ARG_TYPE(name, 'String', value); + } +} + +function validateUnion(value, name, union) { + if (!ArrayPrototypeIncludes(union, value)) { + throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value); + } +} + +function validateBoolean(value, name) { + if (typeof value !== 'boolean') { + throw new ERR_INVALID_ARG_TYPE(name, 'Boolean', value); + } +} + +function validateArray(value, name) { + if (!ArrayIsArray(value)) { + throw new ERR_INVALID_ARG_TYPE(name, 'Array', value); + } +} + +function validateStringArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateString(value[i], `${name}[${i}]`); + } +} + +function validateBooleanArray(value, name) { + validateArray(value, name); + for (let i = 0; i < value.length; i++) { + validateBoolean(value[i], `${name}[${i}]`); + } +} + +/** + * @param {unknown} value + * @param {string} name + * @param {{ + * allowArray?: boolean, + * allowFunction?: boolean, + * nullable?: boolean + * }} [options] + */ +function validateObject(value, name, options) { + const useDefaultOptions = options == null; + const allowArray = useDefaultOptions ? false : options.allowArray; + const allowFunction = useDefaultOptions ? false : options.allowFunction; + const nullable = useDefaultOptions ? false : options.nullable; + if ((!nullable && value === null) || + (!allowArray && ArrayIsArray(value)) || + (typeof value !== 'object' && ( + !allowFunction || typeof value !== 'function' + ))) { + throw new ERR_INVALID_ARG_TYPE(name, 'Object', value); + } +} + +module.exports = { + validateArray, + validateObject, + validateString, + validateStringArray, + validateUnion, + validateBoolean, + validateBooleanArray, +}; diff --git a/node_modules/@pkgjs/parseargs/package.json b/node_modules/@pkgjs/parseargs/package.json new file mode 100644 index 00000000..0bcc05c0 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/package.json @@ -0,0 +1,36 @@ +{ + "name": "@pkgjs/parseargs", + "version": "0.11.0", + "description": "Polyfill of future proposal for `util.parseArgs()`", + "engines": { + "node": ">=14" + }, + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "scripts": { + "coverage": "c8 --check-coverage tape 'test/*.js'", + "test": "c8 tape 'test/*.js'", + "posttest": "eslint .", + "fix": "npm run posttest -- --fix" + }, + "repository": { + "type": "git", + "url": "git@github.com:pkgjs/parseargs.git" + }, + "keywords": [], + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/pkgjs/parseargs/issues" + }, + "homepage": "https://github.com/pkgjs/parseargs#readme", + "devDependencies": { + "c8": "^7.10.0", + "eslint": "^8.2.0", + "eslint-plugin-node-core": "iansu/eslint-plugin-node-core", + "tape": "^5.2.2" + } +} diff --git a/node_modules/@pkgjs/parseargs/utils.js b/node_modules/@pkgjs/parseargs/utils.js new file mode 100644 index 00000000..d7f420a2 --- /dev/null +++ b/node_modules/@pkgjs/parseargs/utils.js @@ -0,0 +1,198 @@ +'use strict'; + +const { + ArrayPrototypeFind, + ObjectEntries, + ObjectPrototypeHasOwnProperty: ObjectHasOwn, + StringPrototypeCharAt, + StringPrototypeIncludes, + StringPrototypeStartsWith, +} = require('./internal/primordials'); + +const { + validateObject, +} = require('./internal/validators'); + +// These are internal utilities to make the parsing logic easier to read, and +// add lots of detail for the curious. They are in a separate file to allow +// unit testing, although that is not essential (this could be rolled into +// main file and just tested implicitly via API). +// +// These routines are for internal use, not for export to client. + +/** + * Return the named property, but only if it is an own property. + */ +function objectGetOwn(obj, prop) { + if (ObjectHasOwn(obj, prop)) + return obj[prop]; +} + +/** + * Return the named options property, but only if it is an own property. + */ +function optionsGetOwn(options, longOption, prop) { + if (ObjectHasOwn(options, longOption)) + return objectGetOwn(options[longOption], prop); +} + +/** + * Determines if the argument may be used as an option value. + * @example + * isOptionValue('V') // returns true + * isOptionValue('-v') // returns true (greedy) + * isOptionValue('--foo') // returns true (greedy) + * isOptionValue(undefined) // returns false + */ +function isOptionValue(value) { + if (value == null) return false; + + // Open Group Utility Conventions are that an option-argument + // is the argument after the option, and may start with a dash. + return true; // greedy! +} + +/** + * Detect whether there is possible confusion and user may have omitted + * the option argument, like `--port --verbose` when `port` of type:string. + * In strict mode we throw errors if value is option-like. + */ +function isOptionLikeValue(value) { + if (value == null) return false; + + return value.length > 1 && StringPrototypeCharAt(value, 0) === '-'; +} + +/** + * Determines if `arg` is just a short option. + * @example '-f' + */ +function isLoneShortOption(arg) { + return arg.length === 2 && + StringPrototypeCharAt(arg, 0) === '-' && + StringPrototypeCharAt(arg, 1) !== '-'; +} + +/** + * Determines if `arg` is a lone long option. + * @example + * isLoneLongOption('a') // returns false + * isLoneLongOption('-a') // returns false + * isLoneLongOption('--foo') // returns true + * isLoneLongOption('--foo=bar') // returns false + */ +function isLoneLongOption(arg) { + return arg.length > 2 && + StringPrototypeStartsWith(arg, '--') && + !StringPrototypeIncludes(arg, '=', 3); +} + +/** + * Determines if `arg` is a long option and value in the same argument. + * @example + * isLongOptionAndValue('--foo') // returns false + * isLongOptionAndValue('--foo=bar') // returns true + */ +function isLongOptionAndValue(arg) { + return arg.length > 2 && + StringPrototypeStartsWith(arg, '--') && + StringPrototypeIncludes(arg, '=', 3); +} + +/** + * Determines if `arg` is a short option group. + * + * See Guideline 5 of the [Open Group Utility Conventions](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). + * One or more options without option-arguments, followed by at most one + * option that takes an option-argument, should be accepted when grouped + * behind one '-' delimiter. + * @example + * isShortOptionGroup('-a', {}) // returns false + * isShortOptionGroup('-ab', {}) // returns true + * // -fb is an option and a value, not a short option group + * isShortOptionGroup('-fb', { + * options: { f: { type: 'string' } } + * }) // returns false + * isShortOptionGroup('-bf', { + * options: { f: { type: 'string' } } + * }) // returns true + * // -bfb is an edge case, return true and caller sorts it out + * isShortOptionGroup('-bfb', { + * options: { f: { type: 'string' } } + * }) // returns true + */ +function isShortOptionGroup(arg, options) { + if (arg.length <= 2) return false; + if (StringPrototypeCharAt(arg, 0) !== '-') return false; + if (StringPrototypeCharAt(arg, 1) === '-') return false; + + const firstShort = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(firstShort, options); + return optionsGetOwn(options, longOption, 'type') !== 'string'; +} + +/** + * Determine if arg is a short string option followed by its value. + * @example + * isShortOptionAndValue('-a', {}); // returns false + * isShortOptionAndValue('-ab', {}); // returns false + * isShortOptionAndValue('-fFILE', { + * options: { foo: { short: 'f', type: 'string' }} + * }) // returns true + */ +function isShortOptionAndValue(arg, options) { + validateObject(options, 'options'); + + if (arg.length <= 2) return false; + if (StringPrototypeCharAt(arg, 0) !== '-') return false; + if (StringPrototypeCharAt(arg, 1) === '-') return false; + + const shortOption = StringPrototypeCharAt(arg, 1); + const longOption = findLongOptionForShort(shortOption, options); + return optionsGetOwn(options, longOption, 'type') === 'string'; +} + +/** + * Find the long option associated with a short option. Looks for a configured + * `short` and returns the short option itself if a long option is not found. + * @example + * findLongOptionForShort('a', {}) // returns 'a' + * findLongOptionForShort('b', { + * options: { bar: { short: 'b' } } + * }) // returns 'bar' + */ +function findLongOptionForShort(shortOption, options) { + validateObject(options, 'options'); + const longOptionEntry = ArrayPrototypeFind( + ObjectEntries(options), + ({ 1: optionConfig }) => objectGetOwn(optionConfig, 'short') === shortOption + ); + return longOptionEntry?.[0] ?? shortOption; +} + +/** + * Check if the given option includes a default value + * and that option has not been set by the input args. + * + * @param {string} longOption - long option name e.g. 'foo' + * @param {object} optionConfig - the option configuration properties + * @param {object} values - option values returned in `values` by parseArgs + */ +function useDefaultValueOption(longOption, optionConfig, values) { + return objectGetOwn(optionConfig, 'default') !== undefined && + values[longOption] === undefined; +} + +module.exports = { + findLongOptionForShort, + isLoneLongOption, + isLoneShortOption, + isLongOptionAndValue, + isOptionValue, + isOptionLikeValue, + isShortOptionAndValue, + isShortOptionGroup, + useDefaultValueOption, + objectGetOwn, + optionsGetOwn, +}; diff --git a/node_modules/ansi-regex/index.d.ts b/node_modules/ansi-regex/index.d.ts new file mode 100644 index 00000000..7d562e9c --- /dev/null +++ b/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,33 @@ +export type Options = { + /** + Match only the first ANSI escape. + + @default false + */ + readonly onlyFirst: boolean; +}; + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex from 'ansi-regex'; + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +export default function ansiRegex(options?: Options): RegExp; diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js new file mode 100644 index 00000000..ddfdba39 --- /dev/null +++ b/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +export default function ansiRegex({onlyFirst = false} = {}) { + // Valid string terminator sequences are BEL, ESC\, and 0x9c + const ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)'; + const pattern = [ + `[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?${ST})`, + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))', + ].join('|'); + + return new RegExp(pattern, onlyFirst ? undefined : 'g'); +} diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +MIT License + +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: + +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/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json new file mode 100644 index 00000000..49f3f610 --- /dev/null +++ b/node_modules/ansi-regex/package.json @@ -0,0 +1,61 @@ +{ + "name": "ansi-regex", + "version": "6.1.0", + "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" + }, + "type": "module", + "exports": "./index.js", + "types": "./index.d.ts", + "sideEffects": false, + "engines": { + "node": ">=12" + }, + "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": { + "ansi-escapes": "^5.0.0", + "ava": "^3.15.0", + "tsd": "^0.21.0", + "xo": "^0.54.2" + } +} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md new file mode 100644 index 00000000..1e91ee10 --- /dev/null +++ b/node_modules/ansi-regex/readme.md @@ -0,0 +1,60 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + +## Install + +```sh +npm install ansi-regex +``` + +## Usage + +```js +import ansiRegex from 'ansi-regex'; + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`\ +Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/balanced-match/.github/FUNDING.yml new file mode 100644 index 00000000..cea8b16e --- /dev/null +++ b/node_modules/balanced-match/.github/FUNDING.yml @@ -0,0 +1,2 @@ +tidelift: "npm/balanced-match" +patreon: juliangruber diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md new file mode 100644 index 00000000..2cdc8e41 --- /dev/null +++ b/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md new file mode 100644 index 00000000..d2a48b6b --- /dev/null +++ b/node_modules/balanced-match/README.md @@ -0,0 +1,97 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js new file mode 100644 index 00000000..c67a6460 --- /dev/null +++ b/node_modules/balanced-match/index.js @@ -0,0 +1,62 @@ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + if(a===b) { + return [ai, bi]; + } + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json new file mode 100644 index 00000000..ce6073e0 --- /dev/null +++ b/node_modules/balanced-match/package.json @@ -0,0 +1,48 @@ +{ + "name": "balanced-match", + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "version": "1.0.2", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "homepage": "https://github.com/juliangruber/balanced-match", + "main": "index.js", + "scripts": { + "test": "tape test/test.js", + "bench": "matcha test/bench.js" + }, + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + } +} diff --git a/node_modules/brace-expansion/.github/FUNDING.yml b/node_modules/brace-expansion/.github/FUNDING.yml new file mode 100644 index 00000000..79d1eafc --- /dev/null +++ b/node_modules/brace-expansion/.github/FUNDING.yml @@ -0,0 +1,2 @@ +tidelift: "npm/brace-expansion" +patreon: juliangruber diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE new file mode 100644 index 00000000..de322667 --- /dev/null +++ b/node_modules/brace-expansion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber + +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/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md new file mode 100644 index 00000000..e55c583d --- /dev/null +++ b/node_modules/brace-expansion/README.md @@ -0,0 +1,135 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) +[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.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/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js new file mode 100644 index 00000000..4af9ddee --- /dev/null +++ b/node_modules/brace-expansion/index.js @@ -0,0 +1,203 @@ +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m) return [str]; + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + if (/\$$/.test(m.pre)) { + for (var k = 0; k < post.length; k++) { + var expansion = pre+ '{' + m.body + '}' + post[k]; + expansions.push(expansion); + } + } else { + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = []; + + for (var j = 0; j < n.length; j++) { + N.push.apply(N, expand(n[j], false)); + } + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + } + + return expansions; +} + diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json new file mode 100644 index 00000000..7097d41e --- /dev/null +++ b/node_modules/brace-expansion/package.json @@ -0,0 +1,46 @@ +{ + "name": "brace-expansion", + "description": "Brace expansion as known from sh/bash", + "version": "2.0.1", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "homepage": "https://github.com/juliangruber/brace-expansion", + "main": "index.js", + "scripts": { + "test": "tape test/*.js", + "gentest": "bash test/generate.sh", + "bench": "matcha test/perf/bench.js" + }, + "dependencies": { + "balanced-match": "^1.0.0" + }, + "devDependencies": { + "@c4312/matcha": "^1.3.1", + "tape": "^4.6.0" + }, + "keywords": [], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + } +} diff --git a/node_modules/eastasianwidth/README.md b/node_modules/eastasianwidth/README.md new file mode 100644 index 00000000..a8b71ee5 --- /dev/null +++ b/node_modules/eastasianwidth/README.md @@ -0,0 +1,32 @@ +# East Asian Width + +Get [East Asian Width](http://www.unicode.org/reports/tr11/) from a character. + +'F'(Fullwidth), 'H'(Halfwidth), 'W'(Wide), 'Na'(Narrow), 'A'(Ambiguous) or 'N'(Natural). + +Original Code is [東アジアの文字幅 (East Asian Width) の判定 - 中途](http://d.hatena.ne.jp/takenspc/20111126#1322252878). + +## Install + + $ npm install eastasianwidth + +## Usage + + var eaw = require('eastasianwidth'); + console.log(eaw.eastAsianWidth('₩')) // 'F' + console.log(eaw.eastAsianWidth('。')) // 'H' + console.log(eaw.eastAsianWidth('뀀')) // 'W' + console.log(eaw.eastAsianWidth('a')) // 'Na' + console.log(eaw.eastAsianWidth('①')) // 'A' + console.log(eaw.eastAsianWidth('ف')) // 'N' + + console.log(eaw.characterLength('₩')) // 2 + console.log(eaw.characterLength('。')) // 1 + console.log(eaw.characterLength('뀀')) // 2 + console.log(eaw.characterLength('a')) // 1 + console.log(eaw.characterLength('①')) // 2 + console.log(eaw.characterLength('ف')) // 1 + + console.log(eaw.length('あいうえお')) // 10 + console.log(eaw.length('abcdefg')) // 7 + console.log(eaw.length('¢₩。ᅵㄅ뀀¢⟭a⊙①بف')) // 19 diff --git a/node_modules/eastasianwidth/eastasianwidth.js b/node_modules/eastasianwidth/eastasianwidth.js new file mode 100644 index 00000000..7d0aa0f6 --- /dev/null +++ b/node_modules/eastasianwidth/eastasianwidth.js @@ -0,0 +1,311 @@ +var eaw = {}; + +if ('undefined' == typeof module) { + window.eastasianwidth = eaw; +} else { + module.exports = eaw; +} + +eaw.eastAsianWidth = function(character) { + var x = character.charCodeAt(0); + var y = (character.length == 2) ? character.charCodeAt(1) : 0; + var codePoint = x; + if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) { + x &= 0x3FF; + y &= 0x3FF; + codePoint = (x << 10) | y; + codePoint += 0x10000; + } + + if ((0x3000 == codePoint) || + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) { + return 'F'; + } + if ((0x20A9 == codePoint) || + (0xFF61 <= codePoint && codePoint <= 0xFFBE) || + (0xFFC2 <= codePoint && codePoint <= 0xFFC7) || + (0xFFCA <= codePoint && codePoint <= 0xFFCF) || + (0xFFD2 <= codePoint && codePoint <= 0xFFD7) || + (0xFFDA <= codePoint && codePoint <= 0xFFDC) || + (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) { + return 'H'; + } + if ((0x1100 <= codePoint && codePoint <= 0x115F) || + (0x11A3 <= codePoint && codePoint <= 0x11A7) || + (0x11FA <= codePoint && codePoint <= 0x11FF) || + (0x2329 <= codePoint && codePoint <= 0x232A) || + (0x2E80 <= codePoint && codePoint <= 0x2E99) || + (0x2E9B <= codePoint && codePoint <= 0x2EF3) || + (0x2F00 <= codePoint && codePoint <= 0x2FD5) || + (0x2FF0 <= codePoint && codePoint <= 0x2FFB) || + (0x3001 <= codePoint && codePoint <= 0x303E) || + (0x3041 <= codePoint && codePoint <= 0x3096) || + (0x3099 <= codePoint && codePoint <= 0x30FF) || + (0x3105 <= codePoint && codePoint <= 0x312D) || + (0x3131 <= codePoint && codePoint <= 0x318E) || + (0x3190 <= codePoint && codePoint <= 0x31BA) || + (0x31C0 <= codePoint && codePoint <= 0x31E3) || + (0x31F0 <= codePoint && codePoint <= 0x321E) || + (0x3220 <= codePoint && codePoint <= 0x3247) || + (0x3250 <= codePoint && codePoint <= 0x32FE) || + (0x3300 <= codePoint && codePoint <= 0x4DBF) || + (0x4E00 <= codePoint && codePoint <= 0xA48C) || + (0xA490 <= codePoint && codePoint <= 0xA4C6) || + (0xA960 <= codePoint && codePoint <= 0xA97C) || + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + (0xD7B0 <= codePoint && codePoint <= 0xD7C6) || + (0xD7CB <= codePoint && codePoint <= 0xD7FB) || + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + (0xFE30 <= codePoint && codePoint <= 0xFE52) || + (0xFE54 <= codePoint && codePoint <= 0xFE66) || + (0xFE68 <= codePoint && codePoint <= 0xFE6B) || + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + (0x1F200 <= codePoint && codePoint <= 0x1F202) || + (0x1F210 <= codePoint && codePoint <= 0x1F23A) || + (0x1F240 <= codePoint && codePoint <= 0x1F248) || + (0x1F250 <= codePoint && codePoint <= 0x1F251) || + (0x20000 <= codePoint && codePoint <= 0x2F73F) || + (0x2B740 <= codePoint && codePoint <= 0x2FFFD) || + (0x30000 <= codePoint && codePoint <= 0x3FFFD)) { + return 'W'; + } + if ((0x0020 <= codePoint && codePoint <= 0x007E) || + (0x00A2 <= codePoint && codePoint <= 0x00A3) || + (0x00A5 <= codePoint && codePoint <= 0x00A6) || + (0x00AC == codePoint) || + (0x00AF == codePoint) || + (0x27E6 <= codePoint && codePoint <= 0x27ED) || + (0x2985 <= codePoint && codePoint <= 0x2986)) { + return 'Na'; + } + if ((0x00A1 == codePoint) || + (0x00A4 == codePoint) || + (0x00A7 <= codePoint && codePoint <= 0x00A8) || + (0x00AA == codePoint) || + (0x00AD <= codePoint && codePoint <= 0x00AE) || + (0x00B0 <= codePoint && codePoint <= 0x00B4) || + (0x00B6 <= codePoint && codePoint <= 0x00BA) || + (0x00BC <= codePoint && codePoint <= 0x00BF) || + (0x00C6 == codePoint) || + (0x00D0 == codePoint) || + (0x00D7 <= codePoint && codePoint <= 0x00D8) || + (0x00DE <= codePoint && codePoint <= 0x00E1) || + (0x00E6 == codePoint) || + (0x00E8 <= codePoint && codePoint <= 0x00EA) || + (0x00EC <= codePoint && codePoint <= 0x00ED) || + (0x00F0 == codePoint) || + (0x00F2 <= codePoint && codePoint <= 0x00F3) || + (0x00F7 <= codePoint && codePoint <= 0x00FA) || + (0x00FC == codePoint) || + (0x00FE == codePoint) || + (0x0101 == codePoint) || + (0x0111 == codePoint) || + (0x0113 == codePoint) || + (0x011B == codePoint) || + (0x0126 <= codePoint && codePoint <= 0x0127) || + (0x012B == codePoint) || + (0x0131 <= codePoint && codePoint <= 0x0133) || + (0x0138 == codePoint) || + (0x013F <= codePoint && codePoint <= 0x0142) || + (0x0144 == codePoint) || + (0x0148 <= codePoint && codePoint <= 0x014B) || + (0x014D == codePoint) || + (0x0152 <= codePoint && codePoint <= 0x0153) || + (0x0166 <= codePoint && codePoint <= 0x0167) || + (0x016B == codePoint) || + (0x01CE == codePoint) || + (0x01D0 == codePoint) || + (0x01D2 == codePoint) || + (0x01D4 == codePoint) || + (0x01D6 == codePoint) || + (0x01D8 == codePoint) || + (0x01DA == codePoint) || + (0x01DC == codePoint) || + (0x0251 == codePoint) || + (0x0261 == codePoint) || + (0x02C4 == codePoint) || + (0x02C7 == codePoint) || + (0x02C9 <= codePoint && codePoint <= 0x02CB) || + (0x02CD == codePoint) || + (0x02D0 == codePoint) || + (0x02D8 <= codePoint && codePoint <= 0x02DB) || + (0x02DD == codePoint) || + (0x02DF == codePoint) || + (0x0300 <= codePoint && codePoint <= 0x036F) || + (0x0391 <= codePoint && codePoint <= 0x03A1) || + (0x03A3 <= codePoint && codePoint <= 0x03A9) || + (0x03B1 <= codePoint && codePoint <= 0x03C1) || + (0x03C3 <= codePoint && codePoint <= 0x03C9) || + (0x0401 == codePoint) || + (0x0410 <= codePoint && codePoint <= 0x044F) || + (0x0451 == codePoint) || + (0x2010 == codePoint) || + (0x2013 <= codePoint && codePoint <= 0x2016) || + (0x2018 <= codePoint && codePoint <= 0x2019) || + (0x201C <= codePoint && codePoint <= 0x201D) || + (0x2020 <= codePoint && codePoint <= 0x2022) || + (0x2024 <= codePoint && codePoint <= 0x2027) || + (0x2030 == codePoint) || + (0x2032 <= codePoint && codePoint <= 0x2033) || + (0x2035 == codePoint) || + (0x203B == codePoint) || + (0x203E == codePoint) || + (0x2074 == codePoint) || + (0x207F == codePoint) || + (0x2081 <= codePoint && codePoint <= 0x2084) || + (0x20AC == codePoint) || + (0x2103 == codePoint) || + (0x2105 == codePoint) || + (0x2109 == codePoint) || + (0x2113 == codePoint) || + (0x2116 == codePoint) || + (0x2121 <= codePoint && codePoint <= 0x2122) || + (0x2126 == codePoint) || + (0x212B == codePoint) || + (0x2153 <= codePoint && codePoint <= 0x2154) || + (0x215B <= codePoint && codePoint <= 0x215E) || + (0x2160 <= codePoint && codePoint <= 0x216B) || + (0x2170 <= codePoint && codePoint <= 0x2179) || + (0x2189 == codePoint) || + (0x2190 <= codePoint && codePoint <= 0x2199) || + (0x21B8 <= codePoint && codePoint <= 0x21B9) || + (0x21D2 == codePoint) || + (0x21D4 == codePoint) || + (0x21E7 == codePoint) || + (0x2200 == codePoint) || + (0x2202 <= codePoint && codePoint <= 0x2203) || + (0x2207 <= codePoint && codePoint <= 0x2208) || + (0x220B == codePoint) || + (0x220F == codePoint) || + (0x2211 == codePoint) || + (0x2215 == codePoint) || + (0x221A == codePoint) || + (0x221D <= codePoint && codePoint <= 0x2220) || + (0x2223 == codePoint) || + (0x2225 == codePoint) || + (0x2227 <= codePoint && codePoint <= 0x222C) || + (0x222E == codePoint) || + (0x2234 <= codePoint && codePoint <= 0x2237) || + (0x223C <= codePoint && codePoint <= 0x223D) || + (0x2248 == codePoint) || + (0x224C == codePoint) || + (0x2252 == codePoint) || + (0x2260 <= codePoint && codePoint <= 0x2261) || + (0x2264 <= codePoint && codePoint <= 0x2267) || + (0x226A <= codePoint && codePoint <= 0x226B) || + (0x226E <= codePoint && codePoint <= 0x226F) || + (0x2282 <= codePoint && codePoint <= 0x2283) || + (0x2286 <= codePoint && codePoint <= 0x2287) || + (0x2295 == codePoint) || + (0x2299 == codePoint) || + (0x22A5 == codePoint) || + (0x22BF == codePoint) || + (0x2312 == codePoint) || + (0x2460 <= codePoint && codePoint <= 0x24E9) || + (0x24EB <= codePoint && codePoint <= 0x254B) || + (0x2550 <= codePoint && codePoint <= 0x2573) || + (0x2580 <= codePoint && codePoint <= 0x258F) || + (0x2592 <= codePoint && codePoint <= 0x2595) || + (0x25A0 <= codePoint && codePoint <= 0x25A1) || + (0x25A3 <= codePoint && codePoint <= 0x25A9) || + (0x25B2 <= codePoint && codePoint <= 0x25B3) || + (0x25B6 <= codePoint && codePoint <= 0x25B7) || + (0x25BC <= codePoint && codePoint <= 0x25BD) || + (0x25C0 <= codePoint && codePoint <= 0x25C1) || + (0x25C6 <= codePoint && codePoint <= 0x25C8) || + (0x25CB == codePoint) || + (0x25CE <= codePoint && codePoint <= 0x25D1) || + (0x25E2 <= codePoint && codePoint <= 0x25E5) || + (0x25EF == codePoint) || + (0x2605 <= codePoint && codePoint <= 0x2606) || + (0x2609 == codePoint) || + (0x260E <= codePoint && codePoint <= 0x260F) || + (0x2614 <= codePoint && codePoint <= 0x2615) || + (0x261C == codePoint) || + (0x261E == codePoint) || + (0x2640 == codePoint) || + (0x2642 == codePoint) || + (0x2660 <= codePoint && codePoint <= 0x2661) || + (0x2663 <= codePoint && codePoint <= 0x2665) || + (0x2667 <= codePoint && codePoint <= 0x266A) || + (0x266C <= codePoint && codePoint <= 0x266D) || + (0x266F == codePoint) || + (0x269E <= codePoint && codePoint <= 0x269F) || + (0x26BE <= codePoint && codePoint <= 0x26BF) || + (0x26C4 <= codePoint && codePoint <= 0x26CD) || + (0x26CF <= codePoint && codePoint <= 0x26E1) || + (0x26E3 == codePoint) || + (0x26E8 <= codePoint && codePoint <= 0x26FF) || + (0x273D == codePoint) || + (0x2757 == codePoint) || + (0x2776 <= codePoint && codePoint <= 0x277F) || + (0x2B55 <= codePoint && codePoint <= 0x2B59) || + (0x3248 <= codePoint && codePoint <= 0x324F) || + (0xE000 <= codePoint && codePoint <= 0xF8FF) || + (0xFE00 <= codePoint && codePoint <= 0xFE0F) || + (0xFFFD == codePoint) || + (0x1F100 <= codePoint && codePoint <= 0x1F10A) || + (0x1F110 <= codePoint && codePoint <= 0x1F12D) || + (0x1F130 <= codePoint && codePoint <= 0x1F169) || + (0x1F170 <= codePoint && codePoint <= 0x1F19A) || + (0xE0100 <= codePoint && codePoint <= 0xE01EF) || + (0xF0000 <= codePoint && codePoint <= 0xFFFFD) || + (0x100000 <= codePoint && codePoint <= 0x10FFFD)) { + return 'A'; + } + + return 'N'; +}; + +eaw.characterLength = function(character) { + var code = this.eastAsianWidth(character); + if (code == 'F' || code == 'W' || code == 'A') { + return 2; + } else { + return 1; + } +}; + +// Split a string considering surrogate-pairs. +function stringToArray(string) { + return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || []; +} + +eaw.length = function(string) { + var characters = stringToArray(string); + var len = 0; + for (var i = 0; i < characters.length; i++) { + len = len + this.characterLength(characters[i]); + } + return len; +}; + +eaw.slice = function(text, start, end) { + textLen = eaw.length(text) + start = start ? start : 0; + end = end ? end : 1; + if (start < 0) { + start = textLen + start; + } + if (end < 0) { + end = textLen + end; + } + var result = ''; + var eawLen = 0; + var chars = stringToArray(text); + for (var i = 0; i < chars.length; i++) { + var char = chars[i]; + var charLen = eaw.length(char); + if (eawLen >= start - (charLen == 2 ? 1 : 0)) { + if (eawLen + charLen <= end) { + result += char; + } else { + break; + } + } + eawLen += charLen; + } + return result; +}; diff --git a/node_modules/eastasianwidth/package.json b/node_modules/eastasianwidth/package.json new file mode 100644 index 00000000..cb7ac6ab --- /dev/null +++ b/node_modules/eastasianwidth/package.json @@ -0,0 +1,18 @@ +{ + "name": "eastasianwidth", + "version": "0.2.0", + "description": "Get East Asian Width from a character.", + "main": "eastasianwidth.js", + "files": [ + "eastasianwidth.js" + ], + "scripts": { + "test": "mocha" + }, + "repository": "git://github.com/komagata/eastasianwidth.git", + "author": "Masaki Komagata", + "license": "MIT", + "devDependencies": { + "mocha": "~1.9.0" + } +} diff --git a/env_web/Lib/site-packages/pip-23.0.1.dist-info/LICENSE.txt b/node_modules/emoji-regex/LICENSE-MIT.txt similarity index 93% rename from env_web/Lib/site-packages/pip-23.0.1.dist-info/LICENSE.txt rename to node_modules/emoji-regex/LICENSE-MIT.txt index 8e7b65ea..a41e0a7e 100644 --- a/env_web/Lib/site-packages/pip-23.0.1.dist-info/LICENSE.txt +++ b/node_modules/emoji-regex/LICENSE-MIT.txt @@ -1,4 +1,4 @@ -Copyright (c) 2008-present The pip developers (see AUTHORS.txt file) +Copyright Mathias Bynens Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/node_modules/emoji-regex/README.md b/node_modules/emoji-regex/README.md new file mode 100644 index 00000000..6d630827 --- /dev/null +++ b/node_modules/emoji-regex/README.md @@ -0,0 +1,137 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=main)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols and sequences (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [Unicode data](https://github.com/node-unicode/node-unicode-data). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex/RGI_Emoji.js'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +## Regular expression flavors + +The package comes with three distinct regular expressions: + +```js +// This is the recommended regular expression to use. It matches all +// emoji recommended for general interchange, as defined via the +// `RGI_Emoji` property in the Unicode Standard. +// https://unicode.org/reports/tr51/#def_rgi_set +// When in doubt, use this! +const emojiRegexRGI = require('emoji-regex/RGI_Emoji.js'); + +// This is the old regular expression, prior to `RGI_Emoji` being +// standardized. In addition to all `RGI_Emoji` sequences, it matches +// some emoji you probably don’t want to match (such as emoji component +// symbols that are not meant to be used separately). +const emojiRegex = require('emoji-regex/index.js'); + +// This regular expression matches even more emoji than the previous +// one, including emoji that render as text instead of icons (i.e. +// emoji that are not `Emoji_Presentation` symbols and that aren’t +// forced to render as emoji by a variation selector). +const emojiRegexText = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegexRGI = require('emoji-regex/es2015/RGI_Emoji.js'); +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## For maintainers + +### How to update emoji-regex after new Unicode Standard releases + +1. Update the Unicode data dependency in `package.json` by running the following commands: + + ```sh + # Example: updating from Unicode v12 to Unicode v13. + npm uninstall @unicode/unicode-12.0.0 + npm install @unicode/unicode-13.0.0 --save-dev + ```` + +1. Generate the new output: + + ```sh + npm run build + ``` + +1. Verify that tests still pass: + + ```sh + npm test + ``` + +1. Send a pull request with the changes, and get it reviewed & merged. + +1. On the `main` branch, bump the emoji-regex version number in `package.json`: + + ```sh + npm version patch -m 'Release v%s' + ``` + + Instead of `patch`, use `minor` or `major` [as needed](https://semver.org/). + + Note that this produces a Git commit + tag. + +1. Push the release commit and tag: + + ```sh + git push + ``` + + Our CI then automatically publishes the new release to npm. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/emoji-regex/RGI_Emoji.d.ts b/node_modules/emoji-regex/RGI_Emoji.d.ts new file mode 100644 index 00000000..89a651fb --- /dev/null +++ b/node_modules/emoji-regex/RGI_Emoji.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/RGI_Emoji' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/RGI_Emoji.js b/node_modules/emoji-regex/RGI_Emoji.js new file mode 100644 index 00000000..3fbe9241 --- /dev/null +++ b/node_modules/emoji-regex/RGI_Emoji.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]/g; +}; diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts b/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts new file mode 100644 index 00000000..bf0f154b --- /dev/null +++ b/node_modules/emoji-regex/es2015/RGI_Emoji.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015/RGI_Emoji' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/RGI_Emoji.js b/node_modules/emoji-regex/es2015/RGI_Emoji.js new file mode 100644 index 00000000..ecf32f17 --- /dev/null +++ b/node_modules/emoji-regex/es2015/RGI_Emoji.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]/gu; +}; diff --git a/node_modules/emoji-regex/es2015/index.d.ts b/node_modules/emoji-regex/es2015/index.d.ts new file mode 100644 index 00000000..823dfa65 --- /dev/null +++ b/node_modules/emoji-regex/es2015/index.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/index.js b/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 00000000..1a4fc8d0 --- /dev/null +++ b/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/emoji-regex/es2015/text.d.ts b/node_modules/emoji-regex/es2015/text.d.ts new file mode 100644 index 00000000..ccc2f9ad --- /dev/null +++ b/node_modules/emoji-regex/es2015/text.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/es2015/text.js b/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 00000000..8e9f9857 --- /dev/null +++ b/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074}|\u{E0065}\u{E006E}\u{E0067})\u{E007F}|(?:\u{1F9D1}\u{1F3FF}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FE}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FD}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|(?:\u{1F9D1}\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F9D1}|\u{1F469}\u{1F3FB}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FC}-\u{1F3FF}]|\u{1F468}(?:\u{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]))?|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FF}]|\u{1F468}[\u{1F3FB}-\u{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC})?|(?:\u{1F469}(?:\u{1F3FB}\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F3FC}-\u{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}]))|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]\u200D\u{1F91D}\u200D\u{1F9D1})[\u{1F3FB}-\u{1F3FF}]|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F9D1}(?:\u200D(?:\u{1F91D}\u200D\u{1F9D1}|[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FE}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FD}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FC}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F37C}\u{1F384}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F9D1}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\u{1F636}\u200D\u{1F32B}|\u{1F3F3}\uFE0F\u200D\u26A7|\u{1F43B}\u200D\u2744|(?:[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u{1F3F4}\u200D\u2620|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F202}\u{1F237}\u{1F321}\u{1F324}-\u{1F32C}\u{1F336}\u{1F37D}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}\u{1F39F}\u{1F3CD}\u{1F3CE}\u{1F3D4}-\u{1F3DF}\u{1F3F5}\u{1F3F7}\u{1F43F}\u{1F4FD}\u{1F549}\u{1F54A}\u{1F56F}\u{1F570}\u{1F573}\u{1F576}-\u{1F579}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}\u{1F6CB}\u{1F6CD}-\u{1F6CF}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6F0}\u{1F6F3}])\uFE0F|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}\u200D\u{1F466}|\u{1F635}\u200D\u{1F4AB}|\u{1F62E}\u200D\u{1F4A8}|\u{1F415}\u200D\u{1F9BA}|\u{1F9D1}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F469}(?:\u{1F3FF}|\u{1F3FE}|\u{1F3FD}|\u{1F3FC}|\u{1F3FB})?|\u{1F1FD}\u{1F1F0}|\u{1F1F6}\u{1F1E6}|\u{1F1F4}\u{1F1F2}|\u{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\u{1F525}\u{1FA79}]|\u{1F441}\uFE0F|\u{1F3F3}\uFE0F|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\uFE0F\u{1F3FB}-\u{1F3FF}]|\u{1F3F4}|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270C\u270D\u{1F574}\u{1F590}][\uFE0F\u{1F3FB}-\u{1F3FF}]|[\u270A\u270B\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F408}\u{1F415}\u{1F43B}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F57A}\u{1F595}\u{1F596}\u{1F62E}\u{1F635}\u{1F636}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90C}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F934}\u{1F936}\u{1F977}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}\u{1F9D3}\u{1F9D5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F470}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F935}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D4}\u{1F9D6}-\u{1F9DD}]|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F384}\u{1F386}-\u{1F393}\u{1F3A0}-\u{1F3C1}\u{1F3C5}\u{1F3C6}\u{1F3C8}\u{1F3C9}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F8}-\u{1F407}\u{1F409}-\u{1F414}\u{1F416}-\u{1F43A}\u{1F43C}-\u{1F43E}\u{1F440}\u{1F444}\u{1F445}\u{1F451}-\u{1F465}\u{1F46A}\u{1F479}-\u{1F47B}\u{1F47D}-\u{1F480}\u{1F484}\u{1F488}-\u{1F48E}\u{1F490}\u{1F492}-\u{1F4A9}\u{1F4AB}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F5A4}\u{1F5FB}-\u{1F62D}\u{1F62F}-\u{1F634}\u{1F637}-\u{1F644}\u{1F648}-\u{1F64A}\u{1F680}-\u{1F6A2}\u{1F6A4}-\u{1F6B3}\u{1F6B7}-\u{1F6BF}\u{1F6C1}-\u{1F6C5}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90D}\u{1F90E}\u{1F910}-\u{1F917}\u{1F91D}\u{1F920}-\u{1F925}\u{1F927}-\u{1F92F}\u{1F93A}\u{1F93F}-\u{1F945}\u{1F947}-\u{1F976}\u{1F978}\u{1F97A}-\u{1F9B4}\u{1F9B7}\u{1F9BA}\u{1F9BC}-\u{1F9CB}\u{1F9D0}\u{1F9E0}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}-\u{1F6D7}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}]\uFE0F?/gu; +}; diff --git a/node_modules/emoji-regex/index.d.ts b/node_modules/emoji-regex/index.d.ts new file mode 100644 index 00000000..8f235c9a --- /dev/null +++ b/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/index.js b/node_modules/emoji-regex/index.js new file mode 100644 index 00000000..c0490d4c --- /dev/null +++ b/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/emoji-regex/package.json b/node_modules/emoji-regex/package.json new file mode 100644 index 00000000..eac892a1 --- /dev/null +++ b/node_modules/emoji-regex/package.json @@ -0,0 +1,52 @@ +{ + "name": "emoji-regex", + "version": "9.2.2", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "RGI_Emoji.js", + "RGI_Emoji.d.ts", + "text.js", + "text.d.ts", + "es2015" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src es2015_types -D -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.4.4", + "@babel/core": "^7.4.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/preset-env": "^7.4.4", + "@unicode/unicode-13.0.0": "^1.0.3", + "mocha": "^6.1.4", + "regexgen": "^1.3.0" + } +} diff --git a/node_modules/emoji-regex/text.d.ts b/node_modules/emoji-regex/text.d.ts new file mode 100644 index 00000000..c3a01254 --- /dev/null +++ b/node_modules/emoji-regex/text.d.ts @@ -0,0 +1,5 @@ +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export = emojiRegex; +} diff --git a/node_modules/emoji-regex/text.js b/node_modules/emoji-regex/text.js new file mode 100644 index 00000000..9bc63ce7 --- /dev/null +++ b/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F?/g; +}; diff --git a/node_modules/foreground-child/LICENSE b/node_modules/foreground-child/LICENSE new file mode 100644 index 00000000..2d80720f --- /dev/null +++ b/node_modules/foreground-child/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2015-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/foreground-child/README.md b/node_modules/foreground-child/README.md new file mode 100644 index 00000000..477ca571 --- /dev/null +++ b/node_modules/foreground-child/README.md @@ -0,0 +1,128 @@ +# foreground-child + +Run a child as if it's the foreground process. Give it stdio. Exit +when it exits. + +Mostly this module is here to support some use cases around +wrapping child processes for test coverage and such. But it's +also generally useful any time you want one program to execute +another as if it's the "main" process, for example, if a program +takes a `--cmd` argument to execute in some way. + +## USAGE + +```js +import { foregroundChild } from 'foreground-child' +// hybrid module, this also works: +// const { foregroundChild } = require('foreground-child') + +// cats out this file +const child = foregroundChild('cat', [__filename]) + +// At this point, it's best to just do nothing else. +// return or whatever. +// If the child gets a signal, or just exits, then this +// parent process will exit in the same way. +``` + +You can provide custom spawn options by passing an object after +the program and arguments: + +```js +const child = foregroundChild(`cat ${__filename}`, { shell: true }) +``` + +A callback can optionally be provided, if you want to perform an +action before your foreground-child exits: + +```js +const child = foregroundChild('cat', [__filename], spawnOptions, () => { + doSomeActions() +}) +``` + +The callback can return a Promise in order to perform +asynchronous actions. If the callback does not return a promise, +then it must complete its actions within a single JavaScript +tick. + +```js +const child = foregroundChild('cat', [__filename], async () => { + await doSomeAsyncActions() +}) +``` + +If the callback throws or rejects, then it will be unhandled, and +node will exit in error. + +If the callback returns a string value, then that will be used as +the signal to exit the parent process. If it returns a number, +then that number will be used as the parent exit status code. If +it returns boolean `false`, then the parent process will not be +terminated. If it returns `undefined`, then it will exit with the +same signal/code as the child process. + +## Caveats + +The "normal" standard IO file descriptors (0, 1, and 2 for stdin, +stdout, and stderr respectively) are shared with the child process. +Additionally, if there is an IPC channel set up in the parent, then +messages are proxied to the child on file descriptor 3. + +In Node, it's possible to also map arbitrary file descriptors +into a child process. In these cases, foreground-child will not +map the file descriptors into the child. If file descriptors 0, +1, or 2 are used for the IPC channel, then strange behavior may +happen (like printing IPC messages to stderr, for example). + +Note that a SIGKILL will always kill the parent process, but +will not proxy the signal to the child process, because SIGKILL +cannot be caught. In order to address this, a special "watchdog" +child process is spawned which will send a SIGKILL to the child +process if it does not terminate within half a second after the +watchdog receives a SIGHUP due to its parent terminating. + +On Windows, issuing a `process.kill(process.pid, signal)` with a +fatal termination signal may cause the process to exit with a `1` +status code rather than reporting the signal properly. This +module tries to do the right thing, but on Windows systems, you +may see that incorrect result. There is as far as I'm aware no +workaround for this. + +## util: `foreground-child/proxy-signals` + +If you just want to proxy the signals to a child process that the +main process receives, you can use the `proxy-signals` export +from this package. + +```js +import { proxySignals } from 'foreground-child/proxy-signals' + +const childProcess = spawn('command', ['some', 'args']) +proxySignals(childProcess) +``` + +Now, any fatal signal received by the current process will be +proxied to the child process. + +It doesn't go in the other direction; ie, signals sent to the +child process will not affect the parent. For that, listen to the +child `exit` or `close` events, and handle them appropriately. + +## util: `foreground-child/watchdog` + +If you are spawning a child process, and want to ensure that it +isn't left dangling if the parent process exits, you can use the +watchdog utility exported by this module. + +```js +import { watchdog } from 'foreground-child/watchdog' + +const childProcess = spawn('command', ['some', 'args']) +const watchdogProcess = watchdog(childProcess) + +// watchdogProcess is a reference to the process monitoring the +// parent and child. There's usually no reason to do anything +// with it, as it's silent and will terminate +// automatically when it's no longer needed. +``` diff --git a/node_modules/foreground-child/dist/commonjs/all-signals.d.ts b/node_modules/foreground-child/dist/commonjs/all-signals.d.ts new file mode 100644 index 00000000..13c5af46 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/all-signals.d.ts @@ -0,0 +1,3 @@ +/// +export declare const allSignals: NodeJS.Signals[]; +//# sourceMappingURL=all-signals.d.ts.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/all-signals.d.ts.map b/node_modules/foreground-child/dist/commonjs/all-signals.d.ts.map new file mode 100644 index 00000000..400ce7bd --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/all-signals.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"all-signals.d.ts","sourceRoot":"","sources":["../../src/all-signals.ts"],"names":[],"mappings":";AACA,eAAO,MAAM,UAAU,kBASA,CAAA"} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/all-signals.js b/node_modules/foreground-child/dist/commonjs/all-signals.js new file mode 100644 index 00000000..1692af01 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/all-signals.js @@ -0,0 +1,58 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.allSignals = void 0; +const node_constants_1 = __importDefault(require("node:constants")); +exports.allSignals = +// this is the full list of signals that Node will let us do anything with +Object.keys(node_constants_1.default).filter(k => k.startsWith('SIG') && + // https://github.com/tapjs/signal-exit/issues/21 + k !== 'SIGPROF' && + // no sense trying to listen for SIGKILL, it's impossible + k !== 'SIGKILL'); +// These are some obscure signals that are reported by kill -l +// on macOS, Linux, or Windows, but which don't have any mapping +// in Node.js. No sense trying if they're just going to throw +// every time on every platform. +// +// 'SIGEMT', +// 'SIGLOST', +// 'SIGPOLL', +// 'SIGRTMAX', +// 'SIGRTMAX-1', +// 'SIGRTMAX-10', +// 'SIGRTMAX-11', +// 'SIGRTMAX-12', +// 'SIGRTMAX-13', +// 'SIGRTMAX-14', +// 'SIGRTMAX-15', +// 'SIGRTMAX-2', +// 'SIGRTMAX-3', +// 'SIGRTMAX-4', +// 'SIGRTMAX-5', +// 'SIGRTMAX-6', +// 'SIGRTMAX-7', +// 'SIGRTMAX-8', +// 'SIGRTMAX-9', +// 'SIGRTMIN', +// 'SIGRTMIN+1', +// 'SIGRTMIN+10', +// 'SIGRTMIN+11', +// 'SIGRTMIN+12', +// 'SIGRTMIN+13', +// 'SIGRTMIN+14', +// 'SIGRTMIN+15', +// 'SIGRTMIN+16', +// 'SIGRTMIN+2', +// 'SIGRTMIN+3', +// 'SIGRTMIN+4', +// 'SIGRTMIN+5', +// 'SIGRTMIN+6', +// 'SIGRTMIN+7', +// 'SIGRTMIN+8', +// 'SIGRTMIN+9', +// 'SIGSTKFLT', +// 'SIGUNUSED', +//# sourceMappingURL=all-signals.js.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/all-signals.js.map b/node_modules/foreground-child/dist/commonjs/all-signals.js.map new file mode 100644 index 00000000..51c056d7 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/all-signals.js.map @@ -0,0 +1 @@ +{"version":3,"file":"all-signals.js","sourceRoot":"","sources":["../../src/all-signals.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAsC;AACzB,QAAA,UAAU;AACrB,0EAA0E;AAC1E,MAAM,CAAC,IAAI,CAAC,wBAAS,CAAC,CAAC,MAAM,CAC3B,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IACnB,iDAAiD;IACjD,CAAC,KAAK,SAAS;IACf,yDAAyD;IACzD,CAAC,KAAK,SAAS,CACE,CAAA;AAEvB,8DAA8D;AAC9D,gEAAgE;AAChE,6DAA6D;AAC7D,gCAAgC;AAChC,EAAE;AACF,YAAY;AACZ,aAAa;AACb,aAAa;AACb,cAAc;AACd,gBAAgB;AAChB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,cAAc;AACd,gBAAgB;AAChB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,eAAe;AACf,eAAe","sourcesContent":["import constants from 'node:constants'\nexport const allSignals =\n // this is the full list of signals that Node will let us do anything with\n Object.keys(constants).filter(\n k =>\n k.startsWith('SIG') &&\n // https://github.com/tapjs/signal-exit/issues/21\n k !== 'SIGPROF' &&\n // no sense trying to listen for SIGKILL, it's impossible\n k !== 'SIGKILL',\n ) as NodeJS.Signals[]\n\n// These are some obscure signals that are reported by kill -l\n// on macOS, Linux, or Windows, but which don't have any mapping\n// in Node.js. No sense trying if they're just going to throw\n// every time on every platform.\n//\n// 'SIGEMT',\n// 'SIGLOST',\n// 'SIGPOLL',\n// 'SIGRTMAX',\n// 'SIGRTMAX-1',\n// 'SIGRTMAX-10',\n// 'SIGRTMAX-11',\n// 'SIGRTMAX-12',\n// 'SIGRTMAX-13',\n// 'SIGRTMAX-14',\n// 'SIGRTMAX-15',\n// 'SIGRTMAX-2',\n// 'SIGRTMAX-3',\n// 'SIGRTMAX-4',\n// 'SIGRTMAX-5',\n// 'SIGRTMAX-6',\n// 'SIGRTMAX-7',\n// 'SIGRTMAX-8',\n// 'SIGRTMAX-9',\n// 'SIGRTMIN',\n// 'SIGRTMIN+1',\n// 'SIGRTMIN+10',\n// 'SIGRTMIN+11',\n// 'SIGRTMIN+12',\n// 'SIGRTMIN+13',\n// 'SIGRTMIN+14',\n// 'SIGRTMIN+15',\n// 'SIGRTMIN+16',\n// 'SIGRTMIN+2',\n// 'SIGRTMIN+3',\n// 'SIGRTMIN+4',\n// 'SIGRTMIN+5',\n// 'SIGRTMIN+6',\n// 'SIGRTMIN+7',\n// 'SIGRTMIN+8',\n// 'SIGRTMIN+9',\n// 'SIGSTKFLT',\n// 'SIGUNUSED',\n"]} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/index.d.ts b/node_modules/foreground-child/dist/commonjs/index.d.ts new file mode 100644 index 00000000..d0feeae1 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/index.d.ts @@ -0,0 +1,65 @@ +/// +/// +import { ChildProcessByStdio, SpawnOptions, ChildProcess } from 'child_process'; +/** + * The signature for the cleanup method. + * + * Arguments indicate the exit status of the child process. + * + * If a Promise is returned, then the process is not terminated + * until it resolves, and the resolution value is treated as the + * exit status (if a number) or signal exit (if a signal string). + * + * If `undefined` is returned, then no change is made, and the parent + * exits in the same way that the child exited. + * + * If boolean `false` is returned, then the parent's exit is canceled. + * + * If a number is returned, then the parent process exits with the number + * as its exitCode. + * + * If a signal string is returned, then the parent process is killed with + * the same signal that caused the child to exit. + */ +export type Cleanup = (code: number | null, signal: null | NodeJS.Signals, processInfo: { + watchdogPid?: ChildProcess['pid']; +}) => void | undefined | number | NodeJS.Signals | false | Promise; +export type FgArgs = [program: string | [cmd: string, ...args: string[]], cleanup?: Cleanup] | [ + program: [cmd: string, ...args: string[]], + opts?: SpawnOptions, + cleanup?: Cleanup +] | [program: string, cleanup?: Cleanup] | [program: string, opts?: SpawnOptions, cleanup?: Cleanup] | [program: string, args?: string[], cleanup?: Cleanup] | [ + program: string, + args?: string[], + opts?: SpawnOptions, + cleanup?: Cleanup +]; +/** + * Normalizes the arguments passed to `foregroundChild`. + * + * Exposed for testing. + * + * @internal + */ +export declare const normalizeFgArgs: (fgArgs: FgArgs) => [ + program: string, + args: string[], + spawnOpts: SpawnOptions, + cleanup: Cleanup +]; +/** + * Spawn the specified program as a "foreground" process, or at least as + * close as is possible given node's lack of exec-without-fork. + * + * Cleanup method may be used to modify or ignore the result of the child's + * exit code or signal. If cleanup returns undefined (or a Promise that + * resolves to undefined), then the parent will exit in the same way that + * the child did. + * + * Return boolean `false` to prevent the parent's exit entirely. + */ +export declare function foregroundChild(cmd: string | [cmd: string, ...args: string[]], cleanup?: Cleanup): ChildProcessByStdio; +export declare function foregroundChild(program: string, args?: string[], cleanup?: Cleanup): ChildProcessByStdio; +export declare function foregroundChild(program: string, spawnOpts?: SpawnOptions, cleanup?: Cleanup): ChildProcessByStdio; +export declare function foregroundChild(program: string, args?: string[], spawnOpts?: SpawnOptions, cleanup?: Cleanup): ChildProcessByStdio; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/index.d.ts.map b/node_modules/foreground-child/dist/commonjs/index.d.ts.map new file mode 100644 index 00000000..6248fb71 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,mBAAmB,EAInB,YAAY,EACZ,YAAY,EACb,MAAM,eAAe,CAAA;AAUtB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,OAAO,GAAG,CACpB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,OAAO,EAC7B,WAAW,EAAE;IACX,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CAClC,KAEC,IAAI,GACJ,SAAS,GACT,MAAM,GACN,MAAM,CAAC,OAAO,GACd,KAAK,GACL,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAA;AAE/D,MAAM,MAAM,MAAM,GACd,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GACvE;IACE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC;IACzC,IAAI,CAAC,EAAE,YAAY;IACnB,OAAO,CAAC,EAAE,OAAO;CAClB,GACD,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GACpC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GACzD,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GACrD;IACE,OAAO,EAAE,MAAM;IACf,IAAI,CAAC,EAAE,MAAM,EAAE;IACf,IAAI,CAAC,EAAE,YAAY;IACnB,OAAO,CAAC,EAAE,OAAO;CAClB,CAAA;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAClB,MAAM,KACb;IACD,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM,EAAE;IACd,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,OAAO;CAqBjB,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,EAC9C,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACxC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACxC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,YAAY,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACxC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,SAAS,CAAC,EAAE,YAAY,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA"} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/index.js b/node_modules/foreground-child/dist/commonjs/index.js new file mode 100644 index 00000000..07a01c58 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/index.js @@ -0,0 +1,123 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.foregroundChild = exports.normalizeFgArgs = void 0; +const child_process_1 = require("child_process"); +const cross_spawn_1 = __importDefault(require("cross-spawn")); +const signal_exit_1 = require("signal-exit"); +const proxy_signals_js_1 = require("./proxy-signals.js"); +const watchdog_js_1 = require("./watchdog.js"); +/* c8 ignore start */ +const spawn = process?.platform === 'win32' ? cross_spawn_1.default : child_process_1.spawn; +/** + * Normalizes the arguments passed to `foregroundChild`. + * + * Exposed for testing. + * + * @internal + */ +const normalizeFgArgs = (fgArgs) => { + let [program, args = [], spawnOpts = {}, cleanup = () => { }] = fgArgs; + if (typeof args === 'function') { + cleanup = args; + spawnOpts = {}; + args = []; + } + else if (!!args && typeof args === 'object' && !Array.isArray(args)) { + if (typeof spawnOpts === 'function') + cleanup = spawnOpts; + spawnOpts = args; + args = []; + } + else if (typeof spawnOpts === 'function') { + cleanup = spawnOpts; + spawnOpts = {}; + } + if (Array.isArray(program)) { + const [pp, ...pa] = program; + program = pp; + args = pa; + } + return [program, args, { ...spawnOpts }, cleanup]; +}; +exports.normalizeFgArgs = normalizeFgArgs; +function foregroundChild(...fgArgs) { + const [program, args, spawnOpts, cleanup] = (0, exports.normalizeFgArgs)(fgArgs); + spawnOpts.stdio = [0, 1, 2]; + if (process.send) { + spawnOpts.stdio.push('ipc'); + } + const child = spawn(program, args, spawnOpts); + const childHangup = () => { + try { + child.kill('SIGHUP'); + /* c8 ignore start */ + } + catch (_) { + // SIGHUP is weird on windows + child.kill('SIGTERM'); + } + /* c8 ignore stop */ + }; + const removeOnExit = (0, signal_exit_1.onExit)(childHangup); + (0, proxy_signals_js_1.proxySignals)(child); + const dog = (0, watchdog_js_1.watchdog)(child); + let done = false; + child.on('close', async (code, signal) => { + /* c8 ignore start */ + if (done) + return; + /* c8 ignore stop */ + done = true; + const result = cleanup(code, signal, { + watchdogPid: dog.pid, + }); + const res = isPromise(result) ? await result : result; + removeOnExit(); + if (res === false) + return; + else if (typeof res === 'string') { + signal = res; + code = null; + } + else if (typeof res === 'number') { + code = res; + signal = null; + } + if (signal) { + // If there is nothing else keeping the event loop alive, + // then there's a race between a graceful exit and getting + // the signal to this process. Put this timeout here to + // make sure we're still alive to get the signal, and thus + // exit with the intended signal code. + /* istanbul ignore next */ + setTimeout(() => { }, 2000); + try { + process.kill(process.pid, signal); + /* c8 ignore start */ + } + catch (_) { + process.kill(process.pid, 'SIGTERM'); + } + /* c8 ignore stop */ + } + else { + process.exit(code || 0); + } + }); + if (process.send) { + process.removeAllListeners('message'); + child.on('message', (message, sendHandle) => { + process.send?.(message, sendHandle); + }); + process.on('message', (message, sendHandle) => { + child.send(message, sendHandle); + }); + } + return child; +} +exports.foregroundChild = foregroundChild; +const isPromise = (o) => !!o && typeof o === 'object' && typeof o.then === 'function'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/index.js.map b/node_modules/foreground-child/dist/commonjs/index.js.map new file mode 100644 index 00000000..f45654e1 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ChildProcessByStdio,\n SendHandle,\n Serializable,\n spawn as nodeSpawn,\n SpawnOptions,\n ChildProcess,\n} from 'child_process'\nimport crossSpawn from 'cross-spawn'\nimport { onExit } from 'signal-exit'\nimport { proxySignals } from './proxy-signals.js'\nimport { watchdog } from './watchdog.js'\n\n/* c8 ignore start */\nconst spawn = process?.platform === 'win32' ? crossSpawn : nodeSpawn\n/* c8 ignore stop */\n\n/**\n * The signature for the cleanup method.\n *\n * Arguments indicate the exit status of the child process.\n *\n * If a Promise is returned, then the process is not terminated\n * until it resolves, and the resolution value is treated as the\n * exit status (if a number) or signal exit (if a signal string).\n *\n * If `undefined` is returned, then no change is made, and the parent\n * exits in the same way that the child exited.\n *\n * If boolean `false` is returned, then the parent's exit is canceled.\n *\n * If a number is returned, then the parent process exits with the number\n * as its exitCode.\n *\n * If a signal string is returned, then the parent process is killed with\n * the same signal that caused the child to exit.\n */\nexport type Cleanup = (\n code: number | null,\n signal: null | NodeJS.Signals,\n processInfo: {\n watchdogPid?: ChildProcess['pid']\n },\n) =>\n | void\n | undefined\n | number\n | NodeJS.Signals\n | false\n | Promise\n\nexport type FgArgs =\n | [program: string | [cmd: string, ...args: string[]], cleanup?: Cleanup]\n | [\n program: [cmd: string, ...args: string[]],\n opts?: SpawnOptions,\n cleanup?: Cleanup,\n ]\n | [program: string, cleanup?: Cleanup]\n | [program: string, opts?: SpawnOptions, cleanup?: Cleanup]\n | [program: string, args?: string[], cleanup?: Cleanup]\n | [\n program: string,\n args?: string[],\n opts?: SpawnOptions,\n cleanup?: Cleanup,\n ]\n\n/**\n * Normalizes the arguments passed to `foregroundChild`.\n *\n * Exposed for testing.\n *\n * @internal\n */\nexport const normalizeFgArgs = (\n fgArgs: FgArgs,\n): [\n program: string,\n args: string[],\n spawnOpts: SpawnOptions,\n cleanup: Cleanup,\n] => {\n let [program, args = [], spawnOpts = {}, cleanup = () => {}] = fgArgs\n if (typeof args === 'function') {\n cleanup = args\n spawnOpts = {}\n args = []\n } else if (!!args && typeof args === 'object' && !Array.isArray(args)) {\n if (typeof spawnOpts === 'function') cleanup = spawnOpts\n spawnOpts = args\n args = []\n } else if (typeof spawnOpts === 'function') {\n cleanup = spawnOpts\n spawnOpts = {}\n }\n if (Array.isArray(program)) {\n const [pp, ...pa] = program\n program = pp\n args = pa\n }\n return [program, args, { ...spawnOpts }, cleanup]\n}\n\n/**\n * Spawn the specified program as a \"foreground\" process, or at least as\n * close as is possible given node's lack of exec-without-fork.\n *\n * Cleanup method may be used to modify or ignore the result of the child's\n * exit code or signal. If cleanup returns undefined (or a Promise that\n * resolves to undefined), then the parent will exit in the same way that\n * the child did.\n *\n * Return boolean `false` to prevent the parent's exit entirely.\n */\nexport function foregroundChild(\n cmd: string | [cmd: string, ...args: string[]],\n cleanup?: Cleanup,\n): ChildProcessByStdio\nexport function foregroundChild(\n program: string,\n args?: string[],\n cleanup?: Cleanup,\n): ChildProcessByStdio\nexport function foregroundChild(\n program: string,\n spawnOpts?: SpawnOptions,\n cleanup?: Cleanup,\n): ChildProcessByStdio\nexport function foregroundChild(\n program: string,\n args?: string[],\n spawnOpts?: SpawnOptions,\n cleanup?: Cleanup,\n): ChildProcessByStdio\nexport function foregroundChild(\n ...fgArgs: FgArgs\n): ChildProcessByStdio {\n const [program, args, spawnOpts, cleanup] = normalizeFgArgs(fgArgs)\n\n spawnOpts.stdio = [0, 1, 2]\n if (process.send) {\n spawnOpts.stdio.push('ipc')\n }\n\n const child = spawn(program, args, spawnOpts) as ChildProcessByStdio<\n null,\n null,\n null\n >\n\n const childHangup = () => {\n try {\n child.kill('SIGHUP')\n\n /* c8 ignore start */\n } catch (_) {\n // SIGHUP is weird on windows\n child.kill('SIGTERM')\n }\n /* c8 ignore stop */\n }\n const removeOnExit = onExit(childHangup)\n\n proxySignals(child)\n const dog = watchdog(child)\n\n let done = false\n child.on('close', async (code, signal) => {\n /* c8 ignore start */\n if (done) return\n /* c8 ignore stop */\n done = true\n const result = cleanup(code, signal, {\n watchdogPid: dog.pid,\n })\n const res = isPromise(result) ? await result : result\n removeOnExit()\n\n if (res === false) return\n else if (typeof res === 'string') {\n signal = res\n code = null\n } else if (typeof res === 'number') {\n code = res\n signal = null\n }\n\n if (signal) {\n // If there is nothing else keeping the event loop alive,\n // then there's a race between a graceful exit and getting\n // the signal to this process. Put this timeout here to\n // make sure we're still alive to get the signal, and thus\n // exit with the intended signal code.\n /* istanbul ignore next */\n setTimeout(() => {}, 2000)\n try {\n process.kill(process.pid, signal)\n /* c8 ignore start */\n } catch (_) {\n process.kill(process.pid, 'SIGTERM')\n }\n /* c8 ignore stop */\n } else {\n process.exit(code || 0)\n }\n })\n\n if (process.send) {\n process.removeAllListeners('message')\n\n child.on('message', (message, sendHandle) => {\n process.send?.(message, sendHandle)\n })\n\n process.on('message', (message, sendHandle) => {\n child.send(\n message as Serializable,\n sendHandle as SendHandle | undefined,\n )\n })\n }\n\n return child\n}\n\nconst isPromise = (o: any): o is Promise =>\n !!o && typeof o === 'object' && typeof o.then === 'function'\n"]} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/package.json b/node_modules/foreground-child/dist/commonjs/package.json new file mode 100644 index 00000000..5bbefffb --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts b/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts new file mode 100644 index 00000000..66090fd8 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts @@ -0,0 +1,7 @@ +/// +import { type ChildProcess } from 'child_process'; +/** + * Starts forwarding signals to `child` through `parent`. + */ +export declare const proxySignals: (child: ChildProcess) => () => void; +//# sourceMappingURL=proxy-signals.d.ts.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts.map b/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts.map new file mode 100644 index 00000000..9c98b7fc --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/proxy-signals.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"proxy-signals.d.ts","sourceRoot":"","sources":["../../src/proxy-signals.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjD;;GAEG;AACH,eAAO,MAAM,YAAY,UAAW,YAAY,eA4B/C,CAAA"} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/proxy-signals.js b/node_modules/foreground-child/dist/commonjs/proxy-signals.js new file mode 100644 index 00000000..3913e7b4 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/proxy-signals.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.proxySignals = void 0; +const all_signals_js_1 = require("./all-signals.js"); +/** + * Starts forwarding signals to `child` through `parent`. + */ +const proxySignals = (child) => { + const listeners = new Map(); + for (const sig of all_signals_js_1.allSignals) { + const listener = () => { + // some signals can only be received, not sent + try { + child.kill(sig); + /* c8 ignore start */ + } + catch (_) { } + /* c8 ignore stop */ + }; + try { + // if it's a signal this system doesn't recognize, skip it + process.on(sig, listener); + listeners.set(sig, listener); + /* c8 ignore start */ + } + catch (_) { } + /* c8 ignore stop */ + } + const unproxy = () => { + for (const [sig, listener] of listeners) { + process.removeListener(sig, listener); + } + }; + child.on('exit', unproxy); + return unproxy; +}; +exports.proxySignals = proxySignals; +//# sourceMappingURL=proxy-signals.js.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/proxy-signals.js.map b/node_modules/foreground-child/dist/commonjs/proxy-signals.js.map new file mode 100644 index 00000000..19958227 --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/proxy-signals.js.map @@ -0,0 +1 @@ +{"version":3,"file":"proxy-signals.js","sourceRoot":"","sources":["../../src/proxy-signals.ts"],"names":[],"mappings":";;;AACA,qDAA6C;AAE7C;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,EAAE;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAA;IAE3B,KAAK,MAAM,GAAG,IAAI,2BAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,8CAA8C;YAC9C,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACf,qBAAqB;YACvB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;YACd,oBAAoB;QACtB,CAAC,CAAA;QACD,IAAI,CAAC;YACH,0DAA0D;YAC1D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YACzB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YAC5B,qBAAqB;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QACd,oBAAoB;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACvC,CAAC;IACH,CAAC,CAAA;IACD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzB,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AA5BY,QAAA,YAAY,gBA4BxB","sourcesContent":["import { type ChildProcess } from 'child_process'\nimport { allSignals } from './all-signals.js'\n\n/**\n * Starts forwarding signals to `child` through `parent`.\n */\nexport const proxySignals = (child: ChildProcess) => {\n const listeners = new Map()\n\n for (const sig of allSignals) {\n const listener = () => {\n // some signals can only be received, not sent\n try {\n child.kill(sig)\n /* c8 ignore start */\n } catch (_) {}\n /* c8 ignore stop */\n }\n try {\n // if it's a signal this system doesn't recognize, skip it\n process.on(sig, listener)\n listeners.set(sig, listener)\n /* c8 ignore start */\n } catch (_) {}\n /* c8 ignore stop */\n }\n\n const unproxy = () => {\n for (const [sig, listener] of listeners) {\n process.removeListener(sig, listener)\n }\n }\n child.on('exit', unproxy)\n return unproxy\n}\n"]} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/watchdog.d.ts b/node_modules/foreground-child/dist/commonjs/watchdog.d.ts new file mode 100644 index 00000000..6038d39a --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/watchdog.d.ts @@ -0,0 +1,11 @@ +/// +import { ChildProcess } from 'child_process'; +/** + * Pass in a ChildProcess, and this will spawn a watchdog process that + * will make sure it exits if the parent does, thus preventing any + * dangling detached zombie processes. + * + * If the child ends before the parent, then the watchdog will terminate. + */ +export declare const watchdog: (child: ChildProcess) => ChildProcess; +//# sourceMappingURL=watchdog.d.ts.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/watchdog.d.ts.map b/node_modules/foreground-child/dist/commonjs/watchdog.d.ts.map new file mode 100644 index 00000000..cc6a668f --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/watchdog.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"watchdog.d.ts","sourceRoot":"","sources":["../../src/watchdog.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,YAAY,EAAS,MAAM,eAAe,CAAA;AAyBnD;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,UAAW,YAAY,iBAc3C,CAAA"} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/watchdog.js b/node_modules/foreground-child/dist/commonjs/watchdog.js new file mode 100644 index 00000000..514e234c --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/watchdog.js @@ -0,0 +1,50 @@ +"use strict"; +// this spawns a child process that listens for SIGHUP when the +// parent process exits, and after 200ms, sends a SIGKILL to the +// child, in case it did not terminate. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.watchdog = void 0; +const child_process_1 = require("child_process"); +const watchdogCode = String.raw ` +const pid = parseInt(process.argv[1], 10) +process.title = 'node (foreground-child watchdog pid=' + pid + ')' +if (!isNaN(pid)) { + let barked = false + // keepalive + const interval = setInterval(() => {}, 60000) + const bark = () => { + clearInterval(interval) + if (barked) return + barked = true + process.removeListener('SIGHUP', bark) + setTimeout(() => { + try { + process.kill(pid, 'SIGKILL') + setTimeout(() => process.exit(), 200) + } catch (_) {} + }, 500) + }) + process.on('SIGHUP', bark) +} +`; +/** + * Pass in a ChildProcess, and this will spawn a watchdog process that + * will make sure it exits if the parent does, thus preventing any + * dangling detached zombie processes. + * + * If the child ends before the parent, then the watchdog will terminate. + */ +const watchdog = (child) => { + let dogExited = false; + const dog = (0, child_process_1.spawn)(process.execPath, ['-e', watchdogCode, String(child.pid)], { + stdio: 'ignore', + }); + dog.on('exit', () => (dogExited = true)); + child.on('exit', () => { + if (!dogExited) + dog.kill('SIGKILL'); + }); + return dog; +}; +exports.watchdog = watchdog; +//# sourceMappingURL=watchdog.js.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/commonjs/watchdog.js.map b/node_modules/foreground-child/dist/commonjs/watchdog.js.map new file mode 100644 index 00000000..d486c97a --- /dev/null +++ b/node_modules/foreground-child/dist/commonjs/watchdog.js.map @@ -0,0 +1 @@ +{"version":3,"file":"watchdog.js","sourceRoot":"","sources":["../../src/watchdog.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,gEAAgE;AAChE,uCAAuC;;;AAEvC,iDAAmD;AAEnD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;CAqB9B,CAAA;AAED;;;;;;GAMG;AACI,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAE,EAAE;IAC9C,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,MAAM,GAAG,GAAG,IAAA,qBAAK,EACf,OAAO,CAAC,QAAQ,EAChB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACvC;QACE,KAAK,EAAE,QAAQ;KAChB,CACF,CAAA;IACD,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAA;IACxC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,IAAI,CAAC,SAAS;YAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAdY,QAAA,QAAQ,YAcpB","sourcesContent":["// this spawns a child process that listens for SIGHUP when the\n// parent process exits, and after 200ms, sends a SIGKILL to the\n// child, in case it did not terminate.\n\nimport { ChildProcess, spawn } from 'child_process'\n\nconst watchdogCode = String.raw`\nconst pid = parseInt(process.argv[1], 10)\nprocess.title = 'node (foreground-child watchdog pid=' + pid + ')'\nif (!isNaN(pid)) {\n let barked = false\n // keepalive\n const interval = setInterval(() => {}, 60000)\n const bark = () => {\n clearInterval(interval)\n if (barked) return\n barked = true\n process.removeListener('SIGHUP', bark)\n setTimeout(() => {\n try {\n process.kill(pid, 'SIGKILL')\n setTimeout(() => process.exit(), 200)\n } catch (_) {}\n }, 500)\n })\n process.on('SIGHUP', bark)\n}\n`\n\n/**\n * Pass in a ChildProcess, and this will spawn a watchdog process that\n * will make sure it exits if the parent does, thus preventing any\n * dangling detached zombie processes.\n *\n * If the child ends before the parent, then the watchdog will terminate.\n */\nexport const watchdog = (child: ChildProcess) => {\n let dogExited = false\n const dog = spawn(\n process.execPath,\n ['-e', watchdogCode, String(child.pid)],\n {\n stdio: 'ignore',\n },\n )\n dog.on('exit', () => (dogExited = true))\n child.on('exit', () => {\n if (!dogExited) dog.kill('SIGKILL')\n })\n return dog\n}\n"]} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/all-signals.d.ts b/node_modules/foreground-child/dist/esm/all-signals.d.ts new file mode 100644 index 00000000..eefd0d2c --- /dev/null +++ b/node_modules/foreground-child/dist/esm/all-signals.d.ts @@ -0,0 +1,3 @@ +/// +export declare const allSignals: NodeJS.Signals[]; +//# sourceMappingURL=all-signals.d.ts.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/all-signals.d.ts.map b/node_modules/foreground-child/dist/esm/all-signals.d.ts.map new file mode 100644 index 00000000..400ce7bd --- /dev/null +++ b/node_modules/foreground-child/dist/esm/all-signals.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"all-signals.d.ts","sourceRoot":"","sources":["../../src/all-signals.ts"],"names":[],"mappings":";AACA,eAAO,MAAM,UAAU,kBASA,CAAA"} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/all-signals.js b/node_modules/foreground-child/dist/esm/all-signals.js new file mode 100644 index 00000000..7e8d54d5 --- /dev/null +++ b/node_modules/foreground-child/dist/esm/all-signals.js @@ -0,0 +1,52 @@ +import constants from 'node:constants'; +export const allSignals = +// this is the full list of signals that Node will let us do anything with +Object.keys(constants).filter(k => k.startsWith('SIG') && + // https://github.com/tapjs/signal-exit/issues/21 + k !== 'SIGPROF' && + // no sense trying to listen for SIGKILL, it's impossible + k !== 'SIGKILL'); +// These are some obscure signals that are reported by kill -l +// on macOS, Linux, or Windows, but which don't have any mapping +// in Node.js. No sense trying if they're just going to throw +// every time on every platform. +// +// 'SIGEMT', +// 'SIGLOST', +// 'SIGPOLL', +// 'SIGRTMAX', +// 'SIGRTMAX-1', +// 'SIGRTMAX-10', +// 'SIGRTMAX-11', +// 'SIGRTMAX-12', +// 'SIGRTMAX-13', +// 'SIGRTMAX-14', +// 'SIGRTMAX-15', +// 'SIGRTMAX-2', +// 'SIGRTMAX-3', +// 'SIGRTMAX-4', +// 'SIGRTMAX-5', +// 'SIGRTMAX-6', +// 'SIGRTMAX-7', +// 'SIGRTMAX-8', +// 'SIGRTMAX-9', +// 'SIGRTMIN', +// 'SIGRTMIN+1', +// 'SIGRTMIN+10', +// 'SIGRTMIN+11', +// 'SIGRTMIN+12', +// 'SIGRTMIN+13', +// 'SIGRTMIN+14', +// 'SIGRTMIN+15', +// 'SIGRTMIN+16', +// 'SIGRTMIN+2', +// 'SIGRTMIN+3', +// 'SIGRTMIN+4', +// 'SIGRTMIN+5', +// 'SIGRTMIN+6', +// 'SIGRTMIN+7', +// 'SIGRTMIN+8', +// 'SIGRTMIN+9', +// 'SIGSTKFLT', +// 'SIGUNUSED', +//# sourceMappingURL=all-signals.js.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/all-signals.js.map b/node_modules/foreground-child/dist/esm/all-signals.js.map new file mode 100644 index 00000000..1c63c6b9 --- /dev/null +++ b/node_modules/foreground-child/dist/esm/all-signals.js.map @@ -0,0 +1 @@ +{"version":3,"file":"all-signals.js","sourceRoot":"","sources":["../../src/all-signals.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,MAAM,CAAC,MAAM,UAAU;AACrB,0EAA0E;AAC1E,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAC3B,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IACnB,iDAAiD;IACjD,CAAC,KAAK,SAAS;IACf,yDAAyD;IACzD,CAAC,KAAK,SAAS,CACE,CAAA;AAEvB,8DAA8D;AAC9D,gEAAgE;AAChE,6DAA6D;AAC7D,gCAAgC;AAChC,EAAE;AACF,YAAY;AACZ,aAAa;AACb,aAAa;AACb,cAAc;AACd,gBAAgB;AAChB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,cAAc;AACd,gBAAgB;AAChB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,gBAAgB;AAChB,eAAe;AACf,eAAe","sourcesContent":["import constants from 'node:constants'\nexport const allSignals =\n // this is the full list of signals that Node will let us do anything with\n Object.keys(constants).filter(\n k =>\n k.startsWith('SIG') &&\n // https://github.com/tapjs/signal-exit/issues/21\n k !== 'SIGPROF' &&\n // no sense trying to listen for SIGKILL, it's impossible\n k !== 'SIGKILL',\n ) as NodeJS.Signals[]\n\n// These are some obscure signals that are reported by kill -l\n// on macOS, Linux, or Windows, but which don't have any mapping\n// in Node.js. No sense trying if they're just going to throw\n// every time on every platform.\n//\n// 'SIGEMT',\n// 'SIGLOST',\n// 'SIGPOLL',\n// 'SIGRTMAX',\n// 'SIGRTMAX-1',\n// 'SIGRTMAX-10',\n// 'SIGRTMAX-11',\n// 'SIGRTMAX-12',\n// 'SIGRTMAX-13',\n// 'SIGRTMAX-14',\n// 'SIGRTMAX-15',\n// 'SIGRTMAX-2',\n// 'SIGRTMAX-3',\n// 'SIGRTMAX-4',\n// 'SIGRTMAX-5',\n// 'SIGRTMAX-6',\n// 'SIGRTMAX-7',\n// 'SIGRTMAX-8',\n// 'SIGRTMAX-9',\n// 'SIGRTMIN',\n// 'SIGRTMIN+1',\n// 'SIGRTMIN+10',\n// 'SIGRTMIN+11',\n// 'SIGRTMIN+12',\n// 'SIGRTMIN+13',\n// 'SIGRTMIN+14',\n// 'SIGRTMIN+15',\n// 'SIGRTMIN+16',\n// 'SIGRTMIN+2',\n// 'SIGRTMIN+3',\n// 'SIGRTMIN+4',\n// 'SIGRTMIN+5',\n// 'SIGRTMIN+6',\n// 'SIGRTMIN+7',\n// 'SIGRTMIN+8',\n// 'SIGRTMIN+9',\n// 'SIGSTKFLT',\n// 'SIGUNUSED',\n"]} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/index.d.ts b/node_modules/foreground-child/dist/esm/index.d.ts new file mode 100644 index 00000000..6d079ebc --- /dev/null +++ b/node_modules/foreground-child/dist/esm/index.d.ts @@ -0,0 +1,65 @@ +/// +/// +import { ChildProcessByStdio, SpawnOptions, ChildProcess } from 'child_process'; +/** + * The signature for the cleanup method. + * + * Arguments indicate the exit status of the child process. + * + * If a Promise is returned, then the process is not terminated + * until it resolves, and the resolution value is treated as the + * exit status (if a number) or signal exit (if a signal string). + * + * If `undefined` is returned, then no change is made, and the parent + * exits in the same way that the child exited. + * + * If boolean `false` is returned, then the parent's exit is canceled. + * + * If a number is returned, then the parent process exits with the number + * as its exitCode. + * + * If a signal string is returned, then the parent process is killed with + * the same signal that caused the child to exit. + */ +export type Cleanup = (code: number | null, signal: null | NodeJS.Signals, processInfo: { + watchdogPid?: ChildProcess['pid']; +}) => void | undefined | number | NodeJS.Signals | false | Promise; +export type FgArgs = [program: string | [cmd: string, ...args: string[]], cleanup?: Cleanup] | [ + program: [cmd: string, ...args: string[]], + opts?: SpawnOptions, + cleanup?: Cleanup +] | [program: string, cleanup?: Cleanup] | [program: string, opts?: SpawnOptions, cleanup?: Cleanup] | [program: string, args?: string[], cleanup?: Cleanup] | [ + program: string, + args?: string[], + opts?: SpawnOptions, + cleanup?: Cleanup +]; +/** + * Normalizes the arguments passed to `foregroundChild`. + * + * Exposed for testing. + * + * @internal + */ +export declare const normalizeFgArgs: (fgArgs: FgArgs) => [ + program: string, + args: string[], + spawnOpts: SpawnOptions, + cleanup: Cleanup +]; +/** + * Spawn the specified program as a "foreground" process, or at least as + * close as is possible given node's lack of exec-without-fork. + * + * Cleanup method may be used to modify or ignore the result of the child's + * exit code or signal. If cleanup returns undefined (or a Promise that + * resolves to undefined), then the parent will exit in the same way that + * the child did. + * + * Return boolean `false` to prevent the parent's exit entirely. + */ +export declare function foregroundChild(cmd: string | [cmd: string, ...args: string[]], cleanup?: Cleanup): ChildProcessByStdio; +export declare function foregroundChild(program: string, args?: string[], cleanup?: Cleanup): ChildProcessByStdio; +export declare function foregroundChild(program: string, spawnOpts?: SpawnOptions, cleanup?: Cleanup): ChildProcessByStdio; +export declare function foregroundChild(program: string, args?: string[], spawnOpts?: SpawnOptions, cleanup?: Cleanup): ChildProcessByStdio; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/index.d.ts.map b/node_modules/foreground-child/dist/esm/index.d.ts.map new file mode 100644 index 00000000..6248fb71 --- /dev/null +++ b/node_modules/foreground-child/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,mBAAmB,EAInB,YAAY,EACZ,YAAY,EACb,MAAM,eAAe,CAAA;AAUtB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,OAAO,GAAG,CACpB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,OAAO,EAC7B,WAAW,EAAE;IACX,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CAClC,KAEC,IAAI,GACJ,SAAS,GACT,MAAM,GACN,MAAM,CAAC,OAAO,GACd,KAAK,GACL,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAA;AAE/D,MAAM,MAAM,MAAM,GACd,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GACvE;IACE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC;IACzC,IAAI,CAAC,EAAE,YAAY;IACnB,OAAO,CAAC,EAAE,OAAO;CAClB,GACD,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GACpC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GACzD,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GACrD;IACE,OAAO,EAAE,MAAM;IACf,IAAI,CAAC,EAAE,MAAM,EAAE;IACf,IAAI,CAAC,EAAE,YAAY;IACnB,OAAO,CAAC,EAAE,OAAO;CAClB,CAAA;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAClB,MAAM,KACb;IACD,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM,EAAE;IACd,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,OAAO;CAqBjB,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,EAC9C,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACxC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACxC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,YAAY,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACxC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,SAAS,CAAC,EAAE,YAAY,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA"} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/index.js b/node_modules/foreground-child/dist/esm/index.js new file mode 100644 index 00000000..6266b584 --- /dev/null +++ b/node_modules/foreground-child/dist/esm/index.js @@ -0,0 +1,115 @@ +import { spawn as nodeSpawn, } from 'child_process'; +import crossSpawn from 'cross-spawn'; +import { onExit } from 'signal-exit'; +import { proxySignals } from './proxy-signals.js'; +import { watchdog } from './watchdog.js'; +/* c8 ignore start */ +const spawn = process?.platform === 'win32' ? crossSpawn : nodeSpawn; +/** + * Normalizes the arguments passed to `foregroundChild`. + * + * Exposed for testing. + * + * @internal + */ +export const normalizeFgArgs = (fgArgs) => { + let [program, args = [], spawnOpts = {}, cleanup = () => { }] = fgArgs; + if (typeof args === 'function') { + cleanup = args; + spawnOpts = {}; + args = []; + } + else if (!!args && typeof args === 'object' && !Array.isArray(args)) { + if (typeof spawnOpts === 'function') + cleanup = spawnOpts; + spawnOpts = args; + args = []; + } + else if (typeof spawnOpts === 'function') { + cleanup = spawnOpts; + spawnOpts = {}; + } + if (Array.isArray(program)) { + const [pp, ...pa] = program; + program = pp; + args = pa; + } + return [program, args, { ...spawnOpts }, cleanup]; +}; +export function foregroundChild(...fgArgs) { + const [program, args, spawnOpts, cleanup] = normalizeFgArgs(fgArgs); + spawnOpts.stdio = [0, 1, 2]; + if (process.send) { + spawnOpts.stdio.push('ipc'); + } + const child = spawn(program, args, spawnOpts); + const childHangup = () => { + try { + child.kill('SIGHUP'); + /* c8 ignore start */ + } + catch (_) { + // SIGHUP is weird on windows + child.kill('SIGTERM'); + } + /* c8 ignore stop */ + }; + const removeOnExit = onExit(childHangup); + proxySignals(child); + const dog = watchdog(child); + let done = false; + child.on('close', async (code, signal) => { + /* c8 ignore start */ + if (done) + return; + /* c8 ignore stop */ + done = true; + const result = cleanup(code, signal, { + watchdogPid: dog.pid, + }); + const res = isPromise(result) ? await result : result; + removeOnExit(); + if (res === false) + return; + else if (typeof res === 'string') { + signal = res; + code = null; + } + else if (typeof res === 'number') { + code = res; + signal = null; + } + if (signal) { + // If there is nothing else keeping the event loop alive, + // then there's a race between a graceful exit and getting + // the signal to this process. Put this timeout here to + // make sure we're still alive to get the signal, and thus + // exit with the intended signal code. + /* istanbul ignore next */ + setTimeout(() => { }, 2000); + try { + process.kill(process.pid, signal); + /* c8 ignore start */ + } + catch (_) { + process.kill(process.pid, 'SIGTERM'); + } + /* c8 ignore stop */ + } + else { + process.exit(code || 0); + } + }); + if (process.send) { + process.removeAllListeners('message'); + child.on('message', (message, sendHandle) => { + process.send?.(message, sendHandle); + }); + process.on('message', (message, sendHandle) => { + child.send(message, sendHandle); + }); + } + return child; +} +const isPromise = (o) => !!o && typeof o === 'object' && typeof o.then === 'function'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/index.js.map b/node_modules/foreground-child/dist/esm/index.js.map new file mode 100644 index 00000000..7d9d1bd0 --- /dev/null +++ b/node_modules/foreground-child/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ChildProcessByStdio,\n SendHandle,\n Serializable,\n spawn as nodeSpawn,\n SpawnOptions,\n ChildProcess,\n} from 'child_process'\nimport crossSpawn from 'cross-spawn'\nimport { onExit } from 'signal-exit'\nimport { proxySignals } from './proxy-signals.js'\nimport { watchdog } from './watchdog.js'\n\n/* c8 ignore start */\nconst spawn = process?.platform === 'win32' ? crossSpawn : nodeSpawn\n/* c8 ignore stop */\n\n/**\n * The signature for the cleanup method.\n *\n * Arguments indicate the exit status of the child process.\n *\n * If a Promise is returned, then the process is not terminated\n * until it resolves, and the resolution value is treated as the\n * exit status (if a number) or signal exit (if a signal string).\n *\n * If `undefined` is returned, then no change is made, and the parent\n * exits in the same way that the child exited.\n *\n * If boolean `false` is returned, then the parent's exit is canceled.\n *\n * If a number is returned, then the parent process exits with the number\n * as its exitCode.\n *\n * If a signal string is returned, then the parent process is killed with\n * the same signal that caused the child to exit.\n */\nexport type Cleanup = (\n code: number | null,\n signal: null | NodeJS.Signals,\n processInfo: {\n watchdogPid?: ChildProcess['pid']\n },\n) =>\n | void\n | undefined\n | number\n | NodeJS.Signals\n | false\n | Promise\n\nexport type FgArgs =\n | [program: string | [cmd: string, ...args: string[]], cleanup?: Cleanup]\n | [\n program: [cmd: string, ...args: string[]],\n opts?: SpawnOptions,\n cleanup?: Cleanup,\n ]\n | [program: string, cleanup?: Cleanup]\n | [program: string, opts?: SpawnOptions, cleanup?: Cleanup]\n | [program: string, args?: string[], cleanup?: Cleanup]\n | [\n program: string,\n args?: string[],\n opts?: SpawnOptions,\n cleanup?: Cleanup,\n ]\n\n/**\n * Normalizes the arguments passed to `foregroundChild`.\n *\n * Exposed for testing.\n *\n * @internal\n */\nexport const normalizeFgArgs = (\n fgArgs: FgArgs,\n): [\n program: string,\n args: string[],\n spawnOpts: SpawnOptions,\n cleanup: Cleanup,\n] => {\n let [program, args = [], spawnOpts = {}, cleanup = () => {}] = fgArgs\n if (typeof args === 'function') {\n cleanup = args\n spawnOpts = {}\n args = []\n } else if (!!args && typeof args === 'object' && !Array.isArray(args)) {\n if (typeof spawnOpts === 'function') cleanup = spawnOpts\n spawnOpts = args\n args = []\n } else if (typeof spawnOpts === 'function') {\n cleanup = spawnOpts\n spawnOpts = {}\n }\n if (Array.isArray(program)) {\n const [pp, ...pa] = program\n program = pp\n args = pa\n }\n return [program, args, { ...spawnOpts }, cleanup]\n}\n\n/**\n * Spawn the specified program as a \"foreground\" process, or at least as\n * close as is possible given node's lack of exec-without-fork.\n *\n * Cleanup method may be used to modify or ignore the result of the child's\n * exit code or signal. If cleanup returns undefined (or a Promise that\n * resolves to undefined), then the parent will exit in the same way that\n * the child did.\n *\n * Return boolean `false` to prevent the parent's exit entirely.\n */\nexport function foregroundChild(\n cmd: string | [cmd: string, ...args: string[]],\n cleanup?: Cleanup,\n): ChildProcessByStdio\nexport function foregroundChild(\n program: string,\n args?: string[],\n cleanup?: Cleanup,\n): ChildProcessByStdio\nexport function foregroundChild(\n program: string,\n spawnOpts?: SpawnOptions,\n cleanup?: Cleanup,\n): ChildProcessByStdio\nexport function foregroundChild(\n program: string,\n args?: string[],\n spawnOpts?: SpawnOptions,\n cleanup?: Cleanup,\n): ChildProcessByStdio\nexport function foregroundChild(\n ...fgArgs: FgArgs\n): ChildProcessByStdio {\n const [program, args, spawnOpts, cleanup] = normalizeFgArgs(fgArgs)\n\n spawnOpts.stdio = [0, 1, 2]\n if (process.send) {\n spawnOpts.stdio.push('ipc')\n }\n\n const child = spawn(program, args, spawnOpts) as ChildProcessByStdio<\n null,\n null,\n null\n >\n\n const childHangup = () => {\n try {\n child.kill('SIGHUP')\n\n /* c8 ignore start */\n } catch (_) {\n // SIGHUP is weird on windows\n child.kill('SIGTERM')\n }\n /* c8 ignore stop */\n }\n const removeOnExit = onExit(childHangup)\n\n proxySignals(child)\n const dog = watchdog(child)\n\n let done = false\n child.on('close', async (code, signal) => {\n /* c8 ignore start */\n if (done) return\n /* c8 ignore stop */\n done = true\n const result = cleanup(code, signal, {\n watchdogPid: dog.pid,\n })\n const res = isPromise(result) ? await result : result\n removeOnExit()\n\n if (res === false) return\n else if (typeof res === 'string') {\n signal = res\n code = null\n } else if (typeof res === 'number') {\n code = res\n signal = null\n }\n\n if (signal) {\n // If there is nothing else keeping the event loop alive,\n // then there's a race between a graceful exit and getting\n // the signal to this process. Put this timeout here to\n // make sure we're still alive to get the signal, and thus\n // exit with the intended signal code.\n /* istanbul ignore next */\n setTimeout(() => {}, 2000)\n try {\n process.kill(process.pid, signal)\n /* c8 ignore start */\n } catch (_) {\n process.kill(process.pid, 'SIGTERM')\n }\n /* c8 ignore stop */\n } else {\n process.exit(code || 0)\n }\n })\n\n if (process.send) {\n process.removeAllListeners('message')\n\n child.on('message', (message, sendHandle) => {\n process.send?.(message, sendHandle)\n })\n\n process.on('message', (message, sendHandle) => {\n child.send(\n message as Serializable,\n sendHandle as SendHandle | undefined,\n )\n })\n }\n\n return child\n}\n\nconst isPromise = (o: any): o is Promise =>\n !!o && typeof o === 'object' && typeof o.then === 'function'\n"]} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/package.json b/node_modules/foreground-child/dist/esm/package.json new file mode 100644 index 00000000..3dbc1ca5 --- /dev/null +++ b/node_modules/foreground-child/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/node_modules/foreground-child/dist/esm/proxy-signals.d.ts b/node_modules/foreground-child/dist/esm/proxy-signals.d.ts new file mode 100644 index 00000000..aadb9f64 --- /dev/null +++ b/node_modules/foreground-child/dist/esm/proxy-signals.d.ts @@ -0,0 +1,7 @@ +/// +import { type ChildProcess } from 'child_process'; +/** + * Starts forwarding signals to `child` through `parent`. + */ +export declare const proxySignals: (child: ChildProcess) => () => void; +//# sourceMappingURL=proxy-signals.d.ts.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/proxy-signals.d.ts.map b/node_modules/foreground-child/dist/esm/proxy-signals.d.ts.map new file mode 100644 index 00000000..9c98b7fc --- /dev/null +++ b/node_modules/foreground-child/dist/esm/proxy-signals.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"proxy-signals.d.ts","sourceRoot":"","sources":["../../src/proxy-signals.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjD;;GAEG;AACH,eAAO,MAAM,YAAY,UAAW,YAAY,eA4B/C,CAAA"} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/proxy-signals.js b/node_modules/foreground-child/dist/esm/proxy-signals.js new file mode 100644 index 00000000..8e1efe3e --- /dev/null +++ b/node_modules/foreground-child/dist/esm/proxy-signals.js @@ -0,0 +1,34 @@ +import { allSignals } from './all-signals.js'; +/** + * Starts forwarding signals to `child` through `parent`. + */ +export const proxySignals = (child) => { + const listeners = new Map(); + for (const sig of allSignals) { + const listener = () => { + // some signals can only be received, not sent + try { + child.kill(sig); + /* c8 ignore start */ + } + catch (_) { } + /* c8 ignore stop */ + }; + try { + // if it's a signal this system doesn't recognize, skip it + process.on(sig, listener); + listeners.set(sig, listener); + /* c8 ignore start */ + } + catch (_) { } + /* c8 ignore stop */ + } + const unproxy = () => { + for (const [sig, listener] of listeners) { + process.removeListener(sig, listener); + } + }; + child.on('exit', unproxy); + return unproxy; +}; +//# sourceMappingURL=proxy-signals.js.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/proxy-signals.js.map b/node_modules/foreground-child/dist/esm/proxy-signals.js.map new file mode 100644 index 00000000..978750fc --- /dev/null +++ b/node_modules/foreground-child/dist/esm/proxy-signals.js.map @@ -0,0 +1 @@ +{"version":3,"file":"proxy-signals.js","sourceRoot":"","sources":["../../src/proxy-signals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,EAAE;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAA;IAE3B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,8CAA8C;YAC9C,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACf,qBAAqB;YACvB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;YACd,oBAAoB;QACtB,CAAC,CAAA;QACD,IAAI,CAAC;YACH,0DAA0D;YAC1D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YACzB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;YAC5B,qBAAqB;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QACd,oBAAoB;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACvC,CAAC;IACH,CAAC,CAAA;IACD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzB,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA","sourcesContent":["import { type ChildProcess } from 'child_process'\nimport { allSignals } from './all-signals.js'\n\n/**\n * Starts forwarding signals to `child` through `parent`.\n */\nexport const proxySignals = (child: ChildProcess) => {\n const listeners = new Map()\n\n for (const sig of allSignals) {\n const listener = () => {\n // some signals can only be received, not sent\n try {\n child.kill(sig)\n /* c8 ignore start */\n } catch (_) {}\n /* c8 ignore stop */\n }\n try {\n // if it's a signal this system doesn't recognize, skip it\n process.on(sig, listener)\n listeners.set(sig, listener)\n /* c8 ignore start */\n } catch (_) {}\n /* c8 ignore stop */\n }\n\n const unproxy = () => {\n for (const [sig, listener] of listeners) {\n process.removeListener(sig, listener)\n }\n }\n child.on('exit', unproxy)\n return unproxy\n}\n"]} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/watchdog.d.ts b/node_modules/foreground-child/dist/esm/watchdog.d.ts new file mode 100644 index 00000000..edfdf4de --- /dev/null +++ b/node_modules/foreground-child/dist/esm/watchdog.d.ts @@ -0,0 +1,11 @@ +/// +import { ChildProcess } from 'child_process'; +/** + * Pass in a ChildProcess, and this will spawn a watchdog process that + * will make sure it exits if the parent does, thus preventing any + * dangling detached zombie processes. + * + * If the child ends before the parent, then the watchdog will terminate. + */ +export declare const watchdog: (child: ChildProcess) => ChildProcess; +//# sourceMappingURL=watchdog.d.ts.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/watchdog.d.ts.map b/node_modules/foreground-child/dist/esm/watchdog.d.ts.map new file mode 100644 index 00000000..cc6a668f --- /dev/null +++ b/node_modules/foreground-child/dist/esm/watchdog.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"watchdog.d.ts","sourceRoot":"","sources":["../../src/watchdog.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,YAAY,EAAS,MAAM,eAAe,CAAA;AAyBnD;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,UAAW,YAAY,iBAc3C,CAAA"} \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/watchdog.js b/node_modules/foreground-child/dist/esm/watchdog.js new file mode 100644 index 00000000..7aa184ed --- /dev/null +++ b/node_modules/foreground-child/dist/esm/watchdog.js @@ -0,0 +1,46 @@ +// this spawns a child process that listens for SIGHUP when the +// parent process exits, and after 200ms, sends a SIGKILL to the +// child, in case it did not terminate. +import { spawn } from 'child_process'; +const watchdogCode = String.raw ` +const pid = parseInt(process.argv[1], 10) +process.title = 'node (foreground-child watchdog pid=' + pid + ')' +if (!isNaN(pid)) { + let barked = false + // keepalive + const interval = setInterval(() => {}, 60000) + const bark = () => { + clearInterval(interval) + if (barked) return + barked = true + process.removeListener('SIGHUP', bark) + setTimeout(() => { + try { + process.kill(pid, 'SIGKILL') + setTimeout(() => process.exit(), 200) + } catch (_) {} + }, 500) + }) + process.on('SIGHUP', bark) +} +`; +/** + * Pass in a ChildProcess, and this will spawn a watchdog process that + * will make sure it exits if the parent does, thus preventing any + * dangling detached zombie processes. + * + * If the child ends before the parent, then the watchdog will terminate. + */ +export const watchdog = (child) => { + let dogExited = false; + const dog = spawn(process.execPath, ['-e', watchdogCode, String(child.pid)], { + stdio: 'ignore', + }); + dog.on('exit', () => (dogExited = true)); + child.on('exit', () => { + if (!dogExited) + dog.kill('SIGKILL'); + }); + return dog; +}; +//# sourceMappingURL=watchdog.js.map \ No newline at end of file diff --git a/node_modules/foreground-child/dist/esm/watchdog.js.map b/node_modules/foreground-child/dist/esm/watchdog.js.map new file mode 100644 index 00000000..6f4e39fb --- /dev/null +++ b/node_modules/foreground-child/dist/esm/watchdog.js.map @@ -0,0 +1 @@ +{"version":3,"file":"watchdog.js","sourceRoot":"","sources":["../../src/watchdog.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,gEAAgE;AAChE,uCAAuC;AAEvC,OAAO,EAAgB,KAAK,EAAE,MAAM,eAAe,CAAA;AAEnD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;CAqB9B,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAE,EAAE;IAC9C,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,MAAM,GAAG,GAAG,KAAK,CACf,OAAO,CAAC,QAAQ,EAChB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACvC;QACE,KAAK,EAAE,QAAQ;KAChB,CACF,CAAA;IACD,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAA;IACxC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,IAAI,CAAC,SAAS;YAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA","sourcesContent":["// this spawns a child process that listens for SIGHUP when the\n// parent process exits, and after 200ms, sends a SIGKILL to the\n// child, in case it did not terminate.\n\nimport { ChildProcess, spawn } from 'child_process'\n\nconst watchdogCode = String.raw`\nconst pid = parseInt(process.argv[1], 10)\nprocess.title = 'node (foreground-child watchdog pid=' + pid + ')'\nif (!isNaN(pid)) {\n let barked = false\n // keepalive\n const interval = setInterval(() => {}, 60000)\n const bark = () => {\n clearInterval(interval)\n if (barked) return\n barked = true\n process.removeListener('SIGHUP', bark)\n setTimeout(() => {\n try {\n process.kill(pid, 'SIGKILL')\n setTimeout(() => process.exit(), 200)\n } catch (_) {}\n }, 500)\n })\n process.on('SIGHUP', bark)\n}\n`\n\n/**\n * Pass in a ChildProcess, and this will spawn a watchdog process that\n * will make sure it exits if the parent does, thus preventing any\n * dangling detached zombie processes.\n *\n * If the child ends before the parent, then the watchdog will terminate.\n */\nexport const watchdog = (child: ChildProcess) => {\n let dogExited = false\n const dog = spawn(\n process.execPath,\n ['-e', watchdogCode, String(child.pid)],\n {\n stdio: 'ignore',\n },\n )\n dog.on('exit', () => (dogExited = true))\n child.on('exit', () => {\n if (!dogExited) dog.kill('SIGKILL')\n })\n return dog\n}\n"]} \ No newline at end of file diff --git a/node_modules/foreground-child/package.json b/node_modules/foreground-child/package.json new file mode 100644 index 00000000..980b7e85 --- /dev/null +++ b/node_modules/foreground-child/package.json @@ -0,0 +1,111 @@ +{ + "name": "foreground-child", + "version": "3.3.0", + "description": "Run a child as if it's the foreground process. Give it stdio. Exit when it exits.", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "exports": { + "./watchdog": { + "import": { + "source": "./src/watchdog.ts", + "types": "./dist/esm/watchdog.d.ts", + "default": "./dist/esm/watchdog.js" + }, + "require": { + "source": "./src/watchdog.ts", + "types": "./dist/commonjs/watchdog.d.ts", + "default": "./dist/commonjs/watchdog.js" + } + }, + "./proxy-signals": { + "import": { + "source": "./src/proxy-signals.ts", + "types": "./dist/esm/proxy-signals.d.ts", + "default": "./dist/esm/proxy-signals.js" + }, + "require": { + "source": "./src/proxy-signals.ts", + "types": "./dist/commonjs/proxy-signals.d.ts", + "default": "./dist/commonjs/proxy-signals.js" + } + }, + "./package.json": "./package.json", + ".": { + "import": { + "source": "./src/index.ts", + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "source": "./src/index.ts", + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + } + }, + "files": [ + "dist" + ], + "engines": { + "node": ">=14" + }, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "tap": { + "typecheck": true + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tapjs/foreground-child.git" + }, + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC", + "devDependencies": { + "@types/cross-spawn": "^6.0.2", + "@types/node": "^18.15.11", + "@types/tap": "^15.0.8", + "prettier": "^3.3.2", + "tap": "^19.2.5", + "tshy": "^1.15.1", + "typedoc": "^0.24.2", + "typescript": "^5.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "tshy": { + "exports": { + "./watchdog": "./src/watchdog.ts", + "./proxy-signals": "./src/proxy-signals.ts", + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "type": "module" +} diff --git a/node_modules/glob/LICENSE b/node_modules/glob/LICENSE new file mode 100644 index 00000000..ec7df933 --- /dev/null +++ b/node_modules/glob/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/glob/README.md b/node_modules/glob/README.md new file mode 100644 index 00000000..023cd779 --- /dev/null +++ b/node_modules/glob/README.md @@ -0,0 +1,1265 @@ +# Glob + +Match files using the patterns the shell uses. + +The most correct and second fastest glob implementation in +JavaScript. (See **Comparison to Other JavaScript Glob +Implementations** at the bottom of this readme.) + +![a fun cartoon logo made of glob characters](https://github.com/isaacs/node-glob/raw/main/logo/glob.png) + +## Usage + +Install with npm + +``` +npm i glob +``` + +**Note** the npm package name is _not_ `node-glob` that's a +different thing that was abandoned years ago. Just `glob`. + +```js +// load using import +import { glob, globSync, globStream, globStreamSync, Glob } from 'glob' +// or using commonjs, that's fine, too +const { + glob, + globSync, + globStream, + globStreamSync, + Glob, +} = require('glob') + +// the main glob() and globSync() resolve/return array of filenames + +// all js files, but don't look in node_modules +const jsfiles = await glob('**/*.js', { ignore: 'node_modules/**' }) + +// pass in a signal to cancel the glob walk +const stopAfter100ms = await glob('**/*.css', { + signal: AbortSignal.timeout(100), +}) + +// multiple patterns supported as well +const images = await glob(['css/*.{png,jpeg}', 'public/*.{png,jpeg}']) + +// but of course you can do that with the glob pattern also +// the sync function is the same, just returns a string[] instead +// of Promise +const imagesAlt = globSync('{css,public}/*.{png,jpeg}') + +// you can also stream them, this is a Minipass stream +const filesStream = globStream(['**/*.dat', 'logs/**/*.log']) + +// construct a Glob object if you wanna do it that way, which +// allows for much faster walks if you have to look in the same +// folder multiple times. +const g = new Glob('**/foo', {}) +// glob objects are async iterators, can also do globIterate() or +// g.iterate(), same deal +for await (const file of g) { + console.log('found a foo file:', file) +} +// pass a glob as the glob options to reuse its settings and caches +const g2 = new Glob('**/bar', g) +// sync iteration works as well +for (const file of g2) { + console.log('found a bar file:', file) +} + +// you can also pass withFileTypes: true to get Path objects +// these are like a Dirent, but with some more added powers +// check out http://npm.im/path-scurry for more info on their API +const g3 = new Glob('**/baz/**', { withFileTypes: true }) +g3.stream().on('data', path => { + console.log( + 'got a path object', + path.fullpath(), + path.isDirectory(), + path.readdirSync().map(e => e.name), + ) +}) + +// if you use stat:true and withFileTypes, you can sort results +// by things like modified time, filter by permission mode, etc. +// All Stats fields will be available in that case. Slightly +// slower, though. +// For example: +const results = await glob('**', { stat: true, withFileTypes: true }) + +const timeSortedFiles = results + .sort((a, b) => a.mtimeMs - b.mtimeMs) + .map(path => path.fullpath()) + +const groupReadableFiles = results + .filter(path => path.mode & 0o040) + .map(path => path.fullpath()) + +// custom ignores can be done like this, for example by saying +// you'll ignore all markdown files, and all folders named 'docs' +const customIgnoreResults = await glob('**', { + ignore: { + ignored: p => /\.md$/.test(p.name), + childrenIgnored: p => p.isNamed('docs'), + }, +}) + +// another fun use case, only return files with the same name as +// their parent folder, plus either `.ts` or `.js` +const folderNamedModules = await glob('**/*.{ts,js}', { + ignore: { + ignored: p => { + const pp = p.parent + return !(p.isNamed(pp.name + '.ts') || p.isNamed(pp.name + '.js')) + }, + }, +}) + +// find all files edited in the last hour, to do this, we ignore +// all of them that are more than an hour old +const newFiles = await glob('**', { + // need stat so we have mtime + stat: true, + // only want the files, not the dirs + nodir: true, + ignore: { + ignored: p => { + return new Date() - p.mtime > 60 * 60 * 1000 + }, + // could add similar childrenIgnored here as well, but + // directory mtime is inconsistent across platforms, so + // probably better not to, unless you know the system + // tracks this reliably. + }, +}) +``` + +**Note** Glob patterns should always use `/` as a path separator, +even on Windows systems, as `\` is used to escape glob +characters. If you wish to use `\` as a path separator _instead +of_ using it as an escape character on Windows platforms, you may +set `windowsPathsNoEscape:true` in the options. In this mode, +special glob characters cannot be escaped, making it impossible +to match a literal `*` `?` and so on in filenames. + +## Command Line Interface + +``` +$ glob -h + +Usage: + glob [options] [ [ ...]] + +Expand the positional glob expression arguments into any matching file system +paths found. + + -c --cmd= + Run the command provided, passing the glob expression + matches as arguments. + + -A --all By default, the glob cli command will not expand any + arguments that are an exact match to a file on disk. + + This prevents double-expanding, in case the shell + expands an argument whose filename is a glob + expression. + + For example, if 'app/*.ts' would match 'app/[id].ts', + then on Windows powershell or cmd.exe, 'glob app/*.ts' + will expand to 'app/[id].ts', as expected. However, in + posix shells such as bash or zsh, the shell will first + expand 'app/*.ts' to a list of filenames. Then glob + will look for a file matching 'app/[id].ts' (ie, + 'app/i.ts' or 'app/d.ts'), which is unexpected. + + Setting '--all' prevents this behavior, causing glob to + treat ALL patterns as glob expressions to be expanded, + even if they are an exact match to a file on disk. + + When setting this option, be sure to enquote arguments + so that the shell will not expand them prior to passing + them to the glob command process. + + -a --absolute Expand to absolute paths + -d --dot-relative Prepend './' on relative matches + -m --mark Append a / on any directories matched + -x --posix Always resolve to posix style paths, using '/' as the + directory separator, even on Windows. Drive letter + absolute matches on Windows will be expanded to their + full resolved UNC maths, eg instead of 'C:\foo\bar', it + will expand to '//?/C:/foo/bar'. + + -f --follow Follow symlinked directories when expanding '**' + -R --realpath Call 'fs.realpath' on all of the results. In the case + of an entry that cannot be resolved, the entry is + omitted. This incurs a slight performance penalty, of + course, because of the added system calls. + + -s --stat Call 'fs.lstat' on all entries, whether required or not + to determine if it's a valid match. + + -b --match-base Perform a basename-only match if the pattern does not + contain any slash characters. That is, '*.js' would be + treated as equivalent to '**/*.js', matching js files + in all directories. + + --dot Allow patterns to match files/directories that start + with '.', even if the pattern does not start with '.' + + --nobrace Do not expand {...} patterns + --nocase Perform a case-insensitive match. This defaults to + 'true' on macOS and Windows platforms, and false on all + others. + + Note: 'nocase' should only be explicitly set when it is + known that the filesystem's case sensitivity differs + from the platform default. If set 'true' on + case-insensitive file systems, then the walk may return + more or less results than expected. + + --nodir Do not match directories, only files. + + Note: to *only* match directories, append a '/' at the + end of the pattern. + + --noext Do not expand extglob patterns, such as '+(a|b)' + --noglobstar Do not expand '**' against multiple path portions. Ie, + treat it as a normal '*' instead. + + --windows-path-no-escape + Use '\' as a path separator *only*, and *never* as an + escape character. If set, all '\' characters are + replaced with '/' in the pattern. + + -D --max-depth= Maximum depth to traverse from the current working + directory + + -C --cwd= Current working directory to execute/match in + -r --root= A string path resolved against the 'cwd', which is used + as the starting point for absolute patterns that start + with '/' (but not drive letters or UNC paths on + Windows). + + Note that this *doesn't* necessarily limit the walk to + the 'root' directory, and doesn't affect the cwd + starting point for non-absolute patterns. A pattern + containing '..' will still be able to traverse out of + the root directory, if it is not an actual root + directory on the filesystem, and any non-absolute + patterns will still be matched in the 'cwd'. + + To start absolute and non-absolute patterns in the same + path, you can use '--root=' to set it to the empty + string. However, be aware that on Windows systems, a + pattern like 'x:/*' or '//host/share/*' will *always* + start in the 'x:/' or '//host/share/' directory, + regardless of the --root setting. + + --platform= Defaults to the value of 'process.platform' if + available, or 'linux' if not. Setting --platform=win32 + on non-Windows systems may cause strange behavior! + + -i --ignore= + Glob patterns to ignore Can be set multiple times + -v --debug Output a huge amount of noisy debug information about + patterns as they are parsed and used to match files. + + -h --help Show this usage information +``` + +## `glob(pattern: string | string[], options?: GlobOptions) => Promise` + +Perform an asynchronous glob search for the pattern(s) specified. +Returns +[Path](https://isaacs.github.io/path-scurry/classes/PathBase) +objects if the `withFileTypes` option is set to `true`. See below +for full options field desciptions. + +## `globSync(pattern: string | string[], options?: GlobOptions) => string[] | Path[]` + +Synchronous form of `glob()`. + +Alias: `glob.sync()` + +## `globIterate(pattern: string | string[], options?: GlobOptions) => AsyncGenerator` + +Return an async iterator for walking glob pattern matches. + +Alias: `glob.iterate()` + +## `globIterateSync(pattern: string | string[], options?: GlobOptions) => Generator` + +Return a sync iterator for walking glob pattern matches. + +Alias: `glob.iterate.sync()`, `glob.sync.iterate()` + +## `globStream(pattern: string | string[], options?: GlobOptions) => Minipass` + +Return a stream that emits all the strings or `Path` objects and +then emits `end` when completed. + +Alias: `glob.stream()` + +## `globStreamSync(pattern: string | string[], options?: GlobOptions) => Minipass` + +Syncronous form of `globStream()`. Will read all the matches as +fast as you consume them, even all in a single tick if you +consume them immediately, but will still respond to backpressure +if they're not consumed immediately. + +Alias: `glob.stream.sync()`, `glob.sync.stream()` + +## `hasMagic(pattern: string | string[], options?: GlobOptions) => boolean` + +Returns `true` if the provided pattern contains any "magic" glob +characters, given the options provided. + +Brace expansion is not considered "magic" unless the +`magicalBraces` option is set, as brace expansion just turns one +string into an array of strings. So a pattern like `'x{a,b}y'` +would return `false`, because `'xay'` and `'xby'` both do not +contain any magic glob characters, and it's treated the same as +if you had called it on `['xay', 'xby']`. When +`magicalBraces:true` is in the options, brace expansion _is_ +treated as a pattern having magic. + +## `escape(pattern: string, options?: GlobOptions) => string` + +Escape all magic characters in a glob pattern, so that it will +only ever match literal strings + +If the `windowsPathsNoEscape` option is used, then characters are +escaped by wrapping in `[]`, because a magic character wrapped in +a character class can only be satisfied by that exact character. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +## `unescape(pattern: string, options?: GlobOptions) => string` + +Un-escape a glob string that may contain some escaped characters. + +If the `windowsPathsNoEscape` option is used, then square-brace +escapes are removed, but not backslash escapes. For example, it +will turn the string `'[*]'` into `*`, but it will not turn +`'\\*'` into `'*'`, because `\` is a path separator in +`windowsPathsNoEscape` mode. + +When `windowsPathsNoEscape` is not set, then both brace escapes +and backslash escapes are removed. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +## Class `Glob` + +An object that can perform glob pattern traversals. + +### `const g = new Glob(pattern: string | string[], options: GlobOptions)` + +Options object is required. + +See full options descriptions below. + +Note that a previous `Glob` object can be passed as the +`GlobOptions` to another `Glob` instantiation to re-use settings +and caches with a new pattern. + +Traversal functions can be called multiple times to run the walk +again. + +### `g.stream()` + +Stream results asynchronously, + +### `g.streamSync()` + +Stream results synchronously. + +### `g.iterate()` + +Default async iteration function. Returns an AsyncGenerator that +iterates over the results. + +### `g.iterateSync()` + +Default sync iteration function. Returns a Generator that +iterates over the results. + +### `g.walk()` + +Returns a Promise that resolves to the results array. + +### `g.walkSync()` + +Returns a results array. + +### Properties + +All options are stored as properties on the `Glob` object. + +- `opts` The options provided to the constructor. +- `patterns` An array of parsed immutable `Pattern` objects. + +## Options + +Exported as `GlobOptions` TypeScript interface. A `GlobOptions` +object may be provided to any of the exported methods, and must +be provided to the `Glob` constructor. + +All options are optional, boolean, and false by default, unless +otherwise noted. + +All resolved options are added to the Glob object as properties. + +If you are running many `glob` operations, you can pass a Glob +object as the `options` argument to a subsequent operation to +share the previously loaded cache. + +- `cwd` String path or `file://` string or URL object. The + current working directory in which to search. Defaults to + `process.cwd()`. See also: "Windows, CWDs, Drive Letters, and + UNC Paths", below. + + This option may be either a string path or a `file://` URL + object or string. + +- `root` A string path resolved against the `cwd` option, which + is used as the starting point for absolute patterns that start + with `/`, (but not drive letters or UNC paths on Windows). + + Note that this _doesn't_ necessarily limit the walk to the + `root` directory, and doesn't affect the cwd starting point for + non-absolute patterns. A pattern containing `..` will still be + able to traverse out of the root directory, if it is not an + actual root directory on the filesystem, and any non-absolute + patterns will be matched in the `cwd`. For example, the + pattern `/../*` with `{root:'/some/path'}` will return all + files in `/some`, not all files in `/some/path`. The pattern + `*` with `{root:'/some/path'}` will return all the entries in + the cwd, not the entries in `/some/path`. + + To start absolute and non-absolute patterns in the same + path, you can use `{root:''}`. However, be aware that on + Windows systems, a pattern like `x:/*` or `//host/share/*` will + _always_ start in the `x:/` or `//host/share` directory, + regardless of the `root` setting. + +- `windowsPathsNoEscape` Use `\\` as a path separator _only_, and + _never_ as an escape character. If set, all `\\` characters are + replaced with `/` in the pattern. + + Note that this makes it **impossible** to match against paths + containing literal glob pattern characters, but allows matching + with patterns constructed using `path.join()` and + `path.resolve()` on Windows platforms, mimicking the (buggy!) + behavior of Glob v7 and before on Windows. Please use with + caution, and be mindful of [the caveat below about Windows + paths](#windows). (For legacy reasons, this is also set if + `allowWindowsEscape` is set to the exact value `false`.) + +- `dot` Include `.dot` files in normal matches and `globstar` + matches. Note that an explicit dot in a portion of the pattern + will always match dot files. + +- `magicalBraces` Treat brace expansion like `{a,b}` as a "magic" + pattern. Has no effect if {@link nobrace} is set. + + Only has effect on the {@link hasMagic} function, no effect on + glob pattern matching itself. + +- `dotRelative` Prepend all relative path strings with `./` (or + `.\` on Windows). + + Without this option, returned relative paths are "bare", so + instead of returning `'./foo/bar'`, they are returned as + `'foo/bar'`. + + Relative patterns starting with `'../'` are not prepended with + `./`, even if this option is set. + +- `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. + +- `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. + +- `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) + +- `noext` Do not match "extglob" patterns such as `+(a|b)`. + +- `nocase` Perform a case-insensitive match. This defaults to + `true` on macOS and Windows systems, and `false` on all others. + + **Note** `nocase` should only be explicitly set when it is + known that the filesystem's case sensitivity differs from the + platform default. If set `true` on case-sensitive file + systems, or `false` on case-insensitive file systems, then the + walk may return more or less results than expected. + +- `maxDepth` Specify a number to limit the depth of the directory + traversal to this many levels below the `cwd`. + +- `matchBase` Perform a basename-only match if the pattern does + not contain any slash characters. That is, `*.js` would be + treated as equivalent to `**/*.js`, matching all js files in + all directories. + +- `nodir` Do not match directories, only files. (Note: to match + _only_ directories, put a `/` at the end of the pattern.) + + Note: when `follow` and `nodir` are both set, then symbolic + links to directories are also omitted. + +- `stat` Call `lstat()` on all entries, whether required or not + to determine whether it's a valid match. When used with + `withFileTypes`, this means that matches will include data such + as modified time, permissions, and so on. Note that this will + incur a performance cost due to the added system calls. + +- `ignore` string or string[], or an object with `ignore` and + `ignoreChildren` methods. + + If a string or string[] is provided, then this is treated as a + glob pattern or array of glob patterns to exclude from matches. + To ignore all children within a directory, as well as the entry + itself, append `'/**'` to the ignore pattern. + + **Note** `ignore` patterns are _always_ in `dot:true` mode, + regardless of any other settings. + + If an object is provided that has `ignored(path)` and/or + `childrenIgnored(path)` methods, then these methods will be + called to determine whether any Path is a match or if its + children should be traversed, respectively. + +- `follow` Follow symlinked directories when expanding `**` + patterns. This can result in a lot of duplicate references in + the presence of cyclic links, and make performance quite bad. + + By default, a `**` in a pattern will follow 1 symbolic link if + it is not the first item in the pattern, or none if it is the + first item in the pattern, following the same behavior as Bash. + + Note: when `follow` and `nodir` are both set, then symbolic + links to directories are also omitted. + +- `realpath` Set to true to call `fs.realpath` on all of the + results. In the case of an entry that cannot be resolved, the + entry is omitted. This incurs a slight performance penalty, of + course, because of the added system calls. + +- `absolute` Set to true to always receive absolute paths for + matched files. Set to `false` to always receive relative paths + for matched files. + + By default, when this option is not set, absolute paths are + returned for patterns that are absolute, and otherwise paths + are returned that are relative to the `cwd` setting. + + This does _not_ make an extra system call to get the realpath, + it only does string path resolution. + + `absolute` may not be used along with `withFileTypes`. + +- `posix` Set to true to use `/` as the path separator in + returned results. On posix systems, this has no effect. On + Windows systems, this will return `/` delimited path results, + and absolute paths will be returned in their full resolved UNC + path form, eg insted of `'C:\\foo\\bar'`, it will return + `//?/C:/foo/bar`. + +- `platform` Defaults to value of `process.platform` if + available, or `'linux'` if not. Setting `platform:'win32'` on + non-Windows systems may cause strange behavior. + +- `withFileTypes` Return [PathScurry](http://npm.im/path-scurry) + `Path` objects instead of strings. These are similar to a + NodeJS `Dirent` object, but with additional methods and + properties. + + `withFileTypes` may not be used along with `absolute`. + +- `signal` An AbortSignal which will cancel the Glob walk when + triggered. + +- `fs` An override object to pass in custom filesystem methods. + See [PathScurry docs](http://npm.im/path-scurry) for what can + be overridden. + +- `scurry` A [PathScurry](http://npm.im/path-scurry) object used + to traverse the file system. If the `nocase` option is set + explicitly, then any provided `scurry` object must match this + setting. + +- `includeChildMatches` boolean, default `true`. Do not match any + children of any matches. For example, the pattern `**\/foo` + would match `a/foo`, but not `a/foo/b/foo` in this mode. + + This is especially useful for cases like "find all + `node_modules` folders, but not the ones in `node_modules`". + + In order to support this, the `Ignore` implementation must + support an `add(pattern: string)` method. If using the default + `Ignore` class, then this is fine, but if this is set to + `false`, and a custom `Ignore` is provided that does not have + an `add()` method, then it will throw an error. + + **Caveat** It _only_ ignores matches that would be a descendant + of a previous match, and only if that descendant is matched + _after_ the ancestor is encountered. Since the file system walk + happens in indeterminate order, it's possible that a match will + already be added before its ancestor, if multiple or braced + patterns are used. + + For example: + + ```js + const results = await glob( + [ + // likely to match first, since it's just a stat + 'a/b/c/d/e/f', + + // this pattern is more complicated! It must to various readdir() + // calls and test the results against a regular expression, and that + // is certainly going to take a little bit longer. + // + // So, later on, it encounters a match at 'a/b/c/d/e', but it's too + // late to ignore a/b/c/d/e/f, because it's already been emitted. + 'a/[bdf]/?/[a-z]/*', + ], + { includeChildMatches: false }, + ) + ``` + + It's best to only set this to `false` if you can be reasonably + sure that no components of the pattern will potentially match + one another's file system descendants, or if the occasional + included child entry will not cause problems. + +## Glob Primer + +Much more information about glob pattern expansion can be found +by running `man bash` and searching for `Pattern Matching`. + +"Globs" are the patterns you type when you do stuff like `ls +*.js` on the command line, or put `build/*` in a `.gitignore` +file. + +Before parsing the path part patterns, braced sections are +expanded into a set. Braced sections start with `{` and end with +`}`, with 2 or more comma-delimited sections within. Braced +sections may contain slash characters, so `a{/b/c,bcd}` would +expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in +a path portion. With the exception of `**`, none of these match +path separators (ie, `/` on all platforms, and `\` on Windows). + +- `*` Matches 0 or more characters in a single path portion. + When alone in a path portion, it must match at least 1 + character. If `dot:true` is not specified, then `*` will not + match against a `.` character at the start of a path portion. +- `?` Matches 1 character. If `dot:true` is not specified, then + `?` will not match against a `.` character at the start of a + path portion. +- `[...]` Matches a range of characters, similar to a RegExp + range. If the first character of the range is `!` or `^` then + it matches any character not in the range. If the first + character is `]`, then it will be considered the same as `\]`, + rather than the end of the character class. +- `!(pattern|pattern|pattern)` Matches anything that does not + match any of the patterns provided. May _not_ contain `/` + characters. Similar to `*`, if alone in a path portion, then + the path portion must have at least one character. +- `?(pattern|pattern|pattern)` Matches zero or one occurrence of + the patterns provided. May _not_ contain `/` characters. +- `+(pattern|pattern|pattern)` Matches one or more occurrences of + the patterns provided. May _not_ contain `/` characters. +- `*(a|b|c)` Matches zero or more occurrences of the patterns + provided. May _not_ contain `/` characters. +- `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided. May _not_ contain `/` characters. +- `**` If a "globstar" is alone in a path portion, then it + matches zero or more directories and subdirectories searching + for matches. It does not crawl symlinked directories, unless + `{follow:true}` is passed in the options object. A pattern + like `a/b/**` will only match `a/b` if it is a directory. + Follows 1 symbolic link if not the first item in the pattern, + or 0 if it is the first item, unless `follow:true` is set, in + which case it follows all symbolic links. + +`[:class:]` patterns are supported by this implementation, but +`[=c=]` and `[.symbol.]` style class patterns are not. + +### Dots + +If a file or directory path portion has a `.` as the first +character, then it will not match any glob pattern unless that +pattern's corresponding path part also has a `.` as its first +character. + +For example, the pattern `a/.*/c` would match the file at +`a/.b/c`. However the pattern `a/*/c` would not, because `*` does +not start with a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has +no slashes in it, then it will seek for any file anywhere in the +tree with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. +This differs from the shell, where the pattern itself is +returned. For example: + +```sh +$ echo a*s*d*f +a*s*d*f +``` + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a +worthwhile goal, some discrepancies exist between node-glob and +other implementations, and are intentional. + +The double-star character `**` is supported by default, unless +the `noglobstar` flag is set. This is supported in the manner of +bsdglob and bash 5, where `**` only has special significance if +it is the only thing in a path part. That is, `a/**/b` will match +`a/x/y/b`, but `a/**b` will not. + +Note that symlinked directories are not traversed as part of a +`**`, though their contents may match against subsequent portions +of the pattern. This prevents infinite loops and duplicates and +the like. You can force glob to traverse symlinks with `**` by +setting `{follow:true}` in the options. + +There is no equivalent of the `nonull` option. A pattern that +does not find any matches simply resolves to nothing. (An empty +array, immediately ended stream, etc.) + +If brace expansion is not disabled, then it is performed before +any other interpretation of the glob pattern. Thus, a pattern +like `+(a|{b),c)}`, which would not be valid in bash or zsh, is +expanded **first** into the set of `+(a|b)` and `+(a|c)`, and +those patterns are checked for validity. Since those two are +valid, matching proceeds. + +The character class patterns `[:class:]` (posix standard named +classes) style class patterns are supported and unicode-aware, +but `[=c=]` (locale-specific character collation weight), and +`[.symbol.]` (collating symbol), are not. + +### Repeated Slashes + +Unlike Bash and zsh, repeated `/` are always coalesced into a +single path separator. + +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if +it started with a `#` character, or a "negated" pattern if it +started with a `!` character. + +These options were deprecated in version 5, and removed in +version 6. + +To specify things that should not match, use the `ignore` option. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only +`/` characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will +always be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto +the root setting using `path.join`. On windows, this will by +default result in `/foo/*` matching `C:\foo\bar.txt`. + +To automatically coerce all `\` characters to `/` in pattern +strings, **thus making it impossible to escape literal glob +characters**, you may set the `windowsPathsNoEscape` option to +`true`. + +### Windows, CWDs, Drive Letters, and UNC Paths + +On posix systems, when a pattern starts with `/`, any `cwd` +option is ignored, and the traversal starts at `/`, plus any +non-magic path portions specified in the pattern. + +On Windows systems, the behavior is similar, but the concept of +an "absolute path" is somewhat more involved. + +#### UNC Paths + +A UNC path may be used as the start of a pattern on Windows +platforms. For example, a pattern like: `//?/x:/*` will return +all file entries in the root of the `x:` drive. A pattern like +`//ComputerName/Share/*` will return all files in the associated +share. + +UNC path roots are always compared case insensitively. + +#### Drive Letters + +A pattern starting with a drive letter, like `c:/*`, will search +in that drive, regardless of any `cwd` option provided. + +If the pattern starts with `/`, and is not a UNC path, and there +is an explicit `cwd` option set with a drive letter, then the +drive letter in the `cwd` is used as the root of the directory +traversal. + +For example, `glob('/tmp', { cwd: 'c:/any/thing' })` will return +`['c:/tmp']` as the result. + +If an explicit `cwd` option is not provided, and the pattern +starts with `/`, then the traversal will run on the root of the +drive provided as the `cwd` option. (That is, it is the result of +`path.resolve('/')`.) + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race +conditions, since it relies on directory walking. + +As a result, it is possible that a file that exists when glob +looks for it may have been deleted or modified by the time it +returns the result. + +By design, this implementation caches all readdir calls that it +makes, in order to cut down on system overhead. However, this +also makes it even more susceptible to races, especially if the +cache object is reused between glob calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast +majority of operations, this is never a problem. + +### See Also: + +- `man sh` +- `man bash` [Pattern + Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) +- `man 3 fnmatch` +- `man 5 gitignore` +- [minimatch documentation](https://github.com/isaacs/minimatch) + +## Glob Logo + +Glob's logo was created by [Tanya +Brassie](http://tanyabrassie.com/). Logo files can be found +[here](https://github.com/isaacs/node-glob/tree/master/logo). + +The logo is licensed under a [Creative Commons +Attribution-ShareAlike 4.0 International +License](https://creativecommons.org/licenses/by-sa/4.0/). + +## Contributing + +Any change to behavior (including bugfixes) must come with a +test. + +Patches that fail tests or reduce performance will be rejected. + +```sh +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# run the benchmarks +npm run bench + +# to profile javascript +npm run prof +``` + +## Comparison to Other JavaScript Glob Implementations + +**tl;dr** + +- If you want glob matching that is as faithful as possible to + Bash pattern expansion semantics, and as fast as possible + within that constraint, _use this module_. +- If you are reasonably sure that the patterns you will encounter + are relatively simple, and want the absolutely fastest glob + matcher out there, _use [fast-glob](http://npm.im/fast-glob)_. +- If you are reasonably sure that the patterns you will encounter + are relatively simple, and want the convenience of + automatically respecting `.gitignore` files, _use + [globby](http://npm.im/globby)_. + +There are some other glob matcher libraries on npm, but these +three are (in my opinion, as of 2023) the best. + +--- + +**full explanation** + +Every library reflects a set of opinions and priorities in the +trade-offs it makes. Other than this library, I can personally +recommend both [globby](http://npm.im/globby) and +[fast-glob](http://npm.im/fast-glob), though they differ in their +benefits and drawbacks. + +Both have very nice APIs and are reasonably fast. + +`fast-glob` is, as far as I am aware, the fastest glob +implementation in JavaScript today. However, there are many +cases where the choices that `fast-glob` makes in pursuit of +speed mean that its results differ from the results returned by +Bash and other sh-like shells, which may be surprising. + +In my testing, `fast-glob` is around 10-20% faster than this +module when walking over 200k files nested 4 directories +deep[1](#fn-webscale). However, there are some inconsistencies +with Bash matching behavior that this module does not suffer +from: + +- `**` only matches files, not directories +- `..` path portions are not handled unless they appear at the + start of the pattern +- `./!()` will not match any files that _start_ with + ``, even if they do not match ``. For + example, `!(9).txt` will not match `9999.txt`. +- Some brace patterns in the middle of a pattern will result in + failing to find certain matches. +- Extglob patterns are allowed to contain `/` characters. + +Globby exhibits all of the same pattern semantics as fast-glob, +(as it is a wrapper around fast-glob) and is slightly slower than +node-glob (by about 10-20% in the benchmark test set, or in other +words, anywhere from 20-50% slower than fast-glob). However, it +adds some API conveniences that may be worth the costs. + +- Support for `.gitignore` and other ignore files. +- Support for negated globs (ie, patterns starting with `!` + rather than using a separate `ignore` option). + +The priority of this module is "correctness" in the sense of +performing a glob pattern expansion as faithfully as possible to +the behavior of Bash and other sh-like shells, with as much speed +as possible. + +Note that prior versions of `node-glob` are _not_ on this list. +Former versions of this module are far too slow for any cases +where performance matters at all, and were designed with APIs +that are extremely dated by current JavaScript standards. + +--- + +[1]: In the cases where this module +returns results and `fast-glob` doesn't, it's even faster, of +course. + +![lumpy space princess saying 'oh my GLOB'](https://github.com/isaacs/node-glob/raw/main/oh-my-glob.gif) + +### Benchmark Results + +First number is time, smaller is better. + +Second number is the count of results returned. + +``` +--- pattern: '**' --- +~~ sync ~~ +node fast-glob sync 0m0.598s 200364 +node globby sync 0m0.765s 200364 +node current globSync mjs 0m0.683s 222656 +node current glob syncStream 0m0.649s 222656 +~~ async ~~ +node fast-glob async 0m0.350s 200364 +node globby async 0m0.509s 200364 +node current glob async mjs 0m0.463s 222656 +node current glob stream 0m0.411s 222656 + +--- pattern: '**/..' --- +~~ sync ~~ +node fast-glob sync 0m0.486s 0 +node globby sync 0m0.769s 200364 +node current globSync mjs 0m0.564s 2242 +node current glob syncStream 0m0.583s 2242 +~~ async ~~ +node fast-glob async 0m0.283s 0 +node globby async 0m0.512s 200364 +node current glob async mjs 0m0.299s 2242 +node current glob stream 0m0.312s 2242 + +--- pattern: './**/0/**/0/**/0/**/0/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.490s 10 +node globby sync 0m0.517s 10 +node current globSync mjs 0m0.540s 10 +node current glob syncStream 0m0.550s 10 +~~ async ~~ +node fast-glob async 0m0.290s 10 +node globby async 0m0.296s 10 +node current glob async mjs 0m0.278s 10 +node current glob stream 0m0.302s 10 + +--- pattern: './**/[01]/**/[12]/**/[23]/**/[45]/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.500s 160 +node globby sync 0m0.528s 160 +node current globSync mjs 0m0.556s 160 +node current glob syncStream 0m0.573s 160 +~~ async ~~ +node fast-glob async 0m0.283s 160 +node globby async 0m0.301s 160 +node current glob async mjs 0m0.306s 160 +node current glob stream 0m0.322s 160 + +--- pattern: './**/0/**/0/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.502s 5230 +node globby sync 0m0.527s 5230 +node current globSync mjs 0m0.544s 5230 +node current glob syncStream 0m0.557s 5230 +~~ async ~~ +node fast-glob async 0m0.285s 5230 +node globby async 0m0.305s 5230 +node current glob async mjs 0m0.304s 5230 +node current glob stream 0m0.310s 5230 + +--- pattern: '**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.580s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.685s 200023 +node current glob syncStream 0m0.649s 200023 +~~ async ~~ +node fast-glob async 0m0.349s 200023 +node globby async 0m0.509s 200023 +node current glob async mjs 0m0.427s 200023 +node current glob stream 0m0.388s 200023 + +--- pattern: '{**/*.txt,**/?/**/*.txt,**/?/**/?/**/*.txt,**/?/**/?/**/?/**/*.txt,**/?/**/?/**/?/**/?/**/*.txt}' --- +~~ sync ~~ +node fast-glob sync 0m0.589s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.716s 200023 +node current glob syncStream 0m0.684s 200023 +~~ async ~~ +node fast-glob async 0m0.351s 200023 +node globby async 0m0.518s 200023 +node current glob async mjs 0m0.462s 200023 +node current glob stream 0m0.468s 200023 + +--- pattern: '**/5555/0000/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.496s 1000 +node globby sync 0m0.519s 1000 +node current globSync mjs 0m0.539s 1000 +node current glob syncStream 0m0.567s 1000 +~~ async ~~ +node fast-glob async 0m0.285s 1000 +node globby async 0m0.299s 1000 +node current glob async mjs 0m0.305s 1000 +node current glob stream 0m0.301s 1000 + +--- pattern: './**/0/**/../[01]/**/0/../**/0/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.484s 0 +node globby sync 0m0.507s 0 +node current globSync mjs 0m0.577s 4880 +node current glob syncStream 0m0.586s 4880 +~~ async ~~ +node fast-glob async 0m0.280s 0 +node globby async 0m0.298s 0 +node current glob async mjs 0m0.327s 4880 +node current glob stream 0m0.324s 4880 + +--- pattern: '**/????/????/????/????/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.547s 100000 +node globby sync 0m0.673s 100000 +node current globSync mjs 0m0.626s 100000 +node current glob syncStream 0m0.618s 100000 +~~ async ~~ +node fast-glob async 0m0.315s 100000 +node globby async 0m0.414s 100000 +node current glob async mjs 0m0.366s 100000 +node current glob stream 0m0.345s 100000 + +--- pattern: './{**/?{/**/?{/**/?{/**/?,,,,},,,,},,,,},,,}/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.588s 100000 +node globby sync 0m0.670s 100000 +node current globSync mjs 0m0.717s 200023 +node current glob syncStream 0m0.687s 200023 +~~ async ~~ +node fast-glob async 0m0.343s 100000 +node globby async 0m0.418s 100000 +node current glob async mjs 0m0.519s 200023 +node current glob stream 0m0.451s 200023 + +--- pattern: '**/!(0|9).txt' --- +~~ sync ~~ +node fast-glob sync 0m0.573s 160023 +node globby sync 0m0.731s 160023 +node current globSync mjs 0m0.680s 180023 +node current glob syncStream 0m0.659s 180023 +~~ async ~~ +node fast-glob async 0m0.345s 160023 +node globby async 0m0.476s 160023 +node current glob async mjs 0m0.427s 180023 +node current glob stream 0m0.388s 180023 + +--- pattern: './{*/**/../{*/**/../{*/**/../{*/**/../{*/**,,,,},,,,},,,,},,,,},,,,}/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.483s 0 +node globby sync 0m0.512s 0 +node current globSync mjs 0m0.811s 200023 +node current glob syncStream 0m0.773s 200023 +~~ async ~~ +node fast-glob async 0m0.280s 0 +node globby async 0m0.299s 0 +node current glob async mjs 0m0.617s 200023 +node current glob stream 0m0.568s 200023 + +--- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.485s 0 +node globby sync 0m0.507s 0 +node current globSync mjs 0m0.759s 200023 +node current glob syncStream 0m0.740s 200023 +~~ async ~~ +node fast-glob async 0m0.281s 0 +node globby async 0m0.297s 0 +node current glob async mjs 0m0.544s 200023 +node current glob stream 0m0.464s 200023 + +--- pattern: './*/**/../*/**/../*/**/../*/**/../*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.486s 0 +node globby sync 0m0.513s 0 +node current globSync mjs 0m0.734s 200023 +node current glob syncStream 0m0.696s 200023 +~~ async ~~ +node fast-glob async 0m0.286s 0 +node globby async 0m0.296s 0 +node current glob async mjs 0m0.506s 200023 +node current glob stream 0m0.483s 200023 + +--- pattern: './0/**/../1/**/../2/**/../3/**/../4/**/../5/**/../6/**/../7/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.060s 0 +node globby sync 0m0.074s 0 +node current globSync mjs 0m0.067s 0 +node current glob syncStream 0m0.066s 0 +~~ async ~~ +node fast-glob async 0m0.060s 0 +node globby async 0m0.075s 0 +node current glob async mjs 0m0.066s 0 +node current glob stream 0m0.067s 0 + +--- pattern: './**/?/**/?/**/?/**/?/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.568s 100000 +node globby sync 0m0.651s 100000 +node current globSync mjs 0m0.619s 100000 +node current glob syncStream 0m0.617s 100000 +~~ async ~~ +node fast-glob async 0m0.332s 100000 +node globby async 0m0.409s 100000 +node current glob async mjs 0m0.372s 100000 +node current glob stream 0m0.351s 100000 + +--- pattern: '**/*/**/*/**/*/**/*/**' --- +~~ sync ~~ +node fast-glob sync 0m0.603s 200113 +node globby sync 0m0.798s 200113 +node current globSync mjs 0m0.730s 222137 +node current glob syncStream 0m0.693s 222137 +~~ async ~~ +node fast-glob async 0m0.356s 200113 +node globby async 0m0.525s 200113 +node current glob async mjs 0m0.508s 222137 +node current glob stream 0m0.455s 222137 + +--- pattern: './**/*/**/*/**/*/**/*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.622s 200000 +node globby sync 0m0.792s 200000 +node current globSync mjs 0m0.722s 200000 +node current glob syncStream 0m0.695s 200000 +~~ async ~~ +node fast-glob async 0m0.369s 200000 +node globby async 0m0.527s 200000 +node current glob async mjs 0m0.502s 200000 +node current glob stream 0m0.481s 200000 + +--- pattern: '**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.588s 200023 +node globby sync 0m0.771s 200023 +node current globSync mjs 0m0.684s 200023 +node current glob syncStream 0m0.658s 200023 +~~ async ~~ +node fast-glob async 0m0.352s 200023 +node globby async 0m0.516s 200023 +node current glob async mjs 0m0.432s 200023 +node current glob stream 0m0.384s 200023 + +--- pattern: './**/**/**/**/**/**/**/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.589s 200023 +node globby sync 0m0.766s 200023 +node current globSync mjs 0m0.682s 200023 +node current glob syncStream 0m0.652s 200023 +~~ async ~~ +node fast-glob async 0m0.352s 200023 +node globby async 0m0.523s 200023 +node current glob async mjs 0m0.436s 200023 +node current glob stream 0m0.380s 200023 + +--- pattern: '**/*/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.592s 200023 +node globby sync 0m0.776s 200023 +node current globSync mjs 0m0.691s 200023 +node current glob syncStream 0m0.659s 200023 +~~ async ~~ +node fast-glob async 0m0.357s 200023 +node globby async 0m0.513s 200023 +node current glob async mjs 0m0.471s 200023 +node current glob stream 0m0.424s 200023 + +--- pattern: '**/*/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.585s 200023 +node globby sync 0m0.766s 200023 +node current globSync mjs 0m0.694s 200023 +node current glob syncStream 0m0.664s 200023 +~~ async ~~ +node fast-glob async 0m0.350s 200023 +node globby async 0m0.514s 200023 +node current glob async mjs 0m0.472s 200023 +node current glob stream 0m0.424s 200023 + +--- pattern: '**/[0-9]/**/*.txt' --- +~~ sync ~~ +node fast-glob sync 0m0.544s 100000 +node globby sync 0m0.636s 100000 +node current globSync mjs 0m0.626s 100000 +node current glob syncStream 0m0.621s 100000 +~~ async ~~ +node fast-glob async 0m0.322s 100000 +node globby async 0m0.404s 100000 +node current glob async mjs 0m0.360s 100000 +node current glob stream 0m0.352s 100000 +``` diff --git a/node_modules/glob/dist/commonjs/glob.d.ts b/node_modules/glob/dist/commonjs/glob.d.ts new file mode 100644 index 00000000..25262b3d --- /dev/null +++ b/node_modules/glob/dist/commonjs/glob.d.ts @@ -0,0 +1,388 @@ +import { Minimatch } from 'minimatch'; +import { Minipass } from 'minipass'; +import { FSOption, Path, PathScurry } from 'path-scurry'; +import { IgnoreLike } from './ignore.js'; +import { Pattern } from './pattern.js'; +export type MatchSet = Minimatch['set']; +export type GlobParts = Exclude; +/** + * A `GlobOptions` object may be provided to any of the exported methods, and + * must be provided to the `Glob` constructor. + * + * All options are optional, boolean, and false by default, unless otherwise + * noted. + * + * All resolved options are added to the Glob object as properties. + * + * If you are running many `glob` operations, you can pass a Glob object as the + * `options` argument to a subsequent operation to share the previously loaded + * cache. + */ +export interface GlobOptions { + /** + * Set to `true` to always receive absolute paths for + * matched files. Set to `false` to always return relative paths. + * + * When this option is not set, absolute paths are returned for patterns + * that are absolute, and otherwise paths are returned that are relative + * to the `cwd` setting. + * + * This does _not_ make an extra system call to get + * the realpath, it only does string path resolution. + * + * Conflicts with {@link withFileTypes} + */ + absolute?: boolean; + /** + * Set to false to enable {@link windowsPathsNoEscape} + * + * @deprecated + */ + allowWindowsEscape?: boolean; + /** + * The current working directory in which to search. Defaults to + * `process.cwd()`. + * + * May be eiher a string path or a `file://` URL object or string. + */ + cwd?: string | URL; + /** + * Include `.dot` files in normal matches and `globstar` + * matches. Note that an explicit dot in a portion of the pattern + * will always match dot files. + */ + dot?: boolean; + /** + * Prepend all relative path strings with `./` (or `.\` on Windows). + * + * Without this option, returned relative paths are "bare", so instead of + * returning `'./foo/bar'`, they are returned as `'foo/bar'`. + * + * Relative patterns starting with `'../'` are not prepended with `./`, even + * if this option is set. + */ + dotRelative?: boolean; + /** + * Follow symlinked directories when expanding `**` + * patterns. This can result in a lot of duplicate references in + * the presence of cyclic links, and make performance quite bad. + * + * By default, a `**` in a pattern will follow 1 symbolic link if + * it is not the first item in the pattern, or none if it is the + * first item in the pattern, following the same behavior as Bash. + */ + follow?: boolean; + /** + * string or string[], or an object with `ignore` and `ignoreChildren` + * methods. + * + * If a string or string[] is provided, then this is treated as a glob + * pattern or array of glob patterns to exclude from matches. To ignore all + * children within a directory, as well as the entry itself, append `'/**'` + * to the ignore pattern. + * + * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of + * any other settings. + * + * If an object is provided that has `ignored(path)` and/or + * `childrenIgnored(path)` methods, then these methods will be called to + * determine whether any Path is a match or if its children should be + * traversed, respectively. + */ + ignore?: string | string[] | IgnoreLike; + /** + * Treat brace expansion like `{a,b}` as a "magic" pattern. Has no + * effect if {@link nobrace} is set. + * + * Only has effect on the {@link hasMagic} function. + */ + magicalBraces?: boolean; + /** + * Add a `/` character to directory matches. Note that this requires + * additional stat calls in some cases. + */ + mark?: boolean; + /** + * Perform a basename-only match if the pattern does not contain any slash + * characters. That is, `*.js` would be treated as equivalent to + * `**\/*.js`, matching all js files in all directories. + */ + matchBase?: boolean; + /** + * Limit the directory traversal to a given depth below the cwd. + * Note that this does NOT prevent traversal to sibling folders, + * root patterns, and so on. It only limits the maximum folder depth + * that the walk will descend, relative to the cwd. + */ + maxDepth?: number; + /** + * Do not expand `{a,b}` and `{1..3}` brace sets. + */ + nobrace?: boolean; + /** + * Perform a case-insensitive match. This defaults to `true` on macOS and + * Windows systems, and `false` on all others. + * + * **Note** `nocase` should only be explicitly set when it is + * known that the filesystem's case sensitivity differs from the + * platform default. If set `true` on case-sensitive file + * systems, or `false` on case-insensitive file systems, then the + * walk may return more or less results than expected. + */ + nocase?: boolean; + /** + * Do not match directories, only files. (Note: to match + * _only_ directories, put a `/` at the end of the pattern.) + */ + nodir?: boolean; + /** + * Do not match "extglob" patterns such as `+(a|b)`. + */ + noext?: boolean; + /** + * Do not match `**` against multiple filenames. (Ie, treat it as a normal + * `*` instead.) + * + * Conflicts with {@link matchBase} + */ + noglobstar?: boolean; + /** + * Defaults to value of `process.platform` if available, or `'linux'` if + * not. Setting `platform:'win32'` on non-Windows systems may cause strange + * behavior. + */ + platform?: NodeJS.Platform; + /** + * Set to true to call `fs.realpath` on all of the + * results. In the case of an entry that cannot be resolved, the + * entry is omitted. This incurs a slight performance penalty, of + * course, because of the added system calls. + */ + realpath?: boolean; + /** + * + * A string path resolved against the `cwd` option, which + * is used as the starting point for absolute patterns that start + * with `/`, (but not drive letters or UNC paths on Windows). + * + * Note that this _doesn't_ necessarily limit the walk to the + * `root` directory, and doesn't affect the cwd starting point for + * non-absolute patterns. A pattern containing `..` will still be + * able to traverse out of the root directory, if it is not an + * actual root directory on the filesystem, and any non-absolute + * patterns will be matched in the `cwd`. For example, the + * pattern `/../*` with `{root:'/some/path'}` will return all + * files in `/some`, not all files in `/some/path`. The pattern + * `*` with `{root:'/some/path'}` will return all the entries in + * the cwd, not the entries in `/some/path`. + * + * To start absolute and non-absolute patterns in the same + * path, you can use `{root:''}`. However, be aware that on + * Windows systems, a pattern like `x:/*` or `//host/share/*` will + * _always_ start in the `x:/` or `//host/share` directory, + * regardless of the `root` setting. + */ + root?: string; + /** + * A [PathScurry](http://npm.im/path-scurry) object used + * to traverse the file system. If the `nocase` option is set + * explicitly, then any provided `scurry` object must match this + * setting. + */ + scurry?: PathScurry; + /** + * Call `lstat()` on all entries, whether required or not to determine + * if it's a valid match. When used with {@link withFileTypes}, this means + * that matches will include data such as modified time, permissions, and + * so on. Note that this will incur a performance cost due to the added + * system calls. + */ + stat?: boolean; + /** + * An AbortSignal which will cancel the Glob walk when + * triggered. + */ + signal?: AbortSignal; + /** + * Use `\\` as a path separator _only_, and + * _never_ as an escape character. If set, all `\\` characters are + * replaced with `/` in the pattern. + * + * Note that this makes it **impossible** to match against paths + * containing literal glob pattern characters, but allows matching + * with patterns constructed using `path.join()` and + * `path.resolve()` on Windows platforms, mimicking the (buggy!) + * behavior of Glob v7 and before on Windows. Please use with + * caution, and be mindful of [the caveat below about Windows + * paths](#windows). (For legacy reasons, this is also set if + * `allowWindowsEscape` is set to the exact value `false`.) + */ + windowsPathsNoEscape?: boolean; + /** + * Return [PathScurry](http://npm.im/path-scurry) + * `Path` objects instead of strings. These are similar to a + * NodeJS `Dirent` object, but with additional methods and + * properties. + * + * Conflicts with {@link absolute} + */ + withFileTypes?: boolean; + /** + * An fs implementation to override some or all of the defaults. See + * http://npm.im/path-scurry for details about what can be overridden. + */ + fs?: FSOption; + /** + * Just passed along to Minimatch. Note that this makes all pattern + * matching operations slower and *extremely* noisy. + */ + debug?: boolean; + /** + * Return `/` delimited paths, even on Windows. + * + * On posix systems, this has no effect. But, on Windows, it means that + * paths will be `/` delimited, and absolute paths will be their full + * resolved UNC forms, eg instead of `'C:\\foo\\bar'`, it would return + * `'//?/C:/foo/bar'` + */ + posix?: boolean; + /** + * Do not match any children of any matches. For example, the pattern + * `**\/foo` would match `a/foo`, but not `a/foo/b/foo` in this mode. + * + * This is especially useful for cases like "find all `node_modules` + * folders, but not the ones in `node_modules`". + * + * In order to support this, the `Ignore` implementation must support an + * `add(pattern: string)` method. If using the default `Ignore` class, then + * this is fine, but if this is set to `false`, and a custom `Ignore` is + * provided that does not have an `add()` method, then it will throw an + * error. + * + * **Caveat** It *only* ignores matches that would be a descendant of a + * previous match, and only if that descendant is matched *after* the + * ancestor is encountered. Since the file system walk happens in + * indeterminate order, it's possible that a match will already be added + * before its ancestor, if multiple or braced patterns are used. + * + * For example: + * + * ```ts + * const results = await glob([ + * // likely to match first, since it's just a stat + * 'a/b/c/d/e/f', + * + * // this pattern is more complicated! It must to various readdir() + * // calls and test the results against a regular expression, and that + * // is certainly going to take a little bit longer. + * // + * // So, later on, it encounters a match at 'a/b/c/d/e', but it's too + * // late to ignore a/b/c/d/e/f, because it's already been emitted. + * 'a/[bdf]/?/[a-z]/*', + * ], { includeChildMatches: false }) + * ``` + * + * It's best to only set this to `false` if you can be reasonably sure that + * no components of the pattern will potentially match one another's file + * system descendants, or if the occasional included child entry will not + * cause problems. + * + * @default true + */ + includeChildMatches?: boolean; +} +export type GlobOptionsWithFileTypesTrue = GlobOptions & { + withFileTypes: true; + absolute?: undefined; + mark?: undefined; + posix?: undefined; +}; +export type GlobOptionsWithFileTypesFalse = GlobOptions & { + withFileTypes?: false; +}; +export type GlobOptionsWithFileTypesUnset = GlobOptions & { + withFileTypes?: undefined; +}; +export type Result = Opts extends GlobOptionsWithFileTypesTrue ? Path : Opts extends GlobOptionsWithFileTypesFalse ? string : Opts extends GlobOptionsWithFileTypesUnset ? string : string | Path; +export type Results = Result[]; +export type FileTypes = Opts extends GlobOptionsWithFileTypesTrue ? true : Opts extends GlobOptionsWithFileTypesFalse ? false : Opts extends GlobOptionsWithFileTypesUnset ? false : boolean; +/** + * An object that can perform glob pattern traversals. + */ +export declare class Glob implements GlobOptions { + absolute?: boolean; + cwd: string; + root?: string; + dot: boolean; + dotRelative: boolean; + follow: boolean; + ignore?: string | string[] | IgnoreLike; + magicalBraces: boolean; + mark?: boolean; + matchBase: boolean; + maxDepth: number; + nobrace: boolean; + nocase: boolean; + nodir: boolean; + noext: boolean; + noglobstar: boolean; + pattern: string[]; + platform: NodeJS.Platform; + realpath: boolean; + scurry: PathScurry; + stat: boolean; + signal?: AbortSignal; + windowsPathsNoEscape: boolean; + withFileTypes: FileTypes; + includeChildMatches: boolean; + /** + * The options provided to the constructor. + */ + opts: Opts; + /** + * An array of parsed immutable {@link Pattern} objects. + */ + patterns: Pattern[]; + /** + * All options are stored as properties on the `Glob` object. + * + * See {@link GlobOptions} for full options descriptions. + * + * Note that a previous `Glob` object can be passed as the + * `GlobOptions` to another `Glob` instantiation to re-use settings + * and caches with a new pattern. + * + * Traversal functions can be called multiple times to run the walk + * again. + */ + constructor(pattern: string | string[], opts: Opts); + /** + * Returns a Promise that resolves to the results array. + */ + walk(): Promise>; + /** + * synchronous {@link Glob.walk} + */ + walkSync(): Results; + /** + * Stream results asynchronously. + */ + stream(): Minipass, Result>; + /** + * Stream results synchronously. + */ + streamSync(): Minipass, Result>; + /** + * Default sync iteration function. Returns a Generator that + * iterates over the results. + */ + iterateSync(): Generator, void, void>; + [Symbol.iterator](): Generator, void, void>; + /** + * Default async iteration function. Returns an AsyncGenerator that + * iterates over the results. + */ + iterate(): AsyncGenerator, void, void>; + [Symbol.asyncIterator](): AsyncGenerator, void, void>; +} +//# sourceMappingURL=glob.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/glob.d.ts.map b/node_modules/glob/dist/commonjs/glob.d.ts.map new file mode 100644 index 00000000..c32dc74c --- /dev/null +++ b/node_modules/glob/dist/commonjs/glob.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/glob.js b/node_modules/glob/dist/commonjs/glob.js new file mode 100644 index 00000000..e1339bbb --- /dev/null +++ b/node_modules/glob/dist/commonjs/glob.js @@ -0,0 +1,247 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Glob = void 0; +const minimatch_1 = require("minimatch"); +const node_url_1 = require("node:url"); +const path_scurry_1 = require("path-scurry"); +const pattern_js_1 = require("./pattern.js"); +const walker_js_1 = require("./walker.js"); +// if no process global, just call it linux. +// so we default to case-sensitive, / separators +const defaultPlatform = (typeof process === 'object' && + process && + typeof process.platform === 'string') ? + process.platform + : 'linux'; +/** + * An object that can perform glob pattern traversals. + */ +class Glob { + absolute; + cwd; + root; + dot; + dotRelative; + follow; + ignore; + magicalBraces; + mark; + matchBase; + maxDepth; + nobrace; + nocase; + nodir; + noext; + noglobstar; + pattern; + platform; + realpath; + scurry; + stat; + signal; + windowsPathsNoEscape; + withFileTypes; + includeChildMatches; + /** + * The options provided to the constructor. + */ + opts; + /** + * An array of parsed immutable {@link Pattern} objects. + */ + patterns; + /** + * All options are stored as properties on the `Glob` object. + * + * See {@link GlobOptions} for full options descriptions. + * + * Note that a previous `Glob` object can be passed as the + * `GlobOptions` to another `Glob` instantiation to re-use settings + * and caches with a new pattern. + * + * Traversal functions can be called multiple times to run the walk + * again. + */ + constructor(pattern, opts) { + /* c8 ignore start */ + if (!opts) + throw new TypeError('glob options required'); + /* c8 ignore stop */ + this.withFileTypes = !!opts.withFileTypes; + this.signal = opts.signal; + this.follow = !!opts.follow; + this.dot = !!opts.dot; + this.dotRelative = !!opts.dotRelative; + this.nodir = !!opts.nodir; + this.mark = !!opts.mark; + if (!opts.cwd) { + this.cwd = ''; + } + else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) { + opts.cwd = (0, node_url_1.fileURLToPath)(opts.cwd); + } + this.cwd = opts.cwd || ''; + this.root = opts.root; + this.magicalBraces = !!opts.magicalBraces; + this.nobrace = !!opts.nobrace; + this.noext = !!opts.noext; + this.realpath = !!opts.realpath; + this.absolute = opts.absolute; + this.includeChildMatches = opts.includeChildMatches !== false; + this.noglobstar = !!opts.noglobstar; + this.matchBase = !!opts.matchBase; + this.maxDepth = + typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity; + this.stat = !!opts.stat; + this.ignore = opts.ignore; + if (this.withFileTypes && this.absolute !== undefined) { + throw new Error('cannot set absolute and withFileTypes:true'); + } + if (typeof pattern === 'string') { + pattern = [pattern]; + } + this.windowsPathsNoEscape = + !!opts.windowsPathsNoEscape || + opts.allowWindowsEscape === + false; + if (this.windowsPathsNoEscape) { + pattern = pattern.map(p => p.replace(/\\/g, '/')); + } + if (this.matchBase) { + if (opts.noglobstar) { + throw new TypeError('base matching requires globstar'); + } + pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`)); + } + this.pattern = pattern; + this.platform = opts.platform || defaultPlatform; + this.opts = { ...opts, platform: this.platform }; + if (opts.scurry) { + this.scurry = opts.scurry; + if (opts.nocase !== undefined && + opts.nocase !== opts.scurry.nocase) { + throw new Error('nocase option contradicts provided scurry option'); + } + } + else { + const Scurry = opts.platform === 'win32' ? path_scurry_1.PathScurryWin32 + : opts.platform === 'darwin' ? path_scurry_1.PathScurryDarwin + : opts.platform ? path_scurry_1.PathScurryPosix + : path_scurry_1.PathScurry; + this.scurry = new Scurry(this.cwd, { + nocase: opts.nocase, + fs: opts.fs, + }); + } + this.nocase = this.scurry.nocase; + // If you do nocase:true on a case-sensitive file system, then + // we need to use regexps instead of strings for non-magic + // path portions, because statting `aBc` won't return results + // for the file `AbC` for example. + const nocaseMagicOnly = this.platform === 'darwin' || this.platform === 'win32'; + const mmo = { + // default nocase based on platform + ...opts, + dot: this.dot, + matchBase: this.matchBase, + nobrace: this.nobrace, + nocase: this.nocase, + nocaseMagicOnly, + nocomment: true, + noext: this.noext, + nonegate: true, + optimizationLevel: 2, + platform: this.platform, + windowsPathsNoEscape: this.windowsPathsNoEscape, + debug: !!this.opts.debug, + }; + const mms = this.pattern.map(p => new minimatch_1.Minimatch(p, mmo)); + const [matchSet, globParts] = mms.reduce((set, m) => { + set[0].push(...m.set); + set[1].push(...m.globParts); + return set; + }, [[], []]); + this.patterns = matchSet.map((set, i) => { + const g = globParts[i]; + /* c8 ignore start */ + if (!g) + throw new Error('invalid pattern object'); + /* c8 ignore stop */ + return new pattern_js_1.Pattern(set, g, 0, this.platform); + }); + } + async walk() { + // Walkers always return array of Path objects, so we just have to + // coerce them into the right shape. It will have already called + // realpath() if the option was set to do so, so we know that's cached. + // start out knowing the cwd, at least + return [ + ...(await new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, { + ...this.opts, + maxDepth: this.maxDepth !== Infinity ? + this.maxDepth + this.scurry.cwd.depth() + : Infinity, + platform: this.platform, + nocase: this.nocase, + includeChildMatches: this.includeChildMatches, + }).walk()), + ]; + } + walkSync() { + return [ + ...new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, { + ...this.opts, + maxDepth: this.maxDepth !== Infinity ? + this.maxDepth + this.scurry.cwd.depth() + : Infinity, + platform: this.platform, + nocase: this.nocase, + includeChildMatches: this.includeChildMatches, + }).walkSync(), + ]; + } + stream() { + return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, { + ...this.opts, + maxDepth: this.maxDepth !== Infinity ? + this.maxDepth + this.scurry.cwd.depth() + : Infinity, + platform: this.platform, + nocase: this.nocase, + includeChildMatches: this.includeChildMatches, + }).stream(); + } + streamSync() { + return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, { + ...this.opts, + maxDepth: this.maxDepth !== Infinity ? + this.maxDepth + this.scurry.cwd.depth() + : Infinity, + platform: this.platform, + nocase: this.nocase, + includeChildMatches: this.includeChildMatches, + }).streamSync(); + } + /** + * Default sync iteration function. Returns a Generator that + * iterates over the results. + */ + iterateSync() { + return this.streamSync()[Symbol.iterator](); + } + [Symbol.iterator]() { + return this.iterateSync(); + } + /** + * Default async iteration function. Returns an AsyncGenerator that + * iterates over the results. + */ + iterate() { + return this.stream()[Symbol.asyncIterator](); + } + [Symbol.asyncIterator]() { + return this.iterate(); + } +} +exports.Glob = Glob; +//# sourceMappingURL=glob.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/glob.js.map b/node_modules/glob/dist/commonjs/glob.js.map new file mode 100644 index 00000000..ddab4197 --- /dev/null +++ b/node_modules/glob/dist/commonjs/glob.js.map @@ -0,0 +1 @@ +{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":";;;AAAA,yCAAuD;AAEvD,uCAAwC;AACxC,6CAOoB;AAEpB,6CAAsC;AACtC,2CAAoD;AAKpD,4CAA4C;AAC5C,gDAAgD;AAChD,MAAM,eAAe,GACnB,CACE,OAAO,OAAO,KAAK,QAAQ;IAC3B,OAAO;IACP,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CACrC,CAAC,CAAC;IACD,OAAO,CAAC,QAAQ;IAClB,CAAC,CAAC,OAAO,CAAA;AAyVX;;GAEG;AACH,MAAa,IAAI;IACf,QAAQ,CAAU;IAClB,GAAG,CAAQ;IACX,IAAI,CAAS;IACb,GAAG,CAAS;IACZ,WAAW,CAAS;IACpB,MAAM,CAAS;IACf,MAAM,CAAiC;IACvC,aAAa,CAAS;IACtB,IAAI,CAAU;IACd,SAAS,CAAS;IAClB,QAAQ,CAAQ;IAChB,OAAO,CAAS;IAChB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,KAAK,CAAS;IACd,UAAU,CAAS;IACnB,OAAO,CAAU;IACjB,QAAQ,CAAiB;IACzB,QAAQ,CAAS;IACjB,MAAM,CAAY;IAClB,IAAI,CAAS;IACb,MAAM,CAAc;IACpB,oBAAoB,CAAS;IAC7B,aAAa,CAAiB;IAC9B,mBAAmB,CAAS;IAE5B;;OAEG;IACH,IAAI,CAAM;IAEV;;OAEG;IACH,QAAQ,CAAW;IAEnB;;;;;;;;;;;OAWG;IACH,YAAY,OAA0B,EAAE,IAAU;QAChD,qBAAqB;QACrB,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAA;QACvD,oBAAoB;QACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,aAAgC,CAAA;QAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAA;QACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;QACzB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,GAAG,GAAG,IAAA,wBAAa,EAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAA;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAA;QACzC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAA;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,KAAK,KAAK,CAAA;QAE7D,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAA;QACnC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;QACjC,IAAI,CAAC,QAAQ;YACX,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC9D,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAEzB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;QAC/D,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;QAED,IAAI,CAAC,oBAAoB;YACvB,CAAC,CAAC,IAAI,CAAC,oBAAoB;gBAC1B,IAAyC,CAAC,kBAAkB;oBAC3D,KAAK,CAAA;QAET,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAA;YACxD,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;QACjE,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAEtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,eAAe,CAAA;QAChD,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAA;QAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YACzB,IACE,IAAI,CAAC,MAAM,KAAK,SAAS;gBACzB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAClC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GACV,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,6BAAe;gBAC3C,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,8BAAgB;oBAC/C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAAe;wBACjC,CAAC,CAAC,wBAAU,CAAA;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,EAAE,EAAE,IAAI,CAAC,EAAE;aACZ,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;QAEhC,8DAA8D;QAC9D,0DAA0D;QAC1D,6DAA6D;QAC7D,kCAAkC;QAClC,MAAM,eAAe,GACnB,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAA;QAEzD,MAAM,GAAG,GAAqB;YAC5B,mCAAmC;YACnC,GAAG,IAAI;YACP,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,eAAe;YACf,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,CAAC;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;SACzB,CAAA;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,qBAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,CACtC,CAAC,GAA0B,EAAE,CAAC,EAAE,EAAE;YAChC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;YACrB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAA;YAC3B,OAAO,GAAG,CAAA;QACZ,CAAC,EACD,CAAC,EAAE,EAAE,EAAE,CAAC,CACT,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;YACtB,qBAAqB;YACrB,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;YACjD,oBAAoB;YACpB,OAAO,IAAI,oBAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC;IAMD,KAAK,CAAC,IAAI;QACR,kEAAkE;QAClE,iEAAiE;QACjE,uEAAuE;QACvE,sCAAsC;QACtC,OAAO;YACL,GAAG,CAAC,MAAM,IAAI,sBAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBACvD,GAAG,IAAI,CAAC,IAAI;gBACZ,QAAQ,EACN,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;oBAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;oBACzC,CAAC,CAAC,QAAQ;gBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;aAC9C,CAAC,CAAC,IAAI,EAAE,CAAC;SACX,CAAA;IACH,CAAC;IAMD,QAAQ;QACN,OAAO;YACL,GAAG,IAAI,sBAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBAChD,GAAG,IAAI,CAAC,IAAI;gBACZ,QAAQ,EACN,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;oBAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;oBACzC,CAAC,CAAC,QAAQ;gBACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;aAC9C,CAAC,CAAC,QAAQ,EAAE;SACd,CAAA;IACH,CAAC;IAMD,MAAM;QACJ,OAAO,IAAI,sBAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YACpD,GAAG,IAAI,CAAC,IAAI;YACZ,QAAQ,EACN,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;gBAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;gBACzC,CAAC,CAAC,QAAQ;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;SAC9C,CAAC,CAAC,MAAM,EAAE,CAAA;IACb,CAAC;IAMD,UAAU;QACR,OAAO,IAAI,sBAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YACpD,GAAG,IAAI,CAAC,IAAI;YACZ,QAAQ,EACN,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;gBAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;gBACzC,CAAC,CAAC,QAAQ;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;SAC9C,CAAC,CAAC,UAAU,EAAE,CAAA;IACjB,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC7C,CAAC;IACD,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3B,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAA;IAC9C,CAAC;IACD,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;IACvB,CAAC;CACF;AA7QD,oBA6QC","sourcesContent":["import { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { fileURLToPath } from 'node:url'\nimport {\n FSOption,\n Path,\n PathScurry,\n PathScurryDarwin,\n PathScurryPosix,\n PathScurryWin32,\n} from 'path-scurry'\nimport { IgnoreLike } from './ignore.js'\nimport { Pattern } from './pattern.js'\nimport { GlobStream, GlobWalker } from './walker.js'\n\nexport type MatchSet = Minimatch['set']\nexport type GlobParts = Exclude\n\n// if no process global, just call it linux.\n// so we default to case-sensitive, / separators\nconst defaultPlatform: NodeJS.Platform =\n (\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ) ?\n process.platform\n : 'linux'\n\n/**\n * A `GlobOptions` object may be provided to any of the exported methods, and\n * must be provided to the `Glob` constructor.\n *\n * All options are optional, boolean, and false by default, unless otherwise\n * noted.\n *\n * All resolved options are added to the Glob object as properties.\n *\n * If you are running many `glob` operations, you can pass a Glob object as the\n * `options` argument to a subsequent operation to share the previously loaded\n * cache.\n */\nexport interface GlobOptions {\n /**\n * Set to `true` to always receive absolute paths for\n * matched files. Set to `false` to always return relative paths.\n *\n * When this option is not set, absolute paths are returned for patterns\n * that are absolute, and otherwise paths are returned that are relative\n * to the `cwd` setting.\n *\n * This does _not_ make an extra system call to get\n * the realpath, it only does string path resolution.\n *\n * Conflicts with {@link withFileTypes}\n */\n absolute?: boolean\n\n /**\n * Set to false to enable {@link windowsPathsNoEscape}\n *\n * @deprecated\n */\n allowWindowsEscape?: boolean\n\n /**\n * The current working directory in which to search. Defaults to\n * `process.cwd()`.\n *\n * May be eiher a string path or a `file://` URL object or string.\n */\n cwd?: string | URL\n\n /**\n * Include `.dot` files in normal matches and `globstar`\n * matches. Note that an explicit dot in a portion of the pattern\n * will always match dot files.\n */\n dot?: boolean\n\n /**\n * Prepend all relative path strings with `./` (or `.\\` on Windows).\n *\n * Without this option, returned relative paths are \"bare\", so instead of\n * returning `'./foo/bar'`, they are returned as `'foo/bar'`.\n *\n * Relative patterns starting with `'../'` are not prepended with `./`, even\n * if this option is set.\n */\n dotRelative?: boolean\n\n /**\n * Follow symlinked directories when expanding `**`\n * patterns. This can result in a lot of duplicate references in\n * the presence of cyclic links, and make performance quite bad.\n *\n * By default, a `**` in a pattern will follow 1 symbolic link if\n * it is not the first item in the pattern, or none if it is the\n * first item in the pattern, following the same behavior as Bash.\n */\n follow?: boolean\n\n /**\n * string or string[], or an object with `ignore` and `ignoreChildren`\n * methods.\n *\n * If a string or string[] is provided, then this is treated as a glob\n * pattern or array of glob patterns to exclude from matches. To ignore all\n * children within a directory, as well as the entry itself, append `'/**'`\n * to the ignore pattern.\n *\n * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of\n * any other settings.\n *\n * If an object is provided that has `ignored(path)` and/or\n * `childrenIgnored(path)` methods, then these methods will be called to\n * determine whether any Path is a match or if its children should be\n * traversed, respectively.\n */\n ignore?: string | string[] | IgnoreLike\n\n /**\n * Treat brace expansion like `{a,b}` as a \"magic\" pattern. Has no\n * effect if {@link nobrace} is set.\n *\n * Only has effect on the {@link hasMagic} function.\n */\n magicalBraces?: boolean\n\n /**\n * Add a `/` character to directory matches. Note that this requires\n * additional stat calls in some cases.\n */\n mark?: boolean\n\n /**\n * Perform a basename-only match if the pattern does not contain any slash\n * characters. That is, `*.js` would be treated as equivalent to\n * `**\\/*.js`, matching all js files in all directories.\n */\n matchBase?: boolean\n\n /**\n * Limit the directory traversal to a given depth below the cwd.\n * Note that this does NOT prevent traversal to sibling folders,\n * root patterns, and so on. It only limits the maximum folder depth\n * that the walk will descend, relative to the cwd.\n */\n maxDepth?: number\n\n /**\n * Do not expand `{a,b}` and `{1..3}` brace sets.\n */\n nobrace?: boolean\n\n /**\n * Perform a case-insensitive match. This defaults to `true` on macOS and\n * Windows systems, and `false` on all others.\n *\n * **Note** `nocase` should only be explicitly set when it is\n * known that the filesystem's case sensitivity differs from the\n * platform default. If set `true` on case-sensitive file\n * systems, or `false` on case-insensitive file systems, then the\n * walk may return more or less results than expected.\n */\n nocase?: boolean\n\n /**\n * Do not match directories, only files. (Note: to match\n * _only_ directories, put a `/` at the end of the pattern.)\n */\n nodir?: boolean\n\n /**\n * Do not match \"extglob\" patterns such as `+(a|b)`.\n */\n noext?: boolean\n\n /**\n * Do not match `**` against multiple filenames. (Ie, treat it as a normal\n * `*` instead.)\n *\n * Conflicts with {@link matchBase}\n */\n noglobstar?: boolean\n\n /**\n * Defaults to value of `process.platform` if available, or `'linux'` if\n * not. Setting `platform:'win32'` on non-Windows systems may cause strange\n * behavior.\n */\n platform?: NodeJS.Platform\n\n /**\n * Set to true to call `fs.realpath` on all of the\n * results. In the case of an entry that cannot be resolved, the\n * entry is omitted. This incurs a slight performance penalty, of\n * course, because of the added system calls.\n */\n realpath?: boolean\n\n /**\n *\n * A string path resolved against the `cwd` option, which\n * is used as the starting point for absolute patterns that start\n * with `/`, (but not drive letters or UNC paths on Windows).\n *\n * Note that this _doesn't_ necessarily limit the walk to the\n * `root` directory, and doesn't affect the cwd starting point for\n * non-absolute patterns. A pattern containing `..` will still be\n * able to traverse out of the root directory, if it is not an\n * actual root directory on the filesystem, and any non-absolute\n * patterns will be matched in the `cwd`. For example, the\n * pattern `/../*` with `{root:'/some/path'}` will return all\n * files in `/some`, not all files in `/some/path`. The pattern\n * `*` with `{root:'/some/path'}` will return all the entries in\n * the cwd, not the entries in `/some/path`.\n *\n * To start absolute and non-absolute patterns in the same\n * path, you can use `{root:''}`. However, be aware that on\n * Windows systems, a pattern like `x:/*` or `//host/share/*` will\n * _always_ start in the `x:/` or `//host/share` directory,\n * regardless of the `root` setting.\n */\n root?: string\n\n /**\n * A [PathScurry](http://npm.im/path-scurry) object used\n * to traverse the file system. If the `nocase` option is set\n * explicitly, then any provided `scurry` object must match this\n * setting.\n */\n scurry?: PathScurry\n\n /**\n * Call `lstat()` on all entries, whether required or not to determine\n * if it's a valid match. When used with {@link withFileTypes}, this means\n * that matches will include data such as modified time, permissions, and\n * so on. Note that this will incur a performance cost due to the added\n * system calls.\n */\n stat?: boolean\n\n /**\n * An AbortSignal which will cancel the Glob walk when\n * triggered.\n */\n signal?: AbortSignal\n\n /**\n * Use `\\\\` as a path separator _only_, and\n * _never_ as an escape character. If set, all `\\\\` characters are\n * replaced with `/` in the pattern.\n *\n * Note that this makes it **impossible** to match against paths\n * containing literal glob pattern characters, but allows matching\n * with patterns constructed using `path.join()` and\n * `path.resolve()` on Windows platforms, mimicking the (buggy!)\n * behavior of Glob v7 and before on Windows. Please use with\n * caution, and be mindful of [the caveat below about Windows\n * paths](#windows). (For legacy reasons, this is also set if\n * `allowWindowsEscape` is set to the exact value `false`.)\n */\n windowsPathsNoEscape?: boolean\n\n /**\n * Return [PathScurry](http://npm.im/path-scurry)\n * `Path` objects instead of strings. These are similar to a\n * NodeJS `Dirent` object, but with additional methods and\n * properties.\n *\n * Conflicts with {@link absolute}\n */\n withFileTypes?: boolean\n\n /**\n * An fs implementation to override some or all of the defaults. See\n * http://npm.im/path-scurry for details about what can be overridden.\n */\n fs?: FSOption\n\n /**\n * Just passed along to Minimatch. Note that this makes all pattern\n * matching operations slower and *extremely* noisy.\n */\n debug?: boolean\n\n /**\n * Return `/` delimited paths, even on Windows.\n *\n * On posix systems, this has no effect. But, on Windows, it means that\n * paths will be `/` delimited, and absolute paths will be their full\n * resolved UNC forms, eg instead of `'C:\\\\foo\\\\bar'`, it would return\n * `'//?/C:/foo/bar'`\n */\n posix?: boolean\n\n /**\n * Do not match any children of any matches. For example, the pattern\n * `**\\/foo` would match `a/foo`, but not `a/foo/b/foo` in this mode.\n *\n * This is especially useful for cases like \"find all `node_modules`\n * folders, but not the ones in `node_modules`\".\n *\n * In order to support this, the `Ignore` implementation must support an\n * `add(pattern: string)` method. If using the default `Ignore` class, then\n * this is fine, but if this is set to `false`, and a custom `Ignore` is\n * provided that does not have an `add()` method, then it will throw an\n * error.\n *\n * **Caveat** It *only* ignores matches that would be a descendant of a\n * previous match, and only if that descendant is matched *after* the\n * ancestor is encountered. Since the file system walk happens in\n * indeterminate order, it's possible that a match will already be added\n * before its ancestor, if multiple or braced patterns are used.\n *\n * For example:\n *\n * ```ts\n * const results = await glob([\n * // likely to match first, since it's just a stat\n * 'a/b/c/d/e/f',\n *\n * // this pattern is more complicated! It must to various readdir()\n * // calls and test the results against a regular expression, and that\n * // is certainly going to take a little bit longer.\n * //\n * // So, later on, it encounters a match at 'a/b/c/d/e', but it's too\n * // late to ignore a/b/c/d/e/f, because it's already been emitted.\n * 'a/[bdf]/?/[a-z]/*',\n * ], { includeChildMatches: false })\n * ```\n *\n * It's best to only set this to `false` if you can be reasonably sure that\n * no components of the pattern will potentially match one another's file\n * system descendants, or if the occasional included child entry will not\n * cause problems.\n *\n * @default true\n */\n includeChildMatches?: boolean\n}\n\nexport type GlobOptionsWithFileTypesTrue = GlobOptions & {\n withFileTypes: true\n // string options not relevant if returning Path objects.\n absolute?: undefined\n mark?: undefined\n posix?: undefined\n}\n\nexport type GlobOptionsWithFileTypesFalse = GlobOptions & {\n withFileTypes?: false\n}\n\nexport type GlobOptionsWithFileTypesUnset = GlobOptions & {\n withFileTypes?: undefined\n}\n\nexport type Result =\n Opts extends GlobOptionsWithFileTypesTrue ? Path\n : Opts extends GlobOptionsWithFileTypesFalse ? string\n : Opts extends GlobOptionsWithFileTypesUnset ? string\n : string | Path\nexport type Results = Result[]\n\nexport type FileTypes =\n Opts extends GlobOptionsWithFileTypesTrue ? true\n : Opts extends GlobOptionsWithFileTypesFalse ? false\n : Opts extends GlobOptionsWithFileTypesUnset ? false\n : boolean\n\n/**\n * An object that can perform glob pattern traversals.\n */\nexport class Glob implements GlobOptions {\n absolute?: boolean\n cwd: string\n root?: string\n dot: boolean\n dotRelative: boolean\n follow: boolean\n ignore?: string | string[] | IgnoreLike\n magicalBraces: boolean\n mark?: boolean\n matchBase: boolean\n maxDepth: number\n nobrace: boolean\n nocase: boolean\n nodir: boolean\n noext: boolean\n noglobstar: boolean\n pattern: string[]\n platform: NodeJS.Platform\n realpath: boolean\n scurry: PathScurry\n stat: boolean\n signal?: AbortSignal\n windowsPathsNoEscape: boolean\n withFileTypes: FileTypes\n includeChildMatches: boolean\n\n /**\n * The options provided to the constructor.\n */\n opts: Opts\n\n /**\n * An array of parsed immutable {@link Pattern} objects.\n */\n patterns: Pattern[]\n\n /**\n * All options are stored as properties on the `Glob` object.\n *\n * See {@link GlobOptions} for full options descriptions.\n *\n * Note that a previous `Glob` object can be passed as the\n * `GlobOptions` to another `Glob` instantiation to re-use settings\n * and caches with a new pattern.\n *\n * Traversal functions can be called multiple times to run the walk\n * again.\n */\n constructor(pattern: string | string[], opts: Opts) {\n /* c8 ignore start */\n if (!opts) throw new TypeError('glob options required')\n /* c8 ignore stop */\n this.withFileTypes = !!opts.withFileTypes as FileTypes\n this.signal = opts.signal\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.dotRelative = !!opts.dotRelative\n this.nodir = !!opts.nodir\n this.mark = !!opts.mark\n if (!opts.cwd) {\n this.cwd = ''\n } else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {\n opts.cwd = fileURLToPath(opts.cwd)\n }\n this.cwd = opts.cwd || ''\n this.root = opts.root\n this.magicalBraces = !!opts.magicalBraces\n this.nobrace = !!opts.nobrace\n this.noext = !!opts.noext\n this.realpath = !!opts.realpath\n this.absolute = opts.absolute\n this.includeChildMatches = opts.includeChildMatches !== false\n\n this.noglobstar = !!opts.noglobstar\n this.matchBase = !!opts.matchBase\n this.maxDepth =\n typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity\n this.stat = !!opts.stat\n this.ignore = opts.ignore\n\n if (this.withFileTypes && this.absolute !== undefined) {\n throw new Error('cannot set absolute and withFileTypes:true')\n }\n\n if (typeof pattern === 'string') {\n pattern = [pattern]\n }\n\n this.windowsPathsNoEscape =\n !!opts.windowsPathsNoEscape ||\n (opts as { allowWindowsEscape?: boolean }).allowWindowsEscape ===\n false\n\n if (this.windowsPathsNoEscape) {\n pattern = pattern.map(p => p.replace(/\\\\/g, '/'))\n }\n\n if (this.matchBase) {\n if (opts.noglobstar) {\n throw new TypeError('base matching requires globstar')\n }\n pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`))\n }\n\n this.pattern = pattern\n\n this.platform = opts.platform || defaultPlatform\n this.opts = { ...opts, platform: this.platform }\n if (opts.scurry) {\n this.scurry = opts.scurry\n if (\n opts.nocase !== undefined &&\n opts.nocase !== opts.scurry.nocase\n ) {\n throw new Error('nocase option contradicts provided scurry option')\n }\n } else {\n const Scurry =\n opts.platform === 'win32' ? PathScurryWin32\n : opts.platform === 'darwin' ? PathScurryDarwin\n : opts.platform ? PathScurryPosix\n : PathScurry\n this.scurry = new Scurry(this.cwd, {\n nocase: opts.nocase,\n fs: opts.fs,\n })\n }\n this.nocase = this.scurry.nocase\n\n // If you do nocase:true on a case-sensitive file system, then\n // we need to use regexps instead of strings for non-magic\n // path portions, because statting `aBc` won't return results\n // for the file `AbC` for example.\n const nocaseMagicOnly =\n this.platform === 'darwin' || this.platform === 'win32'\n\n const mmo: MinimatchOptions = {\n // default nocase based on platform\n ...opts,\n dot: this.dot,\n matchBase: this.matchBase,\n nobrace: this.nobrace,\n nocase: this.nocase,\n nocaseMagicOnly,\n nocomment: true,\n noext: this.noext,\n nonegate: true,\n optimizationLevel: 2,\n platform: this.platform,\n windowsPathsNoEscape: this.windowsPathsNoEscape,\n debug: !!this.opts.debug,\n }\n\n const mms = this.pattern.map(p => new Minimatch(p, mmo))\n const [matchSet, globParts] = mms.reduce(\n (set: [MatchSet, GlobParts], m) => {\n set[0].push(...m.set)\n set[1].push(...m.globParts)\n return set\n },\n [[], []],\n )\n this.patterns = matchSet.map((set, i) => {\n const g = globParts[i]\n /* c8 ignore start */\n if (!g) throw new Error('invalid pattern object')\n /* c8 ignore stop */\n return new Pattern(set, g, 0, this.platform)\n })\n }\n\n /**\n * Returns a Promise that resolves to the results array.\n */\n async walk(): Promise>\n async walk(): Promise<(string | Path)[]> {\n // Walkers always return array of Path objects, so we just have to\n // coerce them into the right shape. It will have already called\n // realpath() if the option was set to do so, so we know that's cached.\n // start out knowing the cwd, at least\n return [\n ...(await new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).walk()),\n ]\n }\n\n /**\n * synchronous {@link Glob.walk}\n */\n walkSync(): Results\n walkSync(): (string | Path)[] {\n return [\n ...new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).walkSync(),\n ]\n }\n\n /**\n * Stream results asynchronously.\n */\n stream(): Minipass, Result>\n stream(): Minipass {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).stream()\n }\n\n /**\n * Stream results synchronously.\n */\n streamSync(): Minipass, Result>\n streamSync(): Minipass {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).streamSync()\n }\n\n /**\n * Default sync iteration function. Returns a Generator that\n * iterates over the results.\n */\n iterateSync(): Generator, void, void> {\n return this.streamSync()[Symbol.iterator]()\n }\n [Symbol.iterator]() {\n return this.iterateSync()\n }\n\n /**\n * Default async iteration function. Returns an AsyncGenerator that\n * iterates over the results.\n */\n iterate(): AsyncGenerator, void, void> {\n return this.stream()[Symbol.asyncIterator]()\n }\n [Symbol.asyncIterator]() {\n return this.iterate()\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/has-magic.d.ts b/node_modules/glob/dist/commonjs/has-magic.d.ts new file mode 100644 index 00000000..8aec3bd9 --- /dev/null +++ b/node_modules/glob/dist/commonjs/has-magic.d.ts @@ -0,0 +1,14 @@ +import { GlobOptions } from './glob.js'; +/** + * Return true if the patterns provided contain any magic glob characters, + * given the options provided. + * + * Brace expansion is not considered "magic" unless the `magicalBraces` option + * is set, as brace expansion just turns one string into an array of strings. + * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and + * `'xby'` both do not contain any magic glob characters, and it's treated the + * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true` + * is in the options, brace expansion _is_ treated as a pattern having magic. + */ +export declare const hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean; +//# sourceMappingURL=has-magic.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/has-magic.d.ts.map b/node_modules/glob/dist/commonjs/has-magic.d.ts.map new file mode 100644 index 00000000..b24dd4ec --- /dev/null +++ b/node_modules/glob/dist/commonjs/has-magic.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"has-magic.d.ts","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,YACV,MAAM,GAAG,MAAM,EAAE,YACjB,WAAW,KACnB,OAQF,CAAA"} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/has-magic.js b/node_modules/glob/dist/commonjs/has-magic.js new file mode 100644 index 00000000..0918bd57 --- /dev/null +++ b/node_modules/glob/dist/commonjs/has-magic.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.hasMagic = void 0; +const minimatch_1 = require("minimatch"); +/** + * Return true if the patterns provided contain any magic glob characters, + * given the options provided. + * + * Brace expansion is not considered "magic" unless the `magicalBraces` option + * is set, as brace expansion just turns one string into an array of strings. + * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and + * `'xby'` both do not contain any magic glob characters, and it's treated the + * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true` + * is in the options, brace expansion _is_ treated as a pattern having magic. + */ +const hasMagic = (pattern, options = {}) => { + if (!Array.isArray(pattern)) { + pattern = [pattern]; + } + for (const p of pattern) { + if (new minimatch_1.Minimatch(p, options).hasMagic()) + return true; + } + return false; +}; +exports.hasMagic = hasMagic; +//# sourceMappingURL=has-magic.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/has-magic.js.map b/node_modules/glob/dist/commonjs/has-magic.js.map new file mode 100644 index 00000000..44deab29 --- /dev/null +++ b/node_modules/glob/dist/commonjs/has-magic.js.map @@ -0,0 +1 @@ +{"version":3,"file":"has-magic.js","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAGrC;;;;;;;;;;GAUG;AACI,MAAM,QAAQ,GAAG,CACtB,OAA0B,EAC1B,UAAuB,EAAE,EAChB,EAAE;IACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,IAAI,qBAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAA;IACvD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAXY,QAAA,QAAQ,YAWpB","sourcesContent":["import { Minimatch } from 'minimatch'\nimport { GlobOptions } from './glob.js'\n\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (\n pattern: string | string[],\n options: GlobOptions = {},\n): boolean => {\n if (!Array.isArray(pattern)) {\n pattern = [pattern]\n }\n for (const p of pattern) {\n if (new Minimatch(p, options).hasMagic()) return true\n }\n return false\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/ignore.d.ts b/node_modules/glob/dist/commonjs/ignore.d.ts new file mode 100644 index 00000000..1893b16d --- /dev/null +++ b/node_modules/glob/dist/commonjs/ignore.d.ts @@ -0,0 +1,24 @@ +import { Minimatch, MinimatchOptions } from 'minimatch'; +import { Path } from 'path-scurry'; +import { GlobWalkerOpts } from './walker.js'; +export interface IgnoreLike { + ignored?: (p: Path) => boolean; + childrenIgnored?: (p: Path) => boolean; + add?: (ignore: string) => void; +} +/** + * Class used to process ignored patterns + */ +export declare class Ignore implements IgnoreLike { + relative: Minimatch[]; + relativeChildren: Minimatch[]; + absolute: Minimatch[]; + absoluteChildren: Minimatch[]; + platform: NodeJS.Platform; + mmopts: MinimatchOptions; + constructor(ignored: string[], { nobrace, nocase, noext, noglobstar, platform, }: GlobWalkerOpts); + add(ign: string): void; + ignored(p: Path): boolean; + childrenIgnored(p: Path): boolean; +} +//# sourceMappingURL=ignore.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/ignore.d.ts.map b/node_modules/glob/dist/commonjs/ignore.d.ts.map new file mode 100644 index 00000000..57d6ab61 --- /dev/null +++ b/node_modules/glob/dist/commonjs/ignore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IACtC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAWD;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,MAAM,EAAE,gBAAgB,CAAA;gBAGtB,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IAqBnB,GAAG,CAAC,GAAG,EAAE,MAAM;IAyCf,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAczB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;CAWlC"} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/ignore.js b/node_modules/glob/dist/commonjs/ignore.js new file mode 100644 index 00000000..5f1fde06 --- /dev/null +++ b/node_modules/glob/dist/commonjs/ignore.js @@ -0,0 +1,119 @@ +"use strict"; +// give it a pattern, and it'll be able to tell you if +// a given path should be ignored. +// Ignoring a path ignores its children if the pattern ends in /** +// Ignores are always parsed in dot:true mode +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Ignore = void 0; +const minimatch_1 = require("minimatch"); +const pattern_js_1 = require("./pattern.js"); +const defaultPlatform = (typeof process === 'object' && + process && + typeof process.platform === 'string') ? + process.platform + : 'linux'; +/** + * Class used to process ignored patterns + */ +class Ignore { + relative; + relativeChildren; + absolute; + absoluteChildren; + platform; + mmopts; + constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform, }) { + this.relative = []; + this.absolute = []; + this.relativeChildren = []; + this.absoluteChildren = []; + this.platform = platform; + this.mmopts = { + dot: true, + nobrace, + nocase, + noext, + noglobstar, + optimizationLevel: 2, + platform, + nocomment: true, + nonegate: true, + }; + for (const ign of ignored) + this.add(ign); + } + add(ign) { + // this is a little weird, but it gives us a clean set of optimized + // minimatch matchers, without getting tripped up if one of them + // ends in /** inside a brace section, and it's only inefficient at + // the start of the walk, not along it. + // It'd be nice if the Pattern class just had a .test() method, but + // handling globstars is a bit of a pita, and that code already lives + // in minimatch anyway. + // Another way would be if maybe Minimatch could take its set/globParts + // as an option, and then we could at least just use Pattern to test + // for absolute-ness. + // Yet another way, Minimatch could take an array of glob strings, and + // a cwd option, and do the right thing. + const mm = new minimatch_1.Minimatch(ign, this.mmopts); + for (let i = 0; i < mm.set.length; i++) { + const parsed = mm.set[i]; + const globParts = mm.globParts[i]; + /* c8 ignore start */ + if (!parsed || !globParts) { + throw new Error('invalid pattern object'); + } + // strip off leading ./ portions + // https://github.com/isaacs/node-glob/issues/570 + while (parsed[0] === '.' && globParts[0] === '.') { + parsed.shift(); + globParts.shift(); + } + /* c8 ignore stop */ + const p = new pattern_js_1.Pattern(parsed, globParts, 0, this.platform); + const m = new minimatch_1.Minimatch(p.globString(), this.mmopts); + const children = globParts[globParts.length - 1] === '**'; + const absolute = p.isAbsolute(); + if (absolute) + this.absolute.push(m); + else + this.relative.push(m); + if (children) { + if (absolute) + this.absoluteChildren.push(m); + else + this.relativeChildren.push(m); + } + } + } + ignored(p) { + const fullpath = p.fullpath(); + const fullpaths = `${fullpath}/`; + const relative = p.relative() || '.'; + const relatives = `${relative}/`; + for (const m of this.relative) { + if (m.match(relative) || m.match(relatives)) + return true; + } + for (const m of this.absolute) { + if (m.match(fullpath) || m.match(fullpaths)) + return true; + } + return false; + } + childrenIgnored(p) { + const fullpath = p.fullpath() + '/'; + const relative = (p.relative() || '.') + '/'; + for (const m of this.relativeChildren) { + if (m.match(relative)) + return true; + } + for (const m of this.absoluteChildren) { + if (m.match(fullpath)) + return true; + } + return false; + } +} +exports.Ignore = Ignore; +//# sourceMappingURL=ignore.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/ignore.js.map b/node_modules/glob/dist/commonjs/ignore.js.map new file mode 100644 index 00000000..d9dfdfa3 --- /dev/null +++ b/node_modules/glob/dist/commonjs/ignore.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"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","sourcesContent":["// give it a pattern, and it'll be able to tell you if\n// a given path should be ignored.\n// Ignoring a path ignores its children if the pattern ends in /**\n// Ignores are always parsed in dot:true mode\n\nimport { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\nexport interface IgnoreLike {\n ignored?: (p: Path) => boolean\n childrenIgnored?: (p: Path) => boolean\n add?: (ignore: string) => void\n}\n\nconst defaultPlatform: NodeJS.Platform =\n (\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ) ?\n process.platform\n : 'linux'\n\n/**\n * Class used to process ignored patterns\n */\nexport class Ignore implements IgnoreLike {\n relative: Minimatch[]\n relativeChildren: Minimatch[]\n absolute: Minimatch[]\n absoluteChildren: Minimatch[]\n platform: NodeJS.Platform\n mmopts: MinimatchOptions\n\n constructor(\n ignored: string[],\n {\n nobrace,\n nocase,\n noext,\n noglobstar,\n platform = defaultPlatform,\n }: GlobWalkerOpts,\n ) {\n this.relative = []\n this.absolute = []\n this.relativeChildren = []\n this.absoluteChildren = []\n this.platform = platform\n this.mmopts = {\n dot: true,\n nobrace,\n nocase,\n noext,\n noglobstar,\n optimizationLevel: 2,\n platform,\n nocomment: true,\n nonegate: true,\n }\n for (const ign of ignored) this.add(ign)\n }\n\n add(ign: string) {\n // this is a little weird, but it gives us a clean set of optimized\n // minimatch matchers, without getting tripped up if one of them\n // ends in /** inside a brace section, and it's only inefficient at\n // the start of the walk, not along it.\n // It'd be nice if the Pattern class just had a .test() method, but\n // handling globstars is a bit of a pita, and that code already lives\n // in minimatch anyway.\n // Another way would be if maybe Minimatch could take its set/globParts\n // as an option, and then we could at least just use Pattern to test\n // for absolute-ness.\n // Yet another way, Minimatch could take an array of glob strings, and\n // a cwd option, and do the right thing.\n const mm = new Minimatch(ign, this.mmopts)\n for (let i = 0; i < mm.set.length; i++) {\n const parsed = mm.set[i]\n const globParts = mm.globParts[i]\n /* c8 ignore start */\n if (!parsed || !globParts) {\n throw new Error('invalid pattern object')\n }\n // strip off leading ./ portions\n // https://github.com/isaacs/node-glob/issues/570\n while (parsed[0] === '.' && globParts[0] === '.') {\n parsed.shift()\n globParts.shift()\n }\n /* c8 ignore stop */\n const p = new Pattern(parsed, globParts, 0, this.platform)\n const m = new Minimatch(p.globString(), this.mmopts)\n const children = globParts[globParts.length - 1] === '**'\n const absolute = p.isAbsolute()\n if (absolute) this.absolute.push(m)\n else this.relative.push(m)\n if (children) {\n if (absolute) this.absoluteChildren.push(m)\n else this.relativeChildren.push(m)\n }\n }\n }\n\n ignored(p: Path): boolean {\n const fullpath = p.fullpath()\n const fullpaths = `${fullpath}/`\n const relative = p.relative() || '.'\n const relatives = `${relative}/`\n for (const m of this.relative) {\n if (m.match(relative) || m.match(relatives)) return true\n }\n for (const m of this.absolute) {\n if (m.match(fullpath) || m.match(fullpaths)) return true\n }\n return false\n }\n\n childrenIgnored(p: Path): boolean {\n const fullpath = p.fullpath() + '/'\n const relative = (p.relative() || '.') + '/'\n for (const m of this.relativeChildren) {\n if (m.match(relative)) return true\n }\n for (const m of this.absoluteChildren) {\n if (m.match(fullpath)) return true\n }\n return false\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/index.d.ts b/node_modules/glob/dist/commonjs/index.d.ts new file mode 100644 index 00000000..9c326ddc --- /dev/null +++ b/node_modules/glob/dist/commonjs/index.d.ts @@ -0,0 +1,97 @@ +import { Minipass } from 'minipass'; +import { Path } from 'path-scurry'; +import type { GlobOptions, GlobOptionsWithFileTypesFalse, GlobOptionsWithFileTypesTrue, GlobOptionsWithFileTypesUnset } from './glob.js'; +import { Glob } from './glob.js'; +export { escape, unescape } from 'minimatch'; +export type { FSOption, Path, WalkOptions, WalkOptionsWithFileTypesTrue, WalkOptionsWithFileTypesUnset, } from 'path-scurry'; +export { Glob } from './glob.js'; +export type { GlobOptions, GlobOptionsWithFileTypesFalse, GlobOptionsWithFileTypesTrue, GlobOptionsWithFileTypesUnset, } from './glob.js'; +export { hasMagic } from './has-magic.js'; +export { Ignore } from './ignore.js'; +export type { IgnoreLike } from './ignore.js'; +export type { MatchStream } from './walker.js'; +/** + * Syncronous form of {@link globStream}. Will read all the matches as fast as + * you consume them, even all in a single tick if you consume them immediately, + * but will still respond to backpressure if they're not consumed immediately. + */ +export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Minipass; +export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Minipass; +export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesUnset): Minipass; +export declare function globStreamSync(pattern: string | string[], options: GlobOptions): Minipass | Minipass; +/** + * Return a stream that emits all the strings or `Path` objects and + * then emits `end` when completed. + */ +export declare function globStream(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Minipass; +export declare function globStream(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Minipass; +export declare function globStream(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Minipass; +export declare function globStream(pattern: string | string[], options: GlobOptions): Minipass | Minipass; +/** + * Synchronous form of {@link glob} + */ +export declare function globSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): string[]; +export declare function globSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Path[]; +export declare function globSync(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): string[]; +export declare function globSync(pattern: string | string[], options: GlobOptions): Path[] | string[]; +/** + * Perform an asynchronous glob search for the pattern(s) specified. Returns + * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the + * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for + * full option descriptions. + */ +declare function glob_(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Promise; +declare function glob_(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Promise; +declare function glob_(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Promise; +declare function glob_(pattern: string | string[], options: GlobOptions): Promise; +/** + * Return a sync iterator for walking glob pattern matches. + */ +export declare function globIterateSync(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Generator; +export declare function globIterateSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Generator; +export declare function globIterateSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Generator; +export declare function globIterateSync(pattern: string | string[], options: GlobOptions): Generator | Generator; +/** + * Return an async iterator for walking glob pattern matches. + */ +export declare function globIterate(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): AsyncGenerator; +export declare function globIterate(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): AsyncGenerator; +export declare function globIterate(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): AsyncGenerator; +export declare function globIterate(pattern: string | string[], options: GlobOptions): AsyncGenerator | AsyncGenerator; +export declare const streamSync: typeof globStreamSync; +export declare const stream: typeof globStream & { + sync: typeof globStreamSync; +}; +export declare const iterateSync: typeof globIterateSync; +export declare const iterate: typeof globIterate & { + sync: typeof globIterateSync; +}; +export declare const sync: typeof globSync & { + stream: typeof globStreamSync; + iterate: typeof globIterateSync; +}; +export declare const glob: typeof glob_ & { + glob: typeof glob_; + globSync: typeof globSync; + sync: typeof globSync & { + stream: typeof globStreamSync; + iterate: typeof globIterateSync; + }; + globStream: typeof globStream; + stream: typeof globStream & { + sync: typeof globStreamSync; + }; + globStreamSync: typeof globStreamSync; + streamSync: typeof globStreamSync; + globIterate: typeof globIterate; + iterate: typeof globIterate & { + sync: typeof globIterateSync; + }; + globIterateSync: typeof globIterateSync; + iterateSync: typeof globIterateSync; + Glob: typeof Glob; + hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean; + escape: (s: string, { windowsPathsNoEscape, }?: Pick) => string; + unescape: (s: string, { windowsPathsNoEscape, }?: Pick) => string; +}; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/index.d.ts.map b/node_modules/glob/dist/commonjs/index.d.ts.map new file mode 100644 index 00000000..5fb32252 --- /dev/null +++ b/node_modules/glob/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/index.js b/node_modules/glob/dist/commonjs/index.js new file mode 100644 index 00000000..151495d1 --- /dev/null +++ b/node_modules/glob/dist/commonjs/index.js @@ -0,0 +1,68 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.glob = exports.sync = exports.iterate = exports.iterateSync = exports.stream = exports.streamSync = exports.Ignore = exports.hasMagic = exports.Glob = exports.unescape = exports.escape = void 0; +exports.globStreamSync = globStreamSync; +exports.globStream = globStream; +exports.globSync = globSync; +exports.globIterateSync = globIterateSync; +exports.globIterate = globIterate; +const minimatch_1 = require("minimatch"); +const glob_js_1 = require("./glob.js"); +const has_magic_js_1 = require("./has-magic.js"); +var minimatch_2 = require("minimatch"); +Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return minimatch_2.escape; } }); +Object.defineProperty(exports, "unescape", { enumerable: true, get: function () { return minimatch_2.unescape; } }); +var glob_js_2 = require("./glob.js"); +Object.defineProperty(exports, "Glob", { enumerable: true, get: function () { return glob_js_2.Glob; } }); +var has_magic_js_2 = require("./has-magic.js"); +Object.defineProperty(exports, "hasMagic", { enumerable: true, get: function () { return has_magic_js_2.hasMagic; } }); +var ignore_js_1 = require("./ignore.js"); +Object.defineProperty(exports, "Ignore", { enumerable: true, get: function () { return ignore_js_1.Ignore; } }); +function globStreamSync(pattern, options = {}) { + return new glob_js_1.Glob(pattern, options).streamSync(); +} +function globStream(pattern, options = {}) { + return new glob_js_1.Glob(pattern, options).stream(); +} +function globSync(pattern, options = {}) { + return new glob_js_1.Glob(pattern, options).walkSync(); +} +async function glob_(pattern, options = {}) { + return new glob_js_1.Glob(pattern, options).walk(); +} +function globIterateSync(pattern, options = {}) { + return new glob_js_1.Glob(pattern, options).iterateSync(); +} +function globIterate(pattern, options = {}) { + return new glob_js_1.Glob(pattern, options).iterate(); +} +// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc +exports.streamSync = globStreamSync; +exports.stream = Object.assign(globStream, { sync: globStreamSync }); +exports.iterateSync = globIterateSync; +exports.iterate = Object.assign(globIterate, { + sync: globIterateSync, +}); +exports.sync = Object.assign(globSync, { + stream: globStreamSync, + iterate: globIterateSync, +}); +exports.glob = Object.assign(glob_, { + glob: glob_, + globSync, + sync: exports.sync, + globStream, + stream: exports.stream, + globStreamSync, + streamSync: exports.streamSync, + globIterate, + iterate: exports.iterate, + globIterateSync, + iterateSync: exports.iterateSync, + Glob: glob_js_1.Glob, + hasMagic: has_magic_js_1.hasMagic, + escape: minimatch_1.escape, + unescape: minimatch_1.unescape, +}); +exports.glob.glob = exports.glob; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/index.js.map b/node_modules/glob/dist/commonjs/index.js.map new file mode 100644 index 00000000..e648b1d0 --- /dev/null +++ b/node_modules/glob/dist/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAqDA,wCAKC;AAsBD,gCAKC;AAqBD,4BAKC;AAkDD,0CAKC;AAqBD,kCAKC;AAhMD,yCAA4C;AAS5C,uCAAgC;AAChC,iDAAyC;AAEzC,uCAA4C;AAAnC,mGAAA,MAAM,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAQzB,qCAAgC;AAAvB,+FAAA,IAAI,OAAA;AAOb,+CAAyC;AAAhC,wGAAA,QAAQ,OAAA;AACjB,yCAAoC;AAA3B,mGAAA,MAAM,OAAA;AAyBf,SAAgB,cAAc,CAC5B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,CAAA;AAChD,CAAC;AAsBD,SAAgB,UAAU,CACxB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;AAC5C,CAAC;AAqBD,SAAgB,QAAQ,CACtB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC9C,CAAC;AAwBD,KAAK,UAAU,KAAK,CAClB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAC1C,CAAC;AAqBD,SAAgB,eAAe,CAC7B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACjD,CAAC;AAqBD,SAAgB,WAAW,CACzB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,cAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;AAC7C,CAAC;AAED,iEAAiE;AACpD,QAAA,UAAU,GAAG,cAAc,CAAA;AAC3B,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;AAC5D,QAAA,WAAW,GAAG,eAAe,CAAA;AAC7B,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;IAChD,IAAI,EAAE,eAAe;CACtB,CAAC,CAAA;AACW,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1C,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,eAAe;CACzB,CAAC,CAAA;AAEW,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,KAAK;IACX,QAAQ;IACR,IAAI,EAAJ,YAAI;IACJ,UAAU;IACV,MAAM,EAAN,cAAM;IACN,cAAc;IACd,UAAU,EAAV,kBAAU;IACV,WAAW;IACX,OAAO,EAAP,eAAO;IACP,eAAe;IACf,WAAW,EAAX,mBAAW;IACX,IAAI,EAAJ,cAAI;IACJ,QAAQ,EAAR,uBAAQ;IACR,MAAM,EAAN,kBAAM;IACN,QAAQ,EAAR,oBAAQ;CACT,CAAC,CAAA;AACF,YAAI,CAAC,IAAI,GAAG,YAAI,CAAA","sourcesContent":["import { escape, unescape } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nimport { Glob } from './glob.js'\nimport { hasMagic } from './has-magic.js'\n\nexport { escape, unescape } from 'minimatch'\nexport type {\n FSOption,\n Path,\n WalkOptions,\n WalkOptionsWithFileTypesTrue,\n WalkOptionsWithFileTypesUnset,\n} from 'path-scurry'\nexport { Glob } from './glob.js'\nexport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nexport { hasMagic } from './has-magic.js'\nexport { Ignore } from './ignore.js'\nexport type { IgnoreLike } from './ignore.js'\nexport type { MatchStream } from './walker.js'\n\n/**\n * Syncronous form of {@link globStream}. Will read all the matches as fast as\n * you consume them, even all in a single tick if you consume them immediately,\n * but will still respond to backpressure if they're not consumed immediately.\n */\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesUnset,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass | Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).streamSync()\n}\n\n/**\n * Return a stream that emits all the strings or `Path` objects and\n * then emits `end` when completed.\n */\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass | Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).stream()\n}\n\n/**\n * Synchronous form of {@link glob}\n */\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Path[]\nexport function globSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions,\n): Path[] | string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walkSync()\n}\n\n/**\n * Perform an asynchronous glob search for the pattern(s) specified. Returns\n * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the\n * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for\n * full option descriptions.\n */\nasync function glob_(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walk()\n}\n\n/**\n * Return a sync iterator for walking glob pattern matches.\n */\nexport function globIterateSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions,\n): Generator | Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterateSync()\n}\n\n/**\n * Return an async iterator for walking glob pattern matches.\n */\nexport function globIterate(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions,\n): AsyncGenerator | AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterate()\n}\n\n// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc\nexport const streamSync = globStreamSync\nexport const stream = Object.assign(globStream, { sync: globStreamSync })\nexport const iterateSync = globIterateSync\nexport const iterate = Object.assign(globIterate, {\n sync: globIterateSync,\n})\nexport const sync = Object.assign(globSync, {\n stream: globStreamSync,\n iterate: globIterateSync,\n})\n\nexport const glob = Object.assign(glob_, {\n glob: glob_,\n globSync,\n sync,\n globStream,\n stream,\n globStreamSync,\n streamSync,\n globIterate,\n iterate,\n globIterateSync,\n iterateSync,\n Glob,\n hasMagic,\n escape,\n unescape,\n})\nglob.glob = glob\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/package.json b/node_modules/glob/dist/commonjs/package.json new file mode 100644 index 00000000..5bbefffb --- /dev/null +++ b/node_modules/glob/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/node_modules/glob/dist/commonjs/pattern.d.ts b/node_modules/glob/dist/commonjs/pattern.d.ts new file mode 100644 index 00000000..9636df3b --- /dev/null +++ b/node_modules/glob/dist/commonjs/pattern.d.ts @@ -0,0 +1,76 @@ +import { GLOBSTAR } from 'minimatch'; +export type MMPattern = string | RegExp | typeof GLOBSTAR; +export type PatternList = [p: MMPattern, ...rest: MMPattern[]]; +export type UNCPatternList = [ + p0: '', + p1: '', + p2: string, + p3: string, + ...rest: MMPattern[] +]; +export type DrivePatternList = [p0: string, ...rest: MMPattern[]]; +export type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]; +export type GlobList = [p: string, ...rest: string[]]; +/** + * An immutable-ish view on an array of glob parts and their parsed + * results + */ +export declare class Pattern { + #private; + readonly length: number; + constructor(patternList: MMPattern[], globList: string[], index: number, platform: NodeJS.Platform); + /** + * The first entry in the parsed list of patterns + */ + pattern(): MMPattern; + /** + * true of if pattern() returns a string + */ + isString(): boolean; + /** + * true of if pattern() returns GLOBSTAR + */ + isGlobstar(): boolean; + /** + * true if pattern() returns a regexp + */ + isRegExp(): boolean; + /** + * The /-joined set of glob parts that make up this pattern + */ + globString(): string; + /** + * true if there are more pattern parts after this one + */ + hasMore(): boolean; + /** + * The rest of the pattern after this part, or null if this is the end + */ + rest(): Pattern | null; + /** + * true if the pattern represents a //unc/path/ on windows + */ + isUNC(): boolean; + /** + * True if the pattern starts with a drive letter on Windows + */ + isDrive(): boolean; + /** + * True if the pattern is rooted on an absolute path + */ + isAbsolute(): boolean; + /** + * consume the root of the pattern, and return it + */ + root(): string; + /** + * Check to see if the current globstar pattern is allowed to follow + * a symbolic link. + */ + checkFollowGlobstar(): boolean; + /** + * Mark that the current globstar pattern is following a symbolic link + */ + markFollowGlobstar(): boolean; +} +//# sourceMappingURL=pattern.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/pattern.d.ts.map b/node_modules/glob/dist/commonjs/pattern.d.ts.map new file mode 100644 index 00000000..cdf32234 --- /dev/null +++ b/node_modules/glob/dist/commonjs/pattern.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAAQ,CAAA;AAGzD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,IAAI,EAAE,SAAS,EAAE;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAMrD;;;GAGG;AACH,qBAAa,OAAO;;IAIlB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAUrB,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;IA6D3B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAGnB;;OAEG;IACH,UAAU,IAAI,OAAO;IAGrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,OAAO,GAAG,IAAI;IAetB;;OAEG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAUrB;;OAEG;IACH,IAAI,IAAI,MAAM;IASd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAQ9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAM9B"} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/pattern.js b/node_modules/glob/dist/commonjs/pattern.js new file mode 100644 index 00000000..f0de35fb --- /dev/null +++ b/node_modules/glob/dist/commonjs/pattern.js @@ -0,0 +1,219 @@ +"use strict"; +// this is just a very light wrapper around 2 arrays with an offset index +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Pattern = void 0; +const minimatch_1 = require("minimatch"); +const isPatternList = (pl) => pl.length >= 1; +const isGlobList = (gl) => gl.length >= 1; +/** + * An immutable-ish view on an array of glob parts and their parsed + * results + */ +class Pattern { + #patternList; + #globList; + #index; + length; + #platform; + #rest; + #globString; + #isDrive; + #isUNC; + #isAbsolute; + #followGlobstar = true; + constructor(patternList, globList, index, platform) { + if (!isPatternList(patternList)) { + throw new TypeError('empty pattern list'); + } + if (!isGlobList(globList)) { + throw new TypeError('empty glob list'); + } + if (globList.length !== patternList.length) { + throw new TypeError('mismatched pattern list and glob list lengths'); + } + this.length = patternList.length; + if (index < 0 || index >= this.length) { + throw new TypeError('index out of range'); + } + this.#patternList = patternList; + this.#globList = globList; + this.#index = index; + this.#platform = platform; + // normalize root entries of absolute patterns on initial creation. + if (this.#index === 0) { + // c: => ['c:/'] + // C:/ => ['C:/'] + // C:/x => ['C:/', 'x'] + // //host/share => ['//host/share/'] + // //host/share/ => ['//host/share/'] + // //host/share/x => ['//host/share/', 'x'] + // /etc => ['/', 'etc'] + // / => ['/'] + if (this.isUNC()) { + // '' / '' / 'host' / 'share' + const [p0, p1, p2, p3, ...prest] = this.#patternList; + const [g0, g1, g2, g3, ...grest] = this.#globList; + if (prest[0] === '') { + // ends in / + prest.shift(); + grest.shift(); + } + const p = [p0, p1, p2, p3, ''].join('/'); + const g = [g0, g1, g2, g3, ''].join('/'); + this.#patternList = [p, ...prest]; + this.#globList = [g, ...grest]; + this.length = this.#patternList.length; + } + else if (this.isDrive() || this.isAbsolute()) { + const [p1, ...prest] = this.#patternList; + const [g1, ...grest] = this.#globList; + if (prest[0] === '') { + // ends in / + prest.shift(); + grest.shift(); + } + const p = p1 + '/'; + const g = g1 + '/'; + this.#patternList = [p, ...prest]; + this.#globList = [g, ...grest]; + this.length = this.#patternList.length; + } + } + } + /** + * The first entry in the parsed list of patterns + */ + pattern() { + return this.#patternList[this.#index]; + } + /** + * true of if pattern() returns a string + */ + isString() { + return typeof this.#patternList[this.#index] === 'string'; + } + /** + * true of if pattern() returns GLOBSTAR + */ + isGlobstar() { + return this.#patternList[this.#index] === minimatch_1.GLOBSTAR; + } + /** + * true if pattern() returns a regexp + */ + isRegExp() { + return this.#patternList[this.#index] instanceof RegExp; + } + /** + * The /-joined set of glob parts that make up this pattern + */ + globString() { + return (this.#globString = + this.#globString || + (this.#index === 0 ? + this.isAbsolute() ? + this.#globList[0] + this.#globList.slice(1).join('/') + : this.#globList.join('/') + : this.#globList.slice(this.#index).join('/'))); + } + /** + * true if there are more pattern parts after this one + */ + hasMore() { + return this.length > this.#index + 1; + } + /** + * The rest of the pattern after this part, or null if this is the end + */ + rest() { + if (this.#rest !== undefined) + return this.#rest; + if (!this.hasMore()) + return (this.#rest = null); + this.#rest = new Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform); + this.#rest.#isAbsolute = this.#isAbsolute; + this.#rest.#isUNC = this.#isUNC; + this.#rest.#isDrive = this.#isDrive; + return this.#rest; + } + /** + * true if the pattern represents a //unc/path/ on windows + */ + isUNC() { + const pl = this.#patternList; + return this.#isUNC !== undefined ? + this.#isUNC + : (this.#isUNC = + this.#platform === 'win32' && + this.#index === 0 && + pl[0] === '' && + pl[1] === '' && + typeof pl[2] === 'string' && + !!pl[2] && + typeof pl[3] === 'string' && + !!pl[3]); + } + // pattern like C:/... + // split = ['C:', ...] + // XXX: would be nice to handle patterns like `c:*` to test the cwd + // in c: for *, but I don't know of a way to even figure out what that + // cwd is without actually chdir'ing into it? + /** + * True if the pattern starts with a drive letter on Windows + */ + isDrive() { + const pl = this.#patternList; + return this.#isDrive !== undefined ? + this.#isDrive + : (this.#isDrive = + this.#platform === 'win32' && + this.#index === 0 && + this.length > 1 && + typeof pl[0] === 'string' && + /^[a-z]:$/i.test(pl[0])); + } + // pattern = '/' or '/...' or '/x/...' + // split = ['', ''] or ['', ...] or ['', 'x', ...] + // Drive and UNC both considered absolute on windows + /** + * True if the pattern is rooted on an absolute path + */ + isAbsolute() { + const pl = this.#patternList; + return this.#isAbsolute !== undefined ? + this.#isAbsolute + : (this.#isAbsolute = + (pl[0] === '' && pl.length > 1) || + this.isDrive() || + this.isUNC()); + } + /** + * consume the root of the pattern, and return it + */ + root() { + const p = this.#patternList[0]; + return (typeof p === 'string' && this.isAbsolute() && this.#index === 0) ? + p + : ''; + } + /** + * Check to see if the current globstar pattern is allowed to follow + * a symbolic link. + */ + checkFollowGlobstar() { + return !(this.#index === 0 || + !this.isGlobstar() || + !this.#followGlobstar); + } + /** + * Mark that the current globstar pattern is following a symbolic link + */ + markFollowGlobstar() { + if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar) + return false; + this.#followGlobstar = false; + return true; + } +} +exports.Pattern = Pattern; +//# sourceMappingURL=pattern.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/pattern.js.map b/node_modules/glob/dist/commonjs/pattern.js.map new file mode 100644 index 00000000..fc10ea5d --- /dev/null +++ b/node_modules/glob/dist/commonjs/pattern.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"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","sourcesContent":["// this is just a very light wrapper around 2 arrays with an offset index\n\nimport { GLOBSTAR } from 'minimatch'\nexport type MMPattern = string | RegExp | typeof GLOBSTAR\n\n// an array of length >= 1\nexport type PatternList = [p: MMPattern, ...rest: MMPattern[]]\nexport type UNCPatternList = [\n p0: '',\n p1: '',\n p2: string,\n p3: string,\n ...rest: MMPattern[],\n]\nexport type DrivePatternList = [p0: string, ...rest: MMPattern[]]\nexport type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]\nexport type GlobList = [p: string, ...rest: string[]]\n\nconst isPatternList = (pl: MMPattern[]): pl is PatternList =>\n pl.length >= 1\nconst isGlobList = (gl: string[]): gl is GlobList => gl.length >= 1\n\n/**\n * An immutable-ish view on an array of glob parts and their parsed\n * results\n */\nexport class Pattern {\n readonly #patternList: PatternList\n readonly #globList: GlobList\n readonly #index: number\n readonly length: number\n readonly #platform: NodeJS.Platform\n #rest?: Pattern | null\n #globString?: string\n #isDrive?: boolean\n #isUNC?: boolean\n #isAbsolute?: boolean\n #followGlobstar: boolean = true\n\n constructor(\n patternList: MMPattern[],\n globList: string[],\n index: number,\n platform: NodeJS.Platform,\n ) {\n if (!isPatternList(patternList)) {\n throw new TypeError('empty pattern list')\n }\n if (!isGlobList(globList)) {\n throw new TypeError('empty glob list')\n }\n if (globList.length !== patternList.length) {\n throw new TypeError('mismatched pattern list and glob list lengths')\n }\n this.length = patternList.length\n if (index < 0 || index >= this.length) {\n throw new TypeError('index out of range')\n }\n this.#patternList = patternList\n this.#globList = globList\n this.#index = index\n this.#platform = platform\n\n // normalize root entries of absolute patterns on initial creation.\n if (this.#index === 0) {\n // c: => ['c:/']\n // C:/ => ['C:/']\n // C:/x => ['C:/', 'x']\n // //host/share => ['//host/share/']\n // //host/share/ => ['//host/share/']\n // //host/share/x => ['//host/share/', 'x']\n // /etc => ['/', 'etc']\n // / => ['/']\n if (this.isUNC()) {\n // '' / '' / 'host' / 'share'\n const [p0, p1, p2, p3, ...prest] = this.#patternList\n const [g0, g1, g2, g3, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = [p0, p1, p2, p3, ''].join('/')\n const g = [g0, g1, g2, g3, ''].join('/')\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n } else if (this.isDrive() || this.isAbsolute()) {\n const [p1, ...prest] = this.#patternList\n const [g1, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = (p1 as string) + '/'\n const g = g1 + '/'\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n }\n }\n }\n\n /**\n * The first entry in the parsed list of patterns\n */\n pattern(): MMPattern {\n return this.#patternList[this.#index] as MMPattern\n }\n\n /**\n * true of if pattern() returns a string\n */\n isString(): boolean {\n return typeof this.#patternList[this.#index] === 'string'\n }\n /**\n * true of if pattern() returns GLOBSTAR\n */\n isGlobstar(): boolean {\n return this.#patternList[this.#index] === GLOBSTAR\n }\n /**\n * true if pattern() returns a regexp\n */\n isRegExp(): boolean {\n return this.#patternList[this.#index] instanceof RegExp\n }\n\n /**\n * The /-joined set of glob parts that make up this pattern\n */\n globString(): string {\n return (this.#globString =\n this.#globString ||\n (this.#index === 0 ?\n this.isAbsolute() ?\n this.#globList[0] + this.#globList.slice(1).join('/')\n : this.#globList.join('/')\n : this.#globList.slice(this.#index).join('/')))\n }\n\n /**\n * true if there are more pattern parts after this one\n */\n hasMore(): boolean {\n return this.length > this.#index + 1\n }\n\n /**\n * The rest of the pattern after this part, or null if this is the end\n */\n rest(): Pattern | null {\n if (this.#rest !== undefined) return this.#rest\n if (!this.hasMore()) return (this.#rest = null)\n this.#rest = new Pattern(\n this.#patternList,\n this.#globList,\n this.#index + 1,\n this.#platform,\n )\n this.#rest.#isAbsolute = this.#isAbsolute\n this.#rest.#isUNC = this.#isUNC\n this.#rest.#isDrive = this.#isDrive\n return this.#rest\n }\n\n /**\n * true if the pattern represents a //unc/path/ on windows\n */\n isUNC(): boolean {\n const pl = this.#patternList\n return this.#isUNC !== undefined ?\n this.#isUNC\n : (this.#isUNC =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n pl[0] === '' &&\n pl[1] === '' &&\n typeof pl[2] === 'string' &&\n !!pl[2] &&\n typeof pl[3] === 'string' &&\n !!pl[3])\n }\n\n // pattern like C:/...\n // split = ['C:', ...]\n // XXX: would be nice to handle patterns like `c:*` to test the cwd\n // in c: for *, but I don't know of a way to even figure out what that\n // cwd is without actually chdir'ing into it?\n /**\n * True if the pattern starts with a drive letter on Windows\n */\n isDrive(): boolean {\n const pl = this.#patternList\n return this.#isDrive !== undefined ?\n this.#isDrive\n : (this.#isDrive =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n this.length > 1 &&\n typeof pl[0] === 'string' &&\n /^[a-z]:$/i.test(pl[0]))\n }\n\n // pattern = '/' or '/...' or '/x/...'\n // split = ['', ''] or ['', ...] or ['', 'x', ...]\n // Drive and UNC both considered absolute on windows\n /**\n * True if the pattern is rooted on an absolute path\n */\n isAbsolute(): boolean {\n const pl = this.#patternList\n return this.#isAbsolute !== undefined ?\n this.#isAbsolute\n : (this.#isAbsolute =\n (pl[0] === '' && pl.length > 1) ||\n this.isDrive() ||\n this.isUNC())\n }\n\n /**\n * consume the root of the pattern, and return it\n */\n root(): string {\n const p = this.#patternList[0]\n return (\n typeof p === 'string' && this.isAbsolute() && this.#index === 0\n ) ?\n p\n : ''\n }\n\n /**\n * Check to see if the current globstar pattern is allowed to follow\n * a symbolic link.\n */\n checkFollowGlobstar(): boolean {\n return !(\n this.#index === 0 ||\n !this.isGlobstar() ||\n !this.#followGlobstar\n )\n }\n\n /**\n * Mark that the current globstar pattern is following a symbolic link\n */\n markFollowGlobstar(): boolean {\n if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)\n return false\n this.#followGlobstar = false\n return true\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/processor.d.ts b/node_modules/glob/dist/commonjs/processor.d.ts new file mode 100644 index 00000000..ccedfbf2 --- /dev/null +++ b/node_modules/glob/dist/commonjs/processor.d.ts @@ -0,0 +1,59 @@ +import { MMRegExp } from 'minimatch'; +import { Path } from 'path-scurry'; +import { Pattern } from './pattern.js'; +import { GlobWalkerOpts } from './walker.js'; +/** + * A cache of which patterns have been processed for a given Path + */ +export declare class HasWalkedCache { + store: Map>; + constructor(store?: Map>); + copy(): HasWalkedCache; + hasWalked(target: Path, pattern: Pattern): boolean | undefined; + storeWalked(target: Path, pattern: Pattern): void; +} +/** + * A record of which paths have been matched in a given walk step, + * and whether they only are considered a match if they are a directory, + * and whether their absolute or relative path should be returned. + */ +export declare class MatchRecord { + store: Map; + add(target: Path, absolute: boolean, ifDir: boolean): void; + entries(): [Path, boolean, boolean][]; +} +/** + * A collection of patterns that must be processed in a subsequent step + * for a given path. + */ +export declare class SubWalks { + store: Map; + add(target: Path, pattern: Pattern): void; + get(target: Path): Pattern[]; + entries(): [Path, Pattern[]][]; + keys(): Path[]; +} +/** + * The class that processes patterns for a given path. + * + * Handles child entry filtering, and determining whether a path's + * directory contents must be read. + */ +export declare class Processor { + hasWalkedCache: HasWalkedCache; + matches: MatchRecord; + subwalks: SubWalks; + patterns?: Pattern[]; + follow: boolean; + dot: boolean; + opts: GlobWalkerOpts; + constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache); + processPatterns(target: Path, patterns: Pattern[]): this; + subwalkTargets(): Path[]; + child(): Processor; + filterEntries(parent: Path, entries: Path[]): Processor; + testGlobstar(e: Path, pattern: Pattern, rest: Pattern | null, absolute: boolean): void; + testRegExp(e: Path, p: MMRegExp, rest: Pattern | null, absolute: boolean): void; + testString(e: Path, p: string, rest: Pattern | null, absolute: boolean): void; +} +//# sourceMappingURL=processor.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/processor.d.ts.map b/node_modules/glob/dist/commonjs/processor.d.ts.map new file mode 100644 index 00000000..aa266fee --- /dev/null +++ b/node_modules/glob/dist/commonjs/processor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAa,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C;;GAEG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;gBACnB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAGvD,IAAI;IAGJ,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAGxC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;CAM3C;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY;IACpC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAMnD,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;CAOtC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAY;IACvC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAWlC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,EAAE;IAS5B,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;IAG9B,IAAI,IAAI,IAAI,EAAE;CAGf;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,cAAoB;IAC3B,QAAQ,WAAiB;IACzB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;gBAER,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,cAAc;IAQjE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IAmGjD,cAAc,IAAI,IAAI,EAAE;IAIxB,KAAK;IAQL,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS;IAqBvD,YAAY,CACV,CAAC,EAAE,IAAI,EACP,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IA8CnB,UAAU,CACR,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,QAAQ,EACX,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IAUnB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO;CASvE"} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/processor.js b/node_modules/glob/dist/commonjs/processor.js new file mode 100644 index 00000000..ee3bb439 --- /dev/null +++ b/node_modules/glob/dist/commonjs/processor.js @@ -0,0 +1,301 @@ +"use strict"; +// synchronous utility for filtering entries and calculating subwalks +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Processor = exports.SubWalks = exports.MatchRecord = exports.HasWalkedCache = void 0; +const minimatch_1 = require("minimatch"); +/** + * A cache of which patterns have been processed for a given Path + */ +class HasWalkedCache { + store; + constructor(store = new Map()) { + this.store = store; + } + copy() { + return new HasWalkedCache(new Map(this.store)); + } + hasWalked(target, pattern) { + return this.store.get(target.fullpath())?.has(pattern.globString()); + } + storeWalked(target, pattern) { + const fullpath = target.fullpath(); + const cached = this.store.get(fullpath); + if (cached) + cached.add(pattern.globString()); + else + this.store.set(fullpath, new Set([pattern.globString()])); + } +} +exports.HasWalkedCache = HasWalkedCache; +/** + * A record of which paths have been matched in a given walk step, + * and whether they only are considered a match if they are a directory, + * and whether their absolute or relative path should be returned. + */ +class MatchRecord { + store = new Map(); + add(target, absolute, ifDir) { + const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0); + const current = this.store.get(target); + this.store.set(target, current === undefined ? n : n & current); + } + // match, absolute, ifdir + entries() { + return [...this.store.entries()].map(([path, n]) => [ + path, + !!(n & 2), + !!(n & 1), + ]); + } +} +exports.MatchRecord = MatchRecord; +/** + * A collection of patterns that must be processed in a subsequent step + * for a given path. + */ +class SubWalks { + store = new Map(); + add(target, pattern) { + if (!target.canReaddir()) { + return; + } + const subs = this.store.get(target); + if (subs) { + if (!subs.find(p => p.globString() === pattern.globString())) { + subs.push(pattern); + } + } + else + this.store.set(target, [pattern]); + } + get(target) { + const subs = this.store.get(target); + /* c8 ignore start */ + if (!subs) { + throw new Error('attempting to walk unknown path'); + } + /* c8 ignore stop */ + return subs; + } + entries() { + return this.keys().map(k => [k, this.store.get(k)]); + } + keys() { + return [...this.store.keys()].filter(t => t.canReaddir()); + } +} +exports.SubWalks = SubWalks; +/** + * The class that processes patterns for a given path. + * + * Handles child entry filtering, and determining whether a path's + * directory contents must be read. + */ +class Processor { + hasWalkedCache; + matches = new MatchRecord(); + subwalks = new SubWalks(); + patterns; + follow; + dot; + opts; + constructor(opts, hasWalkedCache) { + this.opts = opts; + this.follow = !!opts.follow; + this.dot = !!opts.dot; + this.hasWalkedCache = + hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache(); + } + processPatterns(target, patterns) { + this.patterns = patterns; + const processingSet = patterns.map(p => [target, p]); + // map of paths to the magic-starting subwalks they need to walk + // first item in patterns is the filter + for (let [t, pattern] of processingSet) { + this.hasWalkedCache.storeWalked(t, pattern); + const root = pattern.root(); + const absolute = pattern.isAbsolute() && this.opts.absolute !== false; + // start absolute patterns at root + if (root) { + t = t.resolve(root === '/' && this.opts.root !== undefined ? + this.opts.root + : root); + const rest = pattern.rest(); + if (!rest) { + this.matches.add(t, true, false); + continue; + } + else { + pattern = rest; + } + } + if (t.isENOENT()) + continue; + let p; + let rest; + let changed = false; + while (typeof (p = pattern.pattern()) === 'string' && + (rest = pattern.rest())) { + const c = t.resolve(p); + t = c; + pattern = rest; + changed = true; + } + p = pattern.pattern(); + rest = pattern.rest(); + if (changed) { + if (this.hasWalkedCache.hasWalked(t, pattern)) + continue; + this.hasWalkedCache.storeWalked(t, pattern); + } + // now we have either a final string for a known entry, + // more strings for an unknown entry, + // or a pattern starting with magic, mounted on t. + if (typeof p === 'string') { + // must not be final entry, otherwise we would have + // concatenated it earlier. + const ifDir = p === '..' || p === '' || p === '.'; + this.matches.add(t.resolve(p), absolute, ifDir); + continue; + } + else if (p === minimatch_1.GLOBSTAR) { + // if no rest, match and subwalk pattern + // if rest, process rest and subwalk pattern + // if it's a symlink, but we didn't get here by way of a + // globstar match (meaning it's the first time THIS globstar + // has traversed a symlink), then we follow it. Otherwise, stop. + if (!t.isSymbolicLink() || + this.follow || + pattern.checkFollowGlobstar()) { + this.subwalks.add(t, pattern); + } + const rp = rest?.pattern(); + const rrest = rest?.rest(); + if (!rest || ((rp === '' || rp === '.') && !rrest)) { + // only HAS to be a dir if it ends in **/ or **/. + // but ending in ** will match files as well. + this.matches.add(t, absolute, rp === '' || rp === '.'); + } + else { + if (rp === '..') { + // this would mean you're matching **/.. at the fs root, + // and no thanks, I'm not gonna test that specific case. + /* c8 ignore start */ + const tp = t.parent || t; + /* c8 ignore stop */ + if (!rrest) + this.matches.add(tp, absolute, true); + else if (!this.hasWalkedCache.hasWalked(tp, rrest)) { + this.subwalks.add(tp, rrest); + } + } + } + } + else if (p instanceof RegExp) { + this.subwalks.add(t, pattern); + } + } + return this; + } + subwalkTargets() { + return this.subwalks.keys(); + } + child() { + return new Processor(this.opts, this.hasWalkedCache); + } + // return a new Processor containing the subwalks for each + // child entry, and a set of matches, and + // a hasWalkedCache that's a copy of this one + // then we're going to call + filterEntries(parent, entries) { + const patterns = this.subwalks.get(parent); + // put matches and entry walks into the results processor + const results = this.child(); + for (const e of entries) { + for (const pattern of patterns) { + const absolute = pattern.isAbsolute(); + const p = pattern.pattern(); + const rest = pattern.rest(); + if (p === minimatch_1.GLOBSTAR) { + results.testGlobstar(e, pattern, rest, absolute); + } + else if (p instanceof RegExp) { + results.testRegExp(e, p, rest, absolute); + } + else { + results.testString(e, p, rest, absolute); + } + } + } + return results; + } + testGlobstar(e, pattern, rest, absolute) { + if (this.dot || !e.name.startsWith('.')) { + if (!pattern.hasMore()) { + this.matches.add(e, absolute, false); + } + if (e.canReaddir()) { + // if we're in follow mode or it's not a symlink, just keep + // testing the same pattern. If there's more after the globstar, + // then this symlink consumes the globstar. If not, then we can + // follow at most ONE symlink along the way, so we mark it, which + // also checks to ensure that it wasn't already marked. + if (this.follow || !e.isSymbolicLink()) { + this.subwalks.add(e, pattern); + } + else if (e.isSymbolicLink()) { + if (rest && pattern.checkFollowGlobstar()) { + this.subwalks.add(e, rest); + } + else if (pattern.markFollowGlobstar()) { + this.subwalks.add(e, pattern); + } + } + } + } + // if the NEXT thing matches this entry, then also add + // the rest. + if (rest) { + const rp = rest.pattern(); + if (typeof rp === 'string' && + // dots and empty were handled already + rp !== '..' && + rp !== '' && + rp !== '.') { + this.testString(e, rp, rest.rest(), absolute); + } + else if (rp === '..') { + /* c8 ignore start */ + const ep = e.parent || e; + /* c8 ignore stop */ + this.subwalks.add(ep, rest); + } + else if (rp instanceof RegExp) { + this.testRegExp(e, rp, rest.rest(), absolute); + } + } + } + testRegExp(e, p, rest, absolute) { + if (!p.test(e.name)) + return; + if (!rest) { + this.matches.add(e, absolute, false); + } + else { + this.subwalks.add(e, rest); + } + } + testString(e, p, rest, absolute) { + // should never happen? + if (!e.isNamed(p)) + return; + if (!rest) { + this.matches.add(e, absolute, false); + } + else { + this.subwalks.add(e, rest); + } + } +} +exports.Processor = Processor; +//# sourceMappingURL=processor.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/processor.js.map b/node_modules/glob/dist/commonjs/processor.js.map new file mode 100644 index 00000000..58a70882 --- /dev/null +++ b/node_modules/glob/dist/commonjs/processor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/processor.ts"],"names":[],"mappings":"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","sourcesContent":["// synchronous utility for filtering entries and calculating subwalks\n\nimport { GLOBSTAR, MMRegExp } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { MMPattern, Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\n/**\n * A cache of which patterns have been processed for a given Path\n */\nexport class HasWalkedCache {\n store: Map>\n constructor(store: Map> = new Map()) {\n this.store = store\n }\n copy() {\n return new HasWalkedCache(new Map(this.store))\n }\n hasWalked(target: Path, pattern: Pattern) {\n return this.store.get(target.fullpath())?.has(pattern.globString())\n }\n storeWalked(target: Path, pattern: Pattern) {\n const fullpath = target.fullpath()\n const cached = this.store.get(fullpath)\n if (cached) cached.add(pattern.globString())\n else this.store.set(fullpath, new Set([pattern.globString()]))\n }\n}\n\n/**\n * A record of which paths have been matched in a given walk step,\n * and whether they only are considered a match if they are a directory,\n * and whether their absolute or relative path should be returned.\n */\nexport class MatchRecord {\n store: Map = new Map()\n add(target: Path, absolute: boolean, ifDir: boolean) {\n const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0)\n const current = this.store.get(target)\n this.store.set(target, current === undefined ? n : n & current)\n }\n // match, absolute, ifdir\n entries(): [Path, boolean, boolean][] {\n return [...this.store.entries()].map(([path, n]) => [\n path,\n !!(n & 2),\n !!(n & 1),\n ])\n }\n}\n\n/**\n * A collection of patterns that must be processed in a subsequent step\n * for a given path.\n */\nexport class SubWalks {\n store: Map = new Map()\n add(target: Path, pattern: Pattern) {\n if (!target.canReaddir()) {\n return\n }\n const subs = this.store.get(target)\n if (subs) {\n if (!subs.find(p => p.globString() === pattern.globString())) {\n subs.push(pattern)\n }\n } else this.store.set(target, [pattern])\n }\n get(target: Path): Pattern[] {\n const subs = this.store.get(target)\n /* c8 ignore start */\n if (!subs) {\n throw new Error('attempting to walk unknown path')\n }\n /* c8 ignore stop */\n return subs\n }\n entries(): [Path, Pattern[]][] {\n return this.keys().map(k => [k, this.store.get(k) as Pattern[]])\n }\n keys(): Path[] {\n return [...this.store.keys()].filter(t => t.canReaddir())\n }\n}\n\n/**\n * The class that processes patterns for a given path.\n *\n * Handles child entry filtering, and determining whether a path's\n * directory contents must be read.\n */\nexport class Processor {\n hasWalkedCache: HasWalkedCache\n matches = new MatchRecord()\n subwalks = new SubWalks()\n patterns?: Pattern[]\n follow: boolean\n dot: boolean\n opts: GlobWalkerOpts\n\n constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache) {\n this.opts = opts\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.hasWalkedCache =\n hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache()\n }\n\n processPatterns(target: Path, patterns: Pattern[]) {\n this.patterns = patterns\n const processingSet: [Path, Pattern][] = patterns.map(p => [target, p])\n\n // map of paths to the magic-starting subwalks they need to walk\n // first item in patterns is the filter\n\n for (let [t, pattern] of processingSet) {\n this.hasWalkedCache.storeWalked(t, pattern)\n\n const root = pattern.root()\n const absolute = pattern.isAbsolute() && this.opts.absolute !== false\n\n // start absolute patterns at root\n if (root) {\n t = t.resolve(\n root === '/' && this.opts.root !== undefined ?\n this.opts.root\n : root,\n )\n const rest = pattern.rest()\n if (!rest) {\n this.matches.add(t, true, false)\n continue\n } else {\n pattern = rest\n }\n }\n\n if (t.isENOENT()) continue\n\n let p: MMPattern\n let rest: Pattern | null\n let changed = false\n while (\n typeof (p = pattern.pattern()) === 'string' &&\n (rest = pattern.rest())\n ) {\n const c = t.resolve(p)\n t = c\n pattern = rest\n changed = true\n }\n p = pattern.pattern()\n rest = pattern.rest()\n if (changed) {\n if (this.hasWalkedCache.hasWalked(t, pattern)) continue\n this.hasWalkedCache.storeWalked(t, pattern)\n }\n\n // now we have either a final string for a known entry,\n // more strings for an unknown entry,\n // or a pattern starting with magic, mounted on t.\n if (typeof p === 'string') {\n // must not be final entry, otherwise we would have\n // concatenated it earlier.\n const ifDir = p === '..' || p === '' || p === '.'\n this.matches.add(t.resolve(p), absolute, ifDir)\n continue\n } else if (p === GLOBSTAR) {\n // if no rest, match and subwalk pattern\n // if rest, process rest and subwalk pattern\n // if it's a symlink, but we didn't get here by way of a\n // globstar match (meaning it's the first time THIS globstar\n // has traversed a symlink), then we follow it. Otherwise, stop.\n if (\n !t.isSymbolicLink() ||\n this.follow ||\n pattern.checkFollowGlobstar()\n ) {\n this.subwalks.add(t, pattern)\n }\n const rp = rest?.pattern()\n const rrest = rest?.rest()\n if (!rest || ((rp === '' || rp === '.') && !rrest)) {\n // only HAS to be a dir if it ends in **/ or **/.\n // but ending in ** will match files as well.\n this.matches.add(t, absolute, rp === '' || rp === '.')\n } else {\n if (rp === '..') {\n // this would mean you're matching **/.. at the fs root,\n // and no thanks, I'm not gonna test that specific case.\n /* c8 ignore start */\n const tp = t.parent || t\n /* c8 ignore stop */\n if (!rrest) this.matches.add(tp, absolute, true)\n else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {\n this.subwalks.add(tp, rrest)\n }\n }\n }\n } else if (p instanceof RegExp) {\n this.subwalks.add(t, pattern)\n }\n }\n\n return this\n }\n\n subwalkTargets(): Path[] {\n return this.subwalks.keys()\n }\n\n child() {\n return new Processor(this.opts, this.hasWalkedCache)\n }\n\n // return a new Processor containing the subwalks for each\n // child entry, and a set of matches, and\n // a hasWalkedCache that's a copy of this one\n // then we're going to call\n filterEntries(parent: Path, entries: Path[]): Processor {\n const patterns = this.subwalks.get(parent)\n // put matches and entry walks into the results processor\n const results = this.child()\n for (const e of entries) {\n for (const pattern of patterns) {\n const absolute = pattern.isAbsolute()\n const p = pattern.pattern()\n const rest = pattern.rest()\n if (p === GLOBSTAR) {\n results.testGlobstar(e, pattern, rest, absolute)\n } else if (p instanceof RegExp) {\n results.testRegExp(e, p, rest, absolute)\n } else {\n results.testString(e, p, rest, absolute)\n }\n }\n }\n return results\n }\n\n testGlobstar(\n e: Path,\n pattern: Pattern,\n rest: Pattern | null,\n absolute: boolean,\n ) {\n if (this.dot || !e.name.startsWith('.')) {\n if (!pattern.hasMore()) {\n this.matches.add(e, absolute, false)\n }\n if (e.canReaddir()) {\n // if we're in follow mode or it's not a symlink, just keep\n // testing the same pattern. If there's more after the globstar,\n // then this symlink consumes the globstar. If not, then we can\n // follow at most ONE symlink along the way, so we mark it, which\n // also checks to ensure that it wasn't already marked.\n if (this.follow || !e.isSymbolicLink()) {\n this.subwalks.add(e, pattern)\n } else if (e.isSymbolicLink()) {\n if (rest && pattern.checkFollowGlobstar()) {\n this.subwalks.add(e, rest)\n } else if (pattern.markFollowGlobstar()) {\n this.subwalks.add(e, pattern)\n }\n }\n }\n }\n // if the NEXT thing matches this entry, then also add\n // the rest.\n if (rest) {\n const rp = rest.pattern()\n if (\n typeof rp === 'string' &&\n // dots and empty were handled already\n rp !== '..' &&\n rp !== '' &&\n rp !== '.'\n ) {\n this.testString(e, rp, rest.rest(), absolute)\n } else if (rp === '..') {\n /* c8 ignore start */\n const ep = e.parent || e\n /* c8 ignore stop */\n this.subwalks.add(ep, rest)\n } else if (rp instanceof RegExp) {\n this.testRegExp(e, rp, rest.rest(), absolute)\n }\n }\n }\n\n testRegExp(\n e: Path,\n p: MMRegExp,\n rest: Pattern | null,\n absolute: boolean,\n ) {\n if (!p.test(e.name)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n\n testString(e: Path, p: string, rest: Pattern | null, absolute: boolean) {\n // should never happen?\n if (!e.isNamed(p)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/walker.d.ts b/node_modules/glob/dist/commonjs/walker.d.ts new file mode 100644 index 00000000..499c8f49 --- /dev/null +++ b/node_modules/glob/dist/commonjs/walker.d.ts @@ -0,0 +1,97 @@ +/** + * Single-use utility classes to provide functionality to the {@link Glob} + * methods. + * + * @module + */ +import { Minipass } from 'minipass'; +import { Path } from 'path-scurry'; +import { IgnoreLike } from './ignore.js'; +import { Pattern } from './pattern.js'; +import { Processor } from './processor.js'; +export interface GlobWalkerOpts { + absolute?: boolean; + allowWindowsEscape?: boolean; + cwd?: string | URL; + dot?: boolean; + dotRelative?: boolean; + follow?: boolean; + ignore?: string | string[] | IgnoreLike; + mark?: boolean; + matchBase?: boolean; + maxDepth?: number; + nobrace?: boolean; + nocase?: boolean; + nodir?: boolean; + noext?: boolean; + noglobstar?: boolean; + platform?: NodeJS.Platform; + posix?: boolean; + realpath?: boolean; + root?: string; + stat?: boolean; + signal?: AbortSignal; + windowsPathsNoEscape?: boolean; + withFileTypes?: boolean; + includeChildMatches?: boolean; +} +export type GWOFileTypesTrue = GlobWalkerOpts & { + withFileTypes: true; +}; +export type GWOFileTypesFalse = GlobWalkerOpts & { + withFileTypes: false; +}; +export type GWOFileTypesUnset = GlobWalkerOpts & { + withFileTypes?: undefined; +}; +export type Result = O extends GWOFileTypesTrue ? Path : O extends GWOFileTypesFalse ? string : O extends GWOFileTypesUnset ? string : Path | string; +export type Matches = O extends GWOFileTypesTrue ? Set : O extends GWOFileTypesFalse ? Set : O extends GWOFileTypesUnset ? Set : Set; +export type MatchStream = Minipass, Result>; +/** + * basic walking utilities that all the glob walker types use + */ +export declare abstract class GlobUtil { + #private; + path: Path; + patterns: Pattern[]; + opts: O; + seen: Set; + paused: boolean; + aborted: boolean; + signal?: AbortSignal; + maxDepth: number; + includeChildMatches: boolean; + constructor(patterns: Pattern[], path: Path, opts: O); + pause(): void; + resume(): void; + onResume(fn: () => any): void; + matchCheck(e: Path, ifDir: boolean): Promise; + matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined; + matchCheckSync(e: Path, ifDir: boolean): Path | undefined; + abstract matchEmit(p: Result): void; + abstract matchEmit(p: string | Path): void; + matchFinish(e: Path, absolute: boolean): void; + match(e: Path, absolute: boolean, ifDir: boolean): Promise; + matchSync(e: Path, absolute: boolean, ifDir: boolean): void; + walkCB(target: Path, patterns: Pattern[], cb: () => any): void; + walkCB2(target: Path, patterns: Pattern[], processor: Processor, cb: () => any): any; + walkCB3(target: Path, entries: Path[], processor: Processor, cb: () => any): void; + walkCBSync(target: Path, patterns: Pattern[], cb: () => any): void; + walkCB2Sync(target: Path, patterns: Pattern[], processor: Processor, cb: () => any): any; + walkCB3Sync(target: Path, entries: Path[], processor: Processor, cb: () => any): void; +} +export declare class GlobWalker extends GlobUtil { + matches: Set>; + constructor(patterns: Pattern[], path: Path, opts: O); + matchEmit(e: Result): void; + walk(): Promise>>; + walkSync(): Set>; +} +export declare class GlobStream extends GlobUtil { + results: Minipass, Result>; + constructor(patterns: Pattern[], path: Path, opts: O); + matchEmit(e: Result): void; + stream(): MatchStream; + streamSync(): MatchStream; +} +//# sourceMappingURL=walker.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/walker.d.ts.map b/node_modules/glob/dist/commonjs/walker.d.ts.map new file mode 100644 index 00000000..769957bd --- /dev/null +++ b/node_modules/glob/dist/commonjs/walker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/walker.js b/node_modules/glob/dist/commonjs/walker.js new file mode 100644 index 00000000..cb15946d --- /dev/null +++ b/node_modules/glob/dist/commonjs/walker.js @@ -0,0 +1,387 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GlobStream = exports.GlobWalker = exports.GlobUtil = void 0; +/** + * Single-use utility classes to provide functionality to the {@link Glob} + * methods. + * + * @module + */ +const minipass_1 = require("minipass"); +const ignore_js_1 = require("./ignore.js"); +const processor_js_1 = require("./processor.js"); +const makeIgnore = (ignore, opts) => typeof ignore === 'string' ? new ignore_js_1.Ignore([ignore], opts) + : Array.isArray(ignore) ? new ignore_js_1.Ignore(ignore, opts) + : ignore; +/** + * basic walking utilities that all the glob walker types use + */ +class GlobUtil { + path; + patterns; + opts; + seen = new Set(); + paused = false; + aborted = false; + #onResume = []; + #ignore; + #sep; + signal; + maxDepth; + includeChildMatches; + constructor(patterns, path, opts) { + this.patterns = patterns; + this.path = path; + this.opts = opts; + this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/'; + this.includeChildMatches = opts.includeChildMatches !== false; + if (opts.ignore || !this.includeChildMatches) { + this.#ignore = makeIgnore(opts.ignore ?? [], opts); + if (!this.includeChildMatches && + typeof this.#ignore.add !== 'function') { + const m = 'cannot ignore child matches, ignore lacks add() method.'; + throw new Error(m); + } + } + // ignore, always set with maxDepth, but it's optional on the + // GlobOptions type + /* c8 ignore start */ + this.maxDepth = opts.maxDepth || Infinity; + /* c8 ignore stop */ + if (opts.signal) { + this.signal = opts.signal; + this.signal.addEventListener('abort', () => { + this.#onResume.length = 0; + }); + } + } + #ignored(path) { + return this.seen.has(path) || !!this.#ignore?.ignored?.(path); + } + #childrenIgnored(path) { + return !!this.#ignore?.childrenIgnored?.(path); + } + // backpressure mechanism + pause() { + this.paused = true; + } + resume() { + /* c8 ignore start */ + if (this.signal?.aborted) + return; + /* c8 ignore stop */ + this.paused = false; + let fn = undefined; + while (!this.paused && (fn = this.#onResume.shift())) { + fn(); + } + } + onResume(fn) { + if (this.signal?.aborted) + return; + /* c8 ignore start */ + if (!this.paused) { + fn(); + } + else { + /* c8 ignore stop */ + this.#onResume.push(fn); + } + } + // do the requisite realpath/stat checking, and return the path + // to add or undefined to filter it out. + async matchCheck(e, ifDir) { + if (ifDir && this.opts.nodir) + return undefined; + let rpc; + if (this.opts.realpath) { + rpc = e.realpathCached() || (await e.realpath()); + if (!rpc) + return undefined; + e = rpc; + } + const needStat = e.isUnknown() || this.opts.stat; + const s = needStat ? await e.lstat() : e; + if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) { + const target = await s.realpath(); + /* c8 ignore start */ + if (target && (target.isUnknown() || this.opts.stat)) { + await target.lstat(); + } + /* c8 ignore stop */ + } + return this.matchCheckTest(s, ifDir); + } + matchCheckTest(e, ifDir) { + return (e && + (this.maxDepth === Infinity || e.depth() <= this.maxDepth) && + (!ifDir || e.canReaddir()) && + (!this.opts.nodir || !e.isDirectory()) && + (!this.opts.nodir || + !this.opts.follow || + !e.isSymbolicLink() || + !e.realpathCached()?.isDirectory()) && + !this.#ignored(e)) ? + e + : undefined; + } + matchCheckSync(e, ifDir) { + if (ifDir && this.opts.nodir) + return undefined; + let rpc; + if (this.opts.realpath) { + rpc = e.realpathCached() || e.realpathSync(); + if (!rpc) + return undefined; + e = rpc; + } + const needStat = e.isUnknown() || this.opts.stat; + const s = needStat ? e.lstatSync() : e; + if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) { + const target = s.realpathSync(); + if (target && (target?.isUnknown() || this.opts.stat)) { + target.lstatSync(); + } + } + return this.matchCheckTest(s, ifDir); + } + matchFinish(e, absolute) { + if (this.#ignored(e)) + return; + // we know we have an ignore if this is false, but TS doesn't + if (!this.includeChildMatches && this.#ignore?.add) { + const ign = `${e.relativePosix()}/**`; + this.#ignore.add(ign); + } + const abs = this.opts.absolute === undefined ? absolute : this.opts.absolute; + this.seen.add(e); + const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''; + // ok, we have what we need! + if (this.opts.withFileTypes) { + this.matchEmit(e); + } + else if (abs) { + const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath(); + this.matchEmit(abs + mark); + } + else { + const rel = this.opts.posix ? e.relativePosix() : e.relative(); + const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ? + '.' + this.#sep + : ''; + this.matchEmit(!rel ? '.' + mark : pre + rel + mark); + } + } + async match(e, absolute, ifDir) { + const p = await this.matchCheck(e, ifDir); + if (p) + this.matchFinish(p, absolute); + } + matchSync(e, absolute, ifDir) { + const p = this.matchCheckSync(e, ifDir); + if (p) + this.matchFinish(p, absolute); + } + walkCB(target, patterns, cb) { + /* c8 ignore start */ + if (this.signal?.aborted) + cb(); + /* c8 ignore stop */ + this.walkCB2(target, patterns, new processor_js_1.Processor(this.opts), cb); + } + walkCB2(target, patterns, processor, cb) { + if (this.#childrenIgnored(target)) + return cb(); + if (this.signal?.aborted) + cb(); + if (this.paused) { + this.onResume(() => this.walkCB2(target, patterns, processor, cb)); + return; + } + processor.processPatterns(target, patterns); + // done processing. all of the above is sync, can be abstracted out. + // subwalks is a map of paths to the entry filters they need + // matches is a map of paths to [absolute, ifDir] tuples. + let tasks = 1; + const next = () => { + if (--tasks === 0) + cb(); + }; + for (const [m, absolute, ifDir] of processor.matches.entries()) { + if (this.#ignored(m)) + continue; + tasks++; + this.match(m, absolute, ifDir).then(() => next()); + } + for (const t of processor.subwalkTargets()) { + if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) { + continue; + } + tasks++; + const childrenCached = t.readdirCached(); + if (t.calledReaddir()) + this.walkCB3(t, childrenCached, processor, next); + else { + t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true); + } + } + next(); + } + walkCB3(target, entries, processor, cb) { + processor = processor.filterEntries(target, entries); + let tasks = 1; + const next = () => { + if (--tasks === 0) + cb(); + }; + for (const [m, absolute, ifDir] of processor.matches.entries()) { + if (this.#ignored(m)) + continue; + tasks++; + this.match(m, absolute, ifDir).then(() => next()); + } + for (const [target, patterns] of processor.subwalks.entries()) { + tasks++; + this.walkCB2(target, patterns, processor.child(), next); + } + next(); + } + walkCBSync(target, patterns, cb) { + /* c8 ignore start */ + if (this.signal?.aborted) + cb(); + /* c8 ignore stop */ + this.walkCB2Sync(target, patterns, new processor_js_1.Processor(this.opts), cb); + } + walkCB2Sync(target, patterns, processor, cb) { + if (this.#childrenIgnored(target)) + return cb(); + if (this.signal?.aborted) + cb(); + if (this.paused) { + this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb)); + return; + } + processor.processPatterns(target, patterns); + // done processing. all of the above is sync, can be abstracted out. + // subwalks is a map of paths to the entry filters they need + // matches is a map of paths to [absolute, ifDir] tuples. + let tasks = 1; + const next = () => { + if (--tasks === 0) + cb(); + }; + for (const [m, absolute, ifDir] of processor.matches.entries()) { + if (this.#ignored(m)) + continue; + this.matchSync(m, absolute, ifDir); + } + for (const t of processor.subwalkTargets()) { + if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) { + continue; + } + tasks++; + const children = t.readdirSync(); + this.walkCB3Sync(t, children, processor, next); + } + next(); + } + walkCB3Sync(target, entries, processor, cb) { + processor = processor.filterEntries(target, entries); + let tasks = 1; + const next = () => { + if (--tasks === 0) + cb(); + }; + for (const [m, absolute, ifDir] of processor.matches.entries()) { + if (this.#ignored(m)) + continue; + this.matchSync(m, absolute, ifDir); + } + for (const [target, patterns] of processor.subwalks.entries()) { + tasks++; + this.walkCB2Sync(target, patterns, processor.child(), next); + } + next(); + } +} +exports.GlobUtil = GlobUtil; +class GlobWalker extends GlobUtil { + matches = new Set(); + constructor(patterns, path, opts) { + super(patterns, path, opts); + } + matchEmit(e) { + this.matches.add(e); + } + async walk() { + if (this.signal?.aborted) + throw this.signal.reason; + if (this.path.isUnknown()) { + await this.path.lstat(); + } + await new Promise((res, rej) => { + this.walkCB(this.path, this.patterns, () => { + if (this.signal?.aborted) { + rej(this.signal.reason); + } + else { + res(this.matches); + } + }); + }); + return this.matches; + } + walkSync() { + if (this.signal?.aborted) + throw this.signal.reason; + if (this.path.isUnknown()) { + this.path.lstatSync(); + } + // nothing for the callback to do, because this never pauses + this.walkCBSync(this.path, this.patterns, () => { + if (this.signal?.aborted) + throw this.signal.reason; + }); + return this.matches; + } +} +exports.GlobWalker = GlobWalker; +class GlobStream extends GlobUtil { + results; + constructor(patterns, path, opts) { + super(patterns, path, opts); + this.results = new minipass_1.Minipass({ + signal: this.signal, + objectMode: true, + }); + this.results.on('drain', () => this.resume()); + this.results.on('resume', () => this.resume()); + } + matchEmit(e) { + this.results.write(e); + if (!this.results.flowing) + this.pause(); + } + stream() { + const target = this.path; + if (target.isUnknown()) { + target.lstat().then(() => { + this.walkCB(target, this.patterns, () => this.results.end()); + }); + } + else { + this.walkCB(target, this.patterns, () => this.results.end()); + } + return this.results; + } + streamSync() { + if (this.path.isUnknown()) { + this.path.lstatSync(); + } + this.walkCBSync(this.path, this.patterns, () => this.results.end()); + return this.results; + } +} +exports.GlobStream = GlobStream; +//# sourceMappingURL=walker.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/commonjs/walker.js.map b/node_modules/glob/dist/commonjs/walker.js.map new file mode 100644 index 00000000..49b01386 --- /dev/null +++ b/node_modules/glob/dist/commonjs/walker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Single-use utility classes to provide functionality to the {@link Glob}\n * methods.\n *\n * @module\n */\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport { Ignore, IgnoreLike } from './ignore.js'\n\n// XXX can we somehow make it so that it NEVER processes a given path more than\n// once, enough that the match set tracking is no longer needed? that'd speed\n// things up a lot. Or maybe bring back nounique, and skip it in that case?\n\n// a single minimatch set entry with 1 or more parts\nimport { Pattern } from './pattern.js'\nimport { Processor } from './processor.js'\n\nexport interface GlobWalkerOpts {\n absolute?: boolean\n allowWindowsEscape?: boolean\n cwd?: string | URL\n dot?: boolean\n dotRelative?: boolean\n follow?: boolean\n ignore?: string | string[] | IgnoreLike\n mark?: boolean\n matchBase?: boolean\n // Note: maxDepth here means \"maximum actual Path.depth()\",\n // not \"maximum depth beyond cwd\"\n maxDepth?: number\n nobrace?: boolean\n nocase?: boolean\n nodir?: boolean\n noext?: boolean\n noglobstar?: boolean\n platform?: NodeJS.Platform\n posix?: boolean\n realpath?: boolean\n root?: string\n stat?: boolean\n signal?: AbortSignal\n windowsPathsNoEscape?: boolean\n withFileTypes?: boolean\n includeChildMatches?: boolean\n}\n\nexport type GWOFileTypesTrue = GlobWalkerOpts & {\n withFileTypes: true\n}\nexport type GWOFileTypesFalse = GlobWalkerOpts & {\n withFileTypes: false\n}\nexport type GWOFileTypesUnset = GlobWalkerOpts & {\n withFileTypes?: undefined\n}\n\nexport type Result =\n O extends GWOFileTypesTrue ? Path\n : O extends GWOFileTypesFalse ? string\n : O extends GWOFileTypesUnset ? string\n : Path | string\n\nexport type Matches =\n O extends GWOFileTypesTrue ? Set\n : O extends GWOFileTypesFalse ? Set\n : O extends GWOFileTypesUnset ? Set\n : Set\n\nexport type MatchStream = Minipass<\n Result,\n Result\n>\n\nconst makeIgnore = (\n ignore: string | string[] | IgnoreLike,\n opts: GlobWalkerOpts,\n): IgnoreLike =>\n typeof ignore === 'string' ? new Ignore([ignore], opts)\n : Array.isArray(ignore) ? new Ignore(ignore, opts)\n : ignore\n\n/**\n * basic walking utilities that all the glob walker types use\n */\nexport abstract class GlobUtil {\n path: Path\n patterns: Pattern[]\n opts: O\n seen: Set = new Set()\n paused: boolean = false\n aborted: boolean = false\n #onResume: (() => any)[] = []\n #ignore?: IgnoreLike\n #sep: '\\\\' | '/'\n signal?: AbortSignal\n maxDepth: number\n includeChildMatches: boolean\n\n constructor(patterns: Pattern[], path: Path, opts: O)\n constructor(patterns: Pattern[], path: Path, opts: O) {\n this.patterns = patterns\n this.path = path\n this.opts = opts\n this.#sep = !opts.posix && opts.platform === 'win32' ? '\\\\' : '/'\n this.includeChildMatches = opts.includeChildMatches !== false\n if (opts.ignore || !this.includeChildMatches) {\n this.#ignore = makeIgnore(opts.ignore ?? [], opts)\n if (\n !this.includeChildMatches &&\n typeof this.#ignore.add !== 'function'\n ) {\n const m = 'cannot ignore child matches, ignore lacks add() method.'\n throw new Error(m)\n }\n }\n // ignore, always set with maxDepth, but it's optional on the\n // GlobOptions type\n /* c8 ignore start */\n this.maxDepth = opts.maxDepth || Infinity\n /* c8 ignore stop */\n if (opts.signal) {\n this.signal = opts.signal\n this.signal.addEventListener('abort', () => {\n this.#onResume.length = 0\n })\n }\n }\n\n #ignored(path: Path): boolean {\n return this.seen.has(path) || !!this.#ignore?.ignored?.(path)\n }\n #childrenIgnored(path: Path): boolean {\n return !!this.#ignore?.childrenIgnored?.(path)\n }\n\n // backpressure mechanism\n pause() {\n this.paused = true\n }\n resume() {\n /* c8 ignore start */\n if (this.signal?.aborted) return\n /* c8 ignore stop */\n this.paused = false\n let fn: (() => any) | undefined = undefined\n while (!this.paused && (fn = this.#onResume.shift())) {\n fn()\n }\n }\n onResume(fn: () => any) {\n if (this.signal?.aborted) return\n /* c8 ignore start */\n if (!this.paused) {\n fn()\n } else {\n /* c8 ignore stop */\n this.#onResume.push(fn)\n }\n }\n\n // do the requisite realpath/stat checking, and return the path\n // to add or undefined to filter it out.\n async matchCheck(e: Path, ifDir: boolean): Promise {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || (await e.realpath())\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n const s = needStat ? await e.lstat() : e\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = await s.realpath()\n /* c8 ignore start */\n if (target && (target.isUnknown() || this.opts.stat)) {\n await target.lstat()\n }\n /* c8 ignore stop */\n }\n return this.matchCheckTest(s, ifDir)\n }\n\n matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined {\n return (\n e &&\n (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&\n (!ifDir || e.canReaddir()) &&\n (!this.opts.nodir || !e.isDirectory()) &&\n (!this.opts.nodir ||\n !this.opts.follow ||\n !e.isSymbolicLink() ||\n !e.realpathCached()?.isDirectory()) &&\n !this.#ignored(e)\n ) ?\n e\n : undefined\n }\n\n matchCheckSync(e: Path, ifDir: boolean): Path | undefined {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || e.realpathSync()\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n const s = needStat ? e.lstatSync() : e\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = s.realpathSync()\n if (target && (target?.isUnknown() || this.opts.stat)) {\n target.lstatSync()\n }\n }\n return this.matchCheckTest(s, ifDir)\n }\n\n abstract matchEmit(p: Result): void\n abstract matchEmit(p: string | Path): void\n\n matchFinish(e: Path, absolute: boolean) {\n if (this.#ignored(e)) return\n // we know we have an ignore if this is false, but TS doesn't\n if (!this.includeChildMatches && this.#ignore?.add) {\n const ign = `${e.relativePosix()}/**`\n this.#ignore.add(ign)\n }\n const abs =\n this.opts.absolute === undefined ? absolute : this.opts.absolute\n this.seen.add(e)\n const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''\n // ok, we have what we need!\n if (this.opts.withFileTypes) {\n this.matchEmit(e)\n } else if (abs) {\n const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath()\n this.matchEmit(abs + mark)\n } else {\n const rel = this.opts.posix ? e.relativePosix() : e.relative()\n const pre =\n this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ?\n '.' + this.#sep\n : ''\n this.matchEmit(!rel ? '.' + mark : pre + rel + mark)\n }\n }\n\n async match(e: Path, absolute: boolean, ifDir: boolean): Promise {\n const p = await this.matchCheck(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n matchSync(e: Path, absolute: boolean, ifDir: boolean): void {\n const p = this.matchCheckSync(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n walkCB(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any,\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() => this.walkCB2(target, patterns, processor, cb))\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const childrenCached = t.readdirCached()\n if (t.calledReaddir())\n this.walkCB3(t, childrenCached, processor, next)\n else {\n t.readdirCB(\n (_, entries) => this.walkCB3(t, entries, processor, next),\n true,\n )\n }\n }\n\n next()\n }\n\n walkCB3(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any,\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2(target, patterns, processor.child(), next)\n }\n\n next()\n }\n\n walkCBSync(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2Sync(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2Sync(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any,\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() =>\n this.walkCB2Sync(target, patterns, processor, cb),\n )\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const children = t.readdirSync()\n this.walkCB3Sync(t, children, processor, next)\n }\n\n next()\n }\n\n walkCB3Sync(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any,\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2Sync(target, patterns, processor.child(), next)\n }\n\n next()\n }\n}\n\nexport class GlobWalker<\n O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil {\n matches = new Set>()\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n }\n\n matchEmit(e: Result): void {\n this.matches.add(e)\n }\n\n async walk(): Promise>> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n await this.path.lstat()\n }\n await new Promise((res, rej) => {\n this.walkCB(this.path, this.patterns, () => {\n if (this.signal?.aborted) {\n rej(this.signal.reason)\n } else {\n res(this.matches)\n }\n })\n })\n return this.matches\n }\n\n walkSync(): Set> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n // nothing for the callback to do, because this never pauses\n this.walkCBSync(this.path, this.patterns, () => {\n if (this.signal?.aborted) throw this.signal.reason\n })\n return this.matches\n }\n}\n\nexport class GlobStream<\n O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil {\n results: Minipass, Result>\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n this.results = new Minipass, Result>({\n signal: this.signal,\n objectMode: true,\n })\n this.results.on('drain', () => this.resume())\n this.results.on('resume', () => this.resume())\n }\n\n matchEmit(e: Result): void {\n this.results.write(e)\n if (!this.results.flowing) this.pause()\n }\n\n stream(): MatchStream {\n const target = this.path\n if (target.isUnknown()) {\n target.lstat().then(() => {\n this.walkCB(target, this.patterns, () => this.results.end())\n })\n } else {\n this.walkCB(target, this.patterns, () => this.results.end())\n }\n return this.results\n }\n\n streamSync(): MatchStream {\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n this.walkCBSync(this.path, this.patterns, () => this.results.end())\n return this.results\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/bin.d.mts b/node_modules/glob/dist/esm/bin.d.mts new file mode 100644 index 00000000..77298e47 --- /dev/null +++ b/node_modules/glob/dist/esm/bin.d.mts @@ -0,0 +1,3 @@ +#!/usr/bin/env node +export {}; +//# sourceMappingURL=bin.d.mts.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/bin.d.mts.map b/node_modules/glob/dist/esm/bin.d.mts.map new file mode 100644 index 00000000..ec64bdda --- /dev/null +++ b/node_modules/glob/dist/esm/bin.d.mts.map @@ -0,0 +1 @@ +{"version":3,"file":"bin.d.mts","sourceRoot":"","sources":["../../src/bin.mts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/bin.mjs b/node_modules/glob/dist/esm/bin.mjs new file mode 100644 index 00000000..5c7bf1e9 --- /dev/null +++ b/node_modules/glob/dist/esm/bin.mjs @@ -0,0 +1,270 @@ +#!/usr/bin/env node +import { foregroundChild } from 'foreground-child'; +import { existsSync } from 'fs'; +import { jack } from 'jackspeak'; +import { loadPackageJson } from 'package-json-from-dist'; +import { join } from 'path'; +import { globStream } from './index.js'; +const { version } = loadPackageJson(import.meta.url, '../package.json'); +const j = jack({ + usage: 'glob [options] [ [ ...]]', +}) + .description(` + Glob v${version} + + Expand the positional glob expression arguments into any matching file + system paths found. + `) + .opt({ + cmd: { + short: 'c', + hint: 'command', + description: `Run the command provided, passing the glob expression + matches as arguments.`, + }, +}) + .opt({ + default: { + short: 'p', + hint: 'pattern', + description: `If no positional arguments are provided, glob will use + this pattern`, + }, +}) + .flag({ + all: { + short: 'A', + description: `By default, the glob cli command will not expand any + arguments that are an exact match to a file on disk. + + This prevents double-expanding, in case the shell expands + an argument whose filename is a glob expression. + + For example, if 'app/*.ts' would match 'app/[id].ts', then + on Windows powershell or cmd.exe, 'glob app/*.ts' will + expand to 'app/[id].ts', as expected. However, in posix + shells such as bash or zsh, the shell will first expand + 'app/*.ts' to a list of filenames. Then glob will look + for a file matching 'app/[id].ts' (ie, 'app/i.ts' or + 'app/d.ts'), which is unexpected. + + Setting '--all' prevents this behavior, causing glob + to treat ALL patterns as glob expressions to be expanded, + even if they are an exact match to a file on disk. + + When setting this option, be sure to enquote arguments + so that the shell will not expand them prior to passing + them to the glob command process. + `, + }, + absolute: { + short: 'a', + description: 'Expand to absolute paths', + }, + 'dot-relative': { + short: 'd', + description: `Prepend './' on relative matches`, + }, + mark: { + short: 'm', + description: `Append a / on any directories matched`, + }, + posix: { + short: 'x', + description: `Always resolve to posix style paths, using '/' as the + directory separator, even on Windows. Drive letter + absolute matches on Windows will be expanded to their + full resolved UNC maths, eg instead of 'C:\\foo\\bar', + it will expand to '//?/C:/foo/bar'. + `, + }, + follow: { + short: 'f', + description: `Follow symlinked directories when expanding '**'`, + }, + realpath: { + short: 'R', + description: `Call 'fs.realpath' on all of the results. In the case + of an entry that cannot be resolved, the entry is + omitted. This incurs a slight performance penalty, of + course, because of the added system calls.`, + }, + stat: { + short: 's', + description: `Call 'fs.lstat' on all entries, whether required or not + to determine if it's a valid match.`, + }, + 'match-base': { + short: 'b', + description: `Perform a basename-only match if the pattern does not + contain any slash characters. That is, '*.js' would be + treated as equivalent to '**/*.js', matching js files + in all directories. + `, + }, + dot: { + description: `Allow patterns to match files/directories that start + with '.', even if the pattern does not start with '.' + `, + }, + nobrace: { + description: 'Do not expand {...} patterns', + }, + nocase: { + description: `Perform a case-insensitive match. This defaults to + 'true' on macOS and Windows platforms, and false on + all others. + + Note: 'nocase' should only be explicitly set when it is + known that the filesystem's case sensitivity differs + from the platform default. If set 'true' on + case-insensitive file systems, then the walk may return + more or less results than expected. + `, + }, + nodir: { + description: `Do not match directories, only files. + + Note: to *only* match directories, append a '/' at the + end of the pattern. + `, + }, + noext: { + description: `Do not expand extglob patterns, such as '+(a|b)'`, + }, + noglobstar: { + description: `Do not expand '**' against multiple path portions. + Ie, treat it as a normal '*' instead.`, + }, + 'windows-path-no-escape': { + description: `Use '\\' as a path separator *only*, and *never* as an + escape character. If set, all '\\' characters are + replaced with '/' in the pattern.`, + }, +}) + .num({ + 'max-depth': { + short: 'D', + description: `Maximum depth to traverse from the current + working directory`, + }, +}) + .opt({ + cwd: { + short: 'C', + description: 'Current working directory to execute/match in', + default: process.cwd(), + }, + root: { + short: 'r', + description: `A string path resolved against the 'cwd', which is + used as the starting point for absolute patterns that + start with '/' (but not drive letters or UNC paths + on Windows). + + Note that this *doesn't* necessarily limit the walk to + the 'root' directory, and doesn't affect the cwd + starting point for non-absolute patterns. A pattern + containing '..' will still be able to traverse out of + the root directory, if it is not an actual root directory + on the filesystem, and any non-absolute patterns will + still be matched in the 'cwd'. + + To start absolute and non-absolute patterns in the same + path, you can use '--root=' to set it to the empty + string. However, be aware that on Windows systems, a + pattern like 'x:/*' or '//host/share/*' will *always* + start in the 'x:/' or '//host/share/' directory, + regardless of the --root setting. + `, + }, + platform: { + description: `Defaults to the value of 'process.platform' if + available, or 'linux' if not. Setting --platform=win32 + on non-Windows systems may cause strange behavior!`, + validOptions: [ + 'aix', + 'android', + 'darwin', + 'freebsd', + 'haiku', + 'linux', + 'openbsd', + 'sunos', + 'win32', + 'cygwin', + 'netbsd', + ], + }, +}) + .optList({ + ignore: { + short: 'i', + description: `Glob patterns to ignore`, + }, +}) + .flag({ + debug: { + short: 'v', + description: `Output a huge amount of noisy debug information about + patterns as they are parsed and used to match files.`, + }, +}) + .flag({ + help: { + short: 'h', + description: 'Show this usage information', + }, +}); +try { + const { positionals, values } = j.parse(); + if (values.help) { + console.log(j.usage()); + process.exit(0); + } + if (positionals.length === 0 && !values.default) + throw 'No patterns provided'; + if (positionals.length === 0 && values.default) + positionals.push(values.default); + const patterns = values.all ? positionals : positionals.filter(p => !existsSync(p)); + const matches = values.all ? + [] + : positionals.filter(p => existsSync(p)).map(p => join(p)); + const stream = globStream(patterns, { + absolute: values.absolute, + cwd: values.cwd, + dot: values.dot, + dotRelative: values['dot-relative'], + follow: values.follow, + ignore: values.ignore, + mark: values.mark, + matchBase: values['match-base'], + maxDepth: values['max-depth'], + nobrace: values.nobrace, + nocase: values.nocase, + nodir: values.nodir, + noext: values.noext, + noglobstar: values.noglobstar, + platform: values.platform, + realpath: values.realpath, + root: values.root, + stat: values.stat, + debug: values.debug, + posix: values.posix, + }); + const cmd = values.cmd; + if (!cmd) { + matches.forEach(m => console.log(m)); + stream.on('data', f => console.log(f)); + } + else { + stream.on('data', f => matches.push(f)); + stream.on('end', () => foregroundChild(cmd, matches, { shell: true })); + } +} +catch (e) { + console.error(j.usage()); + console.error(e instanceof Error ? e.message : String(e)); + process.exit(1); +} +//# sourceMappingURL=bin.mjs.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/bin.mjs.map b/node_modules/glob/dist/esm/bin.mjs.map new file mode 100644 index 00000000..67247d5b --- /dev/null +++ b/node_modules/glob/dist/esm/bin.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"bin.mjs","sourceRoot":"","sources":["../../src/bin.mts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { foregroundChild } from 'foreground-child'\nimport { existsSync } from 'fs'\nimport { jack } from 'jackspeak'\nimport { loadPackageJson } from 'package-json-from-dist'\nimport { join } from 'path'\nimport { globStream } from './index.js'\n\nconst { version } = loadPackageJson(import.meta.url, '../package.json')\n\nconst j = jack({\n usage: 'glob [options] [ [ ...]]',\n})\n .description(\n `\n Glob v${version}\n\n Expand the positional glob expression arguments into any matching file\n system paths found.\n `,\n )\n .opt({\n cmd: {\n short: 'c',\n hint: 'command',\n description: `Run the command provided, passing the glob expression\n matches as arguments.`,\n },\n })\n .opt({\n default: {\n short: 'p',\n hint: 'pattern',\n description: `If no positional arguments are provided, glob will use\n this pattern`,\n },\n })\n .flag({\n all: {\n short: 'A',\n description: `By default, the glob cli command will not expand any\n arguments that are an exact match to a file on disk.\n\n This prevents double-expanding, in case the shell expands\n an argument whose filename is a glob expression.\n\n For example, if 'app/*.ts' would match 'app/[id].ts', then\n on Windows powershell or cmd.exe, 'glob app/*.ts' will\n expand to 'app/[id].ts', as expected. However, in posix\n shells such as bash or zsh, the shell will first expand\n 'app/*.ts' to a list of filenames. Then glob will look\n for a file matching 'app/[id].ts' (ie, 'app/i.ts' or\n 'app/d.ts'), which is unexpected.\n\n Setting '--all' prevents this behavior, causing glob\n to treat ALL patterns as glob expressions to be expanded,\n even if they are an exact match to a file on disk.\n\n When setting this option, be sure to enquote arguments\n so that the shell will not expand them prior to passing\n them to the glob command process.\n `,\n },\n absolute: {\n short: 'a',\n description: 'Expand to absolute paths',\n },\n 'dot-relative': {\n short: 'd',\n description: `Prepend './' on relative matches`,\n },\n mark: {\n short: 'm',\n description: `Append a / on any directories matched`,\n },\n posix: {\n short: 'x',\n description: `Always resolve to posix style paths, using '/' as the\n directory separator, even on Windows. Drive letter\n absolute matches on Windows will be expanded to their\n full resolved UNC maths, eg instead of 'C:\\\\foo\\\\bar',\n it will expand to '//?/C:/foo/bar'.\n `,\n },\n\n follow: {\n short: 'f',\n description: `Follow symlinked directories when expanding '**'`,\n },\n realpath: {\n short: 'R',\n description: `Call 'fs.realpath' on all of the results. In the case\n of an entry that cannot be resolved, the entry is\n omitted. This incurs a slight performance penalty, of\n course, because of the added system calls.`,\n },\n stat: {\n short: 's',\n description: `Call 'fs.lstat' on all entries, whether required or not\n to determine if it's a valid match.`,\n },\n 'match-base': {\n short: 'b',\n description: `Perform a basename-only match if the pattern does not\n contain any slash characters. That is, '*.js' would be\n treated as equivalent to '**/*.js', matching js files\n in all directories.\n `,\n },\n\n dot: {\n description: `Allow patterns to match files/directories that start\n with '.', even if the pattern does not start with '.'\n `,\n },\n nobrace: {\n description: 'Do not expand {...} patterns',\n },\n nocase: {\n description: `Perform a case-insensitive match. This defaults to\n 'true' on macOS and Windows platforms, and false on\n all others.\n\n Note: 'nocase' should only be explicitly set when it is\n known that the filesystem's case sensitivity differs\n from the platform default. If set 'true' on\n case-insensitive file systems, then the walk may return\n more or less results than expected.\n `,\n },\n nodir: {\n description: `Do not match directories, only files.\n\n Note: to *only* match directories, append a '/' at the\n end of the pattern.\n `,\n },\n noext: {\n description: `Do not expand extglob patterns, such as '+(a|b)'`,\n },\n noglobstar: {\n description: `Do not expand '**' against multiple path portions.\n Ie, treat it as a normal '*' instead.`,\n },\n 'windows-path-no-escape': {\n description: `Use '\\\\' as a path separator *only*, and *never* as an\n escape character. If set, all '\\\\' characters are\n replaced with '/' in the pattern.`,\n },\n })\n .num({\n 'max-depth': {\n short: 'D',\n description: `Maximum depth to traverse from the current\n working directory`,\n },\n })\n .opt({\n cwd: {\n short: 'C',\n description: 'Current working directory to execute/match in',\n default: process.cwd(),\n },\n root: {\n short: 'r',\n description: `A string path resolved against the 'cwd', which is\n used as the starting point for absolute patterns that\n start with '/' (but not drive letters or UNC paths\n on Windows).\n\n Note that this *doesn't* necessarily limit the walk to\n the 'root' directory, and doesn't affect the cwd\n starting point for non-absolute patterns. A pattern\n containing '..' will still be able to traverse out of\n the root directory, if it is not an actual root directory\n on the filesystem, and any non-absolute patterns will\n still be matched in the 'cwd'.\n\n To start absolute and non-absolute patterns in the same\n path, you can use '--root=' to set it to the empty\n string. However, be aware that on Windows systems, a\n pattern like 'x:/*' or '//host/share/*' will *always*\n start in the 'x:/' or '//host/share/' directory,\n regardless of the --root setting.\n `,\n },\n platform: {\n description: `Defaults to the value of 'process.platform' if\n available, or 'linux' if not. Setting --platform=win32\n on non-Windows systems may cause strange behavior!`,\n validOptions: [\n 'aix',\n 'android',\n 'darwin',\n 'freebsd',\n 'haiku',\n 'linux',\n 'openbsd',\n 'sunos',\n 'win32',\n 'cygwin',\n 'netbsd',\n ],\n },\n })\n .optList({\n ignore: {\n short: 'i',\n description: `Glob patterns to ignore`,\n },\n })\n .flag({\n debug: {\n short: 'v',\n description: `Output a huge amount of noisy debug information about\n patterns as they are parsed and used to match files.`,\n },\n })\n .flag({\n help: {\n short: 'h',\n description: 'Show this usage information',\n },\n })\n\ntry {\n const { positionals, values } = j.parse()\n if (values.help) {\n console.log(j.usage())\n process.exit(0)\n }\n if (positionals.length === 0 && !values.default)\n throw 'No patterns provided'\n if (positionals.length === 0 && values.default)\n positionals.push(values.default)\n const patterns =\n values.all ? positionals : positionals.filter(p => !existsSync(p))\n const matches =\n values.all ?\n []\n : positionals.filter(p => existsSync(p)).map(p => join(p))\n const stream = globStream(patterns, {\n absolute: values.absolute,\n cwd: values.cwd,\n dot: values.dot,\n dotRelative: values['dot-relative'],\n follow: values.follow,\n ignore: values.ignore,\n mark: values.mark,\n matchBase: values['match-base'],\n maxDepth: values['max-depth'],\n nobrace: values.nobrace,\n nocase: values.nocase,\n nodir: values.nodir,\n noext: values.noext,\n noglobstar: values.noglobstar,\n platform: values.platform as undefined | NodeJS.Platform,\n realpath: values.realpath,\n root: values.root,\n stat: values.stat,\n debug: values.debug,\n posix: values.posix,\n })\n\n const cmd = values.cmd\n if (!cmd) {\n matches.forEach(m => console.log(m))\n stream.on('data', f => console.log(f))\n } else {\n stream.on('data', f => matches.push(f))\n stream.on('end', () => foregroundChild(cmd, matches, { shell: true }))\n }\n} catch (e) {\n console.error(j.usage())\n console.error(e instanceof Error ? e.message : String(e))\n process.exit(1)\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/glob.d.ts b/node_modules/glob/dist/esm/glob.d.ts new file mode 100644 index 00000000..25262b3d --- /dev/null +++ b/node_modules/glob/dist/esm/glob.d.ts @@ -0,0 +1,388 @@ +import { Minimatch } from 'minimatch'; +import { Minipass } from 'minipass'; +import { FSOption, Path, PathScurry } from 'path-scurry'; +import { IgnoreLike } from './ignore.js'; +import { Pattern } from './pattern.js'; +export type MatchSet = Minimatch['set']; +export type GlobParts = Exclude; +/** + * A `GlobOptions` object may be provided to any of the exported methods, and + * must be provided to the `Glob` constructor. + * + * All options are optional, boolean, and false by default, unless otherwise + * noted. + * + * All resolved options are added to the Glob object as properties. + * + * If you are running many `glob` operations, you can pass a Glob object as the + * `options` argument to a subsequent operation to share the previously loaded + * cache. + */ +export interface GlobOptions { + /** + * Set to `true` to always receive absolute paths for + * matched files. Set to `false` to always return relative paths. + * + * When this option is not set, absolute paths are returned for patterns + * that are absolute, and otherwise paths are returned that are relative + * to the `cwd` setting. + * + * This does _not_ make an extra system call to get + * the realpath, it only does string path resolution. + * + * Conflicts with {@link withFileTypes} + */ + absolute?: boolean; + /** + * Set to false to enable {@link windowsPathsNoEscape} + * + * @deprecated + */ + allowWindowsEscape?: boolean; + /** + * The current working directory in which to search. Defaults to + * `process.cwd()`. + * + * May be eiher a string path or a `file://` URL object or string. + */ + cwd?: string | URL; + /** + * Include `.dot` files in normal matches and `globstar` + * matches. Note that an explicit dot in a portion of the pattern + * will always match dot files. + */ + dot?: boolean; + /** + * Prepend all relative path strings with `./` (or `.\` on Windows). + * + * Without this option, returned relative paths are "bare", so instead of + * returning `'./foo/bar'`, they are returned as `'foo/bar'`. + * + * Relative patterns starting with `'../'` are not prepended with `./`, even + * if this option is set. + */ + dotRelative?: boolean; + /** + * Follow symlinked directories when expanding `**` + * patterns. This can result in a lot of duplicate references in + * the presence of cyclic links, and make performance quite bad. + * + * By default, a `**` in a pattern will follow 1 symbolic link if + * it is not the first item in the pattern, or none if it is the + * first item in the pattern, following the same behavior as Bash. + */ + follow?: boolean; + /** + * string or string[], or an object with `ignore` and `ignoreChildren` + * methods. + * + * If a string or string[] is provided, then this is treated as a glob + * pattern or array of glob patterns to exclude from matches. To ignore all + * children within a directory, as well as the entry itself, append `'/**'` + * to the ignore pattern. + * + * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of + * any other settings. + * + * If an object is provided that has `ignored(path)` and/or + * `childrenIgnored(path)` methods, then these methods will be called to + * determine whether any Path is a match or if its children should be + * traversed, respectively. + */ + ignore?: string | string[] | IgnoreLike; + /** + * Treat brace expansion like `{a,b}` as a "magic" pattern. Has no + * effect if {@link nobrace} is set. + * + * Only has effect on the {@link hasMagic} function. + */ + magicalBraces?: boolean; + /** + * Add a `/` character to directory matches. Note that this requires + * additional stat calls in some cases. + */ + mark?: boolean; + /** + * Perform a basename-only match if the pattern does not contain any slash + * characters. That is, `*.js` would be treated as equivalent to + * `**\/*.js`, matching all js files in all directories. + */ + matchBase?: boolean; + /** + * Limit the directory traversal to a given depth below the cwd. + * Note that this does NOT prevent traversal to sibling folders, + * root patterns, and so on. It only limits the maximum folder depth + * that the walk will descend, relative to the cwd. + */ + maxDepth?: number; + /** + * Do not expand `{a,b}` and `{1..3}` brace sets. + */ + nobrace?: boolean; + /** + * Perform a case-insensitive match. This defaults to `true` on macOS and + * Windows systems, and `false` on all others. + * + * **Note** `nocase` should only be explicitly set when it is + * known that the filesystem's case sensitivity differs from the + * platform default. If set `true` on case-sensitive file + * systems, or `false` on case-insensitive file systems, then the + * walk may return more or less results than expected. + */ + nocase?: boolean; + /** + * Do not match directories, only files. (Note: to match + * _only_ directories, put a `/` at the end of the pattern.) + */ + nodir?: boolean; + /** + * Do not match "extglob" patterns such as `+(a|b)`. + */ + noext?: boolean; + /** + * Do not match `**` against multiple filenames. (Ie, treat it as a normal + * `*` instead.) + * + * Conflicts with {@link matchBase} + */ + noglobstar?: boolean; + /** + * Defaults to value of `process.platform` if available, or `'linux'` if + * not. Setting `platform:'win32'` on non-Windows systems may cause strange + * behavior. + */ + platform?: NodeJS.Platform; + /** + * Set to true to call `fs.realpath` on all of the + * results. In the case of an entry that cannot be resolved, the + * entry is omitted. This incurs a slight performance penalty, of + * course, because of the added system calls. + */ + realpath?: boolean; + /** + * + * A string path resolved against the `cwd` option, which + * is used as the starting point for absolute patterns that start + * with `/`, (but not drive letters or UNC paths on Windows). + * + * Note that this _doesn't_ necessarily limit the walk to the + * `root` directory, and doesn't affect the cwd starting point for + * non-absolute patterns. A pattern containing `..` will still be + * able to traverse out of the root directory, if it is not an + * actual root directory on the filesystem, and any non-absolute + * patterns will be matched in the `cwd`. For example, the + * pattern `/../*` with `{root:'/some/path'}` will return all + * files in `/some`, not all files in `/some/path`. The pattern + * `*` with `{root:'/some/path'}` will return all the entries in + * the cwd, not the entries in `/some/path`. + * + * To start absolute and non-absolute patterns in the same + * path, you can use `{root:''}`. However, be aware that on + * Windows systems, a pattern like `x:/*` or `//host/share/*` will + * _always_ start in the `x:/` or `//host/share` directory, + * regardless of the `root` setting. + */ + root?: string; + /** + * A [PathScurry](http://npm.im/path-scurry) object used + * to traverse the file system. If the `nocase` option is set + * explicitly, then any provided `scurry` object must match this + * setting. + */ + scurry?: PathScurry; + /** + * Call `lstat()` on all entries, whether required or not to determine + * if it's a valid match. When used with {@link withFileTypes}, this means + * that matches will include data such as modified time, permissions, and + * so on. Note that this will incur a performance cost due to the added + * system calls. + */ + stat?: boolean; + /** + * An AbortSignal which will cancel the Glob walk when + * triggered. + */ + signal?: AbortSignal; + /** + * Use `\\` as a path separator _only_, and + * _never_ as an escape character. If set, all `\\` characters are + * replaced with `/` in the pattern. + * + * Note that this makes it **impossible** to match against paths + * containing literal glob pattern characters, but allows matching + * with patterns constructed using `path.join()` and + * `path.resolve()` on Windows platforms, mimicking the (buggy!) + * behavior of Glob v7 and before on Windows. Please use with + * caution, and be mindful of [the caveat below about Windows + * paths](#windows). (For legacy reasons, this is also set if + * `allowWindowsEscape` is set to the exact value `false`.) + */ + windowsPathsNoEscape?: boolean; + /** + * Return [PathScurry](http://npm.im/path-scurry) + * `Path` objects instead of strings. These are similar to a + * NodeJS `Dirent` object, but with additional methods and + * properties. + * + * Conflicts with {@link absolute} + */ + withFileTypes?: boolean; + /** + * An fs implementation to override some or all of the defaults. See + * http://npm.im/path-scurry for details about what can be overridden. + */ + fs?: FSOption; + /** + * Just passed along to Minimatch. Note that this makes all pattern + * matching operations slower and *extremely* noisy. + */ + debug?: boolean; + /** + * Return `/` delimited paths, even on Windows. + * + * On posix systems, this has no effect. But, on Windows, it means that + * paths will be `/` delimited, and absolute paths will be their full + * resolved UNC forms, eg instead of `'C:\\foo\\bar'`, it would return + * `'//?/C:/foo/bar'` + */ + posix?: boolean; + /** + * Do not match any children of any matches. For example, the pattern + * `**\/foo` would match `a/foo`, but not `a/foo/b/foo` in this mode. + * + * This is especially useful for cases like "find all `node_modules` + * folders, but not the ones in `node_modules`". + * + * In order to support this, the `Ignore` implementation must support an + * `add(pattern: string)` method. If using the default `Ignore` class, then + * this is fine, but if this is set to `false`, and a custom `Ignore` is + * provided that does not have an `add()` method, then it will throw an + * error. + * + * **Caveat** It *only* ignores matches that would be a descendant of a + * previous match, and only if that descendant is matched *after* the + * ancestor is encountered. Since the file system walk happens in + * indeterminate order, it's possible that a match will already be added + * before its ancestor, if multiple or braced patterns are used. + * + * For example: + * + * ```ts + * const results = await glob([ + * // likely to match first, since it's just a stat + * 'a/b/c/d/e/f', + * + * // this pattern is more complicated! It must to various readdir() + * // calls and test the results against a regular expression, and that + * // is certainly going to take a little bit longer. + * // + * // So, later on, it encounters a match at 'a/b/c/d/e', but it's too + * // late to ignore a/b/c/d/e/f, because it's already been emitted. + * 'a/[bdf]/?/[a-z]/*', + * ], { includeChildMatches: false }) + * ``` + * + * It's best to only set this to `false` if you can be reasonably sure that + * no components of the pattern will potentially match one another's file + * system descendants, or if the occasional included child entry will not + * cause problems. + * + * @default true + */ + includeChildMatches?: boolean; +} +export type GlobOptionsWithFileTypesTrue = GlobOptions & { + withFileTypes: true; + absolute?: undefined; + mark?: undefined; + posix?: undefined; +}; +export type GlobOptionsWithFileTypesFalse = GlobOptions & { + withFileTypes?: false; +}; +export type GlobOptionsWithFileTypesUnset = GlobOptions & { + withFileTypes?: undefined; +}; +export type Result = Opts extends GlobOptionsWithFileTypesTrue ? Path : Opts extends GlobOptionsWithFileTypesFalse ? string : Opts extends GlobOptionsWithFileTypesUnset ? string : string | Path; +export type Results = Result[]; +export type FileTypes = Opts extends GlobOptionsWithFileTypesTrue ? true : Opts extends GlobOptionsWithFileTypesFalse ? false : Opts extends GlobOptionsWithFileTypesUnset ? false : boolean; +/** + * An object that can perform glob pattern traversals. + */ +export declare class Glob implements GlobOptions { + absolute?: boolean; + cwd: string; + root?: string; + dot: boolean; + dotRelative: boolean; + follow: boolean; + ignore?: string | string[] | IgnoreLike; + magicalBraces: boolean; + mark?: boolean; + matchBase: boolean; + maxDepth: number; + nobrace: boolean; + nocase: boolean; + nodir: boolean; + noext: boolean; + noglobstar: boolean; + pattern: string[]; + platform: NodeJS.Platform; + realpath: boolean; + scurry: PathScurry; + stat: boolean; + signal?: AbortSignal; + windowsPathsNoEscape: boolean; + withFileTypes: FileTypes; + includeChildMatches: boolean; + /** + * The options provided to the constructor. + */ + opts: Opts; + /** + * An array of parsed immutable {@link Pattern} objects. + */ + patterns: Pattern[]; + /** + * All options are stored as properties on the `Glob` object. + * + * See {@link GlobOptions} for full options descriptions. + * + * Note that a previous `Glob` object can be passed as the + * `GlobOptions` to another `Glob` instantiation to re-use settings + * and caches with a new pattern. + * + * Traversal functions can be called multiple times to run the walk + * again. + */ + constructor(pattern: string | string[], opts: Opts); + /** + * Returns a Promise that resolves to the results array. + */ + walk(): Promise>; + /** + * synchronous {@link Glob.walk} + */ + walkSync(): Results; + /** + * Stream results asynchronously. + */ + stream(): Minipass, Result>; + /** + * Stream results synchronously. + */ + streamSync(): Minipass, Result>; + /** + * Default sync iteration function. Returns a Generator that + * iterates over the results. + */ + iterateSync(): Generator, void, void>; + [Symbol.iterator](): Generator, void, void>; + /** + * Default async iteration function. Returns an AsyncGenerator that + * iterates over the results. + */ + iterate(): AsyncGenerator, void, void>; + [Symbol.asyncIterator](): AsyncGenerator, void, void>; +} +//# sourceMappingURL=glob.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/glob.d.ts.map b/node_modules/glob/dist/esm/glob.d.ts.map new file mode 100644 index 00000000..c32dc74c --- /dev/null +++ b/node_modules/glob/dist/esm/glob.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/glob.js b/node_modules/glob/dist/esm/glob.js new file mode 100644 index 00000000..c9ff3b00 --- /dev/null +++ b/node_modules/glob/dist/esm/glob.js @@ -0,0 +1,243 @@ +import { Minimatch } from 'minimatch'; +import { fileURLToPath } from 'node:url'; +import { PathScurry, PathScurryDarwin, PathScurryPosix, PathScurryWin32, } from 'path-scurry'; +import { Pattern } from './pattern.js'; +import { GlobStream, GlobWalker } from './walker.js'; +// if no process global, just call it linux. +// so we default to case-sensitive, / separators +const defaultPlatform = (typeof process === 'object' && + process && + typeof process.platform === 'string') ? + process.platform + : 'linux'; +/** + * An object that can perform glob pattern traversals. + */ +export class Glob { + absolute; + cwd; + root; + dot; + dotRelative; + follow; + ignore; + magicalBraces; + mark; + matchBase; + maxDepth; + nobrace; + nocase; + nodir; + noext; + noglobstar; + pattern; + platform; + realpath; + scurry; + stat; + signal; + windowsPathsNoEscape; + withFileTypes; + includeChildMatches; + /** + * The options provided to the constructor. + */ + opts; + /** + * An array of parsed immutable {@link Pattern} objects. + */ + patterns; + /** + * All options are stored as properties on the `Glob` object. + * + * See {@link GlobOptions} for full options descriptions. + * + * Note that a previous `Glob` object can be passed as the + * `GlobOptions` to another `Glob` instantiation to re-use settings + * and caches with a new pattern. + * + * Traversal functions can be called multiple times to run the walk + * again. + */ + constructor(pattern, opts) { + /* c8 ignore start */ + if (!opts) + throw new TypeError('glob options required'); + /* c8 ignore stop */ + this.withFileTypes = !!opts.withFileTypes; + this.signal = opts.signal; + this.follow = !!opts.follow; + this.dot = !!opts.dot; + this.dotRelative = !!opts.dotRelative; + this.nodir = !!opts.nodir; + this.mark = !!opts.mark; + if (!opts.cwd) { + this.cwd = ''; + } + else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) { + opts.cwd = fileURLToPath(opts.cwd); + } + this.cwd = opts.cwd || ''; + this.root = opts.root; + this.magicalBraces = !!opts.magicalBraces; + this.nobrace = !!opts.nobrace; + this.noext = !!opts.noext; + this.realpath = !!opts.realpath; + this.absolute = opts.absolute; + this.includeChildMatches = opts.includeChildMatches !== false; + this.noglobstar = !!opts.noglobstar; + this.matchBase = !!opts.matchBase; + this.maxDepth = + typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity; + this.stat = !!opts.stat; + this.ignore = opts.ignore; + if (this.withFileTypes && this.absolute !== undefined) { + throw new Error('cannot set absolute and withFileTypes:true'); + } + if (typeof pattern === 'string') { + pattern = [pattern]; + } + this.windowsPathsNoEscape = + !!opts.windowsPathsNoEscape || + opts.allowWindowsEscape === + false; + if (this.windowsPathsNoEscape) { + pattern = pattern.map(p => p.replace(/\\/g, '/')); + } + if (this.matchBase) { + if (opts.noglobstar) { + throw new TypeError('base matching requires globstar'); + } + pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`)); + } + this.pattern = pattern; + this.platform = opts.platform || defaultPlatform; + this.opts = { ...opts, platform: this.platform }; + if (opts.scurry) { + this.scurry = opts.scurry; + if (opts.nocase !== undefined && + opts.nocase !== opts.scurry.nocase) { + throw new Error('nocase option contradicts provided scurry option'); + } + } + else { + const Scurry = opts.platform === 'win32' ? PathScurryWin32 + : opts.platform === 'darwin' ? PathScurryDarwin + : opts.platform ? PathScurryPosix + : PathScurry; + this.scurry = new Scurry(this.cwd, { + nocase: opts.nocase, + fs: opts.fs, + }); + } + this.nocase = this.scurry.nocase; + // If you do nocase:true on a case-sensitive file system, then + // we need to use regexps instead of strings for non-magic + // path portions, because statting `aBc` won't return results + // for the file `AbC` for example. + const nocaseMagicOnly = this.platform === 'darwin' || this.platform === 'win32'; + const mmo = { + // default nocase based on platform + ...opts, + dot: this.dot, + matchBase: this.matchBase, + nobrace: this.nobrace, + nocase: this.nocase, + nocaseMagicOnly, + nocomment: true, + noext: this.noext, + nonegate: true, + optimizationLevel: 2, + platform: this.platform, + windowsPathsNoEscape: this.windowsPathsNoEscape, + debug: !!this.opts.debug, + }; + const mms = this.pattern.map(p => new Minimatch(p, mmo)); + const [matchSet, globParts] = mms.reduce((set, m) => { + set[0].push(...m.set); + set[1].push(...m.globParts); + return set; + }, [[], []]); + this.patterns = matchSet.map((set, i) => { + const g = globParts[i]; + /* c8 ignore start */ + if (!g) + throw new Error('invalid pattern object'); + /* c8 ignore stop */ + return new Pattern(set, g, 0, this.platform); + }); + } + async walk() { + // Walkers always return array of Path objects, so we just have to + // coerce them into the right shape. It will have already called + // realpath() if the option was set to do so, so we know that's cached. + // start out knowing the cwd, at least + return [ + ...(await new GlobWalker(this.patterns, this.scurry.cwd, { + ...this.opts, + maxDepth: this.maxDepth !== Infinity ? + this.maxDepth + this.scurry.cwd.depth() + : Infinity, + platform: this.platform, + nocase: this.nocase, + includeChildMatches: this.includeChildMatches, + }).walk()), + ]; + } + walkSync() { + return [ + ...new GlobWalker(this.patterns, this.scurry.cwd, { + ...this.opts, + maxDepth: this.maxDepth !== Infinity ? + this.maxDepth + this.scurry.cwd.depth() + : Infinity, + platform: this.platform, + nocase: this.nocase, + includeChildMatches: this.includeChildMatches, + }).walkSync(), + ]; + } + stream() { + return new GlobStream(this.patterns, this.scurry.cwd, { + ...this.opts, + maxDepth: this.maxDepth !== Infinity ? + this.maxDepth + this.scurry.cwd.depth() + : Infinity, + platform: this.platform, + nocase: this.nocase, + includeChildMatches: this.includeChildMatches, + }).stream(); + } + streamSync() { + return new GlobStream(this.patterns, this.scurry.cwd, { + ...this.opts, + maxDepth: this.maxDepth !== Infinity ? + this.maxDepth + this.scurry.cwd.depth() + : Infinity, + platform: this.platform, + nocase: this.nocase, + includeChildMatches: this.includeChildMatches, + }).streamSync(); + } + /** + * Default sync iteration function. Returns a Generator that + * iterates over the results. + */ + iterateSync() { + return this.streamSync()[Symbol.iterator](); + } + [Symbol.iterator]() { + return this.iterateSync(); + } + /** + * Default async iteration function. Returns an AsyncGenerator that + * iterates over the results. + */ + iterate() { + return this.stream()[Symbol.asyncIterator](); + } + [Symbol.asyncIterator]() { + return this.iterate(); + } +} +//# sourceMappingURL=glob.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/glob.js.map b/node_modules/glob/dist/esm/glob.js.map new file mode 100644 index 00000000..a62c3239 --- /dev/null +++ b/node_modules/glob/dist/esm/glob.js.map @@ -0,0 +1 @@ +{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"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","sourcesContent":["import { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { fileURLToPath } from 'node:url'\nimport {\n FSOption,\n Path,\n PathScurry,\n PathScurryDarwin,\n PathScurryPosix,\n PathScurryWin32,\n} from 'path-scurry'\nimport { IgnoreLike } from './ignore.js'\nimport { Pattern } from './pattern.js'\nimport { GlobStream, GlobWalker } from './walker.js'\n\nexport type MatchSet = Minimatch['set']\nexport type GlobParts = Exclude\n\n// if no process global, just call it linux.\n// so we default to case-sensitive, / separators\nconst defaultPlatform: NodeJS.Platform =\n (\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ) ?\n process.platform\n : 'linux'\n\n/**\n * A `GlobOptions` object may be provided to any of the exported methods, and\n * must be provided to the `Glob` constructor.\n *\n * All options are optional, boolean, and false by default, unless otherwise\n * noted.\n *\n * All resolved options are added to the Glob object as properties.\n *\n * If you are running many `glob` operations, you can pass a Glob object as the\n * `options` argument to a subsequent operation to share the previously loaded\n * cache.\n */\nexport interface GlobOptions {\n /**\n * Set to `true` to always receive absolute paths for\n * matched files. Set to `false` to always return relative paths.\n *\n * When this option is not set, absolute paths are returned for patterns\n * that are absolute, and otherwise paths are returned that are relative\n * to the `cwd` setting.\n *\n * This does _not_ make an extra system call to get\n * the realpath, it only does string path resolution.\n *\n * Conflicts with {@link withFileTypes}\n */\n absolute?: boolean\n\n /**\n * Set to false to enable {@link windowsPathsNoEscape}\n *\n * @deprecated\n */\n allowWindowsEscape?: boolean\n\n /**\n * The current working directory in which to search. Defaults to\n * `process.cwd()`.\n *\n * May be eiher a string path or a `file://` URL object or string.\n */\n cwd?: string | URL\n\n /**\n * Include `.dot` files in normal matches and `globstar`\n * matches. Note that an explicit dot in a portion of the pattern\n * will always match dot files.\n */\n dot?: boolean\n\n /**\n * Prepend all relative path strings with `./` (or `.\\` on Windows).\n *\n * Without this option, returned relative paths are \"bare\", so instead of\n * returning `'./foo/bar'`, they are returned as `'foo/bar'`.\n *\n * Relative patterns starting with `'../'` are not prepended with `./`, even\n * if this option is set.\n */\n dotRelative?: boolean\n\n /**\n * Follow symlinked directories when expanding `**`\n * patterns. This can result in a lot of duplicate references in\n * the presence of cyclic links, and make performance quite bad.\n *\n * By default, a `**` in a pattern will follow 1 symbolic link if\n * it is not the first item in the pattern, or none if it is the\n * first item in the pattern, following the same behavior as Bash.\n */\n follow?: boolean\n\n /**\n * string or string[], or an object with `ignore` and `ignoreChildren`\n * methods.\n *\n * If a string or string[] is provided, then this is treated as a glob\n * pattern or array of glob patterns to exclude from matches. To ignore all\n * children within a directory, as well as the entry itself, append `'/**'`\n * to the ignore pattern.\n *\n * **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of\n * any other settings.\n *\n * If an object is provided that has `ignored(path)` and/or\n * `childrenIgnored(path)` methods, then these methods will be called to\n * determine whether any Path is a match or if its children should be\n * traversed, respectively.\n */\n ignore?: string | string[] | IgnoreLike\n\n /**\n * Treat brace expansion like `{a,b}` as a \"magic\" pattern. Has no\n * effect if {@link nobrace} is set.\n *\n * Only has effect on the {@link hasMagic} function.\n */\n magicalBraces?: boolean\n\n /**\n * Add a `/` character to directory matches. Note that this requires\n * additional stat calls in some cases.\n */\n mark?: boolean\n\n /**\n * Perform a basename-only match if the pattern does not contain any slash\n * characters. That is, `*.js` would be treated as equivalent to\n * `**\\/*.js`, matching all js files in all directories.\n */\n matchBase?: boolean\n\n /**\n * Limit the directory traversal to a given depth below the cwd.\n * Note that this does NOT prevent traversal to sibling folders,\n * root patterns, and so on. It only limits the maximum folder depth\n * that the walk will descend, relative to the cwd.\n */\n maxDepth?: number\n\n /**\n * Do not expand `{a,b}` and `{1..3}` brace sets.\n */\n nobrace?: boolean\n\n /**\n * Perform a case-insensitive match. This defaults to `true` on macOS and\n * Windows systems, and `false` on all others.\n *\n * **Note** `nocase` should only be explicitly set when it is\n * known that the filesystem's case sensitivity differs from the\n * platform default. If set `true` on case-sensitive file\n * systems, or `false` on case-insensitive file systems, then the\n * walk may return more or less results than expected.\n */\n nocase?: boolean\n\n /**\n * Do not match directories, only files. (Note: to match\n * _only_ directories, put a `/` at the end of the pattern.)\n */\n nodir?: boolean\n\n /**\n * Do not match \"extglob\" patterns such as `+(a|b)`.\n */\n noext?: boolean\n\n /**\n * Do not match `**` against multiple filenames. (Ie, treat it as a normal\n * `*` instead.)\n *\n * Conflicts with {@link matchBase}\n */\n noglobstar?: boolean\n\n /**\n * Defaults to value of `process.platform` if available, or `'linux'` if\n * not. Setting `platform:'win32'` on non-Windows systems may cause strange\n * behavior.\n */\n platform?: NodeJS.Platform\n\n /**\n * Set to true to call `fs.realpath` on all of the\n * results. In the case of an entry that cannot be resolved, the\n * entry is omitted. This incurs a slight performance penalty, of\n * course, because of the added system calls.\n */\n realpath?: boolean\n\n /**\n *\n * A string path resolved against the `cwd` option, which\n * is used as the starting point for absolute patterns that start\n * with `/`, (but not drive letters or UNC paths on Windows).\n *\n * Note that this _doesn't_ necessarily limit the walk to the\n * `root` directory, and doesn't affect the cwd starting point for\n * non-absolute patterns. A pattern containing `..` will still be\n * able to traverse out of the root directory, if it is not an\n * actual root directory on the filesystem, and any non-absolute\n * patterns will be matched in the `cwd`. For example, the\n * pattern `/../*` with `{root:'/some/path'}` will return all\n * files in `/some`, not all files in `/some/path`. The pattern\n * `*` with `{root:'/some/path'}` will return all the entries in\n * the cwd, not the entries in `/some/path`.\n *\n * To start absolute and non-absolute patterns in the same\n * path, you can use `{root:''}`. However, be aware that on\n * Windows systems, a pattern like `x:/*` or `//host/share/*` will\n * _always_ start in the `x:/` or `//host/share` directory,\n * regardless of the `root` setting.\n */\n root?: string\n\n /**\n * A [PathScurry](http://npm.im/path-scurry) object used\n * to traverse the file system. If the `nocase` option is set\n * explicitly, then any provided `scurry` object must match this\n * setting.\n */\n scurry?: PathScurry\n\n /**\n * Call `lstat()` on all entries, whether required or not to determine\n * if it's a valid match. When used with {@link withFileTypes}, this means\n * that matches will include data such as modified time, permissions, and\n * so on. Note that this will incur a performance cost due to the added\n * system calls.\n */\n stat?: boolean\n\n /**\n * An AbortSignal which will cancel the Glob walk when\n * triggered.\n */\n signal?: AbortSignal\n\n /**\n * Use `\\\\` as a path separator _only_, and\n * _never_ as an escape character. If set, all `\\\\` characters are\n * replaced with `/` in the pattern.\n *\n * Note that this makes it **impossible** to match against paths\n * containing literal glob pattern characters, but allows matching\n * with patterns constructed using `path.join()` and\n * `path.resolve()` on Windows platforms, mimicking the (buggy!)\n * behavior of Glob v7 and before on Windows. Please use with\n * caution, and be mindful of [the caveat below about Windows\n * paths](#windows). (For legacy reasons, this is also set if\n * `allowWindowsEscape` is set to the exact value `false`.)\n */\n windowsPathsNoEscape?: boolean\n\n /**\n * Return [PathScurry](http://npm.im/path-scurry)\n * `Path` objects instead of strings. These are similar to a\n * NodeJS `Dirent` object, but with additional methods and\n * properties.\n *\n * Conflicts with {@link absolute}\n */\n withFileTypes?: boolean\n\n /**\n * An fs implementation to override some or all of the defaults. See\n * http://npm.im/path-scurry for details about what can be overridden.\n */\n fs?: FSOption\n\n /**\n * Just passed along to Minimatch. Note that this makes all pattern\n * matching operations slower and *extremely* noisy.\n */\n debug?: boolean\n\n /**\n * Return `/` delimited paths, even on Windows.\n *\n * On posix systems, this has no effect. But, on Windows, it means that\n * paths will be `/` delimited, and absolute paths will be their full\n * resolved UNC forms, eg instead of `'C:\\\\foo\\\\bar'`, it would return\n * `'//?/C:/foo/bar'`\n */\n posix?: boolean\n\n /**\n * Do not match any children of any matches. For example, the pattern\n * `**\\/foo` would match `a/foo`, but not `a/foo/b/foo` in this mode.\n *\n * This is especially useful for cases like \"find all `node_modules`\n * folders, but not the ones in `node_modules`\".\n *\n * In order to support this, the `Ignore` implementation must support an\n * `add(pattern: string)` method. If using the default `Ignore` class, then\n * this is fine, but if this is set to `false`, and a custom `Ignore` is\n * provided that does not have an `add()` method, then it will throw an\n * error.\n *\n * **Caveat** It *only* ignores matches that would be a descendant of a\n * previous match, and only if that descendant is matched *after* the\n * ancestor is encountered. Since the file system walk happens in\n * indeterminate order, it's possible that a match will already be added\n * before its ancestor, if multiple or braced patterns are used.\n *\n * For example:\n *\n * ```ts\n * const results = await glob([\n * // likely to match first, since it's just a stat\n * 'a/b/c/d/e/f',\n *\n * // this pattern is more complicated! It must to various readdir()\n * // calls and test the results against a regular expression, and that\n * // is certainly going to take a little bit longer.\n * //\n * // So, later on, it encounters a match at 'a/b/c/d/e', but it's too\n * // late to ignore a/b/c/d/e/f, because it's already been emitted.\n * 'a/[bdf]/?/[a-z]/*',\n * ], { includeChildMatches: false })\n * ```\n *\n * It's best to only set this to `false` if you can be reasonably sure that\n * no components of the pattern will potentially match one another's file\n * system descendants, or if the occasional included child entry will not\n * cause problems.\n *\n * @default true\n */\n includeChildMatches?: boolean\n}\n\nexport type GlobOptionsWithFileTypesTrue = GlobOptions & {\n withFileTypes: true\n // string options not relevant if returning Path objects.\n absolute?: undefined\n mark?: undefined\n posix?: undefined\n}\n\nexport type GlobOptionsWithFileTypesFalse = GlobOptions & {\n withFileTypes?: false\n}\n\nexport type GlobOptionsWithFileTypesUnset = GlobOptions & {\n withFileTypes?: undefined\n}\n\nexport type Result =\n Opts extends GlobOptionsWithFileTypesTrue ? Path\n : Opts extends GlobOptionsWithFileTypesFalse ? string\n : Opts extends GlobOptionsWithFileTypesUnset ? string\n : string | Path\nexport type Results = Result[]\n\nexport type FileTypes =\n Opts extends GlobOptionsWithFileTypesTrue ? true\n : Opts extends GlobOptionsWithFileTypesFalse ? false\n : Opts extends GlobOptionsWithFileTypesUnset ? false\n : boolean\n\n/**\n * An object that can perform glob pattern traversals.\n */\nexport class Glob implements GlobOptions {\n absolute?: boolean\n cwd: string\n root?: string\n dot: boolean\n dotRelative: boolean\n follow: boolean\n ignore?: string | string[] | IgnoreLike\n magicalBraces: boolean\n mark?: boolean\n matchBase: boolean\n maxDepth: number\n nobrace: boolean\n nocase: boolean\n nodir: boolean\n noext: boolean\n noglobstar: boolean\n pattern: string[]\n platform: NodeJS.Platform\n realpath: boolean\n scurry: PathScurry\n stat: boolean\n signal?: AbortSignal\n windowsPathsNoEscape: boolean\n withFileTypes: FileTypes\n includeChildMatches: boolean\n\n /**\n * The options provided to the constructor.\n */\n opts: Opts\n\n /**\n * An array of parsed immutable {@link Pattern} objects.\n */\n patterns: Pattern[]\n\n /**\n * All options are stored as properties on the `Glob` object.\n *\n * See {@link GlobOptions} for full options descriptions.\n *\n * Note that a previous `Glob` object can be passed as the\n * `GlobOptions` to another `Glob` instantiation to re-use settings\n * and caches with a new pattern.\n *\n * Traversal functions can be called multiple times to run the walk\n * again.\n */\n constructor(pattern: string | string[], opts: Opts) {\n /* c8 ignore start */\n if (!opts) throw new TypeError('glob options required')\n /* c8 ignore stop */\n this.withFileTypes = !!opts.withFileTypes as FileTypes\n this.signal = opts.signal\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.dotRelative = !!opts.dotRelative\n this.nodir = !!opts.nodir\n this.mark = !!opts.mark\n if (!opts.cwd) {\n this.cwd = ''\n } else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) {\n opts.cwd = fileURLToPath(opts.cwd)\n }\n this.cwd = opts.cwd || ''\n this.root = opts.root\n this.magicalBraces = !!opts.magicalBraces\n this.nobrace = !!opts.nobrace\n this.noext = !!opts.noext\n this.realpath = !!opts.realpath\n this.absolute = opts.absolute\n this.includeChildMatches = opts.includeChildMatches !== false\n\n this.noglobstar = !!opts.noglobstar\n this.matchBase = !!opts.matchBase\n this.maxDepth =\n typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity\n this.stat = !!opts.stat\n this.ignore = opts.ignore\n\n if (this.withFileTypes && this.absolute !== undefined) {\n throw new Error('cannot set absolute and withFileTypes:true')\n }\n\n if (typeof pattern === 'string') {\n pattern = [pattern]\n }\n\n this.windowsPathsNoEscape =\n !!opts.windowsPathsNoEscape ||\n (opts as { allowWindowsEscape?: boolean }).allowWindowsEscape ===\n false\n\n if (this.windowsPathsNoEscape) {\n pattern = pattern.map(p => p.replace(/\\\\/g, '/'))\n }\n\n if (this.matchBase) {\n if (opts.noglobstar) {\n throw new TypeError('base matching requires globstar')\n }\n pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`))\n }\n\n this.pattern = pattern\n\n this.platform = opts.platform || defaultPlatform\n this.opts = { ...opts, platform: this.platform }\n if (opts.scurry) {\n this.scurry = opts.scurry\n if (\n opts.nocase !== undefined &&\n opts.nocase !== opts.scurry.nocase\n ) {\n throw new Error('nocase option contradicts provided scurry option')\n }\n } else {\n const Scurry =\n opts.platform === 'win32' ? PathScurryWin32\n : opts.platform === 'darwin' ? PathScurryDarwin\n : opts.platform ? PathScurryPosix\n : PathScurry\n this.scurry = new Scurry(this.cwd, {\n nocase: opts.nocase,\n fs: opts.fs,\n })\n }\n this.nocase = this.scurry.nocase\n\n // If you do nocase:true on a case-sensitive file system, then\n // we need to use regexps instead of strings for non-magic\n // path portions, because statting `aBc` won't return results\n // for the file `AbC` for example.\n const nocaseMagicOnly =\n this.platform === 'darwin' || this.platform === 'win32'\n\n const mmo: MinimatchOptions = {\n // default nocase based on platform\n ...opts,\n dot: this.dot,\n matchBase: this.matchBase,\n nobrace: this.nobrace,\n nocase: this.nocase,\n nocaseMagicOnly,\n nocomment: true,\n noext: this.noext,\n nonegate: true,\n optimizationLevel: 2,\n platform: this.platform,\n windowsPathsNoEscape: this.windowsPathsNoEscape,\n debug: !!this.opts.debug,\n }\n\n const mms = this.pattern.map(p => new Minimatch(p, mmo))\n const [matchSet, globParts] = mms.reduce(\n (set: [MatchSet, GlobParts], m) => {\n set[0].push(...m.set)\n set[1].push(...m.globParts)\n return set\n },\n [[], []],\n )\n this.patterns = matchSet.map((set, i) => {\n const g = globParts[i]\n /* c8 ignore start */\n if (!g) throw new Error('invalid pattern object')\n /* c8 ignore stop */\n return new Pattern(set, g, 0, this.platform)\n })\n }\n\n /**\n * Returns a Promise that resolves to the results array.\n */\n async walk(): Promise>\n async walk(): Promise<(string | Path)[]> {\n // Walkers always return array of Path objects, so we just have to\n // coerce them into the right shape. It will have already called\n // realpath() if the option was set to do so, so we know that's cached.\n // start out knowing the cwd, at least\n return [\n ...(await new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).walk()),\n ]\n }\n\n /**\n * synchronous {@link Glob.walk}\n */\n walkSync(): Results\n walkSync(): (string | Path)[] {\n return [\n ...new GlobWalker(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).walkSync(),\n ]\n }\n\n /**\n * Stream results asynchronously.\n */\n stream(): Minipass, Result>\n stream(): Minipass {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).stream()\n }\n\n /**\n * Stream results synchronously.\n */\n streamSync(): Minipass, Result>\n streamSync(): Minipass {\n return new GlobStream(this.patterns, this.scurry.cwd, {\n ...this.opts,\n maxDepth:\n this.maxDepth !== Infinity ?\n this.maxDepth + this.scurry.cwd.depth()\n : Infinity,\n platform: this.platform,\n nocase: this.nocase,\n includeChildMatches: this.includeChildMatches,\n }).streamSync()\n }\n\n /**\n * Default sync iteration function. Returns a Generator that\n * iterates over the results.\n */\n iterateSync(): Generator, void, void> {\n return this.streamSync()[Symbol.iterator]()\n }\n [Symbol.iterator]() {\n return this.iterateSync()\n }\n\n /**\n * Default async iteration function. Returns an AsyncGenerator that\n * iterates over the results.\n */\n iterate(): AsyncGenerator, void, void> {\n return this.stream()[Symbol.asyncIterator]()\n }\n [Symbol.asyncIterator]() {\n return this.iterate()\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/has-magic.d.ts b/node_modules/glob/dist/esm/has-magic.d.ts new file mode 100644 index 00000000..8aec3bd9 --- /dev/null +++ b/node_modules/glob/dist/esm/has-magic.d.ts @@ -0,0 +1,14 @@ +import { GlobOptions } from './glob.js'; +/** + * Return true if the patterns provided contain any magic glob characters, + * given the options provided. + * + * Brace expansion is not considered "magic" unless the `magicalBraces` option + * is set, as brace expansion just turns one string into an array of strings. + * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and + * `'xby'` both do not contain any magic glob characters, and it's treated the + * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true` + * is in the options, brace expansion _is_ treated as a pattern having magic. + */ +export declare const hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean; +//# sourceMappingURL=has-magic.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/has-magic.d.ts.map b/node_modules/glob/dist/esm/has-magic.d.ts.map new file mode 100644 index 00000000..b24dd4ec --- /dev/null +++ b/node_modules/glob/dist/esm/has-magic.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"has-magic.d.ts","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,YACV,MAAM,GAAG,MAAM,EAAE,YACjB,WAAW,KACnB,OAQF,CAAA"} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/has-magic.js b/node_modules/glob/dist/esm/has-magic.js new file mode 100644 index 00000000..ba2321ab --- /dev/null +++ b/node_modules/glob/dist/esm/has-magic.js @@ -0,0 +1,23 @@ +import { Minimatch } from 'minimatch'; +/** + * Return true if the patterns provided contain any magic glob characters, + * given the options provided. + * + * Brace expansion is not considered "magic" unless the `magicalBraces` option + * is set, as brace expansion just turns one string into an array of strings. + * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and + * `'xby'` both do not contain any magic glob characters, and it's treated the + * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true` + * is in the options, brace expansion _is_ treated as a pattern having magic. + */ +export const hasMagic = (pattern, options = {}) => { + if (!Array.isArray(pattern)) { + pattern = [pattern]; + } + for (const p of pattern) { + if (new Minimatch(p, options).hasMagic()) + return true; + } + return false; +}; +//# sourceMappingURL=has-magic.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/has-magic.js.map b/node_modules/glob/dist/esm/has-magic.js.map new file mode 100644 index 00000000..a20f5aa2 --- /dev/null +++ b/node_modules/glob/dist/esm/has-magic.js.map @@ -0,0 +1 @@ +{"version":3,"file":"has-magic.js","sourceRoot":"","sources":["../../src/has-magic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAGrC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAA0B,EAC1B,UAAuB,EAAE,EAChB,EAAE;IACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAA;IACvD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA","sourcesContent":["import { Minimatch } from 'minimatch'\nimport { GlobOptions } from './glob.js'\n\n/**\n * Return true if the patterns provided contain any magic glob characters,\n * given the options provided.\n *\n * Brace expansion is not considered \"magic\" unless the `magicalBraces` option\n * is set, as brace expansion just turns one string into an array of strings.\n * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and\n * `'xby'` both do not contain any magic glob characters, and it's treated the\n * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true`\n * is in the options, brace expansion _is_ treated as a pattern having magic.\n */\nexport const hasMagic = (\n pattern: string | string[],\n options: GlobOptions = {},\n): boolean => {\n if (!Array.isArray(pattern)) {\n pattern = [pattern]\n }\n for (const p of pattern) {\n if (new Minimatch(p, options).hasMagic()) return true\n }\n return false\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/ignore.d.ts b/node_modules/glob/dist/esm/ignore.d.ts new file mode 100644 index 00000000..1893b16d --- /dev/null +++ b/node_modules/glob/dist/esm/ignore.d.ts @@ -0,0 +1,24 @@ +import { Minimatch, MinimatchOptions } from 'minimatch'; +import { Path } from 'path-scurry'; +import { GlobWalkerOpts } from './walker.js'; +export interface IgnoreLike { + ignored?: (p: Path) => boolean; + childrenIgnored?: (p: Path) => boolean; + add?: (ignore: string) => void; +} +/** + * Class used to process ignored patterns + */ +export declare class Ignore implements IgnoreLike { + relative: Minimatch[]; + relativeChildren: Minimatch[]; + absolute: Minimatch[]; + absoluteChildren: Minimatch[]; + platform: NodeJS.Platform; + mmopts: MinimatchOptions; + constructor(ignored: string[], { nobrace, nocase, noext, noglobstar, platform, }: GlobWalkerOpts); + add(ign: string): void; + ignored(p: Path): boolean; + childrenIgnored(p: Path): boolean; +} +//# sourceMappingURL=ignore.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/ignore.d.ts.map b/node_modules/glob/dist/esm/ignore.d.ts.map new file mode 100644 index 00000000..57d6ab61 --- /dev/null +++ b/node_modules/glob/dist/esm/ignore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IAC9B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAA;IACtC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAWD;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,gBAAgB,EAAE,SAAS,EAAE,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,MAAM,EAAE,gBAAgB,CAAA;gBAGtB,OAAO,EAAE,MAAM,EAAE,EACjB,EACE,OAAO,EACP,MAAM,EACN,KAAK,EACL,UAAU,EACV,QAA0B,GAC3B,EAAE,cAAc;IAqBnB,GAAG,CAAC,GAAG,EAAE,MAAM;IAyCf,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAczB,eAAe,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;CAWlC"} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/ignore.js b/node_modules/glob/dist/esm/ignore.js new file mode 100644 index 00000000..539c4a4f --- /dev/null +++ b/node_modules/glob/dist/esm/ignore.js @@ -0,0 +1,115 @@ +// give it a pattern, and it'll be able to tell you if +// a given path should be ignored. +// Ignoring a path ignores its children if the pattern ends in /** +// Ignores are always parsed in dot:true mode +import { Minimatch } from 'minimatch'; +import { Pattern } from './pattern.js'; +const defaultPlatform = (typeof process === 'object' && + process && + typeof process.platform === 'string') ? + process.platform + : 'linux'; +/** + * Class used to process ignored patterns + */ +export class Ignore { + relative; + relativeChildren; + absolute; + absoluteChildren; + platform; + mmopts; + constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform, }) { + this.relative = []; + this.absolute = []; + this.relativeChildren = []; + this.absoluteChildren = []; + this.platform = platform; + this.mmopts = { + dot: true, + nobrace, + nocase, + noext, + noglobstar, + optimizationLevel: 2, + platform, + nocomment: true, + nonegate: true, + }; + for (const ign of ignored) + this.add(ign); + } + add(ign) { + // this is a little weird, but it gives us a clean set of optimized + // minimatch matchers, without getting tripped up if one of them + // ends in /** inside a brace section, and it's only inefficient at + // the start of the walk, not along it. + // It'd be nice if the Pattern class just had a .test() method, but + // handling globstars is a bit of a pita, and that code already lives + // in minimatch anyway. + // Another way would be if maybe Minimatch could take its set/globParts + // as an option, and then we could at least just use Pattern to test + // for absolute-ness. + // Yet another way, Minimatch could take an array of glob strings, and + // a cwd option, and do the right thing. + const mm = new Minimatch(ign, this.mmopts); + for (let i = 0; i < mm.set.length; i++) { + const parsed = mm.set[i]; + const globParts = mm.globParts[i]; + /* c8 ignore start */ + if (!parsed || !globParts) { + throw new Error('invalid pattern object'); + } + // strip off leading ./ portions + // https://github.com/isaacs/node-glob/issues/570 + while (parsed[0] === '.' && globParts[0] === '.') { + parsed.shift(); + globParts.shift(); + } + /* c8 ignore stop */ + const p = new Pattern(parsed, globParts, 0, this.platform); + const m = new Minimatch(p.globString(), this.mmopts); + const children = globParts[globParts.length - 1] === '**'; + const absolute = p.isAbsolute(); + if (absolute) + this.absolute.push(m); + else + this.relative.push(m); + if (children) { + if (absolute) + this.absoluteChildren.push(m); + else + this.relativeChildren.push(m); + } + } + } + ignored(p) { + const fullpath = p.fullpath(); + const fullpaths = `${fullpath}/`; + const relative = p.relative() || '.'; + const relatives = `${relative}/`; + for (const m of this.relative) { + if (m.match(relative) || m.match(relatives)) + return true; + } + for (const m of this.absolute) { + if (m.match(fullpath) || m.match(fullpaths)) + return true; + } + return false; + } + childrenIgnored(p) { + const fullpath = p.fullpath() + '/'; + const relative = (p.relative() || '.') + '/'; + for (const m of this.relativeChildren) { + if (m.match(relative)) + return true; + } + for (const m of this.absoluteChildren) { + if (m.match(fullpath)) + return true; + } + return false; + } +} +//# sourceMappingURL=ignore.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/ignore.js.map b/node_modules/glob/dist/esm/ignore.js.map new file mode 100644 index 00000000..2cddba2e --- /dev/null +++ b/node_modules/glob/dist/esm/ignore.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../src/ignore.ts"],"names":[],"mappings":"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","sourcesContent":["// give it a pattern, and it'll be able to tell you if\n// a given path should be ignored.\n// Ignoring a path ignores its children if the pattern ends in /**\n// Ignores are always parsed in dot:true mode\n\nimport { Minimatch, MinimatchOptions } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\nexport interface IgnoreLike {\n ignored?: (p: Path) => boolean\n childrenIgnored?: (p: Path) => boolean\n add?: (ignore: string) => void\n}\n\nconst defaultPlatform: NodeJS.Platform =\n (\n typeof process === 'object' &&\n process &&\n typeof process.platform === 'string'\n ) ?\n process.platform\n : 'linux'\n\n/**\n * Class used to process ignored patterns\n */\nexport class Ignore implements IgnoreLike {\n relative: Minimatch[]\n relativeChildren: Minimatch[]\n absolute: Minimatch[]\n absoluteChildren: Minimatch[]\n platform: NodeJS.Platform\n mmopts: MinimatchOptions\n\n constructor(\n ignored: string[],\n {\n nobrace,\n nocase,\n noext,\n noglobstar,\n platform = defaultPlatform,\n }: GlobWalkerOpts,\n ) {\n this.relative = []\n this.absolute = []\n this.relativeChildren = []\n this.absoluteChildren = []\n this.platform = platform\n this.mmopts = {\n dot: true,\n nobrace,\n nocase,\n noext,\n noglobstar,\n optimizationLevel: 2,\n platform,\n nocomment: true,\n nonegate: true,\n }\n for (const ign of ignored) this.add(ign)\n }\n\n add(ign: string) {\n // this is a little weird, but it gives us a clean set of optimized\n // minimatch matchers, without getting tripped up if one of them\n // ends in /** inside a brace section, and it's only inefficient at\n // the start of the walk, not along it.\n // It'd be nice if the Pattern class just had a .test() method, but\n // handling globstars is a bit of a pita, and that code already lives\n // in minimatch anyway.\n // Another way would be if maybe Minimatch could take its set/globParts\n // as an option, and then we could at least just use Pattern to test\n // for absolute-ness.\n // Yet another way, Minimatch could take an array of glob strings, and\n // a cwd option, and do the right thing.\n const mm = new Minimatch(ign, this.mmopts)\n for (let i = 0; i < mm.set.length; i++) {\n const parsed = mm.set[i]\n const globParts = mm.globParts[i]\n /* c8 ignore start */\n if (!parsed || !globParts) {\n throw new Error('invalid pattern object')\n }\n // strip off leading ./ portions\n // https://github.com/isaacs/node-glob/issues/570\n while (parsed[0] === '.' && globParts[0] === '.') {\n parsed.shift()\n globParts.shift()\n }\n /* c8 ignore stop */\n const p = new Pattern(parsed, globParts, 0, this.platform)\n const m = new Minimatch(p.globString(), this.mmopts)\n const children = globParts[globParts.length - 1] === '**'\n const absolute = p.isAbsolute()\n if (absolute) this.absolute.push(m)\n else this.relative.push(m)\n if (children) {\n if (absolute) this.absoluteChildren.push(m)\n else this.relativeChildren.push(m)\n }\n }\n }\n\n ignored(p: Path): boolean {\n const fullpath = p.fullpath()\n const fullpaths = `${fullpath}/`\n const relative = p.relative() || '.'\n const relatives = `${relative}/`\n for (const m of this.relative) {\n if (m.match(relative) || m.match(relatives)) return true\n }\n for (const m of this.absolute) {\n if (m.match(fullpath) || m.match(fullpaths)) return true\n }\n return false\n }\n\n childrenIgnored(p: Path): boolean {\n const fullpath = p.fullpath() + '/'\n const relative = (p.relative() || '.') + '/'\n for (const m of this.relativeChildren) {\n if (m.match(relative)) return true\n }\n for (const m of this.absoluteChildren) {\n if (m.match(fullpath)) return true\n }\n return false\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/index.d.ts b/node_modules/glob/dist/esm/index.d.ts new file mode 100644 index 00000000..9c326ddc --- /dev/null +++ b/node_modules/glob/dist/esm/index.d.ts @@ -0,0 +1,97 @@ +import { Minipass } from 'minipass'; +import { Path } from 'path-scurry'; +import type { GlobOptions, GlobOptionsWithFileTypesFalse, GlobOptionsWithFileTypesTrue, GlobOptionsWithFileTypesUnset } from './glob.js'; +import { Glob } from './glob.js'; +export { escape, unescape } from 'minimatch'; +export type { FSOption, Path, WalkOptions, WalkOptionsWithFileTypesTrue, WalkOptionsWithFileTypesUnset, } from 'path-scurry'; +export { Glob } from './glob.js'; +export type { GlobOptions, GlobOptionsWithFileTypesFalse, GlobOptionsWithFileTypesTrue, GlobOptionsWithFileTypesUnset, } from './glob.js'; +export { hasMagic } from './has-magic.js'; +export { Ignore } from './ignore.js'; +export type { IgnoreLike } from './ignore.js'; +export type { MatchStream } from './walker.js'; +/** + * Syncronous form of {@link globStream}. Will read all the matches as fast as + * you consume them, even all in a single tick if you consume them immediately, + * but will still respond to backpressure if they're not consumed immediately. + */ +export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Minipass; +export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Minipass; +export declare function globStreamSync(pattern: string | string[], options: GlobOptionsWithFileTypesUnset): Minipass; +export declare function globStreamSync(pattern: string | string[], options: GlobOptions): Minipass | Minipass; +/** + * Return a stream that emits all the strings or `Path` objects and + * then emits `end` when completed. + */ +export declare function globStream(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Minipass; +export declare function globStream(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Minipass; +export declare function globStream(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Minipass; +export declare function globStream(pattern: string | string[], options: GlobOptions): Minipass | Minipass; +/** + * Synchronous form of {@link glob} + */ +export declare function globSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): string[]; +export declare function globSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Path[]; +export declare function globSync(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): string[]; +export declare function globSync(pattern: string | string[], options: GlobOptions): Path[] | string[]; +/** + * Perform an asynchronous glob search for the pattern(s) specified. Returns + * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the + * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for + * full option descriptions. + */ +declare function glob_(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Promise; +declare function glob_(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Promise; +declare function glob_(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Promise; +declare function glob_(pattern: string | string[], options: GlobOptions): Promise; +/** + * Return a sync iterator for walking glob pattern matches. + */ +export declare function globIterateSync(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): Generator; +export declare function globIterateSync(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): Generator; +export declare function globIterateSync(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): Generator; +export declare function globIterateSync(pattern: string | string[], options: GlobOptions): Generator | Generator; +/** + * Return an async iterator for walking glob pattern matches. + */ +export declare function globIterate(pattern: string | string[], options?: GlobOptionsWithFileTypesUnset | undefined): AsyncGenerator; +export declare function globIterate(pattern: string | string[], options: GlobOptionsWithFileTypesTrue): AsyncGenerator; +export declare function globIterate(pattern: string | string[], options: GlobOptionsWithFileTypesFalse): AsyncGenerator; +export declare function globIterate(pattern: string | string[], options: GlobOptions): AsyncGenerator | AsyncGenerator; +export declare const streamSync: typeof globStreamSync; +export declare const stream: typeof globStream & { + sync: typeof globStreamSync; +}; +export declare const iterateSync: typeof globIterateSync; +export declare const iterate: typeof globIterate & { + sync: typeof globIterateSync; +}; +export declare const sync: typeof globSync & { + stream: typeof globStreamSync; + iterate: typeof globIterateSync; +}; +export declare const glob: typeof glob_ & { + glob: typeof glob_; + globSync: typeof globSync; + sync: typeof globSync & { + stream: typeof globStreamSync; + iterate: typeof globIterateSync; + }; + globStream: typeof globStream; + stream: typeof globStream & { + sync: typeof globStreamSync; + }; + globStreamSync: typeof globStreamSync; + streamSync: typeof globStreamSync; + globIterate: typeof globIterate; + iterate: typeof globIterate & { + sync: typeof globIterateSync; + }; + globIterateSync: typeof globIterateSync; + iterateSync: typeof globIterateSync; + Glob: typeof Glob; + hasMagic: (pattern: string | string[], options?: GlobOptions) => boolean; + escape: (s: string, { windowsPathsNoEscape, }?: Pick) => string; + unescape: (s: string, { windowsPathsNoEscape, }?: Pick) => string; +}; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/index.d.ts.map b/node_modules/glob/dist/esm/index.d.ts.map new file mode 100644 index 00000000..5fb32252 --- /dev/null +++ b/node_modules/glob/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,KAAK,EACV,WAAW,EACX,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC5C,YAAY,EACV,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,YAAY,EACV,WAAW,EACX,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,4BAA4B,GACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACvB,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,6BAA6B,GACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC3B,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,6BAA6B,GACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC3B,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,WAAW,GACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAQlD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,6BAA6B,GACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC3B,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,4BAA4B,GACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACvB,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,6BAA6B,GAAG,SAAS,GAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC3B,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,WAAW,GACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAQlD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,6BAA6B,GACrC,MAAM,EAAE,CAAA;AACX,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,4BAA4B,GACpC,IAAI,EAAE,CAAA;AACT,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,6BAA6B,GAAG,SAAS,GAClD,MAAM,EAAE,CAAA;AACX,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,WAAW,GACnB,IAAI,EAAE,GAAG,MAAM,EAAE,CAAA;AAQpB;;;;;GAKG;AACH,iBAAe,KAAK,CAClB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,6BAA6B,GAAG,SAAS,GAClD,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;AACpB,iBAAe,KAAK,CAClB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AAClB,iBAAe,KAAK,CAClB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;AACpB,iBAAe,KAAK,CAClB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;AAQ7B;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,6BAA6B,GAAG,SAAS,GAClD,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAChC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,4BAA4B,GACpC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAC9B,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,6BAA6B,GACrC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAChC,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,WAAW,GACnB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAQ9D;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,6BAA6B,GAAG,SAAS,GAClD,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACrC,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,4BAA4B,GACpC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACnC,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,6BAA6B,GACrC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACrC,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,EAAE,WAAW,GACnB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AASxE,eAAO,MAAM,UAAU,uBAAiB,CAAA;AACxC,eAAO,MAAM,MAAM;;CAAsD,CAAA;AACzE,eAAO,MAAM,WAAW,wBAAkB,CAAA;AAC1C,eAAO,MAAM,OAAO;;CAElB,CAAA;AACF,eAAO,MAAM,IAAI;;;CAGf,CAAA;AAEF,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;CAgBf,CAAA"} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/index.js b/node_modules/glob/dist/esm/index.js new file mode 100644 index 00000000..e15c1f9c --- /dev/null +++ b/node_modules/glob/dist/esm/index.js @@ -0,0 +1,55 @@ +import { escape, unescape } from 'minimatch'; +import { Glob } from './glob.js'; +import { hasMagic } from './has-magic.js'; +export { escape, unescape } from 'minimatch'; +export { Glob } from './glob.js'; +export { hasMagic } from './has-magic.js'; +export { Ignore } from './ignore.js'; +export function globStreamSync(pattern, options = {}) { + return new Glob(pattern, options).streamSync(); +} +export function globStream(pattern, options = {}) { + return new Glob(pattern, options).stream(); +} +export function globSync(pattern, options = {}) { + return new Glob(pattern, options).walkSync(); +} +async function glob_(pattern, options = {}) { + return new Glob(pattern, options).walk(); +} +export function globIterateSync(pattern, options = {}) { + return new Glob(pattern, options).iterateSync(); +} +export function globIterate(pattern, options = {}) { + return new Glob(pattern, options).iterate(); +} +// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc +export const streamSync = globStreamSync; +export const stream = Object.assign(globStream, { sync: globStreamSync }); +export const iterateSync = globIterateSync; +export const iterate = Object.assign(globIterate, { + sync: globIterateSync, +}); +export const sync = Object.assign(globSync, { + stream: globStreamSync, + iterate: globIterateSync, +}); +export const glob = Object.assign(glob_, { + glob: glob_, + globSync, + sync, + globStream, + stream, + globStreamSync, + streamSync, + globIterate, + iterate, + globIterateSync, + iterateSync, + Glob, + hasMagic, + escape, + unescape, +}); +glob.glob = glob; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/index.js.map b/node_modules/glob/dist/esm/index.js.map new file mode 100644 index 00000000..a4f93dd0 --- /dev/null +++ b/node_modules/glob/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAS5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAQ5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAOhC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAyBpC,MAAM,UAAU,cAAc,CAC5B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,CAAA;AAChD,CAAC;AAsBD,MAAM,UAAU,UAAU,CACxB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;AAC5C,CAAC;AAqBD,MAAM,UAAU,QAAQ,CACtB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC9C,CAAC;AAwBD,KAAK,UAAU,KAAK,CAClB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAC1C,CAAC;AAqBD,MAAM,UAAU,eAAe,CAC7B,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACjD,CAAC;AAqBD,MAAM,UAAU,WAAW,CACzB,OAA0B,EAC1B,UAAuB,EAAE;IAEzB,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;AAC7C,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAA;AACxC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;AACzE,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAA;AAC1C,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;IAChD,IAAI,EAAE,eAAe;CACtB,CAAC,CAAA;AACF,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1C,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,eAAe;CACzB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,KAAK;IACX,QAAQ;IACR,IAAI;IACJ,UAAU;IACV,MAAM;IACN,cAAc;IACd,UAAU;IACV,WAAW;IACX,OAAO;IACP,eAAe;IACf,WAAW;IACX,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,QAAQ;CACT,CAAC,CAAA;AACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA","sourcesContent":["import { escape, unescape } from 'minimatch'\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nimport { Glob } from './glob.js'\nimport { hasMagic } from './has-magic.js'\n\nexport { escape, unescape } from 'minimatch'\nexport type {\n FSOption,\n Path,\n WalkOptions,\n WalkOptionsWithFileTypesTrue,\n WalkOptionsWithFileTypesUnset,\n} from 'path-scurry'\nexport { Glob } from './glob.js'\nexport type {\n GlobOptions,\n GlobOptionsWithFileTypesFalse,\n GlobOptionsWithFileTypesTrue,\n GlobOptionsWithFileTypesUnset,\n} from './glob.js'\nexport { hasMagic } from './has-magic.js'\nexport { Ignore } from './ignore.js'\nexport type { IgnoreLike } from './ignore.js'\nexport type { MatchStream } from './walker.js'\n\n/**\n * Syncronous form of {@link globStream}. Will read all the matches as fast as\n * you consume them, even all in a single tick if you consume them immediately,\n * but will still respond to backpressure if they're not consumed immediately.\n */\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesUnset,\n): Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass | Minipass\nexport function globStreamSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).streamSync()\n}\n\n/**\n * Return a stream that emits all the strings or `Path` objects and\n * then emits `end` when completed.\n */\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions,\n): Minipass | Minipass\nexport function globStream(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).stream()\n}\n\n/**\n * Synchronous form of {@link glob}\n */\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Path[]\nexport function globSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions,\n): Path[] | string[]\nexport function globSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walkSync()\n}\n\n/**\n * Perform an asynchronous glob search for the pattern(s) specified. Returns\n * [Path](https://isaacs.github.io/path-scurry/classes/PathBase) objects if the\n * {@link withFileTypes} option is set to `true`. See {@link GlobOptions} for\n * full option descriptions.\n */\nasync function glob_(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions,\n): Promise\nasync function glob_(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).walk()\n}\n\n/**\n * Return a sync iterator for walking glob pattern matches.\n */\nexport function globIterateSync(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions,\n): Generator | Generator\nexport function globIterateSync(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterateSync()\n}\n\n/**\n * Return an async iterator for walking glob pattern matches.\n */\nexport function globIterate(\n pattern: string | string[],\n options?: GlobOptionsWithFileTypesUnset | undefined,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesTrue,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptionsWithFileTypesFalse,\n): AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions,\n): AsyncGenerator | AsyncGenerator\nexport function globIterate(\n pattern: string | string[],\n options: GlobOptions = {},\n) {\n return new Glob(pattern, options).iterate()\n}\n\n// aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc\nexport const streamSync = globStreamSync\nexport const stream = Object.assign(globStream, { sync: globStreamSync })\nexport const iterateSync = globIterateSync\nexport const iterate = Object.assign(globIterate, {\n sync: globIterateSync,\n})\nexport const sync = Object.assign(globSync, {\n stream: globStreamSync,\n iterate: globIterateSync,\n})\n\nexport const glob = Object.assign(glob_, {\n glob: glob_,\n globSync,\n sync,\n globStream,\n stream,\n globStreamSync,\n streamSync,\n globIterate,\n iterate,\n globIterateSync,\n iterateSync,\n Glob,\n hasMagic,\n escape,\n unescape,\n})\nglob.glob = glob\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/package.json b/node_modules/glob/dist/esm/package.json new file mode 100644 index 00000000..3dbc1ca5 --- /dev/null +++ b/node_modules/glob/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/node_modules/glob/dist/esm/pattern.d.ts b/node_modules/glob/dist/esm/pattern.d.ts new file mode 100644 index 00000000..9636df3b --- /dev/null +++ b/node_modules/glob/dist/esm/pattern.d.ts @@ -0,0 +1,76 @@ +import { GLOBSTAR } from 'minimatch'; +export type MMPattern = string | RegExp | typeof GLOBSTAR; +export type PatternList = [p: MMPattern, ...rest: MMPattern[]]; +export type UNCPatternList = [ + p0: '', + p1: '', + p2: string, + p3: string, + ...rest: MMPattern[] +]; +export type DrivePatternList = [p0: string, ...rest: MMPattern[]]; +export type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]; +export type GlobList = [p: string, ...rest: string[]]; +/** + * An immutable-ish view on an array of glob parts and their parsed + * results + */ +export declare class Pattern { + #private; + readonly length: number; + constructor(patternList: MMPattern[], globList: string[], index: number, platform: NodeJS.Platform); + /** + * The first entry in the parsed list of patterns + */ + pattern(): MMPattern; + /** + * true of if pattern() returns a string + */ + isString(): boolean; + /** + * true of if pattern() returns GLOBSTAR + */ + isGlobstar(): boolean; + /** + * true if pattern() returns a regexp + */ + isRegExp(): boolean; + /** + * The /-joined set of glob parts that make up this pattern + */ + globString(): string; + /** + * true if there are more pattern parts after this one + */ + hasMore(): boolean; + /** + * The rest of the pattern after this part, or null if this is the end + */ + rest(): Pattern | null; + /** + * true if the pattern represents a //unc/path/ on windows + */ + isUNC(): boolean; + /** + * True if the pattern starts with a drive letter on Windows + */ + isDrive(): boolean; + /** + * True if the pattern is rooted on an absolute path + */ + isAbsolute(): boolean; + /** + * consume the root of the pattern, and return it + */ + root(): string; + /** + * Check to see if the current globstar pattern is allowed to follow + * a symbolic link. + */ + checkFollowGlobstar(): boolean; + /** + * Mark that the current globstar pattern is following a symbolic link + */ + markFollowGlobstar(): boolean; +} +//# sourceMappingURL=pattern.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/pattern.d.ts.map b/node_modules/glob/dist/esm/pattern.d.ts.map new file mode 100644 index 00000000..cdf32234 --- /dev/null +++ b/node_modules/glob/dist/esm/pattern.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,QAAQ,CAAA;AAGzD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,IAAI,EAAE,SAAS,EAAE;CACrB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AAMrD;;;GAGG;AACH,qBAAa,OAAO;;IAIlB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAUrB,WAAW,EAAE,SAAS,EAAE,EACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;IA6D3B;;OAEG;IACH,OAAO,IAAI,SAAS;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAGnB;;OAEG;IACH,UAAU,IAAI,OAAO;IAGrB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,OAAO,GAAG,IAAI;IAetB;;OAEG;IACH,KAAK,IAAI,OAAO;IAoBhB;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAUrB;;OAEG;IACH,IAAI,IAAI,MAAM;IASd;;;OAGG;IACH,mBAAmB,IAAI,OAAO;IAQ9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAM9B"} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/pattern.js b/node_modules/glob/dist/esm/pattern.js new file mode 100644 index 00000000..b41defa1 --- /dev/null +++ b/node_modules/glob/dist/esm/pattern.js @@ -0,0 +1,215 @@ +// this is just a very light wrapper around 2 arrays with an offset index +import { GLOBSTAR } from 'minimatch'; +const isPatternList = (pl) => pl.length >= 1; +const isGlobList = (gl) => gl.length >= 1; +/** + * An immutable-ish view on an array of glob parts and their parsed + * results + */ +export class Pattern { + #patternList; + #globList; + #index; + length; + #platform; + #rest; + #globString; + #isDrive; + #isUNC; + #isAbsolute; + #followGlobstar = true; + constructor(patternList, globList, index, platform) { + if (!isPatternList(patternList)) { + throw new TypeError('empty pattern list'); + } + if (!isGlobList(globList)) { + throw new TypeError('empty glob list'); + } + if (globList.length !== patternList.length) { + throw new TypeError('mismatched pattern list and glob list lengths'); + } + this.length = patternList.length; + if (index < 0 || index >= this.length) { + throw new TypeError('index out of range'); + } + this.#patternList = patternList; + this.#globList = globList; + this.#index = index; + this.#platform = platform; + // normalize root entries of absolute patterns on initial creation. + if (this.#index === 0) { + // c: => ['c:/'] + // C:/ => ['C:/'] + // C:/x => ['C:/', 'x'] + // //host/share => ['//host/share/'] + // //host/share/ => ['//host/share/'] + // //host/share/x => ['//host/share/', 'x'] + // /etc => ['/', 'etc'] + // / => ['/'] + if (this.isUNC()) { + // '' / '' / 'host' / 'share' + const [p0, p1, p2, p3, ...prest] = this.#patternList; + const [g0, g1, g2, g3, ...grest] = this.#globList; + if (prest[0] === '') { + // ends in / + prest.shift(); + grest.shift(); + } + const p = [p0, p1, p2, p3, ''].join('/'); + const g = [g0, g1, g2, g3, ''].join('/'); + this.#patternList = [p, ...prest]; + this.#globList = [g, ...grest]; + this.length = this.#patternList.length; + } + else if (this.isDrive() || this.isAbsolute()) { + const [p1, ...prest] = this.#patternList; + const [g1, ...grest] = this.#globList; + if (prest[0] === '') { + // ends in / + prest.shift(); + grest.shift(); + } + const p = p1 + '/'; + const g = g1 + '/'; + this.#patternList = [p, ...prest]; + this.#globList = [g, ...grest]; + this.length = this.#patternList.length; + } + } + } + /** + * The first entry in the parsed list of patterns + */ + pattern() { + return this.#patternList[this.#index]; + } + /** + * true of if pattern() returns a string + */ + isString() { + return typeof this.#patternList[this.#index] === 'string'; + } + /** + * true of if pattern() returns GLOBSTAR + */ + isGlobstar() { + return this.#patternList[this.#index] === GLOBSTAR; + } + /** + * true if pattern() returns a regexp + */ + isRegExp() { + return this.#patternList[this.#index] instanceof RegExp; + } + /** + * The /-joined set of glob parts that make up this pattern + */ + globString() { + return (this.#globString = + this.#globString || + (this.#index === 0 ? + this.isAbsolute() ? + this.#globList[0] + this.#globList.slice(1).join('/') + : this.#globList.join('/') + : this.#globList.slice(this.#index).join('/'))); + } + /** + * true if there are more pattern parts after this one + */ + hasMore() { + return this.length > this.#index + 1; + } + /** + * The rest of the pattern after this part, or null if this is the end + */ + rest() { + if (this.#rest !== undefined) + return this.#rest; + if (!this.hasMore()) + return (this.#rest = null); + this.#rest = new Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform); + this.#rest.#isAbsolute = this.#isAbsolute; + this.#rest.#isUNC = this.#isUNC; + this.#rest.#isDrive = this.#isDrive; + return this.#rest; + } + /** + * true if the pattern represents a //unc/path/ on windows + */ + isUNC() { + const pl = this.#patternList; + return this.#isUNC !== undefined ? + this.#isUNC + : (this.#isUNC = + this.#platform === 'win32' && + this.#index === 0 && + pl[0] === '' && + pl[1] === '' && + typeof pl[2] === 'string' && + !!pl[2] && + typeof pl[3] === 'string' && + !!pl[3]); + } + // pattern like C:/... + // split = ['C:', ...] + // XXX: would be nice to handle patterns like `c:*` to test the cwd + // in c: for *, but I don't know of a way to even figure out what that + // cwd is without actually chdir'ing into it? + /** + * True if the pattern starts with a drive letter on Windows + */ + isDrive() { + const pl = this.#patternList; + return this.#isDrive !== undefined ? + this.#isDrive + : (this.#isDrive = + this.#platform === 'win32' && + this.#index === 0 && + this.length > 1 && + typeof pl[0] === 'string' && + /^[a-z]:$/i.test(pl[0])); + } + // pattern = '/' or '/...' or '/x/...' + // split = ['', ''] or ['', ...] or ['', 'x', ...] + // Drive and UNC both considered absolute on windows + /** + * True if the pattern is rooted on an absolute path + */ + isAbsolute() { + const pl = this.#patternList; + return this.#isAbsolute !== undefined ? + this.#isAbsolute + : (this.#isAbsolute = + (pl[0] === '' && pl.length > 1) || + this.isDrive() || + this.isUNC()); + } + /** + * consume the root of the pattern, and return it + */ + root() { + const p = this.#patternList[0]; + return (typeof p === 'string' && this.isAbsolute() && this.#index === 0) ? + p + : ''; + } + /** + * Check to see if the current globstar pattern is allowed to follow + * a symbolic link. + */ + checkFollowGlobstar() { + return !(this.#index === 0 || + !this.isGlobstar() || + !this.#followGlobstar); + } + /** + * Mark that the current globstar pattern is following a symbolic link + */ + markFollowGlobstar() { + if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar) + return false; + this.#followGlobstar = false; + return true; + } +} +//# sourceMappingURL=pattern.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/pattern.js.map b/node_modules/glob/dist/esm/pattern.js.map new file mode 100644 index 00000000..566a306a --- /dev/null +++ b/node_modules/glob/dist/esm/pattern.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"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","sourcesContent":["// this is just a very light wrapper around 2 arrays with an offset index\n\nimport { GLOBSTAR } from 'minimatch'\nexport type MMPattern = string | RegExp | typeof GLOBSTAR\n\n// an array of length >= 1\nexport type PatternList = [p: MMPattern, ...rest: MMPattern[]]\nexport type UNCPatternList = [\n p0: '',\n p1: '',\n p2: string,\n p3: string,\n ...rest: MMPattern[],\n]\nexport type DrivePatternList = [p0: string, ...rest: MMPattern[]]\nexport type AbsolutePatternList = [p0: '', ...rest: MMPattern[]]\nexport type GlobList = [p: string, ...rest: string[]]\n\nconst isPatternList = (pl: MMPattern[]): pl is PatternList =>\n pl.length >= 1\nconst isGlobList = (gl: string[]): gl is GlobList => gl.length >= 1\n\n/**\n * An immutable-ish view on an array of glob parts and their parsed\n * results\n */\nexport class Pattern {\n readonly #patternList: PatternList\n readonly #globList: GlobList\n readonly #index: number\n readonly length: number\n readonly #platform: NodeJS.Platform\n #rest?: Pattern | null\n #globString?: string\n #isDrive?: boolean\n #isUNC?: boolean\n #isAbsolute?: boolean\n #followGlobstar: boolean = true\n\n constructor(\n patternList: MMPattern[],\n globList: string[],\n index: number,\n platform: NodeJS.Platform,\n ) {\n if (!isPatternList(patternList)) {\n throw new TypeError('empty pattern list')\n }\n if (!isGlobList(globList)) {\n throw new TypeError('empty glob list')\n }\n if (globList.length !== patternList.length) {\n throw new TypeError('mismatched pattern list and glob list lengths')\n }\n this.length = patternList.length\n if (index < 0 || index >= this.length) {\n throw new TypeError('index out of range')\n }\n this.#patternList = patternList\n this.#globList = globList\n this.#index = index\n this.#platform = platform\n\n // normalize root entries of absolute patterns on initial creation.\n if (this.#index === 0) {\n // c: => ['c:/']\n // C:/ => ['C:/']\n // C:/x => ['C:/', 'x']\n // //host/share => ['//host/share/']\n // //host/share/ => ['//host/share/']\n // //host/share/x => ['//host/share/', 'x']\n // /etc => ['/', 'etc']\n // / => ['/']\n if (this.isUNC()) {\n // '' / '' / 'host' / 'share'\n const [p0, p1, p2, p3, ...prest] = this.#patternList\n const [g0, g1, g2, g3, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = [p0, p1, p2, p3, ''].join('/')\n const g = [g0, g1, g2, g3, ''].join('/')\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n } else if (this.isDrive() || this.isAbsolute()) {\n const [p1, ...prest] = this.#patternList\n const [g1, ...grest] = this.#globList\n if (prest[0] === '') {\n // ends in /\n prest.shift()\n grest.shift()\n }\n const p = (p1 as string) + '/'\n const g = g1 + '/'\n this.#patternList = [p, ...prest]\n this.#globList = [g, ...grest]\n this.length = this.#patternList.length\n }\n }\n }\n\n /**\n * The first entry in the parsed list of patterns\n */\n pattern(): MMPattern {\n return this.#patternList[this.#index] as MMPattern\n }\n\n /**\n * true of if pattern() returns a string\n */\n isString(): boolean {\n return typeof this.#patternList[this.#index] === 'string'\n }\n /**\n * true of if pattern() returns GLOBSTAR\n */\n isGlobstar(): boolean {\n return this.#patternList[this.#index] === GLOBSTAR\n }\n /**\n * true if pattern() returns a regexp\n */\n isRegExp(): boolean {\n return this.#patternList[this.#index] instanceof RegExp\n }\n\n /**\n * The /-joined set of glob parts that make up this pattern\n */\n globString(): string {\n return (this.#globString =\n this.#globString ||\n (this.#index === 0 ?\n this.isAbsolute() ?\n this.#globList[0] + this.#globList.slice(1).join('/')\n : this.#globList.join('/')\n : this.#globList.slice(this.#index).join('/')))\n }\n\n /**\n * true if there are more pattern parts after this one\n */\n hasMore(): boolean {\n return this.length > this.#index + 1\n }\n\n /**\n * The rest of the pattern after this part, or null if this is the end\n */\n rest(): Pattern | null {\n if (this.#rest !== undefined) return this.#rest\n if (!this.hasMore()) return (this.#rest = null)\n this.#rest = new Pattern(\n this.#patternList,\n this.#globList,\n this.#index + 1,\n this.#platform,\n )\n this.#rest.#isAbsolute = this.#isAbsolute\n this.#rest.#isUNC = this.#isUNC\n this.#rest.#isDrive = this.#isDrive\n return this.#rest\n }\n\n /**\n * true if the pattern represents a //unc/path/ on windows\n */\n isUNC(): boolean {\n const pl = this.#patternList\n return this.#isUNC !== undefined ?\n this.#isUNC\n : (this.#isUNC =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n pl[0] === '' &&\n pl[1] === '' &&\n typeof pl[2] === 'string' &&\n !!pl[2] &&\n typeof pl[3] === 'string' &&\n !!pl[3])\n }\n\n // pattern like C:/...\n // split = ['C:', ...]\n // XXX: would be nice to handle patterns like `c:*` to test the cwd\n // in c: for *, but I don't know of a way to even figure out what that\n // cwd is without actually chdir'ing into it?\n /**\n * True if the pattern starts with a drive letter on Windows\n */\n isDrive(): boolean {\n const pl = this.#patternList\n return this.#isDrive !== undefined ?\n this.#isDrive\n : (this.#isDrive =\n this.#platform === 'win32' &&\n this.#index === 0 &&\n this.length > 1 &&\n typeof pl[0] === 'string' &&\n /^[a-z]:$/i.test(pl[0]))\n }\n\n // pattern = '/' or '/...' or '/x/...'\n // split = ['', ''] or ['', ...] or ['', 'x', ...]\n // Drive and UNC both considered absolute on windows\n /**\n * True if the pattern is rooted on an absolute path\n */\n isAbsolute(): boolean {\n const pl = this.#patternList\n return this.#isAbsolute !== undefined ?\n this.#isAbsolute\n : (this.#isAbsolute =\n (pl[0] === '' && pl.length > 1) ||\n this.isDrive() ||\n this.isUNC())\n }\n\n /**\n * consume the root of the pattern, and return it\n */\n root(): string {\n const p = this.#patternList[0]\n return (\n typeof p === 'string' && this.isAbsolute() && this.#index === 0\n ) ?\n p\n : ''\n }\n\n /**\n * Check to see if the current globstar pattern is allowed to follow\n * a symbolic link.\n */\n checkFollowGlobstar(): boolean {\n return !(\n this.#index === 0 ||\n !this.isGlobstar() ||\n !this.#followGlobstar\n )\n }\n\n /**\n * Mark that the current globstar pattern is following a symbolic link\n */\n markFollowGlobstar(): boolean {\n if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar)\n return false\n this.#followGlobstar = false\n return true\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/processor.d.ts b/node_modules/glob/dist/esm/processor.d.ts new file mode 100644 index 00000000..ccedfbf2 --- /dev/null +++ b/node_modules/glob/dist/esm/processor.d.ts @@ -0,0 +1,59 @@ +import { MMRegExp } from 'minimatch'; +import { Path } from 'path-scurry'; +import { Pattern } from './pattern.js'; +import { GlobWalkerOpts } from './walker.js'; +/** + * A cache of which patterns have been processed for a given Path + */ +export declare class HasWalkedCache { + store: Map>; + constructor(store?: Map>); + copy(): HasWalkedCache; + hasWalked(target: Path, pattern: Pattern): boolean | undefined; + storeWalked(target: Path, pattern: Pattern): void; +} +/** + * A record of which paths have been matched in a given walk step, + * and whether they only are considered a match if they are a directory, + * and whether their absolute or relative path should be returned. + */ +export declare class MatchRecord { + store: Map; + add(target: Path, absolute: boolean, ifDir: boolean): void; + entries(): [Path, boolean, boolean][]; +} +/** + * A collection of patterns that must be processed in a subsequent step + * for a given path. + */ +export declare class SubWalks { + store: Map; + add(target: Path, pattern: Pattern): void; + get(target: Path): Pattern[]; + entries(): [Path, Pattern[]][]; + keys(): Path[]; +} +/** + * The class that processes patterns for a given path. + * + * Handles child entry filtering, and determining whether a path's + * directory contents must be read. + */ +export declare class Processor { + hasWalkedCache: HasWalkedCache; + matches: MatchRecord; + subwalks: SubWalks; + patterns?: Pattern[]; + follow: boolean; + dot: boolean; + opts: GlobWalkerOpts; + constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache); + processPatterns(target: Path, patterns: Pattern[]): this; + subwalkTargets(): Path[]; + child(): Processor; + filterEntries(parent: Path, entries: Path[]): Processor; + testGlobstar(e: Path, pattern: Pattern, rest: Pattern | null, absolute: boolean): void; + testRegExp(e: Path, p: MMRegExp, rest: Pattern | null, absolute: boolean): void; + testString(e: Path, p: string, rest: Pattern | null, absolute: boolean): void; +} +//# sourceMappingURL=processor.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/processor.d.ts.map b/node_modules/glob/dist/esm/processor.d.ts.map new file mode 100644 index 00000000..aa266fee --- /dev/null +++ b/node_modules/glob/dist/esm/processor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAa,OAAO,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C;;GAEG;AACH,qBAAa,cAAc;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;gBACnB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAGvD,IAAI;IAGJ,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAGxC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;CAM3C;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY;IACpC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAMnD,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;CAOtC;AAED;;;GAGG;AACH,qBAAa,QAAQ;IACnB,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAY;IACvC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;IAWlC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,EAAE;IAS5B,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;IAG9B,IAAI,IAAI,IAAI,EAAE;CAGf;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,cAAoB;IAC3B,QAAQ,WAAiB;IACzB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;gBAER,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,cAAc;IAQjE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;IAmGjD,cAAc,IAAI,IAAI,EAAE;IAIxB,KAAK;IAQL,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS;IAqBvD,YAAY,CACV,CAAC,EAAE,IAAI,EACP,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IA8CnB,UAAU,CACR,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,QAAQ,EACX,IAAI,EAAE,OAAO,GAAG,IAAI,EACpB,QAAQ,EAAE,OAAO;IAUnB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO;CASvE"} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/processor.js b/node_modules/glob/dist/esm/processor.js new file mode 100644 index 00000000..f874892f --- /dev/null +++ b/node_modules/glob/dist/esm/processor.js @@ -0,0 +1,294 @@ +// synchronous utility for filtering entries and calculating subwalks +import { GLOBSTAR } from 'minimatch'; +/** + * A cache of which patterns have been processed for a given Path + */ +export class HasWalkedCache { + store; + constructor(store = new Map()) { + this.store = store; + } + copy() { + return new HasWalkedCache(new Map(this.store)); + } + hasWalked(target, pattern) { + return this.store.get(target.fullpath())?.has(pattern.globString()); + } + storeWalked(target, pattern) { + const fullpath = target.fullpath(); + const cached = this.store.get(fullpath); + if (cached) + cached.add(pattern.globString()); + else + this.store.set(fullpath, new Set([pattern.globString()])); + } +} +/** + * A record of which paths have been matched in a given walk step, + * and whether they only are considered a match if they are a directory, + * and whether their absolute or relative path should be returned. + */ +export class MatchRecord { + store = new Map(); + add(target, absolute, ifDir) { + const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0); + const current = this.store.get(target); + this.store.set(target, current === undefined ? n : n & current); + } + // match, absolute, ifdir + entries() { + return [...this.store.entries()].map(([path, n]) => [ + path, + !!(n & 2), + !!(n & 1), + ]); + } +} +/** + * A collection of patterns that must be processed in a subsequent step + * for a given path. + */ +export class SubWalks { + store = new Map(); + add(target, pattern) { + if (!target.canReaddir()) { + return; + } + const subs = this.store.get(target); + if (subs) { + if (!subs.find(p => p.globString() === pattern.globString())) { + subs.push(pattern); + } + } + else + this.store.set(target, [pattern]); + } + get(target) { + const subs = this.store.get(target); + /* c8 ignore start */ + if (!subs) { + throw new Error('attempting to walk unknown path'); + } + /* c8 ignore stop */ + return subs; + } + entries() { + return this.keys().map(k => [k, this.store.get(k)]); + } + keys() { + return [...this.store.keys()].filter(t => t.canReaddir()); + } +} +/** + * The class that processes patterns for a given path. + * + * Handles child entry filtering, and determining whether a path's + * directory contents must be read. + */ +export class Processor { + hasWalkedCache; + matches = new MatchRecord(); + subwalks = new SubWalks(); + patterns; + follow; + dot; + opts; + constructor(opts, hasWalkedCache) { + this.opts = opts; + this.follow = !!opts.follow; + this.dot = !!opts.dot; + this.hasWalkedCache = + hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache(); + } + processPatterns(target, patterns) { + this.patterns = patterns; + const processingSet = patterns.map(p => [target, p]); + // map of paths to the magic-starting subwalks they need to walk + // first item in patterns is the filter + for (let [t, pattern] of processingSet) { + this.hasWalkedCache.storeWalked(t, pattern); + const root = pattern.root(); + const absolute = pattern.isAbsolute() && this.opts.absolute !== false; + // start absolute patterns at root + if (root) { + t = t.resolve(root === '/' && this.opts.root !== undefined ? + this.opts.root + : root); + const rest = pattern.rest(); + if (!rest) { + this.matches.add(t, true, false); + continue; + } + else { + pattern = rest; + } + } + if (t.isENOENT()) + continue; + let p; + let rest; + let changed = false; + while (typeof (p = pattern.pattern()) === 'string' && + (rest = pattern.rest())) { + const c = t.resolve(p); + t = c; + pattern = rest; + changed = true; + } + p = pattern.pattern(); + rest = pattern.rest(); + if (changed) { + if (this.hasWalkedCache.hasWalked(t, pattern)) + continue; + this.hasWalkedCache.storeWalked(t, pattern); + } + // now we have either a final string for a known entry, + // more strings for an unknown entry, + // or a pattern starting with magic, mounted on t. + if (typeof p === 'string') { + // must not be final entry, otherwise we would have + // concatenated it earlier. + const ifDir = p === '..' || p === '' || p === '.'; + this.matches.add(t.resolve(p), absolute, ifDir); + continue; + } + else if (p === GLOBSTAR) { + // if no rest, match and subwalk pattern + // if rest, process rest and subwalk pattern + // if it's a symlink, but we didn't get here by way of a + // globstar match (meaning it's the first time THIS globstar + // has traversed a symlink), then we follow it. Otherwise, stop. + if (!t.isSymbolicLink() || + this.follow || + pattern.checkFollowGlobstar()) { + this.subwalks.add(t, pattern); + } + const rp = rest?.pattern(); + const rrest = rest?.rest(); + if (!rest || ((rp === '' || rp === '.') && !rrest)) { + // only HAS to be a dir if it ends in **/ or **/. + // but ending in ** will match files as well. + this.matches.add(t, absolute, rp === '' || rp === '.'); + } + else { + if (rp === '..') { + // this would mean you're matching **/.. at the fs root, + // and no thanks, I'm not gonna test that specific case. + /* c8 ignore start */ + const tp = t.parent || t; + /* c8 ignore stop */ + if (!rrest) + this.matches.add(tp, absolute, true); + else if (!this.hasWalkedCache.hasWalked(tp, rrest)) { + this.subwalks.add(tp, rrest); + } + } + } + } + else if (p instanceof RegExp) { + this.subwalks.add(t, pattern); + } + } + return this; + } + subwalkTargets() { + return this.subwalks.keys(); + } + child() { + return new Processor(this.opts, this.hasWalkedCache); + } + // return a new Processor containing the subwalks for each + // child entry, and a set of matches, and + // a hasWalkedCache that's a copy of this one + // then we're going to call + filterEntries(parent, entries) { + const patterns = this.subwalks.get(parent); + // put matches and entry walks into the results processor + const results = this.child(); + for (const e of entries) { + for (const pattern of patterns) { + const absolute = pattern.isAbsolute(); + const p = pattern.pattern(); + const rest = pattern.rest(); + if (p === GLOBSTAR) { + results.testGlobstar(e, pattern, rest, absolute); + } + else if (p instanceof RegExp) { + results.testRegExp(e, p, rest, absolute); + } + else { + results.testString(e, p, rest, absolute); + } + } + } + return results; + } + testGlobstar(e, pattern, rest, absolute) { + if (this.dot || !e.name.startsWith('.')) { + if (!pattern.hasMore()) { + this.matches.add(e, absolute, false); + } + if (e.canReaddir()) { + // if we're in follow mode or it's not a symlink, just keep + // testing the same pattern. If there's more after the globstar, + // then this symlink consumes the globstar. If not, then we can + // follow at most ONE symlink along the way, so we mark it, which + // also checks to ensure that it wasn't already marked. + if (this.follow || !e.isSymbolicLink()) { + this.subwalks.add(e, pattern); + } + else if (e.isSymbolicLink()) { + if (rest && pattern.checkFollowGlobstar()) { + this.subwalks.add(e, rest); + } + else if (pattern.markFollowGlobstar()) { + this.subwalks.add(e, pattern); + } + } + } + } + // if the NEXT thing matches this entry, then also add + // the rest. + if (rest) { + const rp = rest.pattern(); + if (typeof rp === 'string' && + // dots and empty were handled already + rp !== '..' && + rp !== '' && + rp !== '.') { + this.testString(e, rp, rest.rest(), absolute); + } + else if (rp === '..') { + /* c8 ignore start */ + const ep = e.parent || e; + /* c8 ignore stop */ + this.subwalks.add(ep, rest); + } + else if (rp instanceof RegExp) { + this.testRegExp(e, rp, rest.rest(), absolute); + } + } + } + testRegExp(e, p, rest, absolute) { + if (!p.test(e.name)) + return; + if (!rest) { + this.matches.add(e, absolute, false); + } + else { + this.subwalks.add(e, rest); + } + } + testString(e, p, rest, absolute) { + // should never happen? + if (!e.isNamed(p)) + return; + if (!rest) { + this.matches.add(e, absolute, false); + } + else { + this.subwalks.add(e, rest); + } + } +} +//# sourceMappingURL=processor.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/processor.js.map b/node_modules/glob/dist/esm/processor.js.map new file mode 100644 index 00000000..05a83242 --- /dev/null +++ b/node_modules/glob/dist/esm/processor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/processor.ts"],"names":[],"mappings":"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","sourcesContent":["// synchronous utility for filtering entries and calculating subwalks\n\nimport { GLOBSTAR, MMRegExp } from 'minimatch'\nimport { Path } from 'path-scurry'\nimport { MMPattern, Pattern } from './pattern.js'\nimport { GlobWalkerOpts } from './walker.js'\n\n/**\n * A cache of which patterns have been processed for a given Path\n */\nexport class HasWalkedCache {\n store: Map>\n constructor(store: Map> = new Map()) {\n this.store = store\n }\n copy() {\n return new HasWalkedCache(new Map(this.store))\n }\n hasWalked(target: Path, pattern: Pattern) {\n return this.store.get(target.fullpath())?.has(pattern.globString())\n }\n storeWalked(target: Path, pattern: Pattern) {\n const fullpath = target.fullpath()\n const cached = this.store.get(fullpath)\n if (cached) cached.add(pattern.globString())\n else this.store.set(fullpath, new Set([pattern.globString()]))\n }\n}\n\n/**\n * A record of which paths have been matched in a given walk step,\n * and whether they only are considered a match if they are a directory,\n * and whether their absolute or relative path should be returned.\n */\nexport class MatchRecord {\n store: Map = new Map()\n add(target: Path, absolute: boolean, ifDir: boolean) {\n const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0)\n const current = this.store.get(target)\n this.store.set(target, current === undefined ? n : n & current)\n }\n // match, absolute, ifdir\n entries(): [Path, boolean, boolean][] {\n return [...this.store.entries()].map(([path, n]) => [\n path,\n !!(n & 2),\n !!(n & 1),\n ])\n }\n}\n\n/**\n * A collection of patterns that must be processed in a subsequent step\n * for a given path.\n */\nexport class SubWalks {\n store: Map = new Map()\n add(target: Path, pattern: Pattern) {\n if (!target.canReaddir()) {\n return\n }\n const subs = this.store.get(target)\n if (subs) {\n if (!subs.find(p => p.globString() === pattern.globString())) {\n subs.push(pattern)\n }\n } else this.store.set(target, [pattern])\n }\n get(target: Path): Pattern[] {\n const subs = this.store.get(target)\n /* c8 ignore start */\n if (!subs) {\n throw new Error('attempting to walk unknown path')\n }\n /* c8 ignore stop */\n return subs\n }\n entries(): [Path, Pattern[]][] {\n return this.keys().map(k => [k, this.store.get(k) as Pattern[]])\n }\n keys(): Path[] {\n return [...this.store.keys()].filter(t => t.canReaddir())\n }\n}\n\n/**\n * The class that processes patterns for a given path.\n *\n * Handles child entry filtering, and determining whether a path's\n * directory contents must be read.\n */\nexport class Processor {\n hasWalkedCache: HasWalkedCache\n matches = new MatchRecord()\n subwalks = new SubWalks()\n patterns?: Pattern[]\n follow: boolean\n dot: boolean\n opts: GlobWalkerOpts\n\n constructor(opts: GlobWalkerOpts, hasWalkedCache?: HasWalkedCache) {\n this.opts = opts\n this.follow = !!opts.follow\n this.dot = !!opts.dot\n this.hasWalkedCache =\n hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache()\n }\n\n processPatterns(target: Path, patterns: Pattern[]) {\n this.patterns = patterns\n const processingSet: [Path, Pattern][] = patterns.map(p => [target, p])\n\n // map of paths to the magic-starting subwalks they need to walk\n // first item in patterns is the filter\n\n for (let [t, pattern] of processingSet) {\n this.hasWalkedCache.storeWalked(t, pattern)\n\n const root = pattern.root()\n const absolute = pattern.isAbsolute() && this.opts.absolute !== false\n\n // start absolute patterns at root\n if (root) {\n t = t.resolve(\n root === '/' && this.opts.root !== undefined ?\n this.opts.root\n : root,\n )\n const rest = pattern.rest()\n if (!rest) {\n this.matches.add(t, true, false)\n continue\n } else {\n pattern = rest\n }\n }\n\n if (t.isENOENT()) continue\n\n let p: MMPattern\n let rest: Pattern | null\n let changed = false\n while (\n typeof (p = pattern.pattern()) === 'string' &&\n (rest = pattern.rest())\n ) {\n const c = t.resolve(p)\n t = c\n pattern = rest\n changed = true\n }\n p = pattern.pattern()\n rest = pattern.rest()\n if (changed) {\n if (this.hasWalkedCache.hasWalked(t, pattern)) continue\n this.hasWalkedCache.storeWalked(t, pattern)\n }\n\n // now we have either a final string for a known entry,\n // more strings for an unknown entry,\n // or a pattern starting with magic, mounted on t.\n if (typeof p === 'string') {\n // must not be final entry, otherwise we would have\n // concatenated it earlier.\n const ifDir = p === '..' || p === '' || p === '.'\n this.matches.add(t.resolve(p), absolute, ifDir)\n continue\n } else if (p === GLOBSTAR) {\n // if no rest, match and subwalk pattern\n // if rest, process rest and subwalk pattern\n // if it's a symlink, but we didn't get here by way of a\n // globstar match (meaning it's the first time THIS globstar\n // has traversed a symlink), then we follow it. Otherwise, stop.\n if (\n !t.isSymbolicLink() ||\n this.follow ||\n pattern.checkFollowGlobstar()\n ) {\n this.subwalks.add(t, pattern)\n }\n const rp = rest?.pattern()\n const rrest = rest?.rest()\n if (!rest || ((rp === '' || rp === '.') && !rrest)) {\n // only HAS to be a dir if it ends in **/ or **/.\n // but ending in ** will match files as well.\n this.matches.add(t, absolute, rp === '' || rp === '.')\n } else {\n if (rp === '..') {\n // this would mean you're matching **/.. at the fs root,\n // and no thanks, I'm not gonna test that specific case.\n /* c8 ignore start */\n const tp = t.parent || t\n /* c8 ignore stop */\n if (!rrest) this.matches.add(tp, absolute, true)\n else if (!this.hasWalkedCache.hasWalked(tp, rrest)) {\n this.subwalks.add(tp, rrest)\n }\n }\n }\n } else if (p instanceof RegExp) {\n this.subwalks.add(t, pattern)\n }\n }\n\n return this\n }\n\n subwalkTargets(): Path[] {\n return this.subwalks.keys()\n }\n\n child() {\n return new Processor(this.opts, this.hasWalkedCache)\n }\n\n // return a new Processor containing the subwalks for each\n // child entry, and a set of matches, and\n // a hasWalkedCache that's a copy of this one\n // then we're going to call\n filterEntries(parent: Path, entries: Path[]): Processor {\n const patterns = this.subwalks.get(parent)\n // put matches and entry walks into the results processor\n const results = this.child()\n for (const e of entries) {\n for (const pattern of patterns) {\n const absolute = pattern.isAbsolute()\n const p = pattern.pattern()\n const rest = pattern.rest()\n if (p === GLOBSTAR) {\n results.testGlobstar(e, pattern, rest, absolute)\n } else if (p instanceof RegExp) {\n results.testRegExp(e, p, rest, absolute)\n } else {\n results.testString(e, p, rest, absolute)\n }\n }\n }\n return results\n }\n\n testGlobstar(\n e: Path,\n pattern: Pattern,\n rest: Pattern | null,\n absolute: boolean,\n ) {\n if (this.dot || !e.name.startsWith('.')) {\n if (!pattern.hasMore()) {\n this.matches.add(e, absolute, false)\n }\n if (e.canReaddir()) {\n // if we're in follow mode or it's not a symlink, just keep\n // testing the same pattern. If there's more after the globstar,\n // then this symlink consumes the globstar. If not, then we can\n // follow at most ONE symlink along the way, so we mark it, which\n // also checks to ensure that it wasn't already marked.\n if (this.follow || !e.isSymbolicLink()) {\n this.subwalks.add(e, pattern)\n } else if (e.isSymbolicLink()) {\n if (rest && pattern.checkFollowGlobstar()) {\n this.subwalks.add(e, rest)\n } else if (pattern.markFollowGlobstar()) {\n this.subwalks.add(e, pattern)\n }\n }\n }\n }\n // if the NEXT thing matches this entry, then also add\n // the rest.\n if (rest) {\n const rp = rest.pattern()\n if (\n typeof rp === 'string' &&\n // dots and empty were handled already\n rp !== '..' &&\n rp !== '' &&\n rp !== '.'\n ) {\n this.testString(e, rp, rest.rest(), absolute)\n } else if (rp === '..') {\n /* c8 ignore start */\n const ep = e.parent || e\n /* c8 ignore stop */\n this.subwalks.add(ep, rest)\n } else if (rp instanceof RegExp) {\n this.testRegExp(e, rp, rest.rest(), absolute)\n }\n }\n }\n\n testRegExp(\n e: Path,\n p: MMRegExp,\n rest: Pattern | null,\n absolute: boolean,\n ) {\n if (!p.test(e.name)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n\n testString(e: Path, p: string, rest: Pattern | null, absolute: boolean) {\n // should never happen?\n if (!e.isNamed(p)) return\n if (!rest) {\n this.matches.add(e, absolute, false)\n } else {\n this.subwalks.add(e, rest)\n }\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/walker.d.ts b/node_modules/glob/dist/esm/walker.d.ts new file mode 100644 index 00000000..499c8f49 --- /dev/null +++ b/node_modules/glob/dist/esm/walker.d.ts @@ -0,0 +1,97 @@ +/** + * Single-use utility classes to provide functionality to the {@link Glob} + * methods. + * + * @module + */ +import { Minipass } from 'minipass'; +import { Path } from 'path-scurry'; +import { IgnoreLike } from './ignore.js'; +import { Pattern } from './pattern.js'; +import { Processor } from './processor.js'; +export interface GlobWalkerOpts { + absolute?: boolean; + allowWindowsEscape?: boolean; + cwd?: string | URL; + dot?: boolean; + dotRelative?: boolean; + follow?: boolean; + ignore?: string | string[] | IgnoreLike; + mark?: boolean; + matchBase?: boolean; + maxDepth?: number; + nobrace?: boolean; + nocase?: boolean; + nodir?: boolean; + noext?: boolean; + noglobstar?: boolean; + platform?: NodeJS.Platform; + posix?: boolean; + realpath?: boolean; + root?: string; + stat?: boolean; + signal?: AbortSignal; + windowsPathsNoEscape?: boolean; + withFileTypes?: boolean; + includeChildMatches?: boolean; +} +export type GWOFileTypesTrue = GlobWalkerOpts & { + withFileTypes: true; +}; +export type GWOFileTypesFalse = GlobWalkerOpts & { + withFileTypes: false; +}; +export type GWOFileTypesUnset = GlobWalkerOpts & { + withFileTypes?: undefined; +}; +export type Result = O extends GWOFileTypesTrue ? Path : O extends GWOFileTypesFalse ? string : O extends GWOFileTypesUnset ? string : Path | string; +export type Matches = O extends GWOFileTypesTrue ? Set : O extends GWOFileTypesFalse ? Set : O extends GWOFileTypesUnset ? Set : Set; +export type MatchStream = Minipass, Result>; +/** + * basic walking utilities that all the glob walker types use + */ +export declare abstract class GlobUtil { + #private; + path: Path; + patterns: Pattern[]; + opts: O; + seen: Set; + paused: boolean; + aborted: boolean; + signal?: AbortSignal; + maxDepth: number; + includeChildMatches: boolean; + constructor(patterns: Pattern[], path: Path, opts: O); + pause(): void; + resume(): void; + onResume(fn: () => any): void; + matchCheck(e: Path, ifDir: boolean): Promise; + matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined; + matchCheckSync(e: Path, ifDir: boolean): Path | undefined; + abstract matchEmit(p: Result): void; + abstract matchEmit(p: string | Path): void; + matchFinish(e: Path, absolute: boolean): void; + match(e: Path, absolute: boolean, ifDir: boolean): Promise; + matchSync(e: Path, absolute: boolean, ifDir: boolean): void; + walkCB(target: Path, patterns: Pattern[], cb: () => any): void; + walkCB2(target: Path, patterns: Pattern[], processor: Processor, cb: () => any): any; + walkCB3(target: Path, entries: Path[], processor: Processor, cb: () => any): void; + walkCBSync(target: Path, patterns: Pattern[], cb: () => any): void; + walkCB2Sync(target: Path, patterns: Pattern[], processor: Processor, cb: () => any): any; + walkCB3Sync(target: Path, entries: Path[], processor: Processor, cb: () => any): void; +} +export declare class GlobWalker extends GlobUtil { + matches: Set>; + constructor(patterns: Pattern[], path: Path, opts: O); + matchEmit(e: Result): void; + walk(): Promise>>; + walkSync(): Set>; +} +export declare class GlobStream extends GlobUtil { + results: Minipass, Result>; + constructor(patterns: Pattern[], path: Path, opts: O); + matchEmit(e: Result): void; + stream(): MatchStream; + streamSync(): MatchStream; +} +//# sourceMappingURL=walker.d.ts.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/walker.d.ts.map b/node_modules/glob/dist/esm/walker.d.ts.map new file mode 100644 index 00000000..769957bd --- /dev/null +++ b/node_modules/glob/dist/esm/walker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAU,UAAU,EAAE,MAAM,aAAa,CAAA;AAOhD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IACvC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,aAAa,EAAE,IAAI,CAAA;CACpB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,EAAE,KAAK,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,cAAc,IACzC,CAAC,SAAS,gBAAgB,GAAG,IAAI,GAC/B,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,IAAI,GAAG,MAAM,CAAA;AAEjB,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,cAAc,IAC1C,CAAC,SAAS,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,GACpC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,CAAC,SAAS,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,GACzC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;AAEtB,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,cAAc,IAAI,QAAQ,CAC1D,MAAM,CAAC,CAAC,CAAC,EACT,MAAM,CAAC,CAAC,CAAC,CACV,CAAA;AAUD;;GAEG;AACH,8BAAsB,QAAQ,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc;;IACtE,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAkB;IACjC,MAAM,EAAE,OAAO,CAAQ;IACvB,OAAO,EAAE,OAAO,CAAQ;IAIxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;gBAEhB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAsCpD,KAAK;IAGL,MAAM;IAUN,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG;IAahB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAqBpE,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAgBrE,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IAmBzD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IACtC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAE1C,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IA2BhC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK3D,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAOvD,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IA2Cf,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAsBf,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG;IAO3D,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;IAqCf,WAAW,CACT,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,IAAI,EAAE,EACf,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,MAAM,GAAG;CAoBhB;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,iBAAuB;gBAElB,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAIpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAiBrC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CAW3B;AAED,qBAAa,UAAU,CACrB,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,QAAQ,CAAC,CAAC,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE3B,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAUpD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7B,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAYxB,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC;CAO7B"} \ No newline at end of file diff --git a/node_modules/glob/dist/esm/walker.js b/node_modules/glob/dist/esm/walker.js new file mode 100644 index 00000000..3d68196c --- /dev/null +++ b/node_modules/glob/dist/esm/walker.js @@ -0,0 +1,381 @@ +/** + * Single-use utility classes to provide functionality to the {@link Glob} + * methods. + * + * @module + */ +import { Minipass } from 'minipass'; +import { Ignore } from './ignore.js'; +import { Processor } from './processor.js'; +const makeIgnore = (ignore, opts) => typeof ignore === 'string' ? new Ignore([ignore], opts) + : Array.isArray(ignore) ? new Ignore(ignore, opts) + : ignore; +/** + * basic walking utilities that all the glob walker types use + */ +export class GlobUtil { + path; + patterns; + opts; + seen = new Set(); + paused = false; + aborted = false; + #onResume = []; + #ignore; + #sep; + signal; + maxDepth; + includeChildMatches; + constructor(patterns, path, opts) { + this.patterns = patterns; + this.path = path; + this.opts = opts; + this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/'; + this.includeChildMatches = opts.includeChildMatches !== false; + if (opts.ignore || !this.includeChildMatches) { + this.#ignore = makeIgnore(opts.ignore ?? [], opts); + if (!this.includeChildMatches && + typeof this.#ignore.add !== 'function') { + const m = 'cannot ignore child matches, ignore lacks add() method.'; + throw new Error(m); + } + } + // ignore, always set with maxDepth, but it's optional on the + // GlobOptions type + /* c8 ignore start */ + this.maxDepth = opts.maxDepth || Infinity; + /* c8 ignore stop */ + if (opts.signal) { + this.signal = opts.signal; + this.signal.addEventListener('abort', () => { + this.#onResume.length = 0; + }); + } + } + #ignored(path) { + return this.seen.has(path) || !!this.#ignore?.ignored?.(path); + } + #childrenIgnored(path) { + return !!this.#ignore?.childrenIgnored?.(path); + } + // backpressure mechanism + pause() { + this.paused = true; + } + resume() { + /* c8 ignore start */ + if (this.signal?.aborted) + return; + /* c8 ignore stop */ + this.paused = false; + let fn = undefined; + while (!this.paused && (fn = this.#onResume.shift())) { + fn(); + } + } + onResume(fn) { + if (this.signal?.aborted) + return; + /* c8 ignore start */ + if (!this.paused) { + fn(); + } + else { + /* c8 ignore stop */ + this.#onResume.push(fn); + } + } + // do the requisite realpath/stat checking, and return the path + // to add or undefined to filter it out. + async matchCheck(e, ifDir) { + if (ifDir && this.opts.nodir) + return undefined; + let rpc; + if (this.opts.realpath) { + rpc = e.realpathCached() || (await e.realpath()); + if (!rpc) + return undefined; + e = rpc; + } + const needStat = e.isUnknown() || this.opts.stat; + const s = needStat ? await e.lstat() : e; + if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) { + const target = await s.realpath(); + /* c8 ignore start */ + if (target && (target.isUnknown() || this.opts.stat)) { + await target.lstat(); + } + /* c8 ignore stop */ + } + return this.matchCheckTest(s, ifDir); + } + matchCheckTest(e, ifDir) { + return (e && + (this.maxDepth === Infinity || e.depth() <= this.maxDepth) && + (!ifDir || e.canReaddir()) && + (!this.opts.nodir || !e.isDirectory()) && + (!this.opts.nodir || + !this.opts.follow || + !e.isSymbolicLink() || + !e.realpathCached()?.isDirectory()) && + !this.#ignored(e)) ? + e + : undefined; + } + matchCheckSync(e, ifDir) { + if (ifDir && this.opts.nodir) + return undefined; + let rpc; + if (this.opts.realpath) { + rpc = e.realpathCached() || e.realpathSync(); + if (!rpc) + return undefined; + e = rpc; + } + const needStat = e.isUnknown() || this.opts.stat; + const s = needStat ? e.lstatSync() : e; + if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) { + const target = s.realpathSync(); + if (target && (target?.isUnknown() || this.opts.stat)) { + target.lstatSync(); + } + } + return this.matchCheckTest(s, ifDir); + } + matchFinish(e, absolute) { + if (this.#ignored(e)) + return; + // we know we have an ignore if this is false, but TS doesn't + if (!this.includeChildMatches && this.#ignore?.add) { + const ign = `${e.relativePosix()}/**`; + this.#ignore.add(ign); + } + const abs = this.opts.absolute === undefined ? absolute : this.opts.absolute; + this.seen.add(e); + const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''; + // ok, we have what we need! + if (this.opts.withFileTypes) { + this.matchEmit(e); + } + else if (abs) { + const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath(); + this.matchEmit(abs + mark); + } + else { + const rel = this.opts.posix ? e.relativePosix() : e.relative(); + const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ? + '.' + this.#sep + : ''; + this.matchEmit(!rel ? '.' + mark : pre + rel + mark); + } + } + async match(e, absolute, ifDir) { + const p = await this.matchCheck(e, ifDir); + if (p) + this.matchFinish(p, absolute); + } + matchSync(e, absolute, ifDir) { + const p = this.matchCheckSync(e, ifDir); + if (p) + this.matchFinish(p, absolute); + } + walkCB(target, patterns, cb) { + /* c8 ignore start */ + if (this.signal?.aborted) + cb(); + /* c8 ignore stop */ + this.walkCB2(target, patterns, new Processor(this.opts), cb); + } + walkCB2(target, patterns, processor, cb) { + if (this.#childrenIgnored(target)) + return cb(); + if (this.signal?.aborted) + cb(); + if (this.paused) { + this.onResume(() => this.walkCB2(target, patterns, processor, cb)); + return; + } + processor.processPatterns(target, patterns); + // done processing. all of the above is sync, can be abstracted out. + // subwalks is a map of paths to the entry filters they need + // matches is a map of paths to [absolute, ifDir] tuples. + let tasks = 1; + const next = () => { + if (--tasks === 0) + cb(); + }; + for (const [m, absolute, ifDir] of processor.matches.entries()) { + if (this.#ignored(m)) + continue; + tasks++; + this.match(m, absolute, ifDir).then(() => next()); + } + for (const t of processor.subwalkTargets()) { + if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) { + continue; + } + tasks++; + const childrenCached = t.readdirCached(); + if (t.calledReaddir()) + this.walkCB3(t, childrenCached, processor, next); + else { + t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true); + } + } + next(); + } + walkCB3(target, entries, processor, cb) { + processor = processor.filterEntries(target, entries); + let tasks = 1; + const next = () => { + if (--tasks === 0) + cb(); + }; + for (const [m, absolute, ifDir] of processor.matches.entries()) { + if (this.#ignored(m)) + continue; + tasks++; + this.match(m, absolute, ifDir).then(() => next()); + } + for (const [target, patterns] of processor.subwalks.entries()) { + tasks++; + this.walkCB2(target, patterns, processor.child(), next); + } + next(); + } + walkCBSync(target, patterns, cb) { + /* c8 ignore start */ + if (this.signal?.aborted) + cb(); + /* c8 ignore stop */ + this.walkCB2Sync(target, patterns, new Processor(this.opts), cb); + } + walkCB2Sync(target, patterns, processor, cb) { + if (this.#childrenIgnored(target)) + return cb(); + if (this.signal?.aborted) + cb(); + if (this.paused) { + this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb)); + return; + } + processor.processPatterns(target, patterns); + // done processing. all of the above is sync, can be abstracted out. + // subwalks is a map of paths to the entry filters they need + // matches is a map of paths to [absolute, ifDir] tuples. + let tasks = 1; + const next = () => { + if (--tasks === 0) + cb(); + }; + for (const [m, absolute, ifDir] of processor.matches.entries()) { + if (this.#ignored(m)) + continue; + this.matchSync(m, absolute, ifDir); + } + for (const t of processor.subwalkTargets()) { + if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) { + continue; + } + tasks++; + const children = t.readdirSync(); + this.walkCB3Sync(t, children, processor, next); + } + next(); + } + walkCB3Sync(target, entries, processor, cb) { + processor = processor.filterEntries(target, entries); + let tasks = 1; + const next = () => { + if (--tasks === 0) + cb(); + }; + for (const [m, absolute, ifDir] of processor.matches.entries()) { + if (this.#ignored(m)) + continue; + this.matchSync(m, absolute, ifDir); + } + for (const [target, patterns] of processor.subwalks.entries()) { + tasks++; + this.walkCB2Sync(target, patterns, processor.child(), next); + } + next(); + } +} +export class GlobWalker extends GlobUtil { + matches = new Set(); + constructor(patterns, path, opts) { + super(patterns, path, opts); + } + matchEmit(e) { + this.matches.add(e); + } + async walk() { + if (this.signal?.aborted) + throw this.signal.reason; + if (this.path.isUnknown()) { + await this.path.lstat(); + } + await new Promise((res, rej) => { + this.walkCB(this.path, this.patterns, () => { + if (this.signal?.aborted) { + rej(this.signal.reason); + } + else { + res(this.matches); + } + }); + }); + return this.matches; + } + walkSync() { + if (this.signal?.aborted) + throw this.signal.reason; + if (this.path.isUnknown()) { + this.path.lstatSync(); + } + // nothing for the callback to do, because this never pauses + this.walkCBSync(this.path, this.patterns, () => { + if (this.signal?.aborted) + throw this.signal.reason; + }); + return this.matches; + } +} +export class GlobStream extends GlobUtil { + results; + constructor(patterns, path, opts) { + super(patterns, path, opts); + this.results = new Minipass({ + signal: this.signal, + objectMode: true, + }); + this.results.on('drain', () => this.resume()); + this.results.on('resume', () => this.resume()); + } + matchEmit(e) { + this.results.write(e); + if (!this.results.flowing) + this.pause(); + } + stream() { + const target = this.path; + if (target.isUnknown()) { + target.lstat().then(() => { + this.walkCB(target, this.patterns, () => this.results.end()); + }); + } + else { + this.walkCB(target, this.patterns, () => this.results.end()); + } + return this.results; + } + streamSync() { + if (this.path.isUnknown()) { + this.path.lstatSync(); + } + this.walkCBSync(this.path, this.patterns, () => this.results.end()); + return this.results; + } +} +//# sourceMappingURL=walker.js.map \ No newline at end of file diff --git a/node_modules/glob/dist/esm/walker.js.map b/node_modules/glob/dist/esm/walker.js.map new file mode 100644 index 00000000..daeeda67 --- /dev/null +++ b/node_modules/glob/dist/esm/walker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"walker.js","sourceRoot":"","sources":["../../src/walker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Single-use utility classes to provide functionality to the {@link Glob}\n * methods.\n *\n * @module\n */\nimport { Minipass } from 'minipass'\nimport { Path } from 'path-scurry'\nimport { Ignore, IgnoreLike } from './ignore.js'\n\n// XXX can we somehow make it so that it NEVER processes a given path more than\n// once, enough that the match set tracking is no longer needed? that'd speed\n// things up a lot. Or maybe bring back nounique, and skip it in that case?\n\n// a single minimatch set entry with 1 or more parts\nimport { Pattern } from './pattern.js'\nimport { Processor } from './processor.js'\n\nexport interface GlobWalkerOpts {\n absolute?: boolean\n allowWindowsEscape?: boolean\n cwd?: string | URL\n dot?: boolean\n dotRelative?: boolean\n follow?: boolean\n ignore?: string | string[] | IgnoreLike\n mark?: boolean\n matchBase?: boolean\n // Note: maxDepth here means \"maximum actual Path.depth()\",\n // not \"maximum depth beyond cwd\"\n maxDepth?: number\n nobrace?: boolean\n nocase?: boolean\n nodir?: boolean\n noext?: boolean\n noglobstar?: boolean\n platform?: NodeJS.Platform\n posix?: boolean\n realpath?: boolean\n root?: string\n stat?: boolean\n signal?: AbortSignal\n windowsPathsNoEscape?: boolean\n withFileTypes?: boolean\n includeChildMatches?: boolean\n}\n\nexport type GWOFileTypesTrue = GlobWalkerOpts & {\n withFileTypes: true\n}\nexport type GWOFileTypesFalse = GlobWalkerOpts & {\n withFileTypes: false\n}\nexport type GWOFileTypesUnset = GlobWalkerOpts & {\n withFileTypes?: undefined\n}\n\nexport type Result =\n O extends GWOFileTypesTrue ? Path\n : O extends GWOFileTypesFalse ? string\n : O extends GWOFileTypesUnset ? string\n : Path | string\n\nexport type Matches =\n O extends GWOFileTypesTrue ? Set\n : O extends GWOFileTypesFalse ? Set\n : O extends GWOFileTypesUnset ? Set\n : Set\n\nexport type MatchStream = Minipass<\n Result,\n Result\n>\n\nconst makeIgnore = (\n ignore: string | string[] | IgnoreLike,\n opts: GlobWalkerOpts,\n): IgnoreLike =>\n typeof ignore === 'string' ? new Ignore([ignore], opts)\n : Array.isArray(ignore) ? new Ignore(ignore, opts)\n : ignore\n\n/**\n * basic walking utilities that all the glob walker types use\n */\nexport abstract class GlobUtil {\n path: Path\n patterns: Pattern[]\n opts: O\n seen: Set = new Set()\n paused: boolean = false\n aborted: boolean = false\n #onResume: (() => any)[] = []\n #ignore?: IgnoreLike\n #sep: '\\\\' | '/'\n signal?: AbortSignal\n maxDepth: number\n includeChildMatches: boolean\n\n constructor(patterns: Pattern[], path: Path, opts: O)\n constructor(patterns: Pattern[], path: Path, opts: O) {\n this.patterns = patterns\n this.path = path\n this.opts = opts\n this.#sep = !opts.posix && opts.platform === 'win32' ? '\\\\' : '/'\n this.includeChildMatches = opts.includeChildMatches !== false\n if (opts.ignore || !this.includeChildMatches) {\n this.#ignore = makeIgnore(opts.ignore ?? [], opts)\n if (\n !this.includeChildMatches &&\n typeof this.#ignore.add !== 'function'\n ) {\n const m = 'cannot ignore child matches, ignore lacks add() method.'\n throw new Error(m)\n }\n }\n // ignore, always set with maxDepth, but it's optional on the\n // GlobOptions type\n /* c8 ignore start */\n this.maxDepth = opts.maxDepth || Infinity\n /* c8 ignore stop */\n if (opts.signal) {\n this.signal = opts.signal\n this.signal.addEventListener('abort', () => {\n this.#onResume.length = 0\n })\n }\n }\n\n #ignored(path: Path): boolean {\n return this.seen.has(path) || !!this.#ignore?.ignored?.(path)\n }\n #childrenIgnored(path: Path): boolean {\n return !!this.#ignore?.childrenIgnored?.(path)\n }\n\n // backpressure mechanism\n pause() {\n this.paused = true\n }\n resume() {\n /* c8 ignore start */\n if (this.signal?.aborted) return\n /* c8 ignore stop */\n this.paused = false\n let fn: (() => any) | undefined = undefined\n while (!this.paused && (fn = this.#onResume.shift())) {\n fn()\n }\n }\n onResume(fn: () => any) {\n if (this.signal?.aborted) return\n /* c8 ignore start */\n if (!this.paused) {\n fn()\n } else {\n /* c8 ignore stop */\n this.#onResume.push(fn)\n }\n }\n\n // do the requisite realpath/stat checking, and return the path\n // to add or undefined to filter it out.\n async matchCheck(e: Path, ifDir: boolean): Promise {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || (await e.realpath())\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n const s = needStat ? await e.lstat() : e\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = await s.realpath()\n /* c8 ignore start */\n if (target && (target.isUnknown() || this.opts.stat)) {\n await target.lstat()\n }\n /* c8 ignore stop */\n }\n return this.matchCheckTest(s, ifDir)\n }\n\n matchCheckTest(e: Path | undefined, ifDir: boolean): Path | undefined {\n return (\n e &&\n (this.maxDepth === Infinity || e.depth() <= this.maxDepth) &&\n (!ifDir || e.canReaddir()) &&\n (!this.opts.nodir || !e.isDirectory()) &&\n (!this.opts.nodir ||\n !this.opts.follow ||\n !e.isSymbolicLink() ||\n !e.realpathCached()?.isDirectory()) &&\n !this.#ignored(e)\n ) ?\n e\n : undefined\n }\n\n matchCheckSync(e: Path, ifDir: boolean): Path | undefined {\n if (ifDir && this.opts.nodir) return undefined\n let rpc: Path | undefined\n if (this.opts.realpath) {\n rpc = e.realpathCached() || e.realpathSync()\n if (!rpc) return undefined\n e = rpc\n }\n const needStat = e.isUnknown() || this.opts.stat\n const s = needStat ? e.lstatSync() : e\n if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) {\n const target = s.realpathSync()\n if (target && (target?.isUnknown() || this.opts.stat)) {\n target.lstatSync()\n }\n }\n return this.matchCheckTest(s, ifDir)\n }\n\n abstract matchEmit(p: Result): void\n abstract matchEmit(p: string | Path): void\n\n matchFinish(e: Path, absolute: boolean) {\n if (this.#ignored(e)) return\n // we know we have an ignore if this is false, but TS doesn't\n if (!this.includeChildMatches && this.#ignore?.add) {\n const ign = `${e.relativePosix()}/**`\n this.#ignore.add(ign)\n }\n const abs =\n this.opts.absolute === undefined ? absolute : this.opts.absolute\n this.seen.add(e)\n const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''\n // ok, we have what we need!\n if (this.opts.withFileTypes) {\n this.matchEmit(e)\n } else if (abs) {\n const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath()\n this.matchEmit(abs + mark)\n } else {\n const rel = this.opts.posix ? e.relativePosix() : e.relative()\n const pre =\n this.opts.dotRelative && !rel.startsWith('..' + this.#sep) ?\n '.' + this.#sep\n : ''\n this.matchEmit(!rel ? '.' + mark : pre + rel + mark)\n }\n }\n\n async match(e: Path, absolute: boolean, ifDir: boolean): Promise {\n const p = await this.matchCheck(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n matchSync(e: Path, absolute: boolean, ifDir: boolean): void {\n const p = this.matchCheckSync(e, ifDir)\n if (p) this.matchFinish(p, absolute)\n }\n\n walkCB(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any,\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() => this.walkCB2(target, patterns, processor, cb))\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const childrenCached = t.readdirCached()\n if (t.calledReaddir())\n this.walkCB3(t, childrenCached, processor, next)\n else {\n t.readdirCB(\n (_, entries) => this.walkCB3(t, entries, processor, next),\n true,\n )\n }\n }\n\n next()\n }\n\n walkCB3(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any,\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n tasks++\n this.match(m, absolute, ifDir).then(() => next())\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2(target, patterns, processor.child(), next)\n }\n\n next()\n }\n\n walkCBSync(target: Path, patterns: Pattern[], cb: () => any) {\n /* c8 ignore start */\n if (this.signal?.aborted) cb()\n /* c8 ignore stop */\n this.walkCB2Sync(target, patterns, new Processor(this.opts), cb)\n }\n\n walkCB2Sync(\n target: Path,\n patterns: Pattern[],\n processor: Processor,\n cb: () => any,\n ) {\n if (this.#childrenIgnored(target)) return cb()\n if (this.signal?.aborted) cb()\n if (this.paused) {\n this.onResume(() =>\n this.walkCB2Sync(target, patterns, processor, cb),\n )\n return\n }\n processor.processPatterns(target, patterns)\n\n // done processing. all of the above is sync, can be abstracted out.\n // subwalks is a map of paths to the entry filters they need\n // matches is a map of paths to [absolute, ifDir] tuples.\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n\n for (const t of processor.subwalkTargets()) {\n if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) {\n continue\n }\n tasks++\n const children = t.readdirSync()\n this.walkCB3Sync(t, children, processor, next)\n }\n\n next()\n }\n\n walkCB3Sync(\n target: Path,\n entries: Path[],\n processor: Processor,\n cb: () => any,\n ) {\n processor = processor.filterEntries(target, entries)\n\n let tasks = 1\n const next = () => {\n if (--tasks === 0) cb()\n }\n\n for (const [m, absolute, ifDir] of processor.matches.entries()) {\n if (this.#ignored(m)) continue\n this.matchSync(m, absolute, ifDir)\n }\n for (const [target, patterns] of processor.subwalks.entries()) {\n tasks++\n this.walkCB2Sync(target, patterns, processor.child(), next)\n }\n\n next()\n }\n}\n\nexport class GlobWalker<\n O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil {\n matches = new Set>()\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n }\n\n matchEmit(e: Result): void {\n this.matches.add(e)\n }\n\n async walk(): Promise>> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n await this.path.lstat()\n }\n await new Promise((res, rej) => {\n this.walkCB(this.path, this.patterns, () => {\n if (this.signal?.aborted) {\n rej(this.signal.reason)\n } else {\n res(this.matches)\n }\n })\n })\n return this.matches\n }\n\n walkSync(): Set> {\n if (this.signal?.aborted) throw this.signal.reason\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n // nothing for the callback to do, because this never pauses\n this.walkCBSync(this.path, this.patterns, () => {\n if (this.signal?.aborted) throw this.signal.reason\n })\n return this.matches\n }\n}\n\nexport class GlobStream<\n O extends GlobWalkerOpts = GlobWalkerOpts,\n> extends GlobUtil {\n results: Minipass, Result>\n\n constructor(patterns: Pattern[], path: Path, opts: O) {\n super(patterns, path, opts)\n this.results = new Minipass, Result>({\n signal: this.signal,\n objectMode: true,\n })\n this.results.on('drain', () => this.resume())\n this.results.on('resume', () => this.resume())\n }\n\n matchEmit(e: Result): void {\n this.results.write(e)\n if (!this.results.flowing) this.pause()\n }\n\n stream(): MatchStream {\n const target = this.path\n if (target.isUnknown()) {\n target.lstat().then(() => {\n this.walkCB(target, this.patterns, () => this.results.end())\n })\n } else {\n this.walkCB(target, this.patterns, () => this.results.end())\n }\n return this.results\n }\n\n streamSync(): MatchStream {\n if (this.path.isUnknown()) {\n this.path.lstatSync()\n }\n this.walkCBSync(this.path, this.patterns, () => this.results.end())\n return this.results\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json new file mode 100644 index 00000000..f492b19b --- /dev/null +++ b/node_modules/glob/package.json @@ -0,0 +1,99 @@ +{ + "author": "Isaac Z. Schlueter (https://blog.izs.me/)", + "name": "glob", + "description": "the most correct and second fastest glob implementation in JavaScript", + "version": "11.0.0", + "type": "module", + "tshy": { + "main": true, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.ts" + } + }, + "bin": "./dist/esm/bin.mjs", + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.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" + } + } + }, + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "files": [ + "dist" + ], + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts", + "prepublish": "npm run benchclean", + "profclean": "rm -f v8.log profile.txt", + "test-regen": "npm run profclean && TEST_REGEN=1 node --no-warnings --loader ts-node/esm test/00-setup.ts", + "prebench": "npm run prepare", + "bench": "bash benchmark.sh", + "preprof": "npm run prepare", + "prof": "bash prof.sh", + "benchclean": "node benchclean.cjs" + }, + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "devDependencies": { + "@types/node": "^20.11.30", + "memfs": "^4.9.3", + "mkdirp": "^3.0.1", + "prettier": "^3.2.5", + "rimraf": "^5.0.7", + "sync-content": "^1.0.2", + "tap": "^20.0.3", + "tshy": "^2.0.1", + "typedoc": "^0.26.3" + }, + "tap": { + "before": "test/00-setup.ts" + }, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "engines": { + "node": "20 || >=22" + }, + "module": "./dist/esm/index.js" +} diff --git a/node_modules/is-fullwidth-code-point/index.d.ts b/node_modules/is-fullwidth-code-point/index.d.ts new file mode 100644 index 00000000..729d2020 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/index.d.ts @@ -0,0 +1,17 @@ +/** +Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms). + +@param codePoint - The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. + +@example +``` +import isFullwidthCodePoint from 'is-fullwidth-code-point'; + +isFullwidthCodePoint('谢'.codePointAt(0)); +//=> true + +isFullwidthCodePoint('a'.codePointAt(0)); +//=> false +``` +*/ +export default function isFullwidthCodePoint(codePoint: number): boolean; diff --git a/node_modules/is-fullwidth-code-point/index.js b/node_modules/is-fullwidth-code-point/index.js new file mode 100644 index 00000000..671f97f7 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/index.js @@ -0,0 +1,50 @@ +/* eslint-disable yoda */ +'use strict'; + +const isFullwidthCodePoint = codePoint => { + if (Number.isNaN(codePoint)) { + return false; + } + + // Code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if ( + codePoint >= 0x1100 && ( + codePoint <= 0x115F || // Hangul Jamo + codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET + codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= codePoint && codePoint <= 0x4DBF) || + // CJK Unified Ideographs .. Yi Radicals + (0x4E00 <= codePoint && codePoint <= 0xA4C6) || + // Hangul Jamo Extended-A + (0xA960 <= codePoint && codePoint <= 0xA97C) || + // Hangul Syllables + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + // CJK Compatibility Ideographs + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + // Vertical Forms + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + // CJK Compatibility Forms .. Small Form Variants + (0xFE30 <= codePoint && codePoint <= 0xFE6B) || + // Halfwidth and Fullwidth Forms + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || + // Kana Supplement + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + // Enclosed Ideographic Supplement + (0x1F200 <= codePoint && codePoint <= 0x1F251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= codePoint && codePoint <= 0x3FFFD) + ) + ) { + return true; + } + + return false; +}; + +module.exports = isFullwidthCodePoint; +module.exports.default = isFullwidthCodePoint; diff --git a/node_modules/is-fullwidth-code-point/license b/node_modules/is-fullwidth-code-point/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/license @@ -0,0 +1,9 @@ +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/node_modules/is-fullwidth-code-point/package.json b/node_modules/is-fullwidth-code-point/package.json new file mode 100644 index 00000000..2137e888 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/package.json @@ -0,0 +1,42 @@ +{ + "name": "is-fullwidth-code-point", + "version": "3.0.0", + "description": "Check if the character represented by a given Unicode code point is fullwidth", + "license": "MIT", + "repository": "sindresorhus/is-fullwidth-code-point", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd-check" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "fullwidth", + "full-width", + "full", + "width", + "unicode", + "character", + "string", + "codepoint", + "code", + "point", + "is", + "detect", + "check" + ], + "devDependencies": { + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" + } +} diff --git a/node_modules/is-fullwidth-code-point/readme.md b/node_modules/is-fullwidth-code-point/readme.md new file mode 100644 index 00000000..4236bba9 --- /dev/null +++ b/node_modules/is-fullwidth-code-point/readme.md @@ -0,0 +1,39 @@ +# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) + +> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) + + +## Install + +``` +$ npm install is-fullwidth-code-point +``` + + +## Usage + +```js +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +isFullwidthCodePoint('谢'.codePointAt(0)); +//=> true + +isFullwidthCodePoint('a'.codePointAt(0)); +//=> false +``` + + +## API + +### isFullwidthCodePoint(codePoint) + +#### codePoint + +Type: `number` + +The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/jackspeak/LICENSE.md b/node_modules/jackspeak/LICENSE.md new file mode 100644 index 00000000..8cb5cc6e --- /dev/null +++ b/node_modules/jackspeak/LICENSE.md @@ -0,0 +1,55 @@ +# Blue Oak Model License + +Version 1.0.0 + +## Purpose + +This license gives everyone as much permission to work with +this software as possible, while protecting contributors +from liability. + +## Acceptance + +In order to receive this license, you must agree to its +rules. The rules of this license are both obligations +under that agreement and conditions to your license. +You must not do anything with this software that triggers +a rule that you cannot or will not follow. + +## Copyright + +Each contributor licenses you to do everything with this +software that would otherwise infringe that contributor's +copyright in it. + +## Notices + +You must ensure that everyone who gets a copy of +any part of this software from you, with or without +changes, also gets the text of this license or a link to +. + +## Excuse + +If anyone notifies you in writing that you have not +complied with [Notices](#notices), you can keep your +license by taking all practical steps to comply within 30 +days after the notice. If you do not do so, your license +ends immediately. + +## Patent + +Each contributor licenses you to do everything with this +software that would otherwise infringe any patent claims +they can license or become able to license. + +## Reliability + +No contributor can revoke this license. + +## No Liability + +**_As far as the law allows, this software comes as is, +without any warranty or condition, and no contributor +will be liable to anyone for any damages related to this +software or this license, under any kind of legal claim._** diff --git a/node_modules/jackspeak/README.md b/node_modules/jackspeak/README.md new file mode 100644 index 00000000..4ffea4b3 --- /dev/null +++ b/node_modules/jackspeak/README.md @@ -0,0 +1,357 @@ +# jackspeak + +A very strict and proper argument parser. + +Validate string, boolean, and number options, from the command +line and the environment. + +Call the `jack` method with a config object, and then chain +methods off of it. + +At the end, call the `.parse()` method, and you'll get an object +with `positionals` and `values` members. + +Any unrecognized configs or invalid values will throw an error. + +As long as you define configs using object literals, types will +be properly inferred and TypeScript will know what kinds of +things you got. + +If you give it a prefix for environment variables, then defaults +will be read from the environment, and parsed values written back +to it, so you can easily pass configs through to child processes. + +Automatically generates a `usage`/`help` banner by calling the +`.usage()` method. + +Unless otherwise noted, all methods return the object itself. + +## USAGE + +```js +import { jack } from 'jackspeak' +// this works too: +// const { jack } = require('jackspeak') + +const { positionals, values } = jack({ envPrefix: 'FOO' }) + .flag({ + asdf: { description: 'sets the asfd flag', short: 'a', default: true }, + 'no-asdf': { description: 'unsets the asdf flag', short: 'A' }, + foo: { description: 'another boolean', short: 'f' }, + }) + .optList({ + 'ip-addrs': { + description: 'addresses to ip things', + delim: ',', // defaults to '\n' + default: ['127.0.0.1'], + }, + }) + .parse([ + 'some', + 'positional', + '--ip-addrs', + '192.168.0.1', + '--ip-addrs', + '1.1.1.1', + 'args', + '--foo', // sets the foo flag + '-A', // short for --no-asdf, sets asdf flag to false + ]) + +console.log(process.env.FOO_ASDF) // '0' +console.log(process.env.FOO_FOO) // '1' +console.log(values) // { +// 'ip-addrs': ['192.168.0.1', '1.1.1.1'], +// foo: true, +// asdf: false, +// } +console.log(process.env.FOO_IP_ADDRS) // '192.168.0.1,1.1.1.1' +console.log(positionals) // ['some', 'positional', 'args'] +``` + +## `jack(options: JackOptions = {}) => Jack` + +Returns a `Jack` object that can be used to chain and add +field definitions. The other methods (apart from `validate()`, +`parse()`, and `usage()` obviously) return the same Jack object, +updated with the new types, so they can be chained together as +shown in the code examples. + +Options: + +- `allowPositionals` Defaults to true. Set to `false` to not + allow any positional arguments. + +- `envPrefix` Set to a string to write configs to and read + configs from the environment. For example, if set to `MY_APP` + then the `foo-bar` config will default based on the value of + `env.MY_APP_FOO_BAR` and will write back to that when parsed. + + Boolean values are written as `'1'` and `'0'`, and will be + treated as `true` if they're `'1'` or false otherwise. + + Number values are written with their `toString()` + representation. + + Strings are just strings. + + Any value with `multiple: true` will be represented in the + environment split by a delimiter, which defaults to `\n`. + +- `env` The place to read/write environment variables. Defaults + to `process.env`. + +- `usage` A short usage string to print at the top of the help + banner. + +- `stopAtPositional` Boolean, default false. Stop parsing opts + and flags at the first positional argument. This is useful if + you want to pass certain options to subcommands, like some + programs do, so you can stop parsing and pass the positionals + to the subcommand to parse. + +- `stopAtPositionalTest` Conditional `stopAtPositional`. Provide + a function that takes a positional argument string and returns + boolean. If it returns `true`, then parsing will stop. Useful + when _some_ subcommands should parse the rest of the command + line options, and others should not. + +### `Jack.heading(text: string, level?: 1 | 2 | 3 | 4 | 5 | 6)` + +Define a short string heading, used in the `usage()` output. + +Indentation of the heading and subsequent description/config +usage entries (up until the next heading) is set by the heading +level. + +If the first usage item defined is a heading, it is always +treated as level 1, regardless of the argument provided. + +Headings level 1 and 2 will have a line of padding underneath +them. Headings level 3 through 6 will not. + +### `Jack.description(text: string, { pre?: boolean } = {})` + +Define a long string description, used in the `usage()` output. + +If the `pre` option is set to `true`, then whitespace will not be +normalized. However, if any line is too long for the width +allotted, it will still be wrapped. + +## Option Definitions + +Configs are defined by calling the appropriate field definition +method with an object where the keys are the long option name, +and the value defines the config. + +Options: + +- `type` Only needed for the `addFields` method, as the others + set it implicitly. Can be `'string'`, `'boolean'`, or + `'number'`. +- `multiple` Only needed for the `addFields` method, as the + others set it implicitly. Set to `true` to define an array + type. This means that it can be set on the CLI multiple times, + set as an array in the `values` + and it is represented in the environment as a delimited string. +- `short` A one-character shorthand for the option. +- `description` Some words to describe what this option is and + why you'd set it. +- `hint` (Only relevant for non-boolean types) The thing to show + in the usage output, like `--option=` +- `validate` A function that returns false (or throws) if an + option value is invalid. +- `validOptions` An array of strings or numbers that define the + valid values that can be set. This is not allowed on `boolean` + (flag) options. May be used along with a `validate()` method. +- `default` A default value for the field. Note that this may be + overridden by an environment variable, if present. + +### `Jack.flag({ [option: string]: definition, ... })` + +Define one or more boolean fields. + +Boolean options may be set to `false` by using a +`--no-${optionName}` argument, which will be implicitly created +if it's not defined to be something else. + +If a boolean option named `no-${optionName}` with the same +`multiple` setting is in the configuration, then that will be +treated as a negating flag. + +### `Jack.flagList({ [option: string]: definition, ... })` + +Define one or more boolean array fields. + +### `Jack.num({ [option: string]: definition, ... })` + +Define one or more number fields. These will be set in the +environment as a stringified number, and included in the `values` +object as a number. + +### `Jack.numList({ [option: string]: definition, ... })` + +Define one or more number list fields. These will be set in the +environment as a delimited set of stringified numbers, and +included in the `values` as a number array. + +### `Jack.opt({ [option: string]: definition, ... })` + +Define one or more string option fields. + +### `Jack.optList({ [option: string]: definition, ... })` + +Define one or more string list fields. + +### `Jack.addFields({ [option: string]: definition, ... })` + +Define one or more fields of any type. Note that `type` and +`multiple` must be set explicitly on each definition when using +this method. + +## Actions + +Use these methods on a Jack object that's already had its config +fields defined. + +### `Jack.parse(args: string[] = process.argv): { positionals: string[], values: OptionsResults }` + +Parse the arguments list, write to the environment if `envPrefix` +is set, and returned the parsed values and remaining positional +arguments. + +### `Jack.validate(o: any): asserts o is OptionsResults` + +Throws an error if the object provided is not a valid result set, +for the configurations defined thusfar. + +### `Jack.usage(): string` + +Returns the compiled `usage` string, with all option descriptions +and heading/description text, wrapped to the appropriate width +for the terminal. + +### `Jack.setConfigValues(options: OptionsResults, src?: string)` + +Validate the `options` argument, and set the default value for +each field that appears in the options. + +Values provided will be overridden by environment variables or +command line arguments. + +### `Jack.usageMarkdown(): string` + +Returns the compiled `usage` string, with all option descriptions +and heading/description text, but as markdown instead of +formatted for a terminal, for generating HTML documentation for +your CLI. + +## Some Example Code + +Also see [the examples +folder](https://github.com/isaacs/jackspeak/tree/master/examples) + +```js +import { jack } from 'jackspeak' + +const j = jack({ + // Optional + // This will be auto-generated from the descriptions if not supplied + // top level usage line, printed by -h + // will be auto-generated if not specified + usage: 'foo [options] ', +}) + .heading('The best Foo that ever Fooed') + .description( + ` + Executes all the files and interprets their output as + TAP formatted test result data. + + To parse TAP data from stdin, specify "-" as a filename. + `, + ) + + // flags don't take a value, they're boolean on or off, and can be + // turned off by prefixing with `--no-` + // so this adds support for -b to mean --bail, or -B to mean --no-bail + .flag({ + flag: { + // specify a short value if you like. this must be a single char + short: 'f', + // description is optional as well. + description: `Make the flags wave`, + // default value for flags is 'false', unless you change it + default: true, + }, + 'no-flag': { + // you can can always negate a flag with `--no-flag` + // specifying a negate option will let you define a short + // single-char option for negation. + short: 'F', + description: `Do not wave the flags`, + }, + }) + + // Options that take a value are specified with `opt()` + .opt({ + reporter: { + short: 'R', + description: 'the style of report to display', + }, + }) + + // if you want a number, say so, and jackspeak will enforce it + .num({ + jobs: { + short: 'j', + description: 'how many jobs to run in parallel', + default: 1, + }, + }) + + // A list is an option that can be specified multiple times, + // to expand into an array of all the settings. Normal opts + // will just give you the last value specified. + .optList({ + 'node-arg': {}, + }) + + // a flagList is an array of booleans, so `-ddd` is [true, true, true] + // count the `true` values to treat it as a counter. + .flagList({ + debug: { short: 'd' }, + }) + + // opts take a value, and is set to the string in the results + // you can combine multiple short-form flags together, but + // an opt will end the combine chain, posix-style. So, + // -bofilename would be like --bail --output-file=filename + .opt({ + 'output-file': { + short: 'o', + // optional: make it -o in the help output insead of -o + hint: 'file', + description: `Send the raw output to the specified file.`, + }, + }) + +// now we can parse argv like this: +const { values, positionals } = j.parse(process.argv) + +// or decide to show the usage banner +console.log(j.usage()) + +// or validate an object config we got from somewhere else +try { + j.validate(someConfig) +} catch (er) { + console.error('someConfig is not valid!', er) +} +``` + +## Name + +The inspiration for this module is [yargs](http://npm.im/yargs), which +is pirate talk themed. Yargs has all the features, and is infinitely +flexible. "Jackspeak" is the slang of the royal navy. This module +does not have all the features. It is declarative and rigid by design. diff --git a/node_modules/jackspeak/dist/commonjs/index.d.ts b/node_modules/jackspeak/dist/commonjs/index.d.ts new file mode 100644 index 00000000..d28bcc18 --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/index.d.ts @@ -0,0 +1,315 @@ +/// +export type ConfigType = 'number' | 'string' | 'boolean'; +/** + * Given a Jack object, get the typeof its ConfigSet + */ +export type Unwrap = J extends Jack ? C : never; +import { inspect, InspectOptions } from 'node:util'; +/** + * Defines the type of value that is valid, given a config definition's + * {@link ConfigType} and boolean multiple setting + */ +export type ValidValue = [ + T, + M +] extends ['number', true] ? number[] : [T, M] extends ['string', true] ? string[] : [T, M] extends ['boolean', true] ? boolean[] : [T, M] extends ['number', false] ? number : [T, M] extends ['string', false] ? string : [T, M] extends ['boolean', false] ? boolean : [T, M] extends ['string', boolean] ? string | string[] : [T, M] extends ['boolean', boolean] ? boolean | boolean[] : [T, M] extends ['number', boolean] ? number | number[] : [T, M] extends [ConfigType, false] ? string | number | boolean : [T, M] extends [ConfigType, true] ? string[] | number[] | boolean[] : string | number | boolean | string[] | number[] | boolean[]; +/** + * The meta information for a config option definition, when the + * type and multiple values can be inferred by the method being used + */ +export type ConfigOptionMeta = { + default?: undefined | (ValidValue & (O extends number[] | string[] ? M extends false ? O[number] : O[number][] : unknown)); + validOptions?: O; + description?: string; + validate?: ((v: unknown) => v is ValidValue) | ((v: unknown) => boolean); + short?: string | undefined; + type?: T; + hint?: T extends 'boolean' ? never : string; + delim?: M extends true ? string : never; +} & (M extends false ? { + multiple?: false | undefined; +} : M extends true ? { + multiple: true; +} : { + multiple?: boolean; +}); +/** + * A set of {@link ConfigOptionMeta} fields, referenced by their longOption + * string values. + */ +export type ConfigMetaSet = { + [longOption: string]: ConfigOptionMeta; +}; +/** + * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet} + */ +export type ConfigSetFromMetaSet> = { + [longOption in keyof S]: ConfigOptionBase; +}; +/** + * Fields that can be set on a {@link ConfigOptionBase} or + * {@link ConfigOptionMeta} based on whether or not the field is known to be + * multiple. + */ +export type MultiType = M extends true ? { + multiple: true; + delim?: string | undefined; +} : M extends false ? { + multiple?: false | undefined; + delim?: undefined; +} : { + multiple?: boolean | undefined; + delim?: string | undefined; +}; +/** + * A config field definition, in its full representation. + */ +export type ConfigOptionBase = { + type: T; + short?: string | undefined; + default?: ValidValue | undefined; + description?: string; + hint?: T extends 'boolean' ? undefined : string | undefined; + validate?: (v: unknown) => v is ValidValue; + validOptions?: T extends 'boolean' ? undefined : T extends 'string' ? readonly string[] : T extends 'number' ? readonly number[] : readonly number[] | readonly string[]; +} & MultiType; +export declare const isConfigType: (t: string) => t is ConfigType; +export declare const isConfigOption: (o: any, type: T, multi: M) => o is ConfigOptionBase; +/** + * A set of {@link ConfigOptionBase} objects, referenced by their longOption + * string values. + */ +export type ConfigSet = { + [longOption: string]: ConfigOptionBase; +}; +/** + * The 'values' field returned by {@link Jack#parse} + */ +export type OptionsResults = { + [k in keyof T]?: T[k]['validOptions'] extends (readonly string[] | readonly number[]) ? T[k] extends ConfigOptionBase<'string' | 'number', false> ? T[k]['validOptions'][number] : T[k] extends ConfigOptionBase<'string' | 'number', true> ? T[k]['validOptions'][number][] : never : T[k] extends ConfigOptionBase<'string', false> ? string : T[k] extends ConfigOptionBase<'string', true> ? string[] : T[k] extends ConfigOptionBase<'number', false> ? number : T[k] extends ConfigOptionBase<'number', true> ? number[] : T[k] extends ConfigOptionBase<'boolean', false> ? boolean : T[k] extends ConfigOptionBase<'boolean', true> ? boolean[] : never; +}; +/** + * The object retured by {@link Jack#parse} + */ +export type Parsed = { + values: OptionsResults; + positionals: string[]; +}; +/** + * A row used when generating the {@link Jack#usage} string + */ +export interface Row { + left?: string; + text: string; + skipLine?: boolean; + type?: string; +} +/** + * A heading for a section in the usage, created by the jack.heading() + * method. + * + * First heading is always level 1, subsequent headings default to 2. + * + * The level of the nearest heading level sets the indentation of the + * description that follows. + */ +export interface Heading extends Row { + type: 'heading'; + text: string; + left?: ''; + skipLine?: boolean; + level: number; + pre?: boolean; +} +/** + * An arbitrary blob of text describing some stuff, set by the + * jack.description() method. + * + * Indentation determined by level of the nearest header. + */ +export interface Description extends Row { + type: 'description'; + text: string; + left?: ''; + skipLine?: boolean; + pre?: boolean; +} +/** + * A heading or description row used when generating the {@link Jack#usage} + * string + */ +export type TextRow = Heading | Description; +/** + * Either a {@link TextRow} or a reference to a {@link ConfigOptionBase} + */ +export type UsageField = TextRow | { + type: 'config'; + name: string; + value: ConfigOptionBase; +}; +/** + * Options provided to the {@link Jack} constructor + */ +export interface JackOptions { + /** + * Whether to allow positional arguments + * + * @default true + */ + allowPositionals?: boolean; + /** + * Prefix to use when reading/writing the environment variables + * + * If not specified, environment behavior will not be available. + */ + envPrefix?: string; + /** + * Environment object to read/write. Defaults `process.env`. + * No effect if `envPrefix` is not set. + */ + env?: { + [k: string]: string | undefined; + }; + /** + * A short usage string. If not provided, will be generated from the + * options provided, but that can of course be rather verbose if + * there are a lot of options. + */ + usage?: string; + /** + * Stop parsing flags and opts at the first positional argument. + * This is to support cases like `cmd [flags] [options]`, where + * each subcommand may have different options. This effectively treats + * any positional as a `--` argument. Only relevant if `allowPositionals` + * is true. + * + * To do subcommands, set this option, look at the first positional, and + * parse the remaining positionals as appropriate. + * + * @default false + */ + stopAtPositional?: boolean; + /** + * Conditional `stopAtPositional`. If set to a `(string)=>boolean` function, + * will be called with each positional argument encountered. If the function + * returns true, then parsing will stop at that point. + */ + stopAtPositionalTest?: (arg: string) => boolean; +} +/** + * Class returned by the {@link jack} function and all configuration + * definition methods. This is what gets chained together. + */ +export declare class Jack { + #private; + constructor(options?: JackOptions); + /** + * Set the default value (which will still be overridden by env or cli) + * as if from a parsed config file. The optional `source` param, if + * provided, will be included in error messages if a value is invalid or + * unknown. + */ + setConfigValues(values: OptionsResults, source?: string): this; + /** + * Parse a string of arguments, and return the resulting + * `{ values, positionals }` object. + * + * If an {@link JackOptions#envPrefix} is set, then it will read default + * values from the environment, and write the resulting values back + * to the environment as well. + * + * Environment values always take precedence over any other value, except + * an explicit CLI setting. + */ + parse(args?: string[]): Parsed; + loadEnvDefaults(): void; + applyDefaults(p: Parsed): void; + /** + * Only parse the command line arguments passed in. + * Does not strip off the `node script.js` bits, so it must be just the + * arguments you wish to have parsed. + * Does not read from or write to the environment, or set defaults. + */ + parseRaw(args: string[]): Parsed; + /** + * Validate that any arbitrary object is a valid configuration `values` + * object. Useful when loading config files or other sources. + */ + validate(o: unknown): asserts o is Parsed['values']; + writeEnv(p: Parsed): void; + /** + * Add a heading to the usage output banner + */ + heading(text: string, level?: 1 | 2 | 3 | 4 | 5 | 6, { pre }?: { + pre?: boolean; + }): Jack; + /** + * Add a long-form description to the usage output at this position. + */ + description(text: string, { pre }?: { + pre?: boolean; + }): Jack; + /** + * Add one or more number fields. + */ + num>(fields: F): Jack>; + /** + * Add one or more multiple number fields. + */ + numList>(fields: F): Jack>; + /** + * Add one or more string option fields. + */ + opt>(fields: F): Jack>; + /** + * Add one or more multiple string option fields. + */ + optList>(fields: F): Jack>; + /** + * Add one or more flag fields. + */ + flag>(fields: F): Jack>; + /** + * Add one or more multiple flag fields. + */ + flagList>(fields: F): Jack>; + /** + * Generic field definition method. Similar to flag/flagList/number/etc, + * but you must specify the `type` (and optionally `multiple` and `delim`) + * fields on each one, or Jack won't know how to define them. + */ + addFields(fields: F): Jack; + /** + * Return the usage banner for the given configuration + */ + usage(): string; + /** + * Return the usage banner markdown for the given configuration + */ + usageMarkdown(): string; + /** + * Return the configuration options as a plain object + */ + toJSON(): { + [k: string]: { + hint?: string | undefined; + default?: string | number | boolean | string[] | number[] | boolean[] | undefined; + validOptions?: readonly number[] | readonly string[] | undefined; + validate?: ((v: unknown) => v is string | number | boolean | string[] | number[] | boolean[]) | undefined; + description?: string | undefined; + short?: string | undefined; + delim?: string | undefined; + multiple?: boolean | undefined; + type: ConfigType; + }; + }; + /** + * Custom printer for `util.inspect` + */ + [inspect.custom](_: number, options: InspectOptions): string; +} +/** + * Main entry point. Create and return a {@link Jack} object. + */ +export declare const jack: (options?: JackOptions) => Jack<{}>; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/jackspeak/dist/commonjs/index.d.ts.map b/node_modules/jackspeak/dist/commonjs/index.d.ts.map new file mode 100644 index 00000000..faf9ddd0 --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/jackspeak/dist/commonjs/index.js b/node_modules/jackspeak/dist/commonjs/index.js new file mode 100644 index 00000000..b0e016d1 --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/index.js @@ -0,0 +1,1010 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.jack = exports.Jack = exports.isConfigOption = exports.isConfigType = void 0; +const node_util_1 = require("node:util"); +const parse_args_js_1 = require("./parse-args.js"); +// it's a tiny API, just cast it inline, it's fine +//@ts-ignore +const cliui_1 = __importDefault(require("@isaacs/cliui")); +const node_path_1 = require("node:path"); +const width = Math.min((process && process.stdout && process.stdout.columns) || 80, 80); +// indentation spaces from heading level +const indent = (n) => (n - 1) * 2; +const toEnvKey = (pref, key) => { + return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')] + .join(' ') + .trim() + .toUpperCase() + .replace(/ /g, '_'); +}; +const toEnvVal = (value, delim = '\n') => { + const str = typeof value === 'string' ? value + : typeof value === 'boolean' ? + value ? '1' + : '0' + : typeof value === 'number' ? String(value) + : Array.isArray(value) ? + value.map((v) => toEnvVal(v)).join(delim) + : /* c8 ignore start */ undefined; + if (typeof str !== 'string') { + throw new Error(`could not serialize value to environment: ${JSON.stringify(value)}`); + } + /* c8 ignore stop */ + return str; +}; +const fromEnvVal = (env, type, multiple, delim = '\n') => (multiple ? + env ? env.split(delim).map(v => fromEnvVal(v, type, false)) + : [] + : type === 'string' ? env + : type === 'boolean' ? env === '1' + : +env.trim()); +const isConfigType = (t) => typeof t === 'string' && + (t === 'string' || t === 'number' || t === 'boolean'); +exports.isConfigType = isConfigType; +const undefOrType = (v, t) => v === undefined || typeof v === t; +const undefOrTypeArray = (v, t) => v === undefined || (Array.isArray(v) && v.every(x => typeof x === t)); +const isValidOption = (v, vo) => Array.isArray(v) ? v.every(x => isValidOption(x, vo)) : vo.includes(v); +// print the value type, for error message reporting +const valueType = (v) => typeof v === 'string' ? 'string' + : typeof v === 'boolean' ? 'boolean' + : typeof v === 'number' ? 'number' + : Array.isArray(v) ? + joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]' + : `${v.type}${v.multiple ? '[]' : ''}`; +const joinTypes = (types) => types.length === 1 && typeof types[0] === 'string' ? + types[0] + : `(${types.join('|')})`; +const isValidValue = (v, type, multi) => { + if (multi) { + if (!Array.isArray(v)) + return false; + return !v.some((v) => !isValidValue(v, type, false)); + } + if (Array.isArray(v)) + return false; + return typeof v === type; +}; +const isConfigOption = (o, type, multi) => !!o && + typeof o === 'object' && + (0, exports.isConfigType)(o.type) && + o.type === type && + undefOrType(o.short, 'string') && + undefOrType(o.description, 'string') && + undefOrType(o.hint, 'string') && + undefOrType(o.validate, 'function') && + (o.type === 'boolean' ? + o.validOptions === undefined + : undefOrTypeArray(o.validOptions, o.type)) && + (o.default === undefined || isValidValue(o.default, type, multi)) && + !!o.multiple === multi; +exports.isConfigOption = isConfigOption; +function num(o = {}) { + const { default: def, validate: val, validOptions, ...rest } = o; + if (def !== undefined && !isValidValue(def, 'number', false)) { + throw new TypeError('invalid default value', { + cause: { + found: def, + wanted: 'number', + }, + }); + } + if (!undefOrTypeArray(validOptions, 'number')) { + throw new TypeError('invalid validOptions', { + cause: { + found: validOptions, + wanted: 'number[]', + }, + }); + } + const validate = val ? + val + : undefined; + return { + ...rest, + default: def, + validate, + validOptions, + type: 'number', + multiple: false, + }; +} +function numList(o = {}) { + const { default: def, validate: val, validOptions, ...rest } = o; + if (def !== undefined && !isValidValue(def, 'number', true)) { + throw new TypeError('invalid default value', { + cause: { + found: def, + wanted: 'number[]', + }, + }); + } + if (!undefOrTypeArray(validOptions, 'number')) { + throw new TypeError('invalid validOptions', { + cause: { + found: validOptions, + wanted: 'number[]', + }, + }); + } + const validate = val ? + val + : undefined; + return { + ...rest, + default: def, + validate, + validOptions, + type: 'number', + multiple: true, + }; +} +function opt(o = {}) { + const { default: def, validate: val, validOptions, ...rest } = o; + if (def !== undefined && !isValidValue(def, 'string', false)) { + throw new TypeError('invalid default value', { + cause: { + found: def, + wanted: 'string', + }, + }); + } + if (!undefOrTypeArray(validOptions, 'string')) { + throw new TypeError('invalid validOptions', { + cause: { + found: validOptions, + wanted: 'string[]', + }, + }); + } + const validate = val ? + val + : undefined; + return { + ...rest, + default: def, + validate, + validOptions, + type: 'string', + multiple: false, + }; +} +function optList(o = {}) { + const { default: def, validate: val, validOptions, ...rest } = o; + if (def !== undefined && !isValidValue(def, 'string', true)) { + throw new TypeError('invalid default value', { + cause: { + found: def, + wanted: 'string[]', + }, + }); + } + if (!undefOrTypeArray(validOptions, 'string')) { + throw new TypeError('invalid validOptions', { + cause: { + found: validOptions, + wanted: 'string[]', + }, + }); + } + const validate = val ? + val + : undefined; + return { + ...rest, + default: def, + validate, + validOptions, + type: 'string', + multiple: true, + }; +} +function flag(o = {}) { + const { hint, default: def, validate: val, ...rest } = o; + delete rest.validOptions; + if (def !== undefined && !isValidValue(def, 'boolean', false)) { + throw new TypeError('invalid default value'); + } + const validate = val ? + val + : undefined; + if (hint !== undefined) { + throw new TypeError('cannot provide hint for flag'); + } + return { + ...rest, + default: def, + validate, + type: 'boolean', + multiple: false, + }; +} +function flagList(o = {}) { + const { hint, default: def, validate: val, ...rest } = o; + delete rest.validOptions; + if (def !== undefined && !isValidValue(def, 'boolean', true)) { + throw new TypeError('invalid default value'); + } + const validate = val ? + val + : undefined; + if (hint !== undefined) { + throw new TypeError('cannot provide hint for flag list'); + } + return { + ...rest, + default: def, + validate, + type: 'boolean', + multiple: true, + }; +} +const toParseArgsOptionsConfig = (options) => { + const c = {}; + for (const longOption in options) { + const config = options[longOption]; + /* c8 ignore start */ + if (!config) { + throw new Error('config must be an object: ' + longOption); + } + /* c8 ignore start */ + if ((0, exports.isConfigOption)(config, 'number', true)) { + c[longOption] = { + type: 'string', + multiple: true, + default: config.default?.map(c => String(c)), + }; + } + else if ((0, exports.isConfigOption)(config, 'number', false)) { + c[longOption] = { + type: 'string', + multiple: false, + default: config.default === undefined ? + undefined + : String(config.default), + }; + } + else { + const conf = config; + c[longOption] = { + type: conf.type, + multiple: !!conf.multiple, + default: conf.default, + }; + } + const clo = c[longOption]; + if (typeof config.short === 'string') { + clo.short = config.short; + } + if (config.type === 'boolean' && + !longOption.startsWith('no-') && + !options[`no-${longOption}`]) { + c[`no-${longOption}`] = { + type: 'boolean', + multiple: config.multiple, + }; + } + } + return c; +}; +const isHeading = (r) => r.type === 'heading'; +const isDescription = (r) => r.type === 'description'; +/** + * Class returned by the {@link jack} function and all configuration + * definition methods. This is what gets chained together. + */ +class Jack { + #configSet; + #shorts; + #options; + #fields = []; + #env; + #envPrefix; + #allowPositionals; + #usage; + #usageMarkdown; + constructor(options = {}) { + this.#options = options; + this.#allowPositionals = options.allowPositionals !== false; + this.#env = + this.#options.env === undefined ? process.env : this.#options.env; + this.#envPrefix = options.envPrefix; + // We need to fib a little, because it's always the same object, but it + // starts out as having an empty config set. Then each method that adds + // fields returns `this as Jack` + this.#configSet = Object.create(null); + this.#shorts = Object.create(null); + } + /** + * Set the default value (which will still be overridden by env or cli) + * as if from a parsed config file. The optional `source` param, if + * provided, will be included in error messages if a value is invalid or + * unknown. + */ + setConfigValues(values, source = '') { + try { + this.validate(values); + } + catch (er) { + const e = er; + if (source && e && typeof e === 'object') { + if (e.cause && typeof e.cause === 'object') { + Object.assign(e.cause, { path: source }); + } + else { + e.cause = { path: source }; + } + } + throw e; + } + for (const [field, value] of Object.entries(values)) { + const my = this.#configSet[field]; + // already validated, just for TS's benefit + /* c8 ignore start */ + if (!my) { + throw new Error('unexpected field in config set: ' + field, { + cause: { found: field }, + }); + } + /* c8 ignore stop */ + my.default = value; + } + return this; + } + /** + * Parse a string of arguments, and return the resulting + * `{ values, positionals }` object. + * + * If an {@link JackOptions#envPrefix} is set, then it will read default + * values from the environment, and write the resulting values back + * to the environment as well. + * + * Environment values always take precedence over any other value, except + * an explicit CLI setting. + */ + parse(args = process.argv) { + this.loadEnvDefaults(); + const p = this.parseRaw(args); + this.applyDefaults(p); + this.writeEnv(p); + return p; + } + loadEnvDefaults() { + if (this.#envPrefix) { + for (const [field, my] of Object.entries(this.#configSet)) { + const ek = toEnvKey(this.#envPrefix, field); + const env = this.#env[ek]; + if (env !== undefined) { + my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim); + } + } + } + } + applyDefaults(p) { + for (const [field, c] of Object.entries(this.#configSet)) { + if (c.default !== undefined && !(field in p.values)) { + //@ts-ignore + p.values[field] = c.default; + } + } + } + /** + * Only parse the command line arguments passed in. + * Does not strip off the `node script.js` bits, so it must be just the + * arguments you wish to have parsed. + * Does not read from or write to the environment, or set defaults. + */ + parseRaw(args) { + if (args === process.argv) { + args = args.slice(process._eval !== undefined ? 1 : 2); + } + const options = toParseArgsOptionsConfig(this.#configSet); + const result = (0, parse_args_js_1.parseArgs)({ + args, + options, + // always strict, but using our own logic + strict: false, + allowPositionals: this.#allowPositionals, + tokens: true, + }); + const p = { + values: {}, + positionals: [], + }; + for (const token of result.tokens) { + if (token.kind === 'positional') { + p.positionals.push(token.value); + if (this.#options.stopAtPositional || + this.#options.stopAtPositionalTest?.(token.value)) { + p.positionals.push(...args.slice(token.index + 1)); + break; + } + } + else if (token.kind === 'option') { + let value = undefined; + if (token.name.startsWith('no-')) { + const my = this.#configSet[token.name]; + const pname = token.name.substring('no-'.length); + const pos = this.#configSet[pname]; + if (pos && + pos.type === 'boolean' && + (!my || + (my.type === 'boolean' && !!my.multiple === !!pos.multiple))) { + value = false; + token.name = pname; + } + } + const my = this.#configSet[token.name]; + if (!my) { + throw new Error(`Unknown option '${token.rawName}'. ` + + `To specify a positional argument starting with a '-', ` + + `place it at the end of the command after '--', as in ` + + `'-- ${token.rawName}'`, { + cause: { + found: token.rawName + (token.value ? `=${token.value}` : ''), + }, + }); + } + if (value === undefined) { + if (token.value === undefined) { + if (my.type !== 'boolean') { + throw new Error(`No value provided for ${token.rawName}, expected ${my.type}`, { + cause: { + name: token.rawName, + wanted: valueType(my), + }, + }); + } + value = true; + } + else { + if (my.type === 'boolean') { + throw new Error(`Flag ${token.rawName} does not take a value, received '${token.value}'`, { cause: { found: token } }); + } + if (my.type === 'string') { + value = token.value; + } + else { + value = +token.value; + if (value !== value) { + throw new Error(`Invalid value '${token.value}' provided for ` + + `'${token.rawName}' option, expected number`, { + cause: { + name: token.rawName, + found: token.value, + wanted: 'number', + }, + }); + } + } + } + } + if (my.multiple) { + const pv = p.values; + const tn = pv[token.name] ?? []; + pv[token.name] = tn; + tn.push(value); + } + else { + const pv = p.values; + pv[token.name] = value; + } + } + } + for (const [field, value] of Object.entries(p.values)) { + const valid = this.#configSet[field]?.validate; + const validOptions = this.#configSet[field]?.validOptions; + let cause; + if (validOptions && !isValidOption(value, validOptions)) { + cause = { name: field, found: value, validOptions: validOptions }; + } + if (valid && !valid(value)) { + cause ??= { name: field, found: value }; + } + if (cause) { + throw new Error(`Invalid value provided for --${field}: ${JSON.stringify(value)}`, { cause }); + } + } + return p; + } + /** + * do not set fields as 'no-foo' if 'foo' exists and both are bools + * just set foo. + */ + #noNoFields(f, val, s = f) { + if (!f.startsWith('no-') || typeof val !== 'boolean') + return; + const yes = f.substring('no-'.length); + // recurse so we get the core config key we care about. + this.#noNoFields(yes, val, s); + if (this.#configSet[yes]?.type === 'boolean') { + throw new Error(`do not set '${s}', instead set '${yes}' as desired.`, { cause: { found: s, wanted: yes } }); + } + } + /** + * Validate that any arbitrary object is a valid configuration `values` + * object. Useful when loading config files or other sources. + */ + validate(o) { + if (!o || typeof o !== 'object') { + throw new Error('Invalid config: not an object', { + cause: { found: o }, + }); + } + const opts = o; + for (const field in o) { + const value = opts[field]; + /* c8 ignore next - for TS */ + if (value === undefined) + continue; + this.#noNoFields(field, value); + const config = this.#configSet[field]; + if (!config) { + throw new Error(`Unknown config option: ${field}`, { + cause: { found: field }, + }); + } + if (!isValidValue(value, config.type, !!config.multiple)) { + throw new Error(`Invalid value ${valueType(value)} for ${field}, expected ${valueType(config)}`, { + cause: { + name: field, + found: value, + wanted: valueType(config), + }, + }); + } + let cause; + if (config.validOptions && + !isValidOption(value, config.validOptions)) { + cause = { + name: field, + found: value, + validOptions: config.validOptions, + }; + } + if (config.validate && !config.validate(value)) { + cause ??= { name: field, found: value }; + } + if (cause) { + throw new Error(`Invalid config value for ${field}: ${value}`, { + cause, + }); + } + } + } + writeEnv(p) { + if (!this.#env || !this.#envPrefix) + return; + for (const [field, value] of Object.entries(p.values)) { + const my = this.#configSet[field]; + this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(value, my?.delim); + } + } + /** + * Add a heading to the usage output banner + */ + heading(text, level, { pre = false } = {}) { + if (level === undefined) { + level = this.#fields.some(r => isHeading(r)) ? 2 : 1; + } + this.#fields.push({ type: 'heading', text, level, pre }); + return this; + } + /** + * Add a long-form description to the usage output at this position. + */ + description(text, { pre } = {}) { + this.#fields.push({ type: 'description', text, pre }); + return this; + } + /** + * Add one or more number fields. + */ + num(fields) { + return this.#addFields(fields, num); + } + /** + * Add one or more multiple number fields. + */ + numList(fields) { + return this.#addFields(fields, numList); + } + /** + * Add one or more string option fields. + */ + opt(fields) { + return this.#addFields(fields, opt); + } + /** + * Add one or more multiple string option fields. + */ + optList(fields) { + return this.#addFields(fields, optList); + } + /** + * Add one or more flag fields. + */ + flag(fields) { + return this.#addFields(fields, flag); + } + /** + * Add one or more multiple flag fields. + */ + flagList(fields) { + return this.#addFields(fields, flagList); + } + /** + * Generic field definition method. Similar to flag/flagList/number/etc, + * but you must specify the `type` (and optionally `multiple` and `delim`) + * fields on each one, or Jack won't know how to define them. + */ + addFields(fields) { + const next = this; + for (const [name, field] of Object.entries(fields)) { + this.#validateName(name, field); + next.#fields.push({ + type: 'config', + name, + value: field, + }); + } + Object.assign(next.#configSet, fields); + return next; + } + #addFields(fields, fn) { + const next = this; + Object.assign(next.#configSet, Object.fromEntries(Object.entries(fields).map(([name, field]) => { + this.#validateName(name, field); + const option = fn(field); + next.#fields.push({ + type: 'config', + name, + value: option, + }); + return [name, option]; + }))); + return next; + } + #validateName(name, field) { + if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) { + throw new TypeError(`Invalid option name: ${name}, ` + + `must be '-' delimited ASCII alphanumeric`); + } + if (this.#configSet[name]) { + throw new TypeError(`Cannot redefine option ${field}`); + } + if (this.#shorts[name]) { + throw new TypeError(`Cannot redefine option ${name}, already ` + + `in use for ${this.#shorts[name]}`); + } + if (field.short) { + if (!/^[a-zA-Z0-9]$/.test(field.short)) { + throw new TypeError(`Invalid ${name} short option: ${field.short}, ` + + 'must be 1 ASCII alphanumeric character'); + } + if (this.#shorts[field.short]) { + throw new TypeError(`Invalid ${name} short option: ${field.short}, ` + + `already in use for ${this.#shorts[field.short]}`); + } + this.#shorts[field.short] = name; + this.#shorts[name] = name; + } + } + /** + * Return the usage banner for the given configuration + */ + usage() { + if (this.#usage) + return this.#usage; + let headingLevel = 1; + const ui = (0, cliui_1.default)({ width }); + const first = this.#fields[0]; + let start = first?.type === 'heading' ? 1 : 0; + if (first?.type === 'heading') { + ui.div({ + padding: [0, 0, 0, 0], + text: normalize(first.text), + }); + } + ui.div({ padding: [0, 0, 0, 0], text: 'Usage:' }); + if (this.#options.usage) { + ui.div({ + text: this.#options.usage, + padding: [0, 0, 0, 2], + }); + } + else { + const cmd = (0, node_path_1.basename)(String(process.argv[1])); + const shortFlags = []; + const shorts = []; + const flags = []; + const opts = []; + for (const [field, config] of Object.entries(this.#configSet)) { + if (config.short) { + if (config.type === 'boolean') + shortFlags.push(config.short); + else + shorts.push([config.short, config.hint || field]); + } + else { + if (config.type === 'boolean') + flags.push(field); + else + opts.push([field, config.hint || field]); + } + } + const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''; + const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join(''); + const lf = flags.map(k => ` --${k}`).join(''); + const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join(''); + const usage = `${cmd}${sf}${so}${lf}${lo}`.trim(); + ui.div({ + text: usage, + padding: [0, 0, 0, 2], + }); + } + ui.div({ padding: [0, 0, 0, 0], text: '' }); + const maybeDesc = this.#fields[start]; + if (maybeDesc && isDescription(maybeDesc)) { + const print = normalize(maybeDesc.text, maybeDesc.pre); + start++; + ui.div({ padding: [0, 0, 0, 0], text: print }); + ui.div({ padding: [0, 0, 0, 0], text: '' }); + } + const { rows, maxWidth } = this.#usageRows(start); + // every heading/description after the first gets indented by 2 + // extra spaces. + for (const row of rows) { + if (row.left) { + // If the row is too long, don't wrap it + // Bump the right-hand side down a line to make room + const configIndent = indent(Math.max(headingLevel, 2)); + if (row.left.length > maxWidth - 3) { + ui.div({ text: row.left, padding: [0, 0, 0, configIndent] }); + ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] }); + } + else { + ui.div({ + text: row.left, + padding: [0, 1, 0, configIndent], + width: maxWidth, + }, { padding: [0, 0, 0, 0], text: row.text }); + } + if (row.skipLine) { + ui.div({ padding: [0, 0, 0, 0], text: '' }); + } + } + else { + if (isHeading(row)) { + const { level } = row; + headingLevel = level; + // only h1 and h2 have bottom padding + // h3-h6 do not + const b = level <= 2 ? 1 : 0; + ui.div({ ...row, padding: [0, 0, b, indent(level)] }); + } + else { + ui.div({ ...row, padding: [0, 0, 1, indent(headingLevel + 1)] }); + } + } + } + return (this.#usage = ui.toString()); + } + /** + * Return the usage banner markdown for the given configuration + */ + usageMarkdown() { + if (this.#usageMarkdown) + return this.#usageMarkdown; + const out = []; + let headingLevel = 1; + const first = this.#fields[0]; + let start = first?.type === 'heading' ? 1 : 0; + if (first?.type === 'heading') { + out.push(`# ${normalizeOneLine(first.text)}`); + } + out.push('Usage:'); + if (this.#options.usage) { + out.push(normalizeMarkdown(this.#options.usage, true)); + } + else { + const cmd = (0, node_path_1.basename)(String(process.argv[1])); + const shortFlags = []; + const shorts = []; + const flags = []; + const opts = []; + for (const [field, config] of Object.entries(this.#configSet)) { + if (config.short) { + if (config.type === 'boolean') + shortFlags.push(config.short); + else + shorts.push([config.short, config.hint || field]); + } + else { + if (config.type === 'boolean') + flags.push(field); + else + opts.push([field, config.hint || field]); + } + } + const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''; + const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join(''); + const lf = flags.map(k => ` --${k}`).join(''); + const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join(''); + const usage = `${cmd}${sf}${so}${lf}${lo}`.trim(); + out.push(normalizeMarkdown(usage, true)); + } + const maybeDesc = this.#fields[start]; + if (maybeDesc && isDescription(maybeDesc)) { + out.push(normalizeMarkdown(maybeDesc.text, maybeDesc.pre)); + start++; + } + const { rows } = this.#usageRows(start); + // heading level in markdown is number of # ahead of text + for (const row of rows) { + if (row.left) { + out.push('#'.repeat(headingLevel + 1) + + ' ' + + normalizeOneLine(row.left, true)); + if (row.text) + out.push(normalizeMarkdown(row.text)); + } + else if (isHeading(row)) { + const { level } = row; + headingLevel = level; + out.push(`${'#'.repeat(headingLevel)} ${normalizeOneLine(row.text, row.pre)}`); + } + else { + out.push(normalizeMarkdown(row.text, !!row.pre)); + } + } + return (this.#usageMarkdown = out.join('\n\n') + '\n'); + } + #usageRows(start) { + // turn each config type into a row, and figure out the width of the + // left hand indentation for the option descriptions. + let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3))); + let maxWidth = 8; + let prev = undefined; + const rows = []; + for (const field of this.#fields.slice(start)) { + if (field.type !== 'config') { + if (prev?.type === 'config') + prev.skipLine = true; + prev = undefined; + field.text = normalize(field.text, !!field.pre); + rows.push(field); + continue; + } + const { value } = field; + const desc = value.description || ''; + const mult = value.multiple ? 'Can be set multiple times' : ''; + const opts = value.validOptions?.length ? + `Valid options:${value.validOptions.map(v => ` ${JSON.stringify(v)}`)}` + : ''; + const dmDelim = desc.includes('\n') ? '\n\n' : '\n'; + const extra = [opts, mult].join(dmDelim).trim(); + const text = (normalize(desc) + dmDelim + extra).trim(); + const hint = value.hint || + (value.type === 'number' ? 'n' + : value.type === 'string' ? field.name + : undefined); + const short = !value.short ? '' + : value.type === 'boolean' ? `-${value.short} ` + : `-${value.short}<${hint}> `; + const left = value.type === 'boolean' ? + `${short}--${field.name}` + : `${short}--${field.name}=<${hint}>`; + const row = { text, left, type: 'config' }; + if (text.length > width - maxMax) { + row.skipLine = true; + } + if (prev && left.length > maxMax) + prev.skipLine = true; + prev = row; + const len = left.length + 4; + if (len > maxWidth && len < maxMax) { + maxWidth = len; + } + rows.push(row); + } + return { rows, maxWidth }; + } + /** + * Return the configuration options as a plain object + */ + toJSON() { + return Object.fromEntries(Object.entries(this.#configSet).map(([field, def]) => [ + field, + { + type: def.type, + ...(def.multiple ? { multiple: true } : {}), + ...(def.delim ? { delim: def.delim } : {}), + ...(def.short ? { short: def.short } : {}), + ...(def.description ? + { description: normalize(def.description) } + : {}), + ...(def.validate ? { validate: def.validate } : {}), + ...(def.validOptions ? { validOptions: def.validOptions } : {}), + ...(def.default !== undefined ? { default: def.default } : {}), + ...(def.hint ? { hint: def.hint } : {}), + }, + ])); + } + /** + * Custom printer for `util.inspect` + */ + [node_util_1.inspect.custom](_, options) { + return `Jack ${(0, node_util_1.inspect)(this.toJSON(), options)}`; + } +} +exports.Jack = Jack; +// Unwrap and un-indent, so we can wrap description +// strings however makes them look nice in the code. +const normalize = (s, pre = false) => { + if (pre) + // prepend a ZWSP to each line so cliui doesn't strip it. + return s + .split('\n') + .map(l => `\u200b${l}`) + .join('\n'); + return s + .split(/^\s*```\s*$/gm) + .map((s, i) => { + if (i % 2 === 1) { + if (!s.trim()) { + return `\`\`\`\n\`\`\`\n`; + } + // outdent the ``` blocks, but preserve whitespace otherwise. + const split = s.split('\n'); + // throw out the \n at the start and end + split.pop(); + split.shift(); + const si = split.reduce((shortest, l) => { + /* c8 ignore next */ + const ind = l.match(/^\s*/)?.[0] ?? ''; + if (ind.length) + return Math.min(ind.length, shortest); + else + return shortest; + }, Infinity); + /* c8 ignore next */ + const i = isFinite(si) ? si : 0; + return ('\n```\n' + + split.map(s => `\u200b${s.substring(i)}`).join('\n') + + '\n```\n'); + } + return (s + // remove single line breaks, except for lists + .replace(/([^\n])\n[ \t]*([^\n])/g, (_, $1, $2) => !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\n${$2}`) + // normalize mid-line whitespace + .replace(/([^\n])[ \t]+([^\n])/g, '$1 $2') + // two line breaks are enough + .replace(/\n{3,}/g, '\n\n') + // remove any spaces at the start of a line + .replace(/\n[ \t]+/g, '\n') + .trim()); + }) + .join('\n'); +}; +// normalize for markdown printing, remove leading spaces on lines +const normalizeMarkdown = (s, pre = false) => { + const n = normalize(s, pre).replace(/\\/g, '\\\\'); + return pre ? + `\`\`\`\n${n.replace(/\u200b/g, '')}\n\`\`\`` + : n.replace(/\n +/g, '\n').trim(); +}; +const normalizeOneLine = (s, pre = false) => { + const n = normalize(s, pre) + .replace(/[\s\u200b]+/g, ' ') + .trim(); + return pre ? `\`${n}\`` : n; +}; +/** + * Main entry point. Create and return a {@link Jack} object. + */ +const jack = (options = {}) => new Jack(options); +exports.jack = jack; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/jackspeak/dist/commonjs/index.js.map b/node_modules/jackspeak/dist/commonjs/index.js.map new file mode 100644 index 00000000..e30e58c7 --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type ConfigType = 'number' | 'string' | 'boolean'\n\n/**\n * Given a Jack object, get the typeof its ConfigSet\n */\nexport type Unwrap = J extends Jack ? C : never\n\nimport { inspect, InspectOptions, ParseArgsConfig } from 'node:util'\nimport { parseArgs } from './parse-args.js'\n\n// it's a tiny API, just cast it inline, it's fine\n//@ts-ignore\nimport cliui from '@isaacs/cliui'\nimport { basename } from 'node:path'\n\nconst width = Math.min(\n (process && process.stdout && process.stdout.columns) || 80,\n 80,\n)\n\n// indentation spaces from heading level\nconst indent = (n: number) => (n - 1) * 2\n\nconst toEnvKey = (pref: string, key: string): string => {\n return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]\n .join(' ')\n .trim()\n .toUpperCase()\n .replace(/ /g, '_')\n}\n\nconst toEnvVal = (\n value: string | boolean | number | string[] | boolean[] | number[],\n delim: string = '\\n',\n): string => {\n const str =\n typeof value === 'string' ? value\n : typeof value === 'boolean' ?\n value ? '1'\n : '0'\n : typeof value === 'number' ? String(value)\n : Array.isArray(value) ?\n value.map((v: string | number | boolean) => toEnvVal(v)).join(delim)\n : /* c8 ignore start */ undefined\n if (typeof str !== 'string') {\n throw new Error(\n `could not serialize value to environment: ${JSON.stringify(value)}`,\n )\n }\n /* c8 ignore stop */\n return str\n}\n\nconst fromEnvVal = (\n env: string,\n type: T,\n multiple: M,\n delim: string = '\\n',\n): ValidValue =>\n (multiple ?\n env ? env.split(delim).map(v => fromEnvVal(v, type, false))\n : []\n : type === 'string' ? env\n : type === 'boolean' ? env === '1'\n : +env.trim()) as ValidValue\n\n/**\n * Defines the type of value that is valid, given a config definition's\n * {@link ConfigType} and boolean multiple setting\n */\nexport type ValidValue<\n T extends ConfigType = ConfigType,\n M extends boolean = boolean,\n> =\n [T, M] extends ['number', true] ? number[]\n : [T, M] extends ['string', true] ? string[]\n : [T, M] extends ['boolean', true] ? boolean[]\n : [T, M] extends ['number', false] ? number\n : [T, M] extends ['string', false] ? string\n : [T, M] extends ['boolean', false] ? boolean\n : [T, M] extends ['string', boolean] ? string | string[]\n : [T, M] extends ['boolean', boolean] ? boolean | boolean[]\n : [T, M] extends ['number', boolean] ? number | number[]\n : [T, M] extends [ConfigType, false] ? string | number | boolean\n : [T, M] extends [ConfigType, true] ? string[] | number[] | boolean[]\n : string | number | boolean | string[] | number[] | boolean[]\n\n/**\n * The meta information for a config option definition, when the\n * type and multiple values can be inferred by the method being used\n */\nexport type ConfigOptionMeta<\n T extends ConfigType,\n M extends boolean = boolean,\n O extends\n | undefined\n | (T extends 'boolean' ? never\n : T extends 'string' ? readonly string[]\n : T extends 'number' ? readonly number[]\n : readonly number[] | readonly string[]) =\n | undefined\n | (T extends 'boolean' ? never\n : T extends 'string' ? readonly string[]\n : T extends 'number' ? readonly number[]\n : readonly number[] | readonly string[]),\n> = {\n default?:\n | undefined\n | (ValidValue &\n (O extends number[] | string[] ?\n M extends false ?\n O[number]\n : O[number][]\n : unknown))\n validOptions?: O\n description?: string\n validate?:\n | ((v: unknown) => v is ValidValue)\n | ((v: unknown) => boolean)\n short?: string | undefined\n type?: T\n hint?: T extends 'boolean' ? never : string\n delim?: M extends true ? string : never\n} & (M extends false ? { multiple?: false | undefined }\n: M extends true ? { multiple: true }\n: { multiple?: boolean })\n\n/**\n * A set of {@link ConfigOptionMeta} fields, referenced by their longOption\n * string values.\n */\nexport type ConfigMetaSet<\n T extends ConfigType,\n M extends boolean = boolean,\n> = {\n [longOption: string]: ConfigOptionMeta\n}\n\n/**\n * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet}\n */\nexport type ConfigSetFromMetaSet<\n T extends ConfigType,\n M extends boolean,\n S extends ConfigMetaSet,\n> = {\n [longOption in keyof S]: ConfigOptionBase\n}\n\n/**\n * Fields that can be set on a {@link ConfigOptionBase} or\n * {@link ConfigOptionMeta} based on whether or not the field is known to be\n * multiple.\n */\nexport type MultiType =\n M extends true ?\n {\n multiple: true\n delim?: string | undefined\n }\n : M extends false ?\n {\n multiple?: false | undefined\n delim?: undefined\n }\n : {\n multiple?: boolean | undefined\n delim?: string | undefined\n }\n\n/**\n * A config field definition, in its full representation.\n */\nexport type ConfigOptionBase<\n T extends ConfigType,\n M extends boolean = boolean,\n> = {\n type: T\n short?: string | undefined\n default?: ValidValue | undefined\n description?: string\n hint?: T extends 'boolean' ? undefined : string | undefined\n validate?: (v: unknown) => v is ValidValue\n validOptions?: T extends 'boolean' ? undefined\n : T extends 'string' ? readonly string[]\n : T extends 'number' ? readonly number[]\n : readonly number[] | readonly string[]\n} & MultiType\n\nexport const isConfigType = (t: string): t is ConfigType =>\n typeof t === 'string' &&\n (t === 'string' || t === 'number' || t === 'boolean')\n\nconst undefOrType = (v: unknown, t: string): boolean =>\n v === undefined || typeof v === t\nconst undefOrTypeArray = (v: unknown, t: string): boolean =>\n v === undefined || (Array.isArray(v) && v.every(x => typeof x === t))\n\nconst isValidOption = (v: unknown, vo: readonly unknown[]): boolean =>\n Array.isArray(v) ? v.every(x => isValidOption(x, vo)) : vo.includes(v)\n\n// print the value type, for error message reporting\nconst valueType = (\n v:\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[]\n | { type: ConfigType; multiple?: boolean },\n): string =>\n typeof v === 'string' ? 'string'\n : typeof v === 'boolean' ? 'boolean'\n : typeof v === 'number' ? 'number'\n : Array.isArray(v) ?\n joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'\n : `${v.type}${v.multiple ? '[]' : ''}`\n\nconst joinTypes = (types: string[]): string =>\n types.length === 1 && typeof types[0] === 'string' ?\n types[0]\n : `(${types.join('|')})`\n\nconst isValidValue = (\n v: unknown,\n type: T,\n multi: M,\n): v is ValidValue => {\n if (multi) {\n if (!Array.isArray(v)) return false\n return !v.some((v: unknown) => !isValidValue(v, type, false))\n }\n if (Array.isArray(v)) return false\n return typeof v === type\n}\n\nexport const isConfigOption = (\n o: any,\n type: T,\n multi: M,\n): o is ConfigOptionBase =>\n !!o &&\n typeof o === 'object' &&\n isConfigType(o.type) &&\n o.type === type &&\n undefOrType(o.short, 'string') &&\n undefOrType(o.description, 'string') &&\n undefOrType(o.hint, 'string') &&\n undefOrType(o.validate, 'function') &&\n (o.type === 'boolean' ?\n o.validOptions === undefined\n : undefOrTypeArray(o.validOptions, o.type)) &&\n (o.default === undefined || isValidValue(o.default, type, multi)) &&\n !!o.multiple === multi\n\n/**\n * A set of {@link ConfigOptionBase} objects, referenced by their longOption\n * string values.\n */\nexport type ConfigSet = {\n [longOption: string]: ConfigOptionBase\n}\n\n/**\n * The 'values' field returned by {@link Jack#parse}\n */\nexport type OptionsResults = {\n [k in keyof T]?: T[k]['validOptions'] extends (\n readonly string[] | readonly number[]\n ) ?\n T[k] extends ConfigOptionBase<'string' | 'number', false> ?\n T[k]['validOptions'][number]\n : T[k] extends ConfigOptionBase<'string' | 'number', true> ?\n T[k]['validOptions'][number][]\n : never\n : T[k] extends ConfigOptionBase<'string', false> ? string\n : T[k] extends ConfigOptionBase<'string', true> ? string[]\n : T[k] extends ConfigOptionBase<'number', false> ? number\n : T[k] extends ConfigOptionBase<'number', true> ? number[]\n : T[k] extends ConfigOptionBase<'boolean', false> ? boolean\n : T[k] extends ConfigOptionBase<'boolean', true> ? boolean[]\n : never\n}\n\n/**\n * The object retured by {@link Jack#parse}\n */\nexport type Parsed = {\n values: OptionsResults\n positionals: string[]\n}\n\nfunction num(\n o: ConfigOptionMeta<'number', false> = {},\n): ConfigOptionBase<'number', false> {\n const { default: def, validate: val, validOptions, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', false)) {\n throw new TypeError('invalid default value', {\n cause: {\n found: def,\n wanted: 'number',\n },\n })\n }\n if (!undefOrTypeArray(validOptions, 'number')) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: 'number[]',\n },\n })\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'number', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n validOptions,\n type: 'number',\n multiple: false,\n }\n}\n\nfunction numList(\n o: ConfigOptionMeta<'number'> = {},\n): ConfigOptionBase<'number', true> {\n const { default: def, validate: val, validOptions, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', true)) {\n throw new TypeError('invalid default value', {\n cause: {\n found: def,\n wanted: 'number[]',\n },\n })\n }\n if (!undefOrTypeArray(validOptions, 'number')) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: 'number[]',\n },\n })\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'number', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n validOptions,\n type: 'number',\n multiple: true,\n }\n}\n\nfunction opt(\n o: ConfigOptionMeta<'string', false> = {},\n): ConfigOptionBase<'string', false> {\n const { default: def, validate: val, validOptions, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', false)) {\n throw new TypeError('invalid default value', {\n cause: {\n found: def,\n wanted: 'string',\n },\n })\n }\n if (!undefOrTypeArray(validOptions, 'string')) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: 'string[]',\n },\n })\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'string', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n validOptions,\n type: 'string',\n multiple: false,\n }\n}\n\nfunction optList(\n o: ConfigOptionMeta<'string'> = {},\n): ConfigOptionBase<'string', true> {\n const { default: def, validate: val, validOptions, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', true)) {\n throw new TypeError('invalid default value', {\n cause: {\n found: def,\n wanted: 'string[]',\n },\n })\n }\n if (!undefOrTypeArray(validOptions, 'string')) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: 'string[]',\n },\n })\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'string', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n validOptions,\n type: 'string',\n multiple: true,\n }\n}\n\nfunction flag(\n o: ConfigOptionMeta<'boolean', false> = {},\n): ConfigOptionBase<'boolean', false> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false>\n delete (rest as ConfigOptionMeta<'string', false>).validOptions\n if (def !== undefined && !isValidValue(def, 'boolean', false)) {\n throw new TypeError('invalid default value')\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'boolean', false>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: false,\n }\n}\n\nfunction flagList(\n o: ConfigOptionMeta<'boolean'> = {},\n): ConfigOptionBase<'boolean', true> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false>\n delete (rest as ConfigOptionMeta<'string', false>).validOptions\n if (def !== undefined && !isValidValue(def, 'boolean', true)) {\n throw new TypeError('invalid default value')\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'boolean', true>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag list')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: true,\n }\n}\nconst toParseArgsOptionsConfig = (\n options: ConfigSet,\n): Exclude => {\n const c: Exclude = {}\n for (const longOption in options) {\n const config = options[longOption]\n /* c8 ignore start */\n if (!config) {\n throw new Error('config must be an object: ' + longOption)\n }\n /* c8 ignore start */\n if (isConfigOption(config, 'number', true)) {\n c[longOption] = {\n type: 'string',\n multiple: true,\n default: config.default?.map(c => String(c)),\n }\n } else if (isConfigOption(config, 'number', false)) {\n c[longOption] = {\n type: 'string',\n multiple: false,\n default:\n config.default === undefined ?\n undefined\n : String(config.default),\n }\n } else {\n const conf = config as\n | ConfigOptionBase<'string'>\n | ConfigOptionBase<'boolean'>\n c[longOption] = {\n type: conf.type,\n multiple: !!conf.multiple,\n default: conf.default,\n }\n }\n const clo = c[longOption] as ConfigOptionBase\n if (typeof config.short === 'string') {\n clo.short = config.short\n }\n\n if (\n config.type === 'boolean' &&\n !longOption.startsWith('no-') &&\n !options[`no-${longOption}`]\n ) {\n c[`no-${longOption}`] = {\n type: 'boolean',\n multiple: config.multiple,\n }\n }\n }\n return c\n}\n\n/**\n * A row used when generating the {@link Jack#usage} string\n */\nexport interface Row {\n left?: string\n text: string\n skipLine?: boolean\n type?: string\n}\n\n/**\n * A heading for a section in the usage, created by the jack.heading()\n * method.\n *\n * First heading is always level 1, subsequent headings default to 2.\n *\n * The level of the nearest heading level sets the indentation of the\n * description that follows.\n */\nexport interface Heading extends Row {\n type: 'heading'\n text: string\n left?: ''\n skipLine?: boolean\n level: number\n pre?: boolean\n}\nconst isHeading = (r: { type?: string }): r is Heading =>\n r.type === 'heading'\n\n/**\n * An arbitrary blob of text describing some stuff, set by the\n * jack.description() method.\n *\n * Indentation determined by level of the nearest header.\n */\nexport interface Description extends Row {\n type: 'description'\n text: string\n left?: ''\n skipLine?: boolean\n pre?: boolean\n}\n\nconst isDescription = (r: { type?: string }): r is Description =>\n r.type === 'description'\n\n/**\n * A heading or description row used when generating the {@link Jack#usage}\n * string\n */\nexport type TextRow = Heading | Description\n\n/**\n * Either a {@link TextRow} or a reference to a {@link ConfigOptionBase}\n */\nexport type UsageField =\n | TextRow\n | {\n type: 'config'\n name: string\n value: ConfigOptionBase\n }\n\n/**\n * Options provided to the {@link Jack} constructor\n */\nexport interface JackOptions {\n /**\n * Whether to allow positional arguments\n *\n * @default true\n */\n allowPositionals?: boolean\n\n /**\n * Prefix to use when reading/writing the environment variables\n *\n * If not specified, environment behavior will not be available.\n */\n envPrefix?: string\n\n /**\n * Environment object to read/write. Defaults `process.env`.\n * No effect if `envPrefix` is not set.\n */\n env?: { [k: string]: string | undefined }\n\n /**\n * A short usage string. If not provided, will be generated from the\n * options provided, but that can of course be rather verbose if\n * there are a lot of options.\n */\n usage?: string\n\n /**\n * Stop parsing flags and opts at the first positional argument.\n * This is to support cases like `cmd [flags] [options]`, where\n * each subcommand may have different options. This effectively treats\n * any positional as a `--` argument. Only relevant if `allowPositionals`\n * is true.\n *\n * To do subcommands, set this option, look at the first positional, and\n * parse the remaining positionals as appropriate.\n *\n * @default false\n */\n stopAtPositional?: boolean\n\n /**\n * Conditional `stopAtPositional`. If set to a `(string)=>boolean` function,\n * will be called with each positional argument encountered. If the function\n * returns true, then parsing will stop at that point.\n */\n stopAtPositionalTest?: (arg: string) => boolean\n}\n\n/**\n * Class returned by the {@link jack} function and all configuration\n * definition methods. This is what gets chained together.\n */\nexport class Jack {\n #configSet: C\n #shorts: { [k: string]: string }\n #options: JackOptions\n #fields: UsageField[] = []\n #env: { [k: string]: string | undefined }\n #envPrefix?: string\n #allowPositionals: boolean\n #usage?: string\n #usageMarkdown?: string\n\n constructor(options: JackOptions = {}) {\n this.#options = options\n this.#allowPositionals = options.allowPositionals !== false\n this.#env =\n this.#options.env === undefined ? process.env : this.#options.env\n this.#envPrefix = options.envPrefix\n // We need to fib a little, because it's always the same object, but it\n // starts out as having an empty config set. Then each method that adds\n // fields returns `this as Jack`\n this.#configSet = Object.create(null) as C\n this.#shorts = Object.create(null)\n }\n\n /**\n * Set the default value (which will still be overridden by env or cli)\n * as if from a parsed config file. The optional `source` param, if\n * provided, will be included in error messages if a value is invalid or\n * unknown.\n */\n setConfigValues(values: OptionsResults, source = '') {\n try {\n this.validate(values)\n } catch (er) {\n const e = er as Error\n if (source && e && typeof e === 'object') {\n if (e.cause && typeof e.cause === 'object') {\n Object.assign(e.cause, { path: source })\n } else {\n e.cause = { path: source }\n }\n }\n throw e\n }\n for (const [field, value] of Object.entries(values)) {\n const my = this.#configSet[field]\n // already validated, just for TS's benefit\n /* c8 ignore start */\n if (!my) {\n throw new Error('unexpected field in config set: ' + field, {\n cause: { found: field },\n })\n }\n /* c8 ignore stop */\n my.default = value\n }\n return this\n }\n\n /**\n * Parse a string of arguments, and return the resulting\n * `{ values, positionals }` object.\n *\n * If an {@link JackOptions#envPrefix} is set, then it will read default\n * values from the environment, and write the resulting values back\n * to the environment as well.\n *\n * Environment values always take precedence over any other value, except\n * an explicit CLI setting.\n */\n parse(args: string[] = process.argv): Parsed {\n this.loadEnvDefaults()\n const p = this.parseRaw(args)\n this.applyDefaults(p)\n this.writeEnv(p)\n return p\n }\n\n loadEnvDefaults() {\n if (this.#envPrefix) {\n for (const [field, my] of Object.entries(this.#configSet)) {\n const ek = toEnvKey(this.#envPrefix, field)\n const env = this.#env[ek]\n if (env !== undefined) {\n my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim)\n }\n }\n }\n }\n\n applyDefaults(p: Parsed) {\n for (const [field, c] of Object.entries(this.#configSet)) {\n if (c.default !== undefined && !(field in p.values)) {\n //@ts-ignore\n p.values[field] = c.default\n }\n }\n }\n\n /**\n * Only parse the command line arguments passed in.\n * Does not strip off the `node script.js` bits, so it must be just the\n * arguments you wish to have parsed.\n * Does not read from or write to the environment, or set defaults.\n */\n parseRaw(args: string[]): Parsed {\n if (args === process.argv) {\n args = args.slice(\n (process as { _eval?: string })._eval !== undefined ? 1 : 2,\n )\n }\n\n const options = toParseArgsOptionsConfig(this.#configSet)\n const result = parseArgs({\n args,\n options,\n // always strict, but using our own logic\n strict: false,\n allowPositionals: this.#allowPositionals,\n tokens: true,\n })\n\n const p: Parsed = {\n values: {},\n positionals: [],\n }\n for (const token of result.tokens) {\n if (token.kind === 'positional') {\n p.positionals.push(token.value)\n if (\n this.#options.stopAtPositional ||\n this.#options.stopAtPositionalTest?.(token.value)\n ) {\n p.positionals.push(...args.slice(token.index + 1))\n break\n }\n } else if (token.kind === 'option') {\n let value: string | number | boolean | undefined = undefined\n if (token.name.startsWith('no-')) {\n const my = this.#configSet[token.name]\n const pname = token.name.substring('no-'.length)\n const pos = this.#configSet[pname]\n if (\n pos &&\n pos.type === 'boolean' &&\n (!my ||\n (my.type === 'boolean' && !!my.multiple === !!pos.multiple))\n ) {\n value = false\n token.name = pname\n }\n }\n const my = this.#configSet[token.name]\n if (!my) {\n throw new Error(\n `Unknown option '${token.rawName}'. ` +\n `To specify a positional argument starting with a '-', ` +\n `place it at the end of the command after '--', as in ` +\n `'-- ${token.rawName}'`,\n {\n cause: {\n found:\n token.rawName + (token.value ? `=${token.value}` : ''),\n },\n },\n )\n }\n if (value === undefined) {\n if (token.value === undefined) {\n if (my.type !== 'boolean') {\n throw new Error(\n `No value provided for ${token.rawName}, expected ${my.type}`,\n {\n cause: {\n name: token.rawName,\n wanted: valueType(my),\n },\n },\n )\n }\n value = true\n } else {\n if (my.type === 'boolean') {\n throw new Error(\n `Flag ${token.rawName} does not take a value, received '${token.value}'`,\n { cause: { found: token } },\n )\n }\n if (my.type === 'string') {\n value = token.value\n } else {\n value = +token.value\n if (value !== value) {\n throw new Error(\n `Invalid value '${token.value}' provided for ` +\n `'${token.rawName}' option, expected number`,\n {\n cause: {\n name: token.rawName,\n found: token.value,\n wanted: 'number',\n },\n },\n )\n }\n }\n }\n }\n if (my.multiple) {\n const pv = p.values as {\n [k: string]: (string | number | boolean)[]\n }\n const tn = pv[token.name] ?? []\n pv[token.name] = tn\n tn.push(value)\n } else {\n const pv = p.values as { [k: string]: string | number | boolean }\n pv[token.name] = value\n }\n }\n }\n\n for (const [field, value] of Object.entries(p.values)) {\n const valid = this.#configSet[field]?.validate\n const validOptions = this.#configSet[field]?.validOptions\n let cause:\n | undefined\n | {\n name: string\n found: unknown\n validOptions?: readonly string[] | readonly number[]\n }\n if (validOptions && !isValidOption(value, validOptions)) {\n cause = { name: field, found: value, validOptions: validOptions }\n }\n if (valid && !valid(value)) {\n cause ??= { name: field, found: value }\n }\n if (cause) {\n throw new Error(\n `Invalid value provided for --${field}: ${JSON.stringify(\n value,\n )}`,\n { cause },\n )\n }\n }\n\n return p\n }\n\n /**\n * do not set fields as 'no-foo' if 'foo' exists and both are bools\n * just set foo.\n */\n #noNoFields(f: string, val: unknown, s: string = f) {\n if (!f.startsWith('no-') || typeof val !== 'boolean') return\n const yes = f.substring('no-'.length)\n // recurse so we get the core config key we care about.\n this.#noNoFields(yes, val, s)\n if (this.#configSet[yes]?.type === 'boolean') {\n throw new Error(\n `do not set '${s}', instead set '${yes}' as desired.`,\n { cause: { found: s, wanted: yes } },\n )\n }\n }\n\n /**\n * Validate that any arbitrary object is a valid configuration `values`\n * object. Useful when loading config files or other sources.\n */\n validate(o: unknown): asserts o is Parsed['values'] {\n if (!o || typeof o !== 'object') {\n throw new Error('Invalid config: not an object', {\n cause: { found: o },\n })\n }\n const opts = o as Record\n for (const field in o) {\n const value = opts[field]\n /* c8 ignore next - for TS */\n if (value === undefined) continue\n this.#noNoFields(field, value)\n const config = this.#configSet[field]\n if (!config) {\n throw new Error(`Unknown config option: ${field}`, {\n cause: { found: field },\n })\n }\n if (!isValidValue(value, config.type, !!config.multiple)) {\n throw new Error(\n `Invalid value ${valueType(\n value,\n )} for ${field}, expected ${valueType(config)}`,\n {\n cause: {\n name: field,\n found: value,\n wanted: valueType(config),\n },\n },\n )\n }\n let cause:\n | undefined\n | {\n name: string\n found: any\n validOptions?: readonly string[] | readonly number[]\n }\n if (\n config.validOptions &&\n !isValidOption(value, config.validOptions)\n ) {\n cause = {\n name: field,\n found: value,\n validOptions: config.validOptions,\n }\n }\n if (config.validate && !config.validate(value)) {\n cause ??= { name: field, found: value }\n }\n if (cause) {\n throw new Error(`Invalid config value for ${field}: ${value}`, {\n cause,\n })\n }\n }\n }\n\n writeEnv(p: Parsed) {\n if (!this.#env || !this.#envPrefix) return\n for (const [field, value] of Object.entries(p.values)) {\n const my = this.#configSet[field]\n this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(\n value,\n my?.delim,\n )\n }\n }\n\n /**\n * Add a heading to the usage output banner\n */\n heading(\n text: string,\n level?: 1 | 2 | 3 | 4 | 5 | 6,\n { pre = false }: { pre?: boolean } = {},\n ): Jack {\n if (level === undefined) {\n level = this.#fields.some(r => isHeading(r)) ? 2 : 1\n }\n this.#fields.push({ type: 'heading', text, level, pre })\n return this\n }\n\n /**\n * Add a long-form description to the usage output at this position.\n */\n description(text: string, { pre }: { pre?: boolean } = {}): Jack {\n this.#fields.push({ type: 'description', text, pre })\n return this\n }\n\n /**\n * Add one or more number fields.\n */\n num>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, num)\n }\n\n /**\n * Add one or more multiple number fields.\n */\n numList>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, numList)\n }\n\n /**\n * Add one or more string option fields.\n */\n opt>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, opt)\n }\n\n /**\n * Add one or more multiple string option fields.\n */\n optList>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, optList)\n }\n\n /**\n * Add one or more flag fields.\n */\n flag>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, flag)\n }\n\n /**\n * Add one or more multiple flag fields.\n */\n flagList>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, flagList)\n }\n\n /**\n * Generic field definition method. Similar to flag/flagList/number/etc,\n * but you must specify the `type` (and optionally `multiple` and `delim`)\n * fields on each one, or Jack won't know how to define them.\n */\n addFields(fields: F): Jack {\n const next = this as unknown as Jack\n for (const [name, field] of Object.entries(fields)) {\n this.#validateName(name, field)\n next.#fields.push({\n type: 'config',\n name,\n value: field as ConfigOptionBase,\n })\n }\n Object.assign(next.#configSet, fields)\n return next\n }\n\n #addFields<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet,\n >(\n fields: F,\n fn: (m: ConfigOptionMeta) => ConfigOptionBase,\n ): Jack> {\n type NextC = C & ConfigSetFromMetaSet\n const next = this as unknown as Jack\n Object.assign(\n next.#configSet,\n Object.fromEntries(\n Object.entries(fields).map(([name, field]) => {\n this.#validateName(name, field)\n const option = fn(field)\n next.#fields.push({\n type: 'config',\n name,\n value: option as ConfigOptionBase,\n })\n return [name, option]\n }),\n ),\n )\n return next\n }\n\n #validateName(name: string, field: { short?: string }) {\n if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {\n throw new TypeError(\n `Invalid option name: ${name}, ` +\n `must be '-' delimited ASCII alphanumeric`,\n )\n }\n if (this.#configSet[name]) {\n throw new TypeError(`Cannot redefine option ${field}`)\n }\n if (this.#shorts[name]) {\n throw new TypeError(\n `Cannot redefine option ${name}, already ` +\n `in use for ${this.#shorts[name]}`,\n )\n }\n if (field.short) {\n if (!/^[a-zA-Z0-9]$/.test(field.short)) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n 'must be 1 ASCII alphanumeric character',\n )\n }\n if (this.#shorts[field.short]) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n `already in use for ${this.#shorts[field.short]}`,\n )\n }\n this.#shorts[field.short] = name\n this.#shorts[name] = name\n }\n }\n\n /**\n * Return the usage banner for the given configuration\n */\n usage(): string {\n if (this.#usage) return this.#usage\n\n let headingLevel = 1\n const ui = cliui({ width })\n const first = this.#fields[0]\n let start = first?.type === 'heading' ? 1 : 0\n if (first?.type === 'heading') {\n ui.div({\n padding: [0, 0, 0, 0],\n text: normalize(first.text),\n })\n }\n ui.div({ padding: [0, 0, 0, 0], text: 'Usage:' })\n if (this.#options.usage) {\n ui.div({\n text: this.#options.usage,\n padding: [0, 0, 0, 2],\n })\n } else {\n const cmd = basename(String(process.argv[1]))\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n ui.div({\n text: usage,\n padding: [0, 0, 0, 2],\n })\n }\n\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n const maybeDesc = this.#fields[start]\n if (maybeDesc && isDescription(maybeDesc)) {\n const print = normalize(maybeDesc.text, maybeDesc.pre)\n start++\n ui.div({ padding: [0, 0, 0, 0], text: print })\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n }\n\n const { rows, maxWidth } = this.#usageRows(start)\n\n // every heading/description after the first gets indented by 2\n // extra spaces.\n for (const row of rows) {\n if (row.left) {\n // If the row is too long, don't wrap it\n // Bump the right-hand side down a line to make room\n const configIndent = indent(Math.max(headingLevel, 2))\n if (row.left.length > maxWidth - 3) {\n ui.div({ text: row.left, padding: [0, 0, 0, configIndent] })\n ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] })\n } else {\n ui.div(\n {\n text: row.left,\n padding: [0, 1, 0, configIndent],\n width: maxWidth,\n },\n { padding: [0, 0, 0, 0], text: row.text },\n )\n }\n if (row.skipLine) {\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n }\n } else {\n if (isHeading(row)) {\n const { level } = row\n headingLevel = level\n // only h1 and h2 have bottom padding\n // h3-h6 do not\n const b = level <= 2 ? 1 : 0\n ui.div({ ...row, padding: [0, 0, b, indent(level)] })\n } else {\n ui.div({ ...row, padding: [0, 0, 1, indent(headingLevel + 1)] })\n }\n }\n }\n\n return (this.#usage = ui.toString())\n }\n\n /**\n * Return the usage banner markdown for the given configuration\n */\n usageMarkdown(): string {\n if (this.#usageMarkdown) return this.#usageMarkdown\n\n const out: string[] = []\n\n let headingLevel = 1\n const first = this.#fields[0]\n let start = first?.type === 'heading' ? 1 : 0\n if (first?.type === 'heading') {\n out.push(`# ${normalizeOneLine(first.text)}`)\n }\n out.push('Usage:')\n if (this.#options.usage) {\n out.push(normalizeMarkdown(this.#options.usage, true))\n } else {\n const cmd = basename(String(process.argv[1]))\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n out.push(normalizeMarkdown(usage, true))\n }\n\n const maybeDesc = this.#fields[start]\n if (maybeDesc && isDescription(maybeDesc)) {\n out.push(normalizeMarkdown(maybeDesc.text, maybeDesc.pre))\n start++\n }\n\n const { rows } = this.#usageRows(start)\n\n // heading level in markdown is number of # ahead of text\n for (const row of rows) {\n if (row.left) {\n out.push(\n '#'.repeat(headingLevel + 1) +\n ' ' +\n normalizeOneLine(row.left, true),\n )\n if (row.text) out.push(normalizeMarkdown(row.text))\n } else if (isHeading(row)) {\n const { level } = row\n headingLevel = level\n out.push(\n `${'#'.repeat(headingLevel)} ${normalizeOneLine(\n row.text,\n row.pre,\n )}`,\n )\n } else {\n out.push(normalizeMarkdown(row.text, !!(row as Description).pre))\n }\n }\n\n return (this.#usageMarkdown = out.join('\\n\\n') + '\\n')\n }\n\n #usageRows(start: number) {\n // turn each config type into a row, and figure out the width of the\n // left hand indentation for the option descriptions.\n let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)))\n let maxWidth = 8\n let prev: Row | TextRow | undefined = undefined\n const rows: (Row | TextRow)[] = []\n for (const field of this.#fields.slice(start)) {\n if (field.type !== 'config') {\n if (prev?.type === 'config') prev.skipLine = true\n prev = undefined\n field.text = normalize(field.text, !!field.pre)\n rows.push(field)\n continue\n }\n const { value } = field\n const desc = value.description || ''\n const mult = value.multiple ? 'Can be set multiple times' : ''\n const opts =\n value.validOptions?.length ?\n `Valid options:${value.validOptions.map(\n v => ` ${JSON.stringify(v)}`,\n )}`\n : ''\n const dmDelim = desc.includes('\\n') ? '\\n\\n' : '\\n'\n const extra = [opts, mult].join(dmDelim).trim()\n const text = (normalize(desc) + dmDelim + extra).trim()\n const hint =\n value.hint ||\n (value.type === 'number' ? 'n'\n : value.type === 'string' ? field.name\n : undefined)\n const short =\n !value.short ? ''\n : value.type === 'boolean' ? `-${value.short} `\n : `-${value.short}<${hint}> `\n const left =\n value.type === 'boolean' ?\n `${short}--${field.name}`\n : `${short}--${field.name}=<${hint}>`\n const row: Row = { text, left, type: 'config' }\n if (text.length > width - maxMax) {\n row.skipLine = true\n }\n if (prev && left.length > maxMax) prev.skipLine = true\n prev = row\n const len = left.length + 4\n if (len > maxWidth && len < maxMax) {\n maxWidth = len\n }\n\n rows.push(row)\n }\n\n return { rows, maxWidth }\n }\n\n /**\n * Return the configuration options as a plain object\n */\n toJSON() {\n return Object.fromEntries(\n Object.entries(this.#configSet).map(([field, def]) => [\n field,\n {\n type: def.type,\n ...(def.multiple ? { multiple: true } : {}),\n ...(def.delim ? { delim: def.delim } : {}),\n ...(def.short ? { short: def.short } : {}),\n ...(def.description ?\n { description: normalize(def.description) }\n : {}),\n ...(def.validate ? { validate: def.validate } : {}),\n ...(def.validOptions ? { validOptions: def.validOptions } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n ...(def.hint ? { hint: def.hint } : {}),\n },\n ]),\n )\n }\n\n /**\n * Custom printer for `util.inspect`\n */\n [inspect.custom](_: number, options: InspectOptions) {\n return `Jack ${inspect(this.toJSON(), options)}`\n }\n}\n\n// Unwrap and un-indent, so we can wrap description\n// strings however makes them look nice in the code.\nconst normalize = (s: string, pre = false) => {\n if (pre)\n // prepend a ZWSP to each line so cliui doesn't strip it.\n return s\n .split('\\n')\n .map(l => `\\u200b${l}`)\n .join('\\n')\n return s\n .split(/^\\s*```\\s*$/gm)\n .map((s, i) => {\n if (i % 2 === 1) {\n if (!s.trim()) {\n return `\\`\\`\\`\\n\\`\\`\\`\\n`\n }\n // outdent the ``` blocks, but preserve whitespace otherwise.\n const split = s.split('\\n')\n // throw out the \\n at the start and end\n split.pop()\n split.shift()\n const si = split.reduce((shortest, l) => {\n /* c8 ignore next */\n const ind = l.match(/^\\s*/)?.[0] ?? ''\n if (ind.length) return Math.min(ind.length, shortest)\n else return shortest\n }, Infinity)\n /* c8 ignore next */\n const i = isFinite(si) ? si : 0\n return (\n '\\n```\\n' +\n split.map(s => `\\u200b${s.substring(i)}`).join('\\n') +\n '\\n```\\n'\n )\n }\n return (\n s\n // remove single line breaks, except for lists\n .replace(/([^\\n])\\n[ \\t]*([^\\n])/g, (_, $1, $2) =>\n !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\\n${$2}`,\n )\n // normalize mid-line whitespace\n .replace(/([^\\n])[ \\t]+([^\\n])/g, '$1 $2')\n // two line breaks are enough\n .replace(/\\n{3,}/g, '\\n\\n')\n // remove any spaces at the start of a line\n .replace(/\\n[ \\t]+/g, '\\n')\n .trim()\n )\n })\n .join('\\n')\n}\n\n// normalize for markdown printing, remove leading spaces on lines\nconst normalizeMarkdown = (s: string, pre: boolean = false): string => {\n const n = normalize(s, pre).replace(/\\\\/g, '\\\\\\\\')\n return pre ?\n `\\`\\`\\`\\n${n.replace(/\\u200b/g, '')}\\n\\`\\`\\``\n : n.replace(/\\n +/g, '\\n').trim()\n}\n\nconst normalizeOneLine = (s: string, pre: boolean = false) => {\n const n = normalize(s, pre)\n .replace(/[\\s\\u200b]+/g, ' ')\n .trim()\n return pre ? `\\`${n}\\`` : n\n}\n\n/**\n * Main entry point. Create and return a {@link Jack} object.\n */\nexport const jack = (options: JackOptions = {}) => new Jack(options)\n"]} \ No newline at end of file diff --git a/node_modules/jackspeak/dist/commonjs/package.json b/node_modules/jackspeak/dist/commonjs/package.json new file mode 100644 index 00000000..5bbefffb --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/node_modules/jackspeak/dist/commonjs/parse-args-cjs.cjs.map b/node_modules/jackspeak/dist/commonjs/parse-args-cjs.cjs.map new file mode 100644 index 00000000..0a4a3695 --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/parse-args-cjs.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"parse-args-cjs.cjs","sourceRoot":"","sources":["../../src/parse-args-cjs.cts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4B;AAE5B,MAAM,EAAE,GACN,CACE,OAAO,OAAO,KAAK,QAAQ;IAC3B,CAAC,CAAC,OAAO;IACT,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CACpC,CAAC,CAAC;IACD,OAAO,CAAC,OAAO;IACjB,CAAC,CAAC,QAAQ,CAAA;AACZ,MAAM,GAAG,GAAG,EAAE;KACX,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;KACjB,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAE5B,qBAAqB;AACrB,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;AAClC,oBAAoB;AAEpB,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;AAC5B,qBAAqB;AACrB,IACE,CAAC,EAAE;IACH,KAAK,GAAG,EAAE;IACV,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;IAC5B,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,EAC5B,CAAC;IACD,oBAAoB;IACpB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAA;AAC5C,CAAC;AAEY,QAAA,SAAS,GAAG,EAAE,CAAA","sourcesContent":["import * as util from 'util'\n\nconst pv =\n (\n typeof process === 'object' &&\n !!process &&\n typeof process.version === 'string'\n ) ?\n process.version\n : 'v0.0.0'\nconst pvs = pv\n .replace(/^v/, '')\n .split('.')\n .map(s => parseInt(s, 10))\n\n/* c8 ignore start */\nconst [major = 0, minor = 0] = pvs\n/* c8 ignore stop */\n\nlet { parseArgs: pa } = util\n/* c8 ignore start */\nif (\n !pa ||\n major < 16 ||\n (major === 18 && minor < 11) ||\n (major === 16 && minor < 19)\n) {\n /* c8 ignore stop */\n pa = require('@pkgjs/parseargs').parseArgs\n}\n\nexport const parseArgs = pa\n"]} \ No newline at end of file diff --git a/node_modules/jackspeak/dist/commonjs/parse-args-cjs.d.cts.map b/node_modules/jackspeak/dist/commonjs/parse-args-cjs.d.cts.map new file mode 100644 index 00000000..066287c8 --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/parse-args-cjs.d.cts.map @@ -0,0 +1 @@ +{"version":3,"file":"parse-args-cjs.d.cts","sourceRoot":"","sources":["../../src/parse-args-cjs.cts"],"names":[],"mappings":";AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AA+B5B,eAAO,MAAM,SAAS,uBAAK,CAAA"} \ No newline at end of file diff --git a/node_modules/jackspeak/dist/commonjs/parse-args.d.ts b/node_modules/jackspeak/dist/commonjs/parse-args.d.ts new file mode 100644 index 00000000..07f995cd --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/parse-args.d.ts @@ -0,0 +1,4 @@ +/// +import * as util from 'util'; +export declare const parseArgs: typeof util.parseArgs; +//# sourceMappingURL=parse-args-cjs.d.cts.map \ No newline at end of file diff --git a/node_modules/jackspeak/dist/commonjs/parse-args.js b/node_modules/jackspeak/dist/commonjs/parse-args.js new file mode 100644 index 00000000..fc918a41 --- /dev/null +++ b/node_modules/jackspeak/dist/commonjs/parse-args.js @@ -0,0 +1,50 @@ +"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.parseArgs = void 0; +const util = __importStar(require("util")); +const pv = (typeof process === 'object' && + !!process && + typeof process.version === 'string') ? + process.version + : 'v0.0.0'; +const pvs = pv + .replace(/^v/, '') + .split('.') + .map(s => parseInt(s, 10)); +/* c8 ignore start */ +const [major = 0, minor = 0] = pvs; +/* c8 ignore stop */ +let { parseArgs: pa } = util; +/* c8 ignore start */ +if (!pa || + major < 16 || + (major === 18 && minor < 11) || + (major === 16 && minor < 19)) { + /* c8 ignore stop */ + pa = require('@pkgjs/parseargs').parseArgs; +} +exports.parseArgs = pa; +//# sourceMappingURL=parse-args-cjs.cjs.map \ No newline at end of file diff --git a/node_modules/jackspeak/dist/esm/index.d.ts b/node_modules/jackspeak/dist/esm/index.d.ts new file mode 100644 index 00000000..214a1773 --- /dev/null +++ b/node_modules/jackspeak/dist/esm/index.d.ts @@ -0,0 +1,315 @@ +/// +export type ConfigType = 'number' | 'string' | 'boolean'; +/** + * Given a Jack object, get the typeof its ConfigSet + */ +export type Unwrap = J extends Jack ? C : never; +import { inspect, InspectOptions } from 'node:util'; +/** + * Defines the type of value that is valid, given a config definition's + * {@link ConfigType} and boolean multiple setting + */ +export type ValidValue = [ + T, + M +] extends ['number', true] ? number[] : [T, M] extends ['string', true] ? string[] : [T, M] extends ['boolean', true] ? boolean[] : [T, M] extends ['number', false] ? number : [T, M] extends ['string', false] ? string : [T, M] extends ['boolean', false] ? boolean : [T, M] extends ['string', boolean] ? string | string[] : [T, M] extends ['boolean', boolean] ? boolean | boolean[] : [T, M] extends ['number', boolean] ? number | number[] : [T, M] extends [ConfigType, false] ? string | number | boolean : [T, M] extends [ConfigType, true] ? string[] | number[] | boolean[] : string | number | boolean | string[] | number[] | boolean[]; +/** + * The meta information for a config option definition, when the + * type and multiple values can be inferred by the method being used + */ +export type ConfigOptionMeta = { + default?: undefined | (ValidValue & (O extends number[] | string[] ? M extends false ? O[number] : O[number][] : unknown)); + validOptions?: O; + description?: string; + validate?: ((v: unknown) => v is ValidValue) | ((v: unknown) => boolean); + short?: string | undefined; + type?: T; + hint?: T extends 'boolean' ? never : string; + delim?: M extends true ? string : never; +} & (M extends false ? { + multiple?: false | undefined; +} : M extends true ? { + multiple: true; +} : { + multiple?: boolean; +}); +/** + * A set of {@link ConfigOptionMeta} fields, referenced by their longOption + * string values. + */ +export type ConfigMetaSet = { + [longOption: string]: ConfigOptionMeta; +}; +/** + * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet} + */ +export type ConfigSetFromMetaSet> = { + [longOption in keyof S]: ConfigOptionBase; +}; +/** + * Fields that can be set on a {@link ConfigOptionBase} or + * {@link ConfigOptionMeta} based on whether or not the field is known to be + * multiple. + */ +export type MultiType = M extends true ? { + multiple: true; + delim?: string | undefined; +} : M extends false ? { + multiple?: false | undefined; + delim?: undefined; +} : { + multiple?: boolean | undefined; + delim?: string | undefined; +}; +/** + * A config field definition, in its full representation. + */ +export type ConfigOptionBase = { + type: T; + short?: string | undefined; + default?: ValidValue | undefined; + description?: string; + hint?: T extends 'boolean' ? undefined : string | undefined; + validate?: (v: unknown) => v is ValidValue; + validOptions?: T extends 'boolean' ? undefined : T extends 'string' ? readonly string[] : T extends 'number' ? readonly number[] : readonly number[] | readonly string[]; +} & MultiType; +export declare const isConfigType: (t: string) => t is ConfigType; +export declare const isConfigOption: (o: any, type: T, multi: M) => o is ConfigOptionBase; +/** + * A set of {@link ConfigOptionBase} objects, referenced by their longOption + * string values. + */ +export type ConfigSet = { + [longOption: string]: ConfigOptionBase; +}; +/** + * The 'values' field returned by {@link Jack#parse} + */ +export type OptionsResults = { + [k in keyof T]?: T[k]['validOptions'] extends (readonly string[] | readonly number[]) ? T[k] extends ConfigOptionBase<'string' | 'number', false> ? T[k]['validOptions'][number] : T[k] extends ConfigOptionBase<'string' | 'number', true> ? T[k]['validOptions'][number][] : never : T[k] extends ConfigOptionBase<'string', false> ? string : T[k] extends ConfigOptionBase<'string', true> ? string[] : T[k] extends ConfigOptionBase<'number', false> ? number : T[k] extends ConfigOptionBase<'number', true> ? number[] : T[k] extends ConfigOptionBase<'boolean', false> ? boolean : T[k] extends ConfigOptionBase<'boolean', true> ? boolean[] : never; +}; +/** + * The object retured by {@link Jack#parse} + */ +export type Parsed = { + values: OptionsResults; + positionals: string[]; +}; +/** + * A row used when generating the {@link Jack#usage} string + */ +export interface Row { + left?: string; + text: string; + skipLine?: boolean; + type?: string; +} +/** + * A heading for a section in the usage, created by the jack.heading() + * method. + * + * First heading is always level 1, subsequent headings default to 2. + * + * The level of the nearest heading level sets the indentation of the + * description that follows. + */ +export interface Heading extends Row { + type: 'heading'; + text: string; + left?: ''; + skipLine?: boolean; + level: number; + pre?: boolean; +} +/** + * An arbitrary blob of text describing some stuff, set by the + * jack.description() method. + * + * Indentation determined by level of the nearest header. + */ +export interface Description extends Row { + type: 'description'; + text: string; + left?: ''; + skipLine?: boolean; + pre?: boolean; +} +/** + * A heading or description row used when generating the {@link Jack#usage} + * string + */ +export type TextRow = Heading | Description; +/** + * Either a {@link TextRow} or a reference to a {@link ConfigOptionBase} + */ +export type UsageField = TextRow | { + type: 'config'; + name: string; + value: ConfigOptionBase; +}; +/** + * Options provided to the {@link Jack} constructor + */ +export interface JackOptions { + /** + * Whether to allow positional arguments + * + * @default true + */ + allowPositionals?: boolean; + /** + * Prefix to use when reading/writing the environment variables + * + * If not specified, environment behavior will not be available. + */ + envPrefix?: string; + /** + * Environment object to read/write. Defaults `process.env`. + * No effect if `envPrefix` is not set. + */ + env?: { + [k: string]: string | undefined; + }; + /** + * A short usage string. If not provided, will be generated from the + * options provided, but that can of course be rather verbose if + * there are a lot of options. + */ + usage?: string; + /** + * Stop parsing flags and opts at the first positional argument. + * This is to support cases like `cmd [flags] [options]`, where + * each subcommand may have different options. This effectively treats + * any positional as a `--` argument. Only relevant if `allowPositionals` + * is true. + * + * To do subcommands, set this option, look at the first positional, and + * parse the remaining positionals as appropriate. + * + * @default false + */ + stopAtPositional?: boolean; + /** + * Conditional `stopAtPositional`. If set to a `(string)=>boolean` function, + * will be called with each positional argument encountered. If the function + * returns true, then parsing will stop at that point. + */ + stopAtPositionalTest?: (arg: string) => boolean; +} +/** + * Class returned by the {@link jack} function and all configuration + * definition methods. This is what gets chained together. + */ +export declare class Jack { + #private; + constructor(options?: JackOptions); + /** + * Set the default value (which will still be overridden by env or cli) + * as if from a parsed config file. The optional `source` param, if + * provided, will be included in error messages if a value is invalid or + * unknown. + */ + setConfigValues(values: OptionsResults, source?: string): this; + /** + * Parse a string of arguments, and return the resulting + * `{ values, positionals }` object. + * + * If an {@link JackOptions#envPrefix} is set, then it will read default + * values from the environment, and write the resulting values back + * to the environment as well. + * + * Environment values always take precedence over any other value, except + * an explicit CLI setting. + */ + parse(args?: string[]): Parsed; + loadEnvDefaults(): void; + applyDefaults(p: Parsed): void; + /** + * Only parse the command line arguments passed in. + * Does not strip off the `node script.js` bits, so it must be just the + * arguments you wish to have parsed. + * Does not read from or write to the environment, or set defaults. + */ + parseRaw(args: string[]): Parsed; + /** + * Validate that any arbitrary object is a valid configuration `values` + * object. Useful when loading config files or other sources. + */ + validate(o: unknown): asserts o is Parsed['values']; + writeEnv(p: Parsed): void; + /** + * Add a heading to the usage output banner + */ + heading(text: string, level?: 1 | 2 | 3 | 4 | 5 | 6, { pre }?: { + pre?: boolean; + }): Jack; + /** + * Add a long-form description to the usage output at this position. + */ + description(text: string, { pre }?: { + pre?: boolean; + }): Jack; + /** + * Add one or more number fields. + */ + num>(fields: F): Jack>; + /** + * Add one or more multiple number fields. + */ + numList>(fields: F): Jack>; + /** + * Add one or more string option fields. + */ + opt>(fields: F): Jack>; + /** + * Add one or more multiple string option fields. + */ + optList>(fields: F): Jack>; + /** + * Add one or more flag fields. + */ + flag>(fields: F): Jack>; + /** + * Add one or more multiple flag fields. + */ + flagList>(fields: F): Jack>; + /** + * Generic field definition method. Similar to flag/flagList/number/etc, + * but you must specify the `type` (and optionally `multiple` and `delim`) + * fields on each one, or Jack won't know how to define them. + */ + addFields(fields: F): Jack; + /** + * Return the usage banner for the given configuration + */ + usage(): string; + /** + * Return the usage banner markdown for the given configuration + */ + usageMarkdown(): string; + /** + * Return the configuration options as a plain object + */ + toJSON(): { + [k: string]: { + hint?: string | undefined; + default?: string | number | boolean | string[] | number[] | boolean[] | undefined; + validOptions?: readonly number[] | readonly string[] | undefined; + validate?: ((v: unknown) => v is string | number | boolean | string[] | number[] | boolean[]) | undefined; + description?: string | undefined; + short?: string | undefined; + delim?: string | undefined; + multiple?: boolean | undefined; + type: ConfigType; + }; + }; + /** + * Custom printer for `util.inspect` + */ + [inspect.custom](_: number, options: InspectOptions): string; +} +/** + * Main entry point. Create and return a {@link Jack} object. + */ +export declare const jack: (options?: JackOptions) => Jack<{}>; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/jackspeak/dist/esm/index.d.ts.map b/node_modules/jackspeak/dist/esm/index.d.ts.map new file mode 100644 index 00000000..faf9ddd0 --- /dev/null +++ b/node_modules/jackspeak/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/jackspeak/dist/esm/index.js b/node_modules/jackspeak/dist/esm/index.js new file mode 100644 index 00000000..8eef5b4e --- /dev/null +++ b/node_modules/jackspeak/dist/esm/index.js @@ -0,0 +1,1000 @@ +import { inspect } from 'node:util'; +import { parseArgs } from './parse-args.js'; +// it's a tiny API, just cast it inline, it's fine +//@ts-ignore +import cliui from '@isaacs/cliui'; +import { basename } from 'node:path'; +const width = Math.min((process && process.stdout && process.stdout.columns) || 80, 80); +// indentation spaces from heading level +const indent = (n) => (n - 1) * 2; +const toEnvKey = (pref, key) => { + return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')] + .join(' ') + .trim() + .toUpperCase() + .replace(/ /g, '_'); +}; +const toEnvVal = (value, delim = '\n') => { + const str = typeof value === 'string' ? value + : typeof value === 'boolean' ? + value ? '1' + : '0' + : typeof value === 'number' ? String(value) + : Array.isArray(value) ? + value.map((v) => toEnvVal(v)).join(delim) + : /* c8 ignore start */ undefined; + if (typeof str !== 'string') { + throw new Error(`could not serialize value to environment: ${JSON.stringify(value)}`); + } + /* c8 ignore stop */ + return str; +}; +const fromEnvVal = (env, type, multiple, delim = '\n') => (multiple ? + env ? env.split(delim).map(v => fromEnvVal(v, type, false)) + : [] + : type === 'string' ? env + : type === 'boolean' ? env === '1' + : +env.trim()); +export const isConfigType = (t) => typeof t === 'string' && + (t === 'string' || t === 'number' || t === 'boolean'); +const undefOrType = (v, t) => v === undefined || typeof v === t; +const undefOrTypeArray = (v, t) => v === undefined || (Array.isArray(v) && v.every(x => typeof x === t)); +const isValidOption = (v, vo) => Array.isArray(v) ? v.every(x => isValidOption(x, vo)) : vo.includes(v); +// print the value type, for error message reporting +const valueType = (v) => typeof v === 'string' ? 'string' + : typeof v === 'boolean' ? 'boolean' + : typeof v === 'number' ? 'number' + : Array.isArray(v) ? + joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]' + : `${v.type}${v.multiple ? '[]' : ''}`; +const joinTypes = (types) => types.length === 1 && typeof types[0] === 'string' ? + types[0] + : `(${types.join('|')})`; +const isValidValue = (v, type, multi) => { + if (multi) { + if (!Array.isArray(v)) + return false; + return !v.some((v) => !isValidValue(v, type, false)); + } + if (Array.isArray(v)) + return false; + return typeof v === type; +}; +export const isConfigOption = (o, type, multi) => !!o && + typeof o === 'object' && + isConfigType(o.type) && + o.type === type && + undefOrType(o.short, 'string') && + undefOrType(o.description, 'string') && + undefOrType(o.hint, 'string') && + undefOrType(o.validate, 'function') && + (o.type === 'boolean' ? + o.validOptions === undefined + : undefOrTypeArray(o.validOptions, o.type)) && + (o.default === undefined || isValidValue(o.default, type, multi)) && + !!o.multiple === multi; +function num(o = {}) { + const { default: def, validate: val, validOptions, ...rest } = o; + if (def !== undefined && !isValidValue(def, 'number', false)) { + throw new TypeError('invalid default value', { + cause: { + found: def, + wanted: 'number', + }, + }); + } + if (!undefOrTypeArray(validOptions, 'number')) { + throw new TypeError('invalid validOptions', { + cause: { + found: validOptions, + wanted: 'number[]', + }, + }); + } + const validate = val ? + val + : undefined; + return { + ...rest, + default: def, + validate, + validOptions, + type: 'number', + multiple: false, + }; +} +function numList(o = {}) { + const { default: def, validate: val, validOptions, ...rest } = o; + if (def !== undefined && !isValidValue(def, 'number', true)) { + throw new TypeError('invalid default value', { + cause: { + found: def, + wanted: 'number[]', + }, + }); + } + if (!undefOrTypeArray(validOptions, 'number')) { + throw new TypeError('invalid validOptions', { + cause: { + found: validOptions, + wanted: 'number[]', + }, + }); + } + const validate = val ? + val + : undefined; + return { + ...rest, + default: def, + validate, + validOptions, + type: 'number', + multiple: true, + }; +} +function opt(o = {}) { + const { default: def, validate: val, validOptions, ...rest } = o; + if (def !== undefined && !isValidValue(def, 'string', false)) { + throw new TypeError('invalid default value', { + cause: { + found: def, + wanted: 'string', + }, + }); + } + if (!undefOrTypeArray(validOptions, 'string')) { + throw new TypeError('invalid validOptions', { + cause: { + found: validOptions, + wanted: 'string[]', + }, + }); + } + const validate = val ? + val + : undefined; + return { + ...rest, + default: def, + validate, + validOptions, + type: 'string', + multiple: false, + }; +} +function optList(o = {}) { + const { default: def, validate: val, validOptions, ...rest } = o; + if (def !== undefined && !isValidValue(def, 'string', true)) { + throw new TypeError('invalid default value', { + cause: { + found: def, + wanted: 'string[]', + }, + }); + } + if (!undefOrTypeArray(validOptions, 'string')) { + throw new TypeError('invalid validOptions', { + cause: { + found: validOptions, + wanted: 'string[]', + }, + }); + } + const validate = val ? + val + : undefined; + return { + ...rest, + default: def, + validate, + validOptions, + type: 'string', + multiple: true, + }; +} +function flag(o = {}) { + const { hint, default: def, validate: val, ...rest } = o; + delete rest.validOptions; + if (def !== undefined && !isValidValue(def, 'boolean', false)) { + throw new TypeError('invalid default value'); + } + const validate = val ? + val + : undefined; + if (hint !== undefined) { + throw new TypeError('cannot provide hint for flag'); + } + return { + ...rest, + default: def, + validate, + type: 'boolean', + multiple: false, + }; +} +function flagList(o = {}) { + const { hint, default: def, validate: val, ...rest } = o; + delete rest.validOptions; + if (def !== undefined && !isValidValue(def, 'boolean', true)) { + throw new TypeError('invalid default value'); + } + const validate = val ? + val + : undefined; + if (hint !== undefined) { + throw new TypeError('cannot provide hint for flag list'); + } + return { + ...rest, + default: def, + validate, + type: 'boolean', + multiple: true, + }; +} +const toParseArgsOptionsConfig = (options) => { + const c = {}; + for (const longOption in options) { + const config = options[longOption]; + /* c8 ignore start */ + if (!config) { + throw new Error('config must be an object: ' + longOption); + } + /* c8 ignore start */ + if (isConfigOption(config, 'number', true)) { + c[longOption] = { + type: 'string', + multiple: true, + default: config.default?.map(c => String(c)), + }; + } + else if (isConfigOption(config, 'number', false)) { + c[longOption] = { + type: 'string', + multiple: false, + default: config.default === undefined ? + undefined + : String(config.default), + }; + } + else { + const conf = config; + c[longOption] = { + type: conf.type, + multiple: !!conf.multiple, + default: conf.default, + }; + } + const clo = c[longOption]; + if (typeof config.short === 'string') { + clo.short = config.short; + } + if (config.type === 'boolean' && + !longOption.startsWith('no-') && + !options[`no-${longOption}`]) { + c[`no-${longOption}`] = { + type: 'boolean', + multiple: config.multiple, + }; + } + } + return c; +}; +const isHeading = (r) => r.type === 'heading'; +const isDescription = (r) => r.type === 'description'; +/** + * Class returned by the {@link jack} function and all configuration + * definition methods. This is what gets chained together. + */ +export class Jack { + #configSet; + #shorts; + #options; + #fields = []; + #env; + #envPrefix; + #allowPositionals; + #usage; + #usageMarkdown; + constructor(options = {}) { + this.#options = options; + this.#allowPositionals = options.allowPositionals !== false; + this.#env = + this.#options.env === undefined ? process.env : this.#options.env; + this.#envPrefix = options.envPrefix; + // We need to fib a little, because it's always the same object, but it + // starts out as having an empty config set. Then each method that adds + // fields returns `this as Jack` + this.#configSet = Object.create(null); + this.#shorts = Object.create(null); + } + /** + * Set the default value (which will still be overridden by env or cli) + * as if from a parsed config file. The optional `source` param, if + * provided, will be included in error messages if a value is invalid or + * unknown. + */ + setConfigValues(values, source = '') { + try { + this.validate(values); + } + catch (er) { + const e = er; + if (source && e && typeof e === 'object') { + if (e.cause && typeof e.cause === 'object') { + Object.assign(e.cause, { path: source }); + } + else { + e.cause = { path: source }; + } + } + throw e; + } + for (const [field, value] of Object.entries(values)) { + const my = this.#configSet[field]; + // already validated, just for TS's benefit + /* c8 ignore start */ + if (!my) { + throw new Error('unexpected field in config set: ' + field, { + cause: { found: field }, + }); + } + /* c8 ignore stop */ + my.default = value; + } + return this; + } + /** + * Parse a string of arguments, and return the resulting + * `{ values, positionals }` object. + * + * If an {@link JackOptions#envPrefix} is set, then it will read default + * values from the environment, and write the resulting values back + * to the environment as well. + * + * Environment values always take precedence over any other value, except + * an explicit CLI setting. + */ + parse(args = process.argv) { + this.loadEnvDefaults(); + const p = this.parseRaw(args); + this.applyDefaults(p); + this.writeEnv(p); + return p; + } + loadEnvDefaults() { + if (this.#envPrefix) { + for (const [field, my] of Object.entries(this.#configSet)) { + const ek = toEnvKey(this.#envPrefix, field); + const env = this.#env[ek]; + if (env !== undefined) { + my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim); + } + } + } + } + applyDefaults(p) { + for (const [field, c] of Object.entries(this.#configSet)) { + if (c.default !== undefined && !(field in p.values)) { + //@ts-ignore + p.values[field] = c.default; + } + } + } + /** + * Only parse the command line arguments passed in. + * Does not strip off the `node script.js` bits, so it must be just the + * arguments you wish to have parsed. + * Does not read from or write to the environment, or set defaults. + */ + parseRaw(args) { + if (args === process.argv) { + args = args.slice(process._eval !== undefined ? 1 : 2); + } + const options = toParseArgsOptionsConfig(this.#configSet); + const result = parseArgs({ + args, + options, + // always strict, but using our own logic + strict: false, + allowPositionals: this.#allowPositionals, + tokens: true, + }); + const p = { + values: {}, + positionals: [], + }; + for (const token of result.tokens) { + if (token.kind === 'positional') { + p.positionals.push(token.value); + if (this.#options.stopAtPositional || + this.#options.stopAtPositionalTest?.(token.value)) { + p.positionals.push(...args.slice(token.index + 1)); + break; + } + } + else if (token.kind === 'option') { + let value = undefined; + if (token.name.startsWith('no-')) { + const my = this.#configSet[token.name]; + const pname = token.name.substring('no-'.length); + const pos = this.#configSet[pname]; + if (pos && + pos.type === 'boolean' && + (!my || + (my.type === 'boolean' && !!my.multiple === !!pos.multiple))) { + value = false; + token.name = pname; + } + } + const my = this.#configSet[token.name]; + if (!my) { + throw new Error(`Unknown option '${token.rawName}'. ` + + `To specify a positional argument starting with a '-', ` + + `place it at the end of the command after '--', as in ` + + `'-- ${token.rawName}'`, { + cause: { + found: token.rawName + (token.value ? `=${token.value}` : ''), + }, + }); + } + if (value === undefined) { + if (token.value === undefined) { + if (my.type !== 'boolean') { + throw new Error(`No value provided for ${token.rawName}, expected ${my.type}`, { + cause: { + name: token.rawName, + wanted: valueType(my), + }, + }); + } + value = true; + } + else { + if (my.type === 'boolean') { + throw new Error(`Flag ${token.rawName} does not take a value, received '${token.value}'`, { cause: { found: token } }); + } + if (my.type === 'string') { + value = token.value; + } + else { + value = +token.value; + if (value !== value) { + throw new Error(`Invalid value '${token.value}' provided for ` + + `'${token.rawName}' option, expected number`, { + cause: { + name: token.rawName, + found: token.value, + wanted: 'number', + }, + }); + } + } + } + } + if (my.multiple) { + const pv = p.values; + const tn = pv[token.name] ?? []; + pv[token.name] = tn; + tn.push(value); + } + else { + const pv = p.values; + pv[token.name] = value; + } + } + } + for (const [field, value] of Object.entries(p.values)) { + const valid = this.#configSet[field]?.validate; + const validOptions = this.#configSet[field]?.validOptions; + let cause; + if (validOptions && !isValidOption(value, validOptions)) { + cause = { name: field, found: value, validOptions: validOptions }; + } + if (valid && !valid(value)) { + cause ??= { name: field, found: value }; + } + if (cause) { + throw new Error(`Invalid value provided for --${field}: ${JSON.stringify(value)}`, { cause }); + } + } + return p; + } + /** + * do not set fields as 'no-foo' if 'foo' exists and both are bools + * just set foo. + */ + #noNoFields(f, val, s = f) { + if (!f.startsWith('no-') || typeof val !== 'boolean') + return; + const yes = f.substring('no-'.length); + // recurse so we get the core config key we care about. + this.#noNoFields(yes, val, s); + if (this.#configSet[yes]?.type === 'boolean') { + throw new Error(`do not set '${s}', instead set '${yes}' as desired.`, { cause: { found: s, wanted: yes } }); + } + } + /** + * Validate that any arbitrary object is a valid configuration `values` + * object. Useful when loading config files or other sources. + */ + validate(o) { + if (!o || typeof o !== 'object') { + throw new Error('Invalid config: not an object', { + cause: { found: o }, + }); + } + const opts = o; + for (const field in o) { + const value = opts[field]; + /* c8 ignore next - for TS */ + if (value === undefined) + continue; + this.#noNoFields(field, value); + const config = this.#configSet[field]; + if (!config) { + throw new Error(`Unknown config option: ${field}`, { + cause: { found: field }, + }); + } + if (!isValidValue(value, config.type, !!config.multiple)) { + throw new Error(`Invalid value ${valueType(value)} for ${field}, expected ${valueType(config)}`, { + cause: { + name: field, + found: value, + wanted: valueType(config), + }, + }); + } + let cause; + if (config.validOptions && + !isValidOption(value, config.validOptions)) { + cause = { + name: field, + found: value, + validOptions: config.validOptions, + }; + } + if (config.validate && !config.validate(value)) { + cause ??= { name: field, found: value }; + } + if (cause) { + throw new Error(`Invalid config value for ${field}: ${value}`, { + cause, + }); + } + } + } + writeEnv(p) { + if (!this.#env || !this.#envPrefix) + return; + for (const [field, value] of Object.entries(p.values)) { + const my = this.#configSet[field]; + this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(value, my?.delim); + } + } + /** + * Add a heading to the usage output banner + */ + heading(text, level, { pre = false } = {}) { + if (level === undefined) { + level = this.#fields.some(r => isHeading(r)) ? 2 : 1; + } + this.#fields.push({ type: 'heading', text, level, pre }); + return this; + } + /** + * Add a long-form description to the usage output at this position. + */ + description(text, { pre } = {}) { + this.#fields.push({ type: 'description', text, pre }); + return this; + } + /** + * Add one or more number fields. + */ + num(fields) { + return this.#addFields(fields, num); + } + /** + * Add one or more multiple number fields. + */ + numList(fields) { + return this.#addFields(fields, numList); + } + /** + * Add one or more string option fields. + */ + opt(fields) { + return this.#addFields(fields, opt); + } + /** + * Add one or more multiple string option fields. + */ + optList(fields) { + return this.#addFields(fields, optList); + } + /** + * Add one or more flag fields. + */ + flag(fields) { + return this.#addFields(fields, flag); + } + /** + * Add one or more multiple flag fields. + */ + flagList(fields) { + return this.#addFields(fields, flagList); + } + /** + * Generic field definition method. Similar to flag/flagList/number/etc, + * but you must specify the `type` (and optionally `multiple` and `delim`) + * fields on each one, or Jack won't know how to define them. + */ + addFields(fields) { + const next = this; + for (const [name, field] of Object.entries(fields)) { + this.#validateName(name, field); + next.#fields.push({ + type: 'config', + name, + value: field, + }); + } + Object.assign(next.#configSet, fields); + return next; + } + #addFields(fields, fn) { + const next = this; + Object.assign(next.#configSet, Object.fromEntries(Object.entries(fields).map(([name, field]) => { + this.#validateName(name, field); + const option = fn(field); + next.#fields.push({ + type: 'config', + name, + value: option, + }); + return [name, option]; + }))); + return next; + } + #validateName(name, field) { + if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) { + throw new TypeError(`Invalid option name: ${name}, ` + + `must be '-' delimited ASCII alphanumeric`); + } + if (this.#configSet[name]) { + throw new TypeError(`Cannot redefine option ${field}`); + } + if (this.#shorts[name]) { + throw new TypeError(`Cannot redefine option ${name}, already ` + + `in use for ${this.#shorts[name]}`); + } + if (field.short) { + if (!/^[a-zA-Z0-9]$/.test(field.short)) { + throw new TypeError(`Invalid ${name} short option: ${field.short}, ` + + 'must be 1 ASCII alphanumeric character'); + } + if (this.#shorts[field.short]) { + throw new TypeError(`Invalid ${name} short option: ${field.short}, ` + + `already in use for ${this.#shorts[field.short]}`); + } + this.#shorts[field.short] = name; + this.#shorts[name] = name; + } + } + /** + * Return the usage banner for the given configuration + */ + usage() { + if (this.#usage) + return this.#usage; + let headingLevel = 1; + const ui = cliui({ width }); + const first = this.#fields[0]; + let start = first?.type === 'heading' ? 1 : 0; + if (first?.type === 'heading') { + ui.div({ + padding: [0, 0, 0, 0], + text: normalize(first.text), + }); + } + ui.div({ padding: [0, 0, 0, 0], text: 'Usage:' }); + if (this.#options.usage) { + ui.div({ + text: this.#options.usage, + padding: [0, 0, 0, 2], + }); + } + else { + const cmd = basename(String(process.argv[1])); + const shortFlags = []; + const shorts = []; + const flags = []; + const opts = []; + for (const [field, config] of Object.entries(this.#configSet)) { + if (config.short) { + if (config.type === 'boolean') + shortFlags.push(config.short); + else + shorts.push([config.short, config.hint || field]); + } + else { + if (config.type === 'boolean') + flags.push(field); + else + opts.push([field, config.hint || field]); + } + } + const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''; + const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join(''); + const lf = flags.map(k => ` --${k}`).join(''); + const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join(''); + const usage = `${cmd}${sf}${so}${lf}${lo}`.trim(); + ui.div({ + text: usage, + padding: [0, 0, 0, 2], + }); + } + ui.div({ padding: [0, 0, 0, 0], text: '' }); + const maybeDesc = this.#fields[start]; + if (maybeDesc && isDescription(maybeDesc)) { + const print = normalize(maybeDesc.text, maybeDesc.pre); + start++; + ui.div({ padding: [0, 0, 0, 0], text: print }); + ui.div({ padding: [0, 0, 0, 0], text: '' }); + } + const { rows, maxWidth } = this.#usageRows(start); + // every heading/description after the first gets indented by 2 + // extra spaces. + for (const row of rows) { + if (row.left) { + // If the row is too long, don't wrap it + // Bump the right-hand side down a line to make room + const configIndent = indent(Math.max(headingLevel, 2)); + if (row.left.length > maxWidth - 3) { + ui.div({ text: row.left, padding: [0, 0, 0, configIndent] }); + ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] }); + } + else { + ui.div({ + text: row.left, + padding: [0, 1, 0, configIndent], + width: maxWidth, + }, { padding: [0, 0, 0, 0], text: row.text }); + } + if (row.skipLine) { + ui.div({ padding: [0, 0, 0, 0], text: '' }); + } + } + else { + if (isHeading(row)) { + const { level } = row; + headingLevel = level; + // only h1 and h2 have bottom padding + // h3-h6 do not + const b = level <= 2 ? 1 : 0; + ui.div({ ...row, padding: [0, 0, b, indent(level)] }); + } + else { + ui.div({ ...row, padding: [0, 0, 1, indent(headingLevel + 1)] }); + } + } + } + return (this.#usage = ui.toString()); + } + /** + * Return the usage banner markdown for the given configuration + */ + usageMarkdown() { + if (this.#usageMarkdown) + return this.#usageMarkdown; + const out = []; + let headingLevel = 1; + const first = this.#fields[0]; + let start = first?.type === 'heading' ? 1 : 0; + if (first?.type === 'heading') { + out.push(`# ${normalizeOneLine(first.text)}`); + } + out.push('Usage:'); + if (this.#options.usage) { + out.push(normalizeMarkdown(this.#options.usage, true)); + } + else { + const cmd = basename(String(process.argv[1])); + const shortFlags = []; + const shorts = []; + const flags = []; + const opts = []; + for (const [field, config] of Object.entries(this.#configSet)) { + if (config.short) { + if (config.type === 'boolean') + shortFlags.push(config.short); + else + shorts.push([config.short, config.hint || field]); + } + else { + if (config.type === 'boolean') + flags.push(field); + else + opts.push([field, config.hint || field]); + } + } + const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''; + const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join(''); + const lf = flags.map(k => ` --${k}`).join(''); + const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join(''); + const usage = `${cmd}${sf}${so}${lf}${lo}`.trim(); + out.push(normalizeMarkdown(usage, true)); + } + const maybeDesc = this.#fields[start]; + if (maybeDesc && isDescription(maybeDesc)) { + out.push(normalizeMarkdown(maybeDesc.text, maybeDesc.pre)); + start++; + } + const { rows } = this.#usageRows(start); + // heading level in markdown is number of # ahead of text + for (const row of rows) { + if (row.left) { + out.push('#'.repeat(headingLevel + 1) + + ' ' + + normalizeOneLine(row.left, true)); + if (row.text) + out.push(normalizeMarkdown(row.text)); + } + else if (isHeading(row)) { + const { level } = row; + headingLevel = level; + out.push(`${'#'.repeat(headingLevel)} ${normalizeOneLine(row.text, row.pre)}`); + } + else { + out.push(normalizeMarkdown(row.text, !!row.pre)); + } + } + return (this.#usageMarkdown = out.join('\n\n') + '\n'); + } + #usageRows(start) { + // turn each config type into a row, and figure out the width of the + // left hand indentation for the option descriptions. + let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3))); + let maxWidth = 8; + let prev = undefined; + const rows = []; + for (const field of this.#fields.slice(start)) { + if (field.type !== 'config') { + if (prev?.type === 'config') + prev.skipLine = true; + prev = undefined; + field.text = normalize(field.text, !!field.pre); + rows.push(field); + continue; + } + const { value } = field; + const desc = value.description || ''; + const mult = value.multiple ? 'Can be set multiple times' : ''; + const opts = value.validOptions?.length ? + `Valid options:${value.validOptions.map(v => ` ${JSON.stringify(v)}`)}` + : ''; + const dmDelim = desc.includes('\n') ? '\n\n' : '\n'; + const extra = [opts, mult].join(dmDelim).trim(); + const text = (normalize(desc) + dmDelim + extra).trim(); + const hint = value.hint || + (value.type === 'number' ? 'n' + : value.type === 'string' ? field.name + : undefined); + const short = !value.short ? '' + : value.type === 'boolean' ? `-${value.short} ` + : `-${value.short}<${hint}> `; + const left = value.type === 'boolean' ? + `${short}--${field.name}` + : `${short}--${field.name}=<${hint}>`; + const row = { text, left, type: 'config' }; + if (text.length > width - maxMax) { + row.skipLine = true; + } + if (prev && left.length > maxMax) + prev.skipLine = true; + prev = row; + const len = left.length + 4; + if (len > maxWidth && len < maxMax) { + maxWidth = len; + } + rows.push(row); + } + return { rows, maxWidth }; + } + /** + * Return the configuration options as a plain object + */ + toJSON() { + return Object.fromEntries(Object.entries(this.#configSet).map(([field, def]) => [ + field, + { + type: def.type, + ...(def.multiple ? { multiple: true } : {}), + ...(def.delim ? { delim: def.delim } : {}), + ...(def.short ? { short: def.short } : {}), + ...(def.description ? + { description: normalize(def.description) } + : {}), + ...(def.validate ? { validate: def.validate } : {}), + ...(def.validOptions ? { validOptions: def.validOptions } : {}), + ...(def.default !== undefined ? { default: def.default } : {}), + ...(def.hint ? { hint: def.hint } : {}), + }, + ])); + } + /** + * Custom printer for `util.inspect` + */ + [inspect.custom](_, options) { + return `Jack ${inspect(this.toJSON(), options)}`; + } +} +// Unwrap and un-indent, so we can wrap description +// strings however makes them look nice in the code. +const normalize = (s, pre = false) => { + if (pre) + // prepend a ZWSP to each line so cliui doesn't strip it. + return s + .split('\n') + .map(l => `\u200b${l}`) + .join('\n'); + return s + .split(/^\s*```\s*$/gm) + .map((s, i) => { + if (i % 2 === 1) { + if (!s.trim()) { + return `\`\`\`\n\`\`\`\n`; + } + // outdent the ``` blocks, but preserve whitespace otherwise. + const split = s.split('\n'); + // throw out the \n at the start and end + split.pop(); + split.shift(); + const si = split.reduce((shortest, l) => { + /* c8 ignore next */ + const ind = l.match(/^\s*/)?.[0] ?? ''; + if (ind.length) + return Math.min(ind.length, shortest); + else + return shortest; + }, Infinity); + /* c8 ignore next */ + const i = isFinite(si) ? si : 0; + return ('\n```\n' + + split.map(s => `\u200b${s.substring(i)}`).join('\n') + + '\n```\n'); + } + return (s + // remove single line breaks, except for lists + .replace(/([^\n])\n[ \t]*([^\n])/g, (_, $1, $2) => !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\n${$2}`) + // normalize mid-line whitespace + .replace(/([^\n])[ \t]+([^\n])/g, '$1 $2') + // two line breaks are enough + .replace(/\n{3,}/g, '\n\n') + // remove any spaces at the start of a line + .replace(/\n[ \t]+/g, '\n') + .trim()); + }) + .join('\n'); +}; +// normalize for markdown printing, remove leading spaces on lines +const normalizeMarkdown = (s, pre = false) => { + const n = normalize(s, pre).replace(/\\/g, '\\\\'); + return pre ? + `\`\`\`\n${n.replace(/\u200b/g, '')}\n\`\`\`` + : n.replace(/\n +/g, '\n').trim(); +}; +const normalizeOneLine = (s, pre = false) => { + const n = normalize(s, pre) + .replace(/[\s\u200b]+/g, ' ') + .trim(); + return pre ? `\`${n}\`` : n; +}; +/** + * Main entry point. Create and return a {@link Jack} object. + */ +export const jack = (options = {}) => new Jack(options); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/jackspeak/dist/esm/index.js.map b/node_modules/jackspeak/dist/esm/index.js.map new file mode 100644 index 00000000..82c23b0a --- /dev/null +++ b/node_modules/jackspeak/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type ConfigType = 'number' | 'string' | 'boolean'\n\n/**\n * Given a Jack object, get the typeof its ConfigSet\n */\nexport type Unwrap = J extends Jack ? C : never\n\nimport { inspect, InspectOptions, ParseArgsConfig } from 'node:util'\nimport { parseArgs } from './parse-args.js'\n\n// it's a tiny API, just cast it inline, it's fine\n//@ts-ignore\nimport cliui from '@isaacs/cliui'\nimport { basename } from 'node:path'\n\nconst width = Math.min(\n (process && process.stdout && process.stdout.columns) || 80,\n 80,\n)\n\n// indentation spaces from heading level\nconst indent = (n: number) => (n - 1) * 2\n\nconst toEnvKey = (pref: string, key: string): string => {\n return [pref, key.replace(/[^a-zA-Z0-9]+/g, ' ')]\n .join(' ')\n .trim()\n .toUpperCase()\n .replace(/ /g, '_')\n}\n\nconst toEnvVal = (\n value: string | boolean | number | string[] | boolean[] | number[],\n delim: string = '\\n',\n): string => {\n const str =\n typeof value === 'string' ? value\n : typeof value === 'boolean' ?\n value ? '1'\n : '0'\n : typeof value === 'number' ? String(value)\n : Array.isArray(value) ?\n value.map((v: string | number | boolean) => toEnvVal(v)).join(delim)\n : /* c8 ignore start */ undefined\n if (typeof str !== 'string') {\n throw new Error(\n `could not serialize value to environment: ${JSON.stringify(value)}`,\n )\n }\n /* c8 ignore stop */\n return str\n}\n\nconst fromEnvVal = (\n env: string,\n type: T,\n multiple: M,\n delim: string = '\\n',\n): ValidValue =>\n (multiple ?\n env ? env.split(delim).map(v => fromEnvVal(v, type, false))\n : []\n : type === 'string' ? env\n : type === 'boolean' ? env === '1'\n : +env.trim()) as ValidValue\n\n/**\n * Defines the type of value that is valid, given a config definition's\n * {@link ConfigType} and boolean multiple setting\n */\nexport type ValidValue<\n T extends ConfigType = ConfigType,\n M extends boolean = boolean,\n> =\n [T, M] extends ['number', true] ? number[]\n : [T, M] extends ['string', true] ? string[]\n : [T, M] extends ['boolean', true] ? boolean[]\n : [T, M] extends ['number', false] ? number\n : [T, M] extends ['string', false] ? string\n : [T, M] extends ['boolean', false] ? boolean\n : [T, M] extends ['string', boolean] ? string | string[]\n : [T, M] extends ['boolean', boolean] ? boolean | boolean[]\n : [T, M] extends ['number', boolean] ? number | number[]\n : [T, M] extends [ConfigType, false] ? string | number | boolean\n : [T, M] extends [ConfigType, true] ? string[] | number[] | boolean[]\n : string | number | boolean | string[] | number[] | boolean[]\n\n/**\n * The meta information for a config option definition, when the\n * type and multiple values can be inferred by the method being used\n */\nexport type ConfigOptionMeta<\n T extends ConfigType,\n M extends boolean = boolean,\n O extends\n | undefined\n | (T extends 'boolean' ? never\n : T extends 'string' ? readonly string[]\n : T extends 'number' ? readonly number[]\n : readonly number[] | readonly string[]) =\n | undefined\n | (T extends 'boolean' ? never\n : T extends 'string' ? readonly string[]\n : T extends 'number' ? readonly number[]\n : readonly number[] | readonly string[]),\n> = {\n default?:\n | undefined\n | (ValidValue &\n (O extends number[] | string[] ?\n M extends false ?\n O[number]\n : O[number][]\n : unknown))\n validOptions?: O\n description?: string\n validate?:\n | ((v: unknown) => v is ValidValue)\n | ((v: unknown) => boolean)\n short?: string | undefined\n type?: T\n hint?: T extends 'boolean' ? never : string\n delim?: M extends true ? string : never\n} & (M extends false ? { multiple?: false | undefined }\n: M extends true ? { multiple: true }\n: { multiple?: boolean })\n\n/**\n * A set of {@link ConfigOptionMeta} fields, referenced by their longOption\n * string values.\n */\nexport type ConfigMetaSet<\n T extends ConfigType,\n M extends boolean = boolean,\n> = {\n [longOption: string]: ConfigOptionMeta\n}\n\n/**\n * Infer {@link ConfigSet} fields from a given {@link ConfigMetaSet}\n */\nexport type ConfigSetFromMetaSet<\n T extends ConfigType,\n M extends boolean,\n S extends ConfigMetaSet,\n> = {\n [longOption in keyof S]: ConfigOptionBase\n}\n\n/**\n * Fields that can be set on a {@link ConfigOptionBase} or\n * {@link ConfigOptionMeta} based on whether or not the field is known to be\n * multiple.\n */\nexport type MultiType =\n M extends true ?\n {\n multiple: true\n delim?: string | undefined\n }\n : M extends false ?\n {\n multiple?: false | undefined\n delim?: undefined\n }\n : {\n multiple?: boolean | undefined\n delim?: string | undefined\n }\n\n/**\n * A config field definition, in its full representation.\n */\nexport type ConfigOptionBase<\n T extends ConfigType,\n M extends boolean = boolean,\n> = {\n type: T\n short?: string | undefined\n default?: ValidValue | undefined\n description?: string\n hint?: T extends 'boolean' ? undefined : string | undefined\n validate?: (v: unknown) => v is ValidValue\n validOptions?: T extends 'boolean' ? undefined\n : T extends 'string' ? readonly string[]\n : T extends 'number' ? readonly number[]\n : readonly number[] | readonly string[]\n} & MultiType\n\nexport const isConfigType = (t: string): t is ConfigType =>\n typeof t === 'string' &&\n (t === 'string' || t === 'number' || t === 'boolean')\n\nconst undefOrType = (v: unknown, t: string): boolean =>\n v === undefined || typeof v === t\nconst undefOrTypeArray = (v: unknown, t: string): boolean =>\n v === undefined || (Array.isArray(v) && v.every(x => typeof x === t))\n\nconst isValidOption = (v: unknown, vo: readonly unknown[]): boolean =>\n Array.isArray(v) ? v.every(x => isValidOption(x, vo)) : vo.includes(v)\n\n// print the value type, for error message reporting\nconst valueType = (\n v:\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[]\n | { type: ConfigType; multiple?: boolean },\n): string =>\n typeof v === 'string' ? 'string'\n : typeof v === 'boolean' ? 'boolean'\n : typeof v === 'number' ? 'number'\n : Array.isArray(v) ?\n joinTypes([...new Set(v.map(v => valueType(v)))]) + '[]'\n : `${v.type}${v.multiple ? '[]' : ''}`\n\nconst joinTypes = (types: string[]): string =>\n types.length === 1 && typeof types[0] === 'string' ?\n types[0]\n : `(${types.join('|')})`\n\nconst isValidValue = (\n v: unknown,\n type: T,\n multi: M,\n): v is ValidValue => {\n if (multi) {\n if (!Array.isArray(v)) return false\n return !v.some((v: unknown) => !isValidValue(v, type, false))\n }\n if (Array.isArray(v)) return false\n return typeof v === type\n}\n\nexport const isConfigOption = (\n o: any,\n type: T,\n multi: M,\n): o is ConfigOptionBase =>\n !!o &&\n typeof o === 'object' &&\n isConfigType(o.type) &&\n o.type === type &&\n undefOrType(o.short, 'string') &&\n undefOrType(o.description, 'string') &&\n undefOrType(o.hint, 'string') &&\n undefOrType(o.validate, 'function') &&\n (o.type === 'boolean' ?\n o.validOptions === undefined\n : undefOrTypeArray(o.validOptions, o.type)) &&\n (o.default === undefined || isValidValue(o.default, type, multi)) &&\n !!o.multiple === multi\n\n/**\n * A set of {@link ConfigOptionBase} objects, referenced by their longOption\n * string values.\n */\nexport type ConfigSet = {\n [longOption: string]: ConfigOptionBase\n}\n\n/**\n * The 'values' field returned by {@link Jack#parse}\n */\nexport type OptionsResults = {\n [k in keyof T]?: T[k]['validOptions'] extends (\n readonly string[] | readonly number[]\n ) ?\n T[k] extends ConfigOptionBase<'string' | 'number', false> ?\n T[k]['validOptions'][number]\n : T[k] extends ConfigOptionBase<'string' | 'number', true> ?\n T[k]['validOptions'][number][]\n : never\n : T[k] extends ConfigOptionBase<'string', false> ? string\n : T[k] extends ConfigOptionBase<'string', true> ? string[]\n : T[k] extends ConfigOptionBase<'number', false> ? number\n : T[k] extends ConfigOptionBase<'number', true> ? number[]\n : T[k] extends ConfigOptionBase<'boolean', false> ? boolean\n : T[k] extends ConfigOptionBase<'boolean', true> ? boolean[]\n : never\n}\n\n/**\n * The object retured by {@link Jack#parse}\n */\nexport type Parsed = {\n values: OptionsResults\n positionals: string[]\n}\n\nfunction num(\n o: ConfigOptionMeta<'number', false> = {},\n): ConfigOptionBase<'number', false> {\n const { default: def, validate: val, validOptions, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', false)) {\n throw new TypeError('invalid default value', {\n cause: {\n found: def,\n wanted: 'number',\n },\n })\n }\n if (!undefOrTypeArray(validOptions, 'number')) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: 'number[]',\n },\n })\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'number', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n validOptions,\n type: 'number',\n multiple: false,\n }\n}\n\nfunction numList(\n o: ConfigOptionMeta<'number'> = {},\n): ConfigOptionBase<'number', true> {\n const { default: def, validate: val, validOptions, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'number', true)) {\n throw new TypeError('invalid default value', {\n cause: {\n found: def,\n wanted: 'number[]',\n },\n })\n }\n if (!undefOrTypeArray(validOptions, 'number')) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: 'number[]',\n },\n })\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'number', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n validOptions,\n type: 'number',\n multiple: true,\n }\n}\n\nfunction opt(\n o: ConfigOptionMeta<'string', false> = {},\n): ConfigOptionBase<'string', false> {\n const { default: def, validate: val, validOptions, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', false)) {\n throw new TypeError('invalid default value', {\n cause: {\n found: def,\n wanted: 'string',\n },\n })\n }\n if (!undefOrTypeArray(validOptions, 'string')) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: 'string[]',\n },\n })\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'string', false>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n validOptions,\n type: 'string',\n multiple: false,\n }\n}\n\nfunction optList(\n o: ConfigOptionMeta<'string'> = {},\n): ConfigOptionBase<'string', true> {\n const { default: def, validate: val, validOptions, ...rest } = o\n if (def !== undefined && !isValidValue(def, 'string', true)) {\n throw new TypeError('invalid default value', {\n cause: {\n found: def,\n wanted: 'string[]',\n },\n })\n }\n if (!undefOrTypeArray(validOptions, 'string')) {\n throw new TypeError('invalid validOptions', {\n cause: {\n found: validOptions,\n wanted: 'string[]',\n },\n })\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'string', true>)\n : undefined\n return {\n ...rest,\n default: def,\n validate,\n validOptions,\n type: 'string',\n multiple: true,\n }\n}\n\nfunction flag(\n o: ConfigOptionMeta<'boolean', false> = {},\n): ConfigOptionBase<'boolean', false> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false>\n delete (rest as ConfigOptionMeta<'string', false>).validOptions\n if (def !== undefined && !isValidValue(def, 'boolean', false)) {\n throw new TypeError('invalid default value')\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'boolean', false>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: false,\n }\n}\n\nfunction flagList(\n o: ConfigOptionMeta<'boolean'> = {},\n): ConfigOptionBase<'boolean', true> {\n const {\n hint,\n default: def,\n validate: val,\n ...rest\n } = o as ConfigOptionMeta<'boolean', false>\n delete (rest as ConfigOptionMeta<'string', false>).validOptions\n if (def !== undefined && !isValidValue(def, 'boolean', true)) {\n throw new TypeError('invalid default value')\n }\n const validate =\n val ?\n (val as (v: unknown) => v is ValidValue<'boolean', true>)\n : undefined\n if (hint !== undefined) {\n throw new TypeError('cannot provide hint for flag list')\n }\n return {\n ...rest,\n default: def,\n validate,\n type: 'boolean',\n multiple: true,\n }\n}\nconst toParseArgsOptionsConfig = (\n options: ConfigSet,\n): Exclude => {\n const c: Exclude = {}\n for (const longOption in options) {\n const config = options[longOption]\n /* c8 ignore start */\n if (!config) {\n throw new Error('config must be an object: ' + longOption)\n }\n /* c8 ignore start */\n if (isConfigOption(config, 'number', true)) {\n c[longOption] = {\n type: 'string',\n multiple: true,\n default: config.default?.map(c => String(c)),\n }\n } else if (isConfigOption(config, 'number', false)) {\n c[longOption] = {\n type: 'string',\n multiple: false,\n default:\n config.default === undefined ?\n undefined\n : String(config.default),\n }\n } else {\n const conf = config as\n | ConfigOptionBase<'string'>\n | ConfigOptionBase<'boolean'>\n c[longOption] = {\n type: conf.type,\n multiple: !!conf.multiple,\n default: conf.default,\n }\n }\n const clo = c[longOption] as ConfigOptionBase\n if (typeof config.short === 'string') {\n clo.short = config.short\n }\n\n if (\n config.type === 'boolean' &&\n !longOption.startsWith('no-') &&\n !options[`no-${longOption}`]\n ) {\n c[`no-${longOption}`] = {\n type: 'boolean',\n multiple: config.multiple,\n }\n }\n }\n return c\n}\n\n/**\n * A row used when generating the {@link Jack#usage} string\n */\nexport interface Row {\n left?: string\n text: string\n skipLine?: boolean\n type?: string\n}\n\n/**\n * A heading for a section in the usage, created by the jack.heading()\n * method.\n *\n * First heading is always level 1, subsequent headings default to 2.\n *\n * The level of the nearest heading level sets the indentation of the\n * description that follows.\n */\nexport interface Heading extends Row {\n type: 'heading'\n text: string\n left?: ''\n skipLine?: boolean\n level: number\n pre?: boolean\n}\nconst isHeading = (r: { type?: string }): r is Heading =>\n r.type === 'heading'\n\n/**\n * An arbitrary blob of text describing some stuff, set by the\n * jack.description() method.\n *\n * Indentation determined by level of the nearest header.\n */\nexport interface Description extends Row {\n type: 'description'\n text: string\n left?: ''\n skipLine?: boolean\n pre?: boolean\n}\n\nconst isDescription = (r: { type?: string }): r is Description =>\n r.type === 'description'\n\n/**\n * A heading or description row used when generating the {@link Jack#usage}\n * string\n */\nexport type TextRow = Heading | Description\n\n/**\n * Either a {@link TextRow} or a reference to a {@link ConfigOptionBase}\n */\nexport type UsageField =\n | TextRow\n | {\n type: 'config'\n name: string\n value: ConfigOptionBase\n }\n\n/**\n * Options provided to the {@link Jack} constructor\n */\nexport interface JackOptions {\n /**\n * Whether to allow positional arguments\n *\n * @default true\n */\n allowPositionals?: boolean\n\n /**\n * Prefix to use when reading/writing the environment variables\n *\n * If not specified, environment behavior will not be available.\n */\n envPrefix?: string\n\n /**\n * Environment object to read/write. Defaults `process.env`.\n * No effect if `envPrefix` is not set.\n */\n env?: { [k: string]: string | undefined }\n\n /**\n * A short usage string. If not provided, will be generated from the\n * options provided, but that can of course be rather verbose if\n * there are a lot of options.\n */\n usage?: string\n\n /**\n * Stop parsing flags and opts at the first positional argument.\n * This is to support cases like `cmd [flags] [options]`, where\n * each subcommand may have different options. This effectively treats\n * any positional as a `--` argument. Only relevant if `allowPositionals`\n * is true.\n *\n * To do subcommands, set this option, look at the first positional, and\n * parse the remaining positionals as appropriate.\n *\n * @default false\n */\n stopAtPositional?: boolean\n\n /**\n * Conditional `stopAtPositional`. If set to a `(string)=>boolean` function,\n * will be called with each positional argument encountered. If the function\n * returns true, then parsing will stop at that point.\n */\n stopAtPositionalTest?: (arg: string) => boolean\n}\n\n/**\n * Class returned by the {@link jack} function and all configuration\n * definition methods. This is what gets chained together.\n */\nexport class Jack {\n #configSet: C\n #shorts: { [k: string]: string }\n #options: JackOptions\n #fields: UsageField[] = []\n #env: { [k: string]: string | undefined }\n #envPrefix?: string\n #allowPositionals: boolean\n #usage?: string\n #usageMarkdown?: string\n\n constructor(options: JackOptions = {}) {\n this.#options = options\n this.#allowPositionals = options.allowPositionals !== false\n this.#env =\n this.#options.env === undefined ? process.env : this.#options.env\n this.#envPrefix = options.envPrefix\n // We need to fib a little, because it's always the same object, but it\n // starts out as having an empty config set. Then each method that adds\n // fields returns `this as Jack`\n this.#configSet = Object.create(null) as C\n this.#shorts = Object.create(null)\n }\n\n /**\n * Set the default value (which will still be overridden by env or cli)\n * as if from a parsed config file. The optional `source` param, if\n * provided, will be included in error messages if a value is invalid or\n * unknown.\n */\n setConfigValues(values: OptionsResults, source = '') {\n try {\n this.validate(values)\n } catch (er) {\n const e = er as Error\n if (source && e && typeof e === 'object') {\n if (e.cause && typeof e.cause === 'object') {\n Object.assign(e.cause, { path: source })\n } else {\n e.cause = { path: source }\n }\n }\n throw e\n }\n for (const [field, value] of Object.entries(values)) {\n const my = this.#configSet[field]\n // already validated, just for TS's benefit\n /* c8 ignore start */\n if (!my) {\n throw new Error('unexpected field in config set: ' + field, {\n cause: { found: field },\n })\n }\n /* c8 ignore stop */\n my.default = value\n }\n return this\n }\n\n /**\n * Parse a string of arguments, and return the resulting\n * `{ values, positionals }` object.\n *\n * If an {@link JackOptions#envPrefix} is set, then it will read default\n * values from the environment, and write the resulting values back\n * to the environment as well.\n *\n * Environment values always take precedence over any other value, except\n * an explicit CLI setting.\n */\n parse(args: string[] = process.argv): Parsed {\n this.loadEnvDefaults()\n const p = this.parseRaw(args)\n this.applyDefaults(p)\n this.writeEnv(p)\n return p\n }\n\n loadEnvDefaults() {\n if (this.#envPrefix) {\n for (const [field, my] of Object.entries(this.#configSet)) {\n const ek = toEnvKey(this.#envPrefix, field)\n const env = this.#env[ek]\n if (env !== undefined) {\n my.default = fromEnvVal(env, my.type, !!my.multiple, my.delim)\n }\n }\n }\n }\n\n applyDefaults(p: Parsed) {\n for (const [field, c] of Object.entries(this.#configSet)) {\n if (c.default !== undefined && !(field in p.values)) {\n //@ts-ignore\n p.values[field] = c.default\n }\n }\n }\n\n /**\n * Only parse the command line arguments passed in.\n * Does not strip off the `node script.js` bits, so it must be just the\n * arguments you wish to have parsed.\n * Does not read from or write to the environment, or set defaults.\n */\n parseRaw(args: string[]): Parsed {\n if (args === process.argv) {\n args = args.slice(\n (process as { _eval?: string })._eval !== undefined ? 1 : 2,\n )\n }\n\n const options = toParseArgsOptionsConfig(this.#configSet)\n const result = parseArgs({\n args,\n options,\n // always strict, but using our own logic\n strict: false,\n allowPositionals: this.#allowPositionals,\n tokens: true,\n })\n\n const p: Parsed = {\n values: {},\n positionals: [],\n }\n for (const token of result.tokens) {\n if (token.kind === 'positional') {\n p.positionals.push(token.value)\n if (\n this.#options.stopAtPositional ||\n this.#options.stopAtPositionalTest?.(token.value)\n ) {\n p.positionals.push(...args.slice(token.index + 1))\n break\n }\n } else if (token.kind === 'option') {\n let value: string | number | boolean | undefined = undefined\n if (token.name.startsWith('no-')) {\n const my = this.#configSet[token.name]\n const pname = token.name.substring('no-'.length)\n const pos = this.#configSet[pname]\n if (\n pos &&\n pos.type === 'boolean' &&\n (!my ||\n (my.type === 'boolean' && !!my.multiple === !!pos.multiple))\n ) {\n value = false\n token.name = pname\n }\n }\n const my = this.#configSet[token.name]\n if (!my) {\n throw new Error(\n `Unknown option '${token.rawName}'. ` +\n `To specify a positional argument starting with a '-', ` +\n `place it at the end of the command after '--', as in ` +\n `'-- ${token.rawName}'`,\n {\n cause: {\n found:\n token.rawName + (token.value ? `=${token.value}` : ''),\n },\n },\n )\n }\n if (value === undefined) {\n if (token.value === undefined) {\n if (my.type !== 'boolean') {\n throw new Error(\n `No value provided for ${token.rawName}, expected ${my.type}`,\n {\n cause: {\n name: token.rawName,\n wanted: valueType(my),\n },\n },\n )\n }\n value = true\n } else {\n if (my.type === 'boolean') {\n throw new Error(\n `Flag ${token.rawName} does not take a value, received '${token.value}'`,\n { cause: { found: token } },\n )\n }\n if (my.type === 'string') {\n value = token.value\n } else {\n value = +token.value\n if (value !== value) {\n throw new Error(\n `Invalid value '${token.value}' provided for ` +\n `'${token.rawName}' option, expected number`,\n {\n cause: {\n name: token.rawName,\n found: token.value,\n wanted: 'number',\n },\n },\n )\n }\n }\n }\n }\n if (my.multiple) {\n const pv = p.values as {\n [k: string]: (string | number | boolean)[]\n }\n const tn = pv[token.name] ?? []\n pv[token.name] = tn\n tn.push(value)\n } else {\n const pv = p.values as { [k: string]: string | number | boolean }\n pv[token.name] = value\n }\n }\n }\n\n for (const [field, value] of Object.entries(p.values)) {\n const valid = this.#configSet[field]?.validate\n const validOptions = this.#configSet[field]?.validOptions\n let cause:\n | undefined\n | {\n name: string\n found: unknown\n validOptions?: readonly string[] | readonly number[]\n }\n if (validOptions && !isValidOption(value, validOptions)) {\n cause = { name: field, found: value, validOptions: validOptions }\n }\n if (valid && !valid(value)) {\n cause ??= { name: field, found: value }\n }\n if (cause) {\n throw new Error(\n `Invalid value provided for --${field}: ${JSON.stringify(\n value,\n )}`,\n { cause },\n )\n }\n }\n\n return p\n }\n\n /**\n * do not set fields as 'no-foo' if 'foo' exists and both are bools\n * just set foo.\n */\n #noNoFields(f: string, val: unknown, s: string = f) {\n if (!f.startsWith('no-') || typeof val !== 'boolean') return\n const yes = f.substring('no-'.length)\n // recurse so we get the core config key we care about.\n this.#noNoFields(yes, val, s)\n if (this.#configSet[yes]?.type === 'boolean') {\n throw new Error(\n `do not set '${s}', instead set '${yes}' as desired.`,\n { cause: { found: s, wanted: yes } },\n )\n }\n }\n\n /**\n * Validate that any arbitrary object is a valid configuration `values`\n * object. Useful when loading config files or other sources.\n */\n validate(o: unknown): asserts o is Parsed['values'] {\n if (!o || typeof o !== 'object') {\n throw new Error('Invalid config: not an object', {\n cause: { found: o },\n })\n }\n const opts = o as Record\n for (const field in o) {\n const value = opts[field]\n /* c8 ignore next - for TS */\n if (value === undefined) continue\n this.#noNoFields(field, value)\n const config = this.#configSet[field]\n if (!config) {\n throw new Error(`Unknown config option: ${field}`, {\n cause: { found: field },\n })\n }\n if (!isValidValue(value, config.type, !!config.multiple)) {\n throw new Error(\n `Invalid value ${valueType(\n value,\n )} for ${field}, expected ${valueType(config)}`,\n {\n cause: {\n name: field,\n found: value,\n wanted: valueType(config),\n },\n },\n )\n }\n let cause:\n | undefined\n | {\n name: string\n found: any\n validOptions?: readonly string[] | readonly number[]\n }\n if (\n config.validOptions &&\n !isValidOption(value, config.validOptions)\n ) {\n cause = {\n name: field,\n found: value,\n validOptions: config.validOptions,\n }\n }\n if (config.validate && !config.validate(value)) {\n cause ??= { name: field, found: value }\n }\n if (cause) {\n throw new Error(`Invalid config value for ${field}: ${value}`, {\n cause,\n })\n }\n }\n }\n\n writeEnv(p: Parsed) {\n if (!this.#env || !this.#envPrefix) return\n for (const [field, value] of Object.entries(p.values)) {\n const my = this.#configSet[field]\n this.#env[toEnvKey(this.#envPrefix, field)] = toEnvVal(\n value,\n my?.delim,\n )\n }\n }\n\n /**\n * Add a heading to the usage output banner\n */\n heading(\n text: string,\n level?: 1 | 2 | 3 | 4 | 5 | 6,\n { pre = false }: { pre?: boolean } = {},\n ): Jack {\n if (level === undefined) {\n level = this.#fields.some(r => isHeading(r)) ? 2 : 1\n }\n this.#fields.push({ type: 'heading', text, level, pre })\n return this\n }\n\n /**\n * Add a long-form description to the usage output at this position.\n */\n description(text: string, { pre }: { pre?: boolean } = {}): Jack {\n this.#fields.push({ type: 'description', text, pre })\n return this\n }\n\n /**\n * Add one or more number fields.\n */\n num>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, num)\n }\n\n /**\n * Add one or more multiple number fields.\n */\n numList>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, numList)\n }\n\n /**\n * Add one or more string option fields.\n */\n opt>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, opt)\n }\n\n /**\n * Add one or more multiple string option fields.\n */\n optList>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, optList)\n }\n\n /**\n * Add one or more flag fields.\n */\n flag>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, flag)\n }\n\n /**\n * Add one or more multiple flag fields.\n */\n flagList>(\n fields: F,\n ): Jack> {\n return this.#addFields(fields, flagList)\n }\n\n /**\n * Generic field definition method. Similar to flag/flagList/number/etc,\n * but you must specify the `type` (and optionally `multiple` and `delim`)\n * fields on each one, or Jack won't know how to define them.\n */\n addFields(fields: F): Jack {\n const next = this as unknown as Jack\n for (const [name, field] of Object.entries(fields)) {\n this.#validateName(name, field)\n next.#fields.push({\n type: 'config',\n name,\n value: field as ConfigOptionBase,\n })\n }\n Object.assign(next.#configSet, fields)\n return next\n }\n\n #addFields<\n T extends ConfigType,\n M extends boolean,\n F extends ConfigMetaSet,\n >(\n fields: F,\n fn: (m: ConfigOptionMeta) => ConfigOptionBase,\n ): Jack> {\n type NextC = C & ConfigSetFromMetaSet\n const next = this as unknown as Jack\n Object.assign(\n next.#configSet,\n Object.fromEntries(\n Object.entries(fields).map(([name, field]) => {\n this.#validateName(name, field)\n const option = fn(field)\n next.#fields.push({\n type: 'config',\n name,\n value: option as ConfigOptionBase,\n })\n return [name, option]\n }),\n ),\n )\n return next\n }\n\n #validateName(name: string, field: { short?: string }) {\n if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(name)) {\n throw new TypeError(\n `Invalid option name: ${name}, ` +\n `must be '-' delimited ASCII alphanumeric`,\n )\n }\n if (this.#configSet[name]) {\n throw new TypeError(`Cannot redefine option ${field}`)\n }\n if (this.#shorts[name]) {\n throw new TypeError(\n `Cannot redefine option ${name}, already ` +\n `in use for ${this.#shorts[name]}`,\n )\n }\n if (field.short) {\n if (!/^[a-zA-Z0-9]$/.test(field.short)) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n 'must be 1 ASCII alphanumeric character',\n )\n }\n if (this.#shorts[field.short]) {\n throw new TypeError(\n `Invalid ${name} short option: ${field.short}, ` +\n `already in use for ${this.#shorts[field.short]}`,\n )\n }\n this.#shorts[field.short] = name\n this.#shorts[name] = name\n }\n }\n\n /**\n * Return the usage banner for the given configuration\n */\n usage(): string {\n if (this.#usage) return this.#usage\n\n let headingLevel = 1\n const ui = cliui({ width })\n const first = this.#fields[0]\n let start = first?.type === 'heading' ? 1 : 0\n if (first?.type === 'heading') {\n ui.div({\n padding: [0, 0, 0, 0],\n text: normalize(first.text),\n })\n }\n ui.div({ padding: [0, 0, 0, 0], text: 'Usage:' })\n if (this.#options.usage) {\n ui.div({\n text: this.#options.usage,\n padding: [0, 0, 0, 2],\n })\n } else {\n const cmd = basename(String(process.argv[1]))\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n ui.div({\n text: usage,\n padding: [0, 0, 0, 2],\n })\n }\n\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n const maybeDesc = this.#fields[start]\n if (maybeDesc && isDescription(maybeDesc)) {\n const print = normalize(maybeDesc.text, maybeDesc.pre)\n start++\n ui.div({ padding: [0, 0, 0, 0], text: print })\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n }\n\n const { rows, maxWidth } = this.#usageRows(start)\n\n // every heading/description after the first gets indented by 2\n // extra spaces.\n for (const row of rows) {\n if (row.left) {\n // If the row is too long, don't wrap it\n // Bump the right-hand side down a line to make room\n const configIndent = indent(Math.max(headingLevel, 2))\n if (row.left.length > maxWidth - 3) {\n ui.div({ text: row.left, padding: [0, 0, 0, configIndent] })\n ui.div({ text: row.text, padding: [0, 0, 0, maxWidth] })\n } else {\n ui.div(\n {\n text: row.left,\n padding: [0, 1, 0, configIndent],\n width: maxWidth,\n },\n { padding: [0, 0, 0, 0], text: row.text },\n )\n }\n if (row.skipLine) {\n ui.div({ padding: [0, 0, 0, 0], text: '' })\n }\n } else {\n if (isHeading(row)) {\n const { level } = row\n headingLevel = level\n // only h1 and h2 have bottom padding\n // h3-h6 do not\n const b = level <= 2 ? 1 : 0\n ui.div({ ...row, padding: [0, 0, b, indent(level)] })\n } else {\n ui.div({ ...row, padding: [0, 0, 1, indent(headingLevel + 1)] })\n }\n }\n }\n\n return (this.#usage = ui.toString())\n }\n\n /**\n * Return the usage banner markdown for the given configuration\n */\n usageMarkdown(): string {\n if (this.#usageMarkdown) return this.#usageMarkdown\n\n const out: string[] = []\n\n let headingLevel = 1\n const first = this.#fields[0]\n let start = first?.type === 'heading' ? 1 : 0\n if (first?.type === 'heading') {\n out.push(`# ${normalizeOneLine(first.text)}`)\n }\n out.push('Usage:')\n if (this.#options.usage) {\n out.push(normalizeMarkdown(this.#options.usage, true))\n } else {\n const cmd = basename(String(process.argv[1]))\n const shortFlags: string[] = []\n const shorts: string[][] = []\n const flags: string[] = []\n const opts: string[][] = []\n for (const [field, config] of Object.entries(this.#configSet)) {\n if (config.short) {\n if (config.type === 'boolean') shortFlags.push(config.short)\n else shorts.push([config.short, config.hint || field])\n } else {\n if (config.type === 'boolean') flags.push(field)\n else opts.push([field, config.hint || field])\n }\n }\n const sf = shortFlags.length ? ' -' + shortFlags.join('') : ''\n const so = shorts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const lf = flags.map(k => ` --${k}`).join('')\n const lo = opts.map(([k, v]) => ` --${k}=<${v}>`).join('')\n const usage = `${cmd}${sf}${so}${lf}${lo}`.trim()\n out.push(normalizeMarkdown(usage, true))\n }\n\n const maybeDesc = this.#fields[start]\n if (maybeDesc && isDescription(maybeDesc)) {\n out.push(normalizeMarkdown(maybeDesc.text, maybeDesc.pre))\n start++\n }\n\n const { rows } = this.#usageRows(start)\n\n // heading level in markdown is number of # ahead of text\n for (const row of rows) {\n if (row.left) {\n out.push(\n '#'.repeat(headingLevel + 1) +\n ' ' +\n normalizeOneLine(row.left, true),\n )\n if (row.text) out.push(normalizeMarkdown(row.text))\n } else if (isHeading(row)) {\n const { level } = row\n headingLevel = level\n out.push(\n `${'#'.repeat(headingLevel)} ${normalizeOneLine(\n row.text,\n row.pre,\n )}`,\n )\n } else {\n out.push(normalizeMarkdown(row.text, !!(row as Description).pre))\n }\n }\n\n return (this.#usageMarkdown = out.join('\\n\\n') + '\\n')\n }\n\n #usageRows(start: number) {\n // turn each config type into a row, and figure out the width of the\n // left hand indentation for the option descriptions.\n let maxMax = Math.max(12, Math.min(26, Math.floor(width / 3)))\n let maxWidth = 8\n let prev: Row | TextRow | undefined = undefined\n const rows: (Row | TextRow)[] = []\n for (const field of this.#fields.slice(start)) {\n if (field.type !== 'config') {\n if (prev?.type === 'config') prev.skipLine = true\n prev = undefined\n field.text = normalize(field.text, !!field.pre)\n rows.push(field)\n continue\n }\n const { value } = field\n const desc = value.description || ''\n const mult = value.multiple ? 'Can be set multiple times' : ''\n const opts =\n value.validOptions?.length ?\n `Valid options:${value.validOptions.map(\n v => ` ${JSON.stringify(v)}`,\n )}`\n : ''\n const dmDelim = desc.includes('\\n') ? '\\n\\n' : '\\n'\n const extra = [opts, mult].join(dmDelim).trim()\n const text = (normalize(desc) + dmDelim + extra).trim()\n const hint =\n value.hint ||\n (value.type === 'number' ? 'n'\n : value.type === 'string' ? field.name\n : undefined)\n const short =\n !value.short ? ''\n : value.type === 'boolean' ? `-${value.short} `\n : `-${value.short}<${hint}> `\n const left =\n value.type === 'boolean' ?\n `${short}--${field.name}`\n : `${short}--${field.name}=<${hint}>`\n const row: Row = { text, left, type: 'config' }\n if (text.length > width - maxMax) {\n row.skipLine = true\n }\n if (prev && left.length > maxMax) prev.skipLine = true\n prev = row\n const len = left.length + 4\n if (len > maxWidth && len < maxMax) {\n maxWidth = len\n }\n\n rows.push(row)\n }\n\n return { rows, maxWidth }\n }\n\n /**\n * Return the configuration options as a plain object\n */\n toJSON() {\n return Object.fromEntries(\n Object.entries(this.#configSet).map(([field, def]) => [\n field,\n {\n type: def.type,\n ...(def.multiple ? { multiple: true } : {}),\n ...(def.delim ? { delim: def.delim } : {}),\n ...(def.short ? { short: def.short } : {}),\n ...(def.description ?\n { description: normalize(def.description) }\n : {}),\n ...(def.validate ? { validate: def.validate } : {}),\n ...(def.validOptions ? { validOptions: def.validOptions } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n ...(def.hint ? { hint: def.hint } : {}),\n },\n ]),\n )\n }\n\n /**\n * Custom printer for `util.inspect`\n */\n [inspect.custom](_: number, options: InspectOptions) {\n return `Jack ${inspect(this.toJSON(), options)}`\n }\n}\n\n// Unwrap and un-indent, so we can wrap description\n// strings however makes them look nice in the code.\nconst normalize = (s: string, pre = false) => {\n if (pre)\n // prepend a ZWSP to each line so cliui doesn't strip it.\n return s\n .split('\\n')\n .map(l => `\\u200b${l}`)\n .join('\\n')\n return s\n .split(/^\\s*```\\s*$/gm)\n .map((s, i) => {\n if (i % 2 === 1) {\n if (!s.trim()) {\n return `\\`\\`\\`\\n\\`\\`\\`\\n`\n }\n // outdent the ``` blocks, but preserve whitespace otherwise.\n const split = s.split('\\n')\n // throw out the \\n at the start and end\n split.pop()\n split.shift()\n const si = split.reduce((shortest, l) => {\n /* c8 ignore next */\n const ind = l.match(/^\\s*/)?.[0] ?? ''\n if (ind.length) return Math.min(ind.length, shortest)\n else return shortest\n }, Infinity)\n /* c8 ignore next */\n const i = isFinite(si) ? si : 0\n return (\n '\\n```\\n' +\n split.map(s => `\\u200b${s.substring(i)}`).join('\\n') +\n '\\n```\\n'\n )\n }\n return (\n s\n // remove single line breaks, except for lists\n .replace(/([^\\n])\\n[ \\t]*([^\\n])/g, (_, $1, $2) =>\n !/^[-*]/.test($2) ? `${$1} ${$2}` : `${$1}\\n${$2}`,\n )\n // normalize mid-line whitespace\n .replace(/([^\\n])[ \\t]+([^\\n])/g, '$1 $2')\n // two line breaks are enough\n .replace(/\\n{3,}/g, '\\n\\n')\n // remove any spaces at the start of a line\n .replace(/\\n[ \\t]+/g, '\\n')\n .trim()\n )\n })\n .join('\\n')\n}\n\n// normalize for markdown printing, remove leading spaces on lines\nconst normalizeMarkdown = (s: string, pre: boolean = false): string => {\n const n = normalize(s, pre).replace(/\\\\/g, '\\\\\\\\')\n return pre ?\n `\\`\\`\\`\\n${n.replace(/\\u200b/g, '')}\\n\\`\\`\\``\n : n.replace(/\\n +/g, '\\n').trim()\n}\n\nconst normalizeOneLine = (s: string, pre: boolean = false) => {\n const n = normalize(s, pre)\n .replace(/[\\s\\u200b]+/g, ' ')\n .trim()\n return pre ? `\\`${n}\\`` : n\n}\n\n/**\n * Main entry point. Create and return a {@link Jack} object.\n */\nexport const jack = (options: JackOptions = {}) => new Jack(options)\n"]} \ No newline at end of file diff --git a/node_modules/jackspeak/dist/esm/package.json b/node_modules/jackspeak/dist/esm/package.json new file mode 100644 index 00000000..3dbc1ca5 --- /dev/null +++ b/node_modules/jackspeak/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/node_modules/jackspeak/dist/esm/parse-args.d.ts b/node_modules/jackspeak/dist/esm/parse-args.d.ts new file mode 100644 index 00000000..498d114c --- /dev/null +++ b/node_modules/jackspeak/dist/esm/parse-args.d.ts @@ -0,0 +1,4 @@ +/// +import * as util from 'util'; +export declare const parseArgs: typeof util.parseArgs; +//# sourceMappingURL=parse-args.d.ts.map \ No newline at end of file diff --git a/node_modules/jackspeak/dist/esm/parse-args.d.ts.map b/node_modules/jackspeak/dist/esm/parse-args.d.ts.map new file mode 100644 index 00000000..d56cb699 --- /dev/null +++ b/node_modules/jackspeak/dist/esm/parse-args.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../../src/parse-args.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAoC5B,eAAO,MAAM,SAAS,uBAA6C,CAAA"} \ No newline at end of file diff --git a/node_modules/jackspeak/dist/esm/parse-args.js b/node_modules/jackspeak/dist/esm/parse-args.js new file mode 100644 index 00000000..a4be7153 --- /dev/null +++ b/node_modules/jackspeak/dist/esm/parse-args.js @@ -0,0 +1,26 @@ +import * as util from 'util'; +const pv = (typeof process === 'object' && + !!process && + typeof process.version === 'string') ? + process.version + : 'v0.0.0'; +const pvs = pv + .replace(/^v/, '') + .split('.') + .map(s => parseInt(s, 10)); +/* c8 ignore start */ +const [major = 0, minor = 0] = pvs; +/* c8 ignore stop */ +let { parseArgs: pa, } = util; +/* c8 ignore start - version specific */ +if (!pa || + major < 16 || + (major === 18 && minor < 11) || + (major === 16 && minor < 19)) { + // Ignore because we will clobber it for commonjs + //@ts-ignore + pa = (await import('@pkgjs/parseargs')).parseArgs; +} +/* c8 ignore stop */ +export const parseArgs = pa; +//# sourceMappingURL=parse-args.js.map \ No newline at end of file diff --git a/node_modules/jackspeak/dist/esm/parse-args.js.map b/node_modules/jackspeak/dist/esm/parse-args.js.map new file mode 100644 index 00000000..48017f0c --- /dev/null +++ b/node_modules/jackspeak/dist/esm/parse-args.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse-args.js","sourceRoot":"","sources":["../../src/parse-args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,MAAM,EAAE,GACN,CACE,OAAO,OAAO,KAAK,QAAQ;IAC3B,CAAC,CAAC,OAAO;IACT,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CACpC,CAAC,CAAC;IACD,OAAO,CAAC,OAAO;IACjB,CAAC,CAAC,QAAQ,CAAA;AACZ,MAAM,GAAG,GAAG,EAAE;KACX,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;KACjB,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAE5B,qBAAqB;AACrB,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;AAClC,oBAAoB;AAEpB,IAAI,EACF,SAAS,EAAE,EAAE,GACd,GAA8D,IAAI,CAAA;AAEnE,wCAAwC;AACxC,IACE,CAAC,EAAE;IACH,KAAK,GAAG,EAAE;IACV,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;IAC5B,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,EAC5B,CAAC;IACD,iDAAiD;IACjD,YAAY;IACZ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAA;AACnD,CAAC;AACD,oBAAoB;AAEpB,MAAM,CAAC,MAAM,SAAS,GAAG,EAA0C,CAAA","sourcesContent":["import * as util from 'util'\n\nconst pv =\n (\n typeof process === 'object' &&\n !!process &&\n typeof process.version === 'string'\n ) ?\n process.version\n : 'v0.0.0'\nconst pvs = pv\n .replace(/^v/, '')\n .split('.')\n .map(s => parseInt(s, 10))\n\n/* c8 ignore start */\nconst [major = 0, minor = 0] = pvs\n/* c8 ignore stop */\n\nlet {\n parseArgs: pa,\n}: typeof import('util') | typeof import('@pkgjs/parseargs') = util\n\n/* c8 ignore start - version specific */\nif (\n !pa ||\n major < 16 ||\n (major === 18 && minor < 11) ||\n (major === 16 && minor < 19)\n) {\n // Ignore because we will clobber it for commonjs\n //@ts-ignore\n pa = (await import('@pkgjs/parseargs')).parseArgs\n}\n/* c8 ignore stop */\n\nexport const parseArgs = pa as (typeof import('util'))['parseArgs']\n"]} \ No newline at end of file diff --git a/node_modules/jackspeak/package.json b/node_modules/jackspeak/package.json new file mode 100644 index 00000000..31f6f9e2 --- /dev/null +++ b/node_modules/jackspeak/package.json @@ -0,0 +1,95 @@ +{ + "name": "jackspeak", + "version": "4.0.1", + "description": "A very strict and proper argument parser.", + "tshy": { + "main": true, + "exports": { + "./package.json": "./package.json", + ".": "./src/index.js" + } + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "type": "module", + "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" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "build-examples": "for i in examples/*.js ; do node $i -h > ${i/.js/.txt}; done", + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "prepare": "tshy", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "test": "tap", + "snap": "tap", + "format": "prettier --write . --log-level warn", + "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts" + }, + "license": "BlueOak-1.0.0", + "prettier": { + "experimentalTernaries": true, + "semi": false, + "printWidth": 75, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "devDependencies": { + "@types/node": "^20.7.0", + "@types/pkgjs__parseargs": "^0.10.1", + "prettier": "^3.2.5", + "tap": "^18.8.0", + "tshy": "^1.14.0", + "typedoc": "^0.25.1", + "typescript": "^5.2.2" + }, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/jackspeak.git" + }, + "keywords": [ + "argument", + "parser", + "args", + "option", + "flag", + "cli", + "command", + "line", + "parse", + "parsing" + ], + "author": "Isaac Z. Schlueter ", + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } +} diff --git a/node_modules/minimatch/LICENSE b/node_modules/minimatch/LICENSE new file mode 100644 index 00000000..1493534e --- /dev/null +++ b/node_modules/minimatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minimatch/README.md b/node_modules/minimatch/README.md new file mode 100644 index 00000000..3c97a02f --- /dev/null +++ b/node_modules/minimatch/README.md @@ -0,0 +1,454 @@ +# minimatch + +A minimal matching utility. + +This is the matching library used internally by npm. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Usage + +```js +// hybrid module, load with require() or import +import { minimatch } from 'minimatch' +// or: +const { minimatch } = require('minimatch') + +minimatch('bar.foo', '*.foo') // true! +minimatch('bar.foo', '*.bar') // false! +minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +- Brace Expansion +- Extended glob matching +- "Globstar" `**` matching +- [Posix character + classes](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html), + like `[[:alpha:]]`, supporting the full range of Unicode + characters. For example, `[[:alpha:]]` will match against + `'é'`, though `[a-zA-Z]` will not. Collating symbol and set + matching is not supported, so `[[=e=]]` will _not_ match `'é'` + and `[[.ch.]]` will not match `'ch'` in locales where `ch` is + considered a single character. + +See: + +- `man sh` +- `man bash` [Pattern + Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) +- `man 3 fnmatch` +- `man 5 gitignore` + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes in patterns +will always be interpreted as escape characters, not path separators. + +Note that `\` or `/` _will_ be interpreted as path separators in paths on +Windows, and will match against `/` in glob expressions. + +So just always use `/` in patterns. + +### UNC Paths + +On Windows, UNC paths like `//?/c:/...` or +`//ComputerName/Share/...` are handled specially. + +- Patterns starting with a double-slash followed by some + non-slash characters will preserve their double-slash. As a + result, a pattern like `//*` will match `//x`, but not `/x`. +- Patterns staring with `//?/:` will _not_ treat + the `?` as a wildcard character. Instead, it will be treated + as a normal string. +- Patterns starting with `//?/:/...` will match + file paths starting with `:/...`, and vice versa, + as if the `//?/` was not present. This behavior only is + present when the drive letters are a case-insensitive match to + one another. The remaining portions of the path/pattern are + compared case sensitively, unless `nocase:true` is set. + +Note that specifying a UNC path using `\` characters as path +separators is always allowed in the file path argument, but only +allowed in the pattern argument when `windowsPathsNoEscape: true` +is set in the options. + +## Minimatch Class + +Create a minimatch object by instantiating the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require('minimatch').Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +- `pattern` The original pattern the minimatch object represents. +- `options` The options supplied to the constructor. +- `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +- `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +- `negate` True if the pattern is negated. +- `comment` True if the pattern is a comment. +- `empty` True if the pattern is `""`. + +### Methods + +- `makeRe()` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +- `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +- `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. +- `hasMagic()` Returns true if the parsed pattern contains any + magic characters. Returns false if all comparator parts are + string literals. If the `magicalBraces` option is set on the + constructor, then it will consider brace expansions which are + not otherwise magical to be magic. If not set, then a pattern + like `a{b,c}d` will return `false`, because neither `abd` nor + `acd` contain any special glob characters. + + This does **not** mean that the pattern string can be used as a + literal filename, as it may contain magic glob characters that + are escaped. For example, the pattern `\\*` or `[*]` would not + be considered to have magic, as the matching portion parses to + the literal string `'*'` and would match a path named `'*'`, + not `'\\*'` or `'[*]'`. The `minimatch.unescape()` method may + be used to remove escape characters. + +All other methods are internal, and will be called as necessary. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, '*.js', { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true })) +``` + +### minimatch.escape(pattern, options = {}) + +Escape all magic characters in a glob pattern, so that it will +only ever match literal strings + +If the `windowsPathsNoEscape` option is used, then characters are +escaped by wrapping in `[]`, because a magic character wrapped in +a character class can only be satisfied by that exact character. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +### minimatch.unescape(pattern, options = {}) + +Un-escape a glob string that may contain some escaped characters. + +If the `windowsPathsNoEscape` option is used, then square-brace +escapes are removed, but not backslash escapes. For example, it +will turn the string `'[*]'` into `*`, but it will not turn +`'\\*'` into `'*'`, because `\` is a path separator in +`windowsPathsNoEscape` mode. + +When `windowsPathsNoEscape` is not set, then both brace escapes +and backslash escapes are removed. + +Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot +be escaped or unescaped. + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, '*.js', { matchBase: true }) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nocaseMagicOnly + +When used with `{nocase: true}`, create regular expressions that +are case-insensitive, but leave string match portions untouched. +Has no effect when used without `{nocase: true}` + +Useful when some other form of case-insensitive matching is used, +or if the original string representation is useful in some other +way. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### magicalBraces + +This only affects the results of the `Minimatch.hasMagic` method. + +If the pattern contains brace expansions, such as `a{b,c}d`, but +no other magic characters, then the `Minimatch.hasMagic()` method +will return `false` by default. When this option set, it will +return `true` for brace expansion as well as other magic glob +characters. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + +### partial + +Compare a partial path to a pattern. As long as the parts of the path that +are present are not contradicted by the pattern, it will be treated as a +match. This is useful in applications where you're walking through a +folder structure, and don't yet have the full path, but want to ensure that +you do not walk down paths that can never be a match. + +For example, + +```js +minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d +minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d +minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a +``` + +### windowsPathsNoEscape + +Use `\\` as a path separator _only_, and _never_ as an escape +character. If set, all `\\` characters are replaced with `/` in +the pattern. Note that this makes it **impossible** to match +against paths containing literal glob pattern characters, but +allows matching with patterns constructed using `path.join()` and +`path.resolve()` on Windows platforms, mimicking the (buggy!) +behavior of earlier versions on Windows. Please use with +caution, and be mindful of [the caveat about Windows +paths](#windows). + +For legacy reasons, this is also set if +`options.allowWindowsEscape` is set to the exact value `false`. + +### windowsNoMagicRoot + +When a pattern starts with a UNC path or drive letter, and in +`nocase:true` mode, do not convert the root portions of the +pattern into a case-insensitive regular expression, and instead +leave them as strings. + +This is the default when the platform is `win32` and +`nocase:true` is set. + +### preserveMultipleSlashes + +By default, multiple `/` characters (other than the leading `//` +in a UNC path, see "UNC Paths" above) are treated as a single +`/`. + +That is, a pattern like `a///b` will match the file path `a/b`. + +Set `preserveMultipleSlashes: true` to suppress this behavior. + +### optimizationLevel + +A number indicating the level of optimization that should be done +to the pattern prior to parsing and using it for matches. + +Globstar parts `**` are always converted to `*` when `noglobstar` +is set, and multiple adjacent `**` parts are converted into a +single `**` (ie, `a/**/**/b` will be treated as `a/**/b`, as this +is equivalent in all cases). + +- `0` - Make no further changes. In this mode, `.` and `..` are + maintained in the pattern, meaning that they must also appear + in the same position in the test path string. Eg, a pattern + like `a/*/../c` will match the string `a/b/../c` but not the + string `a/c`. +- `1` - (default) Remove cases where a double-dot `..` follows a + pattern portion that is not `**`, `.`, `..`, or empty `''`. For + example, the pattern `./a/b/../*` is converted to `./a/*`, and + so it will match the path string `./a/c`, but not the path + string `./a/b/../c`. Dots and empty path portions in the + pattern are preserved. +- `2` (or higher) - Much more aggressive optimizations, suitable + for use with file-walking cases: + + - Remove cases where a double-dot `..` follows a pattern + portion that is not `**`, `.`, or empty `''`. Remove empty + and `.` portions of the pattern, where safe to do so (ie, + anywhere other than the last position, the first position, or + the second position in a pattern starting with `/`, as this + may indicate a UNC path on Windows). + - Convert patterns containing `

/**/../

/` into the + equivalent `

/{..,**}/

/`, where `

` is a + a pattern portion other than `.`, `..`, `**`, or empty + `''`. + - Dedupe patterns where a `**` portion is present in one and + omitted in another, and it is not the final path portion, and + they are otherwise equivalent. So `{a/**/b,a/b}` becomes + `a/**/b`, because `**` matches against an empty path portion. + - Dedupe patterns where a `*` portion is present in one, and a + non-dot pattern other than `**`, `.`, `..`, or `''` is in the + same position in the other. So `a/{*,x}/b` becomes `a/*/b`, + because `*` can match against `x`. + + While these optimizations improve the performance of + file-walking use cases such as [glob](http://npm.im/glob) (ie, + the reason this module exists), there are cases where it will + fail to match a literal string that would have been matched in + optimization level 1 or 0. + + Specifically, while the `Minimatch.match()` method will + optimize the file path string in the same ways, resulting in + the same matches, it will fail when tested with the regular + expression provided by `Minimatch.makeRe()`, unless the path + string is first processed with + `minimatch.levelTwoFileOptimize()` or similar. + +### platform + +When set to `win32`, this will trigger all windows-specific +behaviors (special handling for UNC paths, and treating `\` as +separators in file paths for comparison.) + +Defaults to the value of `process.platform`. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a +worthwhile goal, some discrepancies exist between minimatch and +other implementations. Some are intentional, and some are +unavoidable. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +Negated extglob patterns are handled as closely as possible to +Bash semantics, but there are some cases with negative extglobs +which are exceedingly difficult to express in a JavaScript +regular expression. In particular the negated pattern +`!(*|)*` will in bash match anything that does +not start with ``. However, +`!(*)*` _will_ match paths starting with +``, because the empty string can match against +the negated portion. In this library, `!(*|)*` +will _not_ match any pattern starting with ``, due to a +difference in precisely which patterns are considered "greedy" in +Regular Expressions vs bash path expansion. This may be fixable, +but not without incurring some complexity and performance costs, +and the trade-off seems to not be worth pursuing. + +Note that `fnmatch(3)` in libc is an extremely naive string comparison +matcher, which does not do anything special for slashes. This library is +designed to be used in glob searching and file walkers, and so it does do +special things with `/`. Thus, `foo*` will not match `foo/bar` in this +library, even though it would in `fnmatch(3)`. diff --git a/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts b/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts new file mode 100644 index 00000000..8e318b23 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts @@ -0,0 +1,2 @@ +export declare const assertValidPattern: (pattern: any) => void; +//# sourceMappingURL=assert-valid-pattern.d.ts.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map b/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map new file mode 100644 index 00000000..c61c0310 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"assert-valid-pattern.d.ts","sourceRoot":"","sources":["../../src/assert-valid-pattern.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAUlD,CAAA"} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js b/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js new file mode 100644 index 00000000..5fc86bbd --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.assertValidPattern = void 0; +const MAX_PATTERN_LENGTH = 1024 * 64; +const assertValidPattern = (pattern) => { + if (typeof pattern !== 'string') { + throw new TypeError('invalid pattern'); + } + if (pattern.length > MAX_PATTERN_LENGTH) { + throw new TypeError('pattern is too long'); + } +}; +exports.assertValidPattern = assertValidPattern; +//# sourceMappingURL=assert-valid-pattern.js.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map b/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map new file mode 100644 index 00000000..7a7b64bd --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map @@ -0,0 +1 @@ +{"version":3,"file":"assert-valid-pattern.js","sourceRoot":"","sources":["../../src/assert-valid-pattern.ts"],"names":[],"mappings":";;;AAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAA;AAC7B,MAAM,kBAAkB,GAA2B,CACxD,OAAY,EACe,EAAE;IAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACxC,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC,CAAA;AAVY,QAAA,kBAAkB,sBAU9B","sourcesContent":["const MAX_PATTERN_LENGTH = 1024 * 64\nexport const assertValidPattern: (pattern: any) => void = (\n pattern: any\n): asserts pattern is string => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern')\n }\n\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long')\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/ast.d.ts b/node_modules/minimatch/dist/commonjs/ast.d.ts new file mode 100644 index 00000000..b8c1e544 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/ast.d.ts @@ -0,0 +1,20 @@ +import { MinimatchOptions, MMRegExp } from './index.js'; +export type ExtglobType = '!' | '?' | '+' | '*' | '@'; +export declare class AST { + #private; + type: ExtglobType | null; + constructor(type: ExtglobType | null, parent?: AST, options?: MinimatchOptions); + get hasMagic(): boolean | undefined; + toString(): string; + push(...parts: (string | AST)[]): void; + toJSON(): any[]; + isStart(): boolean; + isEnd(): boolean; + copyIn(part: AST | string): void; + clone(parent: AST): AST; + static fromGlob(pattern: string, options?: MinimatchOptions): AST; + toMMPattern(): MMRegExp | string; + get options(): MinimatchOptions; + toRegExpSource(allowDot?: boolean): [re: string, body: string, hasMagic: boolean, uflag: boolean]; +} +//# sourceMappingURL=ast.d.ts.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/ast.d.ts.map b/node_modules/minimatch/dist/commonjs/ast.d.ts.map new file mode 100644 index 00000000..9e7bfb9a --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/ast.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAwCvD,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAkCrD,qBAAa,GAAG;;IACd,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;gBAiBtB,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,GAAE,gBAAqB;IAahC,IAAI,QAAQ,IAAI,OAAO,GAAG,SAAS,CAUlC;IAGD,QAAQ,IAAI,MAAM;IA+ClB,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;IAY/B,MAAM;IAgBN,OAAO,IAAI,OAAO;IAgBlB,KAAK,IAAI,OAAO;IAYhB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;IAKzB,KAAK,CAAC,MAAM,EAAE,GAAG;IAsIjB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAQ/D,WAAW,IAAI,QAAQ,GAAG,MAAM;IA2BhC,IAAI,OAAO,qBAEV;IAuED,cAAc,CACZ,QAAQ,CAAC,EAAE,OAAO,GACjB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;CAiMjE"} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/ast.js b/node_modules/minimatch/dist/commonjs/ast.js new file mode 100644 index 00000000..7b210962 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/ast.js @@ -0,0 +1,592 @@ +"use strict"; +// parse a single path portion +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AST = void 0; +const brace_expressions_js_1 = require("./brace-expressions.js"); +const unescape_js_1 = require("./unescape.js"); +const types = new Set(['!', '?', '+', '*', '@']); +const isExtglobType = (c) => types.has(c); +// Patterns that get prepended to bind to the start of either the +// entire string, or just a single path portion, to prevent dots +// and/or traversal patterns, when needed. +// Exts don't need the ^ or / bit, because the root binds that already. +const startNoTraversal = '(?!(?:^|/)\\.\\.?(?:$|/))'; +const startNoDot = '(?!\\.)'; +// characters that indicate a start of pattern needs the "no dots" bit, +// because a dot *might* be matched. ( is not in the list, because in +// the case of a child extglob, it will handle the prevention itself. +const addPatternStart = new Set(['[', '.']); +// cases where traversal is A-OK, no dot prevention needed +const justDots = new Set(['..', '.']); +const reSpecials = new Set('().*{}+?[]^$\\!'); +const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +// any single thing other than / +const qmark = '[^/]'; +// * => any number of characters +const star = qmark + '*?'; +// use + when we need to ensure that *something* matches, because the * is +// the only thing in the path portion. +const starNoEmpty = qmark + '+?'; +// remove the \ chars that we added if we end up doing a nonmagic compare +// const deslash = (s: string) => s.replace(/\\(.)/g, '$1') +class AST { + type; + #root; + #hasMagic; + #uflag = false; + #parts = []; + #parent; + #parentIndex; + #negs; + #filledNegs = false; + #options; + #toString; + // set to true if it's an extglob with no children + // (which really means one child of '') + #emptyExt = false; + constructor(type, parent, options = {}) { + this.type = type; + // extglobs are inherently magical + if (type) + this.#hasMagic = true; + this.#parent = parent; + this.#root = this.#parent ? this.#parent.#root : this; + this.#options = this.#root === this ? options : this.#root.#options; + this.#negs = this.#root === this ? [] : this.#root.#negs; + if (type === '!' && !this.#root.#filledNegs) + this.#negs.push(this); + this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0; + } + get hasMagic() { + /* c8 ignore start */ + if (this.#hasMagic !== undefined) + return this.#hasMagic; + /* c8 ignore stop */ + for (const p of this.#parts) { + if (typeof p === 'string') + continue; + if (p.type || p.hasMagic) + return (this.#hasMagic = true); + } + // note: will be undefined until we generate the regexp src and find out + return this.#hasMagic; + } + // reconstructs the pattern + toString() { + if (this.#toString !== undefined) + return this.#toString; + if (!this.type) { + return (this.#toString = this.#parts.map(p => String(p)).join('')); + } + else { + return (this.#toString = + this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')'); + } + } + #fillNegs() { + /* c8 ignore start */ + if (this !== this.#root) + throw new Error('should only call on root'); + if (this.#filledNegs) + return this; + /* c8 ignore stop */ + // call toString() once to fill this out + this.toString(); + this.#filledNegs = true; + let n; + while ((n = this.#negs.pop())) { + if (n.type !== '!') + continue; + // walk up the tree, appending everthing that comes AFTER parentIndex + let p = n; + let pp = p.#parent; + while (pp) { + for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) { + for (const part of n.#parts) { + /* c8 ignore start */ + if (typeof part === 'string') { + throw new Error('string part in extglob AST??'); + } + /* c8 ignore stop */ + part.copyIn(pp.#parts[i]); + } + } + p = pp; + pp = p.#parent; + } + } + return this; + } + push(...parts) { + for (const p of parts) { + if (p === '') + continue; + /* c8 ignore start */ + if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) { + throw new Error('invalid part: ' + p); + } + /* c8 ignore stop */ + this.#parts.push(p); + } + } + toJSON() { + const ret = this.type === null + ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON())) + : [this.type, ...this.#parts.map(p => p.toJSON())]; + if (this.isStart() && !this.type) + ret.unshift([]); + if (this.isEnd() && + (this === this.#root || + (this.#root.#filledNegs && this.#parent?.type === '!'))) { + ret.push({}); + } + return ret; + } + isStart() { + if (this.#root === this) + return true; + // if (this.type) return !!this.#parent?.isStart() + if (!this.#parent?.isStart()) + return false; + if (this.#parentIndex === 0) + return true; + // if everything AHEAD of this is a negation, then it's still the "start" + const p = this.#parent; + for (let i = 0; i < this.#parentIndex; i++) { + const pp = p.#parts[i]; + if (!(pp instanceof AST && pp.type === '!')) { + return false; + } + } + return true; + } + isEnd() { + if (this.#root === this) + return true; + if (this.#parent?.type === '!') + return true; + if (!this.#parent?.isEnd()) + return false; + if (!this.type) + return this.#parent?.isEnd(); + // if not root, it'll always have a parent + /* c8 ignore start */ + const pl = this.#parent ? this.#parent.#parts.length : 0; + /* c8 ignore stop */ + return this.#parentIndex === pl - 1; + } + copyIn(part) { + if (typeof part === 'string') + this.push(part); + else + this.push(part.clone(this)); + } + clone(parent) { + const c = new AST(this.type, parent); + for (const p of this.#parts) { + c.copyIn(p); + } + return c; + } + static #parseAST(str, ast, pos, opt) { + let escaping = false; + let inBrace = false; + let braceStart = -1; + let braceNeg = false; + if (ast.type === null) { + // outside of a extglob, append until we find a start + let i = pos; + let acc = ''; + while (i < str.length) { + const c = str.charAt(i++); + // still accumulate escapes at this point, but we do ignore + // starts that are escaped + if (escaping || c === '\\') { + escaping = !escaping; + acc += c; + continue; + } + if (inBrace) { + if (i === braceStart + 1) { + if (c === '^' || c === '!') { + braceNeg = true; + } + } + else if (c === ']' && !(i === braceStart + 2 && braceNeg)) { + inBrace = false; + } + acc += c; + continue; + } + else if (c === '[') { + inBrace = true; + braceStart = i; + braceNeg = false; + acc += c; + continue; + } + if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') { + ast.push(acc); + acc = ''; + const ext = new AST(c, ast); + i = AST.#parseAST(str, ext, i, opt); + ast.push(ext); + continue; + } + acc += c; + } + ast.push(acc); + return i; + } + // some kind of extglob, pos is at the ( + // find the next | or ) + let i = pos + 1; + let part = new AST(null, ast); + const parts = []; + let acc = ''; + while (i < str.length) { + const c = str.charAt(i++); + // still accumulate escapes at this point, but we do ignore + // starts that are escaped + if (escaping || c === '\\') { + escaping = !escaping; + acc += c; + continue; + } + if (inBrace) { + if (i === braceStart + 1) { + if (c === '^' || c === '!') { + braceNeg = true; + } + } + else if (c === ']' && !(i === braceStart + 2 && braceNeg)) { + inBrace = false; + } + acc += c; + continue; + } + else if (c === '[') { + inBrace = true; + braceStart = i; + braceNeg = false; + acc += c; + continue; + } + if (isExtglobType(c) && str.charAt(i) === '(') { + part.push(acc); + acc = ''; + const ext = new AST(c, part); + part.push(ext); + i = AST.#parseAST(str, ext, i, opt); + continue; + } + if (c === '|') { + part.push(acc); + acc = ''; + parts.push(part); + part = new AST(null, ast); + continue; + } + if (c === ')') { + if (acc === '' && ast.#parts.length === 0) { + ast.#emptyExt = true; + } + part.push(acc); + acc = ''; + ast.push(...parts, part); + return i; + } + acc += c; + } + // unfinished extglob + // if we got here, it was a malformed extglob! not an extglob, but + // maybe something else in there. + ast.type = null; + ast.#hasMagic = undefined; + ast.#parts = [str.substring(pos - 1)]; + return i; + } + static fromGlob(pattern, options = {}) { + const ast = new AST(null, undefined, options); + AST.#parseAST(pattern, ast, 0, options); + return ast; + } + // returns the regular expression if there's magic, or the unescaped + // string if not. + toMMPattern() { + // should only be called on root + /* c8 ignore start */ + if (this !== this.#root) + return this.#root.toMMPattern(); + /* c8 ignore stop */ + const glob = this.toString(); + const [re, body, hasMagic, uflag] = this.toRegExpSource(); + // if we're in nocase mode, and not nocaseMagicOnly, then we do + // still need a regular expression if we have to case-insensitively + // match capital/lowercase characters. + const anyMagic = hasMagic || + this.#hasMagic || + (this.#options.nocase && + !this.#options.nocaseMagicOnly && + glob.toUpperCase() !== glob.toLowerCase()); + if (!anyMagic) { + return body; + } + const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : ''); + return Object.assign(new RegExp(`^${re}$`, flags), { + _src: re, + _glob: glob, + }); + } + get options() { + return this.#options; + } + // returns the string match, the regexp source, whether there's magic + // in the regexp (so a regular expression is required) and whether or + // not the uflag is needed for the regular expression (for posix classes) + // TODO: instead of injecting the start/end at this point, just return + // the BODY of the regexp, along with the start/end portions suitable + // for binding the start/end in either a joined full-path makeRe context + // (where we bind to (^|/), or a standalone matchPart context (where + // we bind to ^, and not /). Otherwise slashes get duped! + // + // In part-matching mode, the start is: + // - if not isStart: nothing + // - if traversal possible, but not allowed: ^(?!\.\.?$) + // - if dots allowed or not possible: ^ + // - if dots possible and not allowed: ^(?!\.) + // end is: + // - if not isEnd(): nothing + // - else: $ + // + // In full-path matching mode, we put the slash at the START of the + // pattern, so start is: + // - if first pattern: same as part-matching mode + // - if not isStart(): nothing + // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/)) + // - if dots allowed or not possible: / + // - if dots possible and not allowed: /(?!\.) + // end is: + // - if last pattern, same as part-matching mode + // - else nothing + // + // Always put the (?:$|/) on negated tails, though, because that has to be + // there to bind the end of the negated pattern portion, and it's easier to + // just stick it in now rather than try to inject it later in the middle of + // the pattern. + // + // We can just always return the same end, and leave it up to the caller + // to know whether it's going to be used joined or in parts. + // And, if the start is adjusted slightly, can do the same there: + // - if not isStart: nothing + // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$) + // - if dots allowed or not possible: (?:/|^) + // - if dots possible and not allowed: (?:/|^)(?!\.) + // + // But it's better to have a simpler binding without a conditional, for + // performance, so probably better to return both start options. + // + // Then the caller just ignores the end if it's not the first pattern, + // and the start always gets applied. + // + // But that's always going to be $ if it's the ending pattern, or nothing, + // so the caller can just attach $ at the end of the pattern when building. + // + // So the todo is: + // - better detect what kind of start is needed + // - return both flavors of starting pattern + // - attach $ at the end of the pattern when creating the actual RegExp + // + // Ah, but wait, no, that all only applies to the root when the first pattern + // is not an extglob. If the first pattern IS an extglob, then we need all + // that dot prevention biz to live in the extglob portions, because eg + // +(*|.x*) can match .xy but not .yx. + // + // So, return the two flavors if it's #root and the first child is not an + // AST, otherwise leave it to the child AST to handle it, and there, + // use the (?:^|/) style of start binding. + // + // Even simplified further: + // - Since the start for a join is eg /(?!\.) and the start for a part + // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root + // or start or whatever) and prepend ^ or / at the Regexp construction. + toRegExpSource(allowDot) { + const dot = allowDot ?? !!this.#options.dot; + if (this.#root === this) + this.#fillNegs(); + if (!this.type) { + const noEmpty = this.isStart() && this.isEnd(); + const src = this.#parts + .map(p => { + const [re, _, hasMagic, uflag] = typeof p === 'string' + ? AST.#parseGlob(p, this.#hasMagic, noEmpty) + : p.toRegExpSource(allowDot); + this.#hasMagic = this.#hasMagic || hasMagic; + this.#uflag = this.#uflag || uflag; + return re; + }) + .join(''); + let start = ''; + if (this.isStart()) { + if (typeof this.#parts[0] === 'string') { + // this is the string that will match the start of the pattern, + // so we need to protect against dots and such. + // '.' and '..' cannot match unless the pattern is that exactly, + // even if it starts with . or dot:true is set. + const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]); + if (!dotTravAllowed) { + const aps = addPatternStart; + // check if we have a possibility of matching . or .., + // and prevent that. + const needNoTrav = + // dots are allowed, and the pattern starts with [ or . + (dot && aps.has(src.charAt(0))) || + // the pattern starts with \., and then [ or . + (src.startsWith('\\.') && aps.has(src.charAt(2))) || + // the pattern starts with \.\., and then [ or . + (src.startsWith('\\.\\.') && aps.has(src.charAt(4))); + // no need to prevent dots if it can't match a dot, or if a + // sub-pattern will be preventing it anyway. + const needNoDot = !dot && !allowDot && aps.has(src.charAt(0)); + start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ''; + } + } + } + // append the "end of path portion" pattern to negation tails + let end = ''; + if (this.isEnd() && + this.#root.#filledNegs && + this.#parent?.type === '!') { + end = '(?:$|\\/)'; + } + const final = start + src + end; + return [ + final, + (0, unescape_js_1.unescape)(src), + (this.#hasMagic = !!this.#hasMagic), + this.#uflag, + ]; + } + // We need to calculate the body *twice* if it's a repeat pattern + // at the start, once in nodot mode, then again in dot mode, so a + // pattern like *(?) can match 'x.y' + const repeated = this.type === '*' || this.type === '+'; + // some kind of extglob + const start = this.type === '!' ? '(?:(?!(?:' : '(?:'; + let body = this.#partsToRegExp(dot); + if (this.isStart() && this.isEnd() && !body && this.type !== '!') { + // invalid extglob, has to at least be *something* present, if it's + // the entire path portion. + const s = this.toString(); + this.#parts = [s]; + this.type = null; + this.#hasMagic = undefined; + return [s, (0, unescape_js_1.unescape)(this.toString()), false, false]; + } + // XXX abstract out this map method + let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot + ? '' + : this.#partsToRegExp(true); + if (bodyDotAllowed === body) { + bodyDotAllowed = ''; + } + if (bodyDotAllowed) { + body = `(?:${body})(?:${bodyDotAllowed})*?`; + } + // an empty !() is exactly equivalent to a starNoEmpty + let final = ''; + if (this.type === '!' && this.#emptyExt) { + final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty; + } + else { + const close = this.type === '!' + ? // !() must match something,but !(x) can match '' + '))' + + (this.isStart() && !dot && !allowDot ? startNoDot : '') + + star + + ')' + : this.type === '@' + ? ')' + : this.type === '?' + ? ')?' + : this.type === '+' && bodyDotAllowed + ? ')' + : this.type === '*' && bodyDotAllowed + ? `)?` + : `)${this.type}`; + final = start + body + close; + } + return [ + final, + (0, unescape_js_1.unescape)(body), + (this.#hasMagic = !!this.#hasMagic), + this.#uflag, + ]; + } + #partsToRegExp(dot) { + return this.#parts + .map(p => { + // extglob ASTs should only contain parent ASTs + /* c8 ignore start */ + if (typeof p === 'string') { + throw new Error('string type in extglob ast??'); + } + /* c8 ignore stop */ + // can ignore hasMagic, because extglobs are already always magic + const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot); + this.#uflag = this.#uflag || uflag; + return re; + }) + .filter(p => !(this.isStart() && this.isEnd()) || !!p) + .join('|'); + } + static #parseGlob(glob, hasMagic, noEmpty = false) { + let escaping = false; + let re = ''; + let uflag = false; + for (let i = 0; i < glob.length; i++) { + const c = glob.charAt(i); + if (escaping) { + escaping = false; + re += (reSpecials.has(c) ? '\\' : '') + c; + continue; + } + if (c === '\\') { + if (i === glob.length - 1) { + re += '\\\\'; + } + else { + escaping = true; + } + continue; + } + if (c === '[') { + const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i); + if (consumed) { + re += src; + uflag = uflag || needUflag; + i += consumed - 1; + hasMagic = hasMagic || magic; + continue; + } + } + if (c === '*') { + if (noEmpty && glob === '*') + re += starNoEmpty; + else + re += star; + hasMagic = true; + continue; + } + if (c === '?') { + re += qmark; + hasMagic = true; + continue; + } + re += regExpEscape(c); + } + return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag]; + } +} +exports.AST = AST; +//# sourceMappingURL=ast.js.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/ast.js.map b/node_modules/minimatch/dist/commonjs/ast.js.map new file mode 100644 index 00000000..77d65632 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/ast.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"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","sourcesContent":["// parse a single path portion\n\nimport { parseClass } from './brace-expressions.js'\nimport { MinimatchOptions, MMRegExp } from './index.js'\nimport { unescape } from './unescape.js'\n\n// classes [] are handled by the parseClass method\n// for positive extglobs, we sub-parse the contents, and combine,\n// with the appropriate regexp close.\n// for negative extglobs, we sub-parse the contents, but then\n// have to include the rest of the pattern, then the parent, etc.,\n// as the thing that cannot be because RegExp negative lookaheads\n// are different from globs.\n//\n// So for example:\n// a@(i|w!(x|y)z|j)b => ^a(i|w((!?(x|y)zb).*)z|j)b$\n// 1 2 3 4 5 6 1 2 3 46 5 6\n//\n// Assembling the extglob requires not just the negated patterns themselves,\n// but also anything following the negative patterns up to the boundary\n// of the current pattern, plus anything following in the parent pattern.\n//\n//\n// So, first, we parse the string into an AST of extglobs, without turning\n// anything into regexps yet.\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y']}, 'z'], ['j']]}, 'b']\n//\n// Then, for all the negative extglobs, we append whatever comes after in\n// each parent as their tail\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y'], 'z', 'b'}, 'z'], ['j']]}, 'b']\n//\n// Lastly, we turn each of these pieces into a regexp, and join\n//\n// v----- .* because there's more following,\n// v v otherwise, .+ because it must be\n// v v *something* there.\n// ['^a', {@ ['i', 'w(?:(!?(?:x|y).*zb$).*)z', 'j' ]}, 'b$']\n// copy what follows into here--^^^^^\n// ['^a', '(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)', 'b$']\n// ['^a(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)b$']\n\nexport type ExtglobType = '!' | '?' | '+' | '*' | '@'\nconst types = new Set(['!', '?', '+', '*', '@'])\nconst isExtglobType = (c: string): c is ExtglobType =>\n types.has(c as ExtglobType)\n\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))'\nconst startNoDot = '(?!\\\\.)'\n\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.'])\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.'])\nconst reSpecials = new Set('().*{}+?[]^$\\\\!')\nconst regExpEscape = (s: string) =>\n s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// any single thing other than /\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark + '+?'\n\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\n\nexport class AST {\n type: ExtglobType | null\n readonly #root: AST\n\n #hasMagic?: boolean\n #uflag: boolean = false\n #parts: (string | AST)[] = []\n readonly #parent?: AST\n readonly #parentIndex: number\n #negs: AST[]\n #filledNegs: boolean = false\n #options: MinimatchOptions\n #toString?: string\n // set to true if it's an extglob with no children\n // (which really means one child of '')\n #emptyExt: boolean = false\n\n constructor(\n type: ExtglobType | null,\n parent?: AST,\n options: MinimatchOptions = {}\n ) {\n this.type = type\n // extglobs are inherently magical\n if (type) this.#hasMagic = true\n this.#parent = parent\n this.#root = this.#parent ? this.#parent.#root : this\n this.#options = this.#root === this ? options : this.#root.#options\n this.#negs = this.#root === this ? [] : this.#root.#negs\n if (type === '!' && !this.#root.#filledNegs) this.#negs.push(this)\n this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0\n }\n\n get hasMagic(): boolean | undefined {\n /* c8 ignore start */\n if (this.#hasMagic !== undefined) return this.#hasMagic\n /* c8 ignore stop */\n for (const p of this.#parts) {\n if (typeof p === 'string') continue\n if (p.type || p.hasMagic) return (this.#hasMagic = true)\n }\n // note: will be undefined until we generate the regexp src and find out\n return this.#hasMagic\n }\n\n // reconstructs the pattern\n toString(): string {\n if (this.#toString !== undefined) return this.#toString\n if (!this.type) {\n return (this.#toString = this.#parts.map(p => String(p)).join(''))\n } else {\n return (this.#toString =\n this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')')\n }\n }\n\n #fillNegs() {\n /* c8 ignore start */\n if (this !== this.#root) throw new Error('should only call on root')\n if (this.#filledNegs) return this\n /* c8 ignore stop */\n\n // call toString() once to fill this out\n this.toString()\n this.#filledNegs = true\n let n: AST | undefined\n while ((n = this.#negs.pop())) {\n if (n.type !== '!') continue\n // walk up the tree, appending everthing that comes AFTER parentIndex\n let p: AST | undefined = n\n let pp = p.#parent\n while (pp) {\n for (\n let i = p.#parentIndex + 1;\n !pp.type && i < pp.#parts.length;\n i++\n ) {\n for (const part of n.#parts) {\n /* c8 ignore start */\n if (typeof part === 'string') {\n throw new Error('string part in extglob AST??')\n }\n /* c8 ignore stop */\n part.copyIn(pp.#parts[i])\n }\n }\n p = pp\n pp = p.#parent\n }\n }\n return this\n }\n\n push(...parts: (string | AST)[]) {\n for (const p of parts) {\n if (p === '') continue\n /* c8 ignore start */\n if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {\n throw new Error('invalid part: ' + p)\n }\n /* c8 ignore stop */\n this.#parts.push(p)\n }\n }\n\n toJSON() {\n const ret: any[] =\n this.type === null\n ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))\n : [this.type, ...this.#parts.map(p => (p as AST).toJSON())]\n if (this.isStart() && !this.type) ret.unshift([])\n if (\n this.isEnd() &&\n (this === this.#root ||\n (this.#root.#filledNegs && this.#parent?.type === '!'))\n ) {\n ret.push({})\n }\n return ret\n }\n\n isStart(): boolean {\n if (this.#root === this) return true\n // if (this.type) return !!this.#parent?.isStart()\n if (!this.#parent?.isStart()) return false\n if (this.#parentIndex === 0) return true\n // if everything AHEAD of this is a negation, then it's still the \"start\"\n const p = this.#parent\n for (let i = 0; i < this.#parentIndex; i++) {\n const pp = p.#parts[i]\n if (!(pp instanceof AST && pp.type === '!')) {\n return false\n }\n }\n return true\n }\n\n isEnd(): boolean {\n if (this.#root === this) return true\n if (this.#parent?.type === '!') return true\n if (!this.#parent?.isEnd()) return false\n if (!this.type) return this.#parent?.isEnd()\n // if not root, it'll always have a parent\n /* c8 ignore start */\n const pl = this.#parent ? this.#parent.#parts.length : 0\n /* c8 ignore stop */\n return this.#parentIndex === pl - 1\n }\n\n copyIn(part: AST | string) {\n if (typeof part === 'string') this.push(part)\n else this.push(part.clone(this))\n }\n\n clone(parent: AST) {\n const c = new AST(this.type, parent)\n for (const p of this.#parts) {\n c.copyIn(p)\n }\n return c\n }\n\n static #parseAST(\n str: string,\n ast: AST,\n pos: number,\n opt: MinimatchOptions\n ): number {\n let escaping = false\n let inBrace = false\n let braceStart = -1\n let braceNeg = false\n if (ast.type === null) {\n // outside of a extglob, append until we find a start\n let i = pos\n let acc = ''\n while (i < str.length) {\n const c = str.charAt(i++)\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping\n acc += c\n continue\n }\n\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true\n }\n } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false\n }\n acc += c\n continue\n } else if (c === '[') {\n inBrace = true\n braceStart = i\n braceNeg = false\n acc += c\n continue\n }\n\n if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {\n ast.push(acc)\n acc = ''\n const ext = new AST(c, ast)\n i = AST.#parseAST(str, ext, i, opt)\n ast.push(ext)\n continue\n }\n acc += c\n }\n ast.push(acc)\n return i\n }\n\n // some kind of extglob, pos is at the (\n // find the next | or )\n let i = pos + 1\n let part = new AST(null, ast)\n const parts: AST[] = []\n let acc = ''\n while (i < str.length) {\n const c = str.charAt(i++)\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping\n acc += c\n continue\n }\n\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true\n }\n } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false\n }\n acc += c\n continue\n } else if (c === '[') {\n inBrace = true\n braceStart = i\n braceNeg = false\n acc += c\n continue\n }\n\n if (isExtglobType(c) && str.charAt(i) === '(') {\n part.push(acc)\n acc = ''\n const ext = new AST(c, part)\n part.push(ext)\n i = AST.#parseAST(str, ext, i, opt)\n continue\n }\n if (c === '|') {\n part.push(acc)\n acc = ''\n parts.push(part)\n part = new AST(null, ast)\n continue\n }\n if (c === ')') {\n if (acc === '' && ast.#parts.length === 0) {\n ast.#emptyExt = true\n }\n part.push(acc)\n acc = ''\n ast.push(...parts, part)\n return i\n }\n acc += c\n }\n\n // unfinished extglob\n // if we got here, it was a malformed extglob! not an extglob, but\n // maybe something else in there.\n ast.type = null\n ast.#hasMagic = undefined\n ast.#parts = [str.substring(pos - 1)]\n return i\n }\n\n static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n const ast = new AST(null, undefined, options)\n AST.#parseAST(pattern, ast, 0, options)\n return ast\n }\n\n // returns the regular expression if there's magic, or the unescaped\n // string if not.\n toMMPattern(): MMRegExp | string {\n // should only be called on root\n /* c8 ignore start */\n if (this !== this.#root) return this.#root.toMMPattern()\n /* c8 ignore stop */\n const glob = this.toString()\n const [re, body, hasMagic, uflag] = this.toRegExpSource()\n // if we're in nocase mode, and not nocaseMagicOnly, then we do\n // still need a regular expression if we have to case-insensitively\n // match capital/lowercase characters.\n const anyMagic =\n hasMagic ||\n this.#hasMagic ||\n (this.#options.nocase &&\n !this.#options.nocaseMagicOnly &&\n glob.toUpperCase() !== glob.toLowerCase())\n if (!anyMagic) {\n return body\n }\n\n const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '')\n return Object.assign(new RegExp(`^${re}$`, flags), {\n _src: re,\n _glob: glob,\n })\n }\n\n get options() {\n return this.#options\n }\n\n // returns the string match, the regexp source, whether there's magic\n // in the regexp (so a regular expression is required) and whether or\n // not the uflag is needed for the regular expression (for posix classes)\n // TODO: instead of injecting the start/end at this point, just return\n // the BODY of the regexp, along with the start/end portions suitable\n // for binding the start/end in either a joined full-path makeRe context\n // (where we bind to (^|/), or a standalone matchPart context (where\n // we bind to ^, and not /). Otherwise slashes get duped!\n //\n // In part-matching mode, the start is:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n // - if dots allowed or not possible: ^\n // - if dots possible and not allowed: ^(?!\\.)\n // end is:\n // - if not isEnd(): nothing\n // - else: $\n //\n // In full-path matching mode, we put the slash at the START of the\n // pattern, so start is:\n // - if first pattern: same as part-matching mode\n // - if not isStart(): nothing\n // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n // - if dots allowed or not possible: /\n // - if dots possible and not allowed: /(?!\\.)\n // end is:\n // - if last pattern, same as part-matching mode\n // - else nothing\n //\n // Always put the (?:$|/) on negated tails, though, because that has to be\n // there to bind the end of the negated pattern portion, and it's easier to\n // just stick it in now rather than try to inject it later in the middle of\n // the pattern.\n //\n // We can just always return the same end, and leave it up to the caller\n // to know whether it's going to be used joined or in parts.\n // And, if the start is adjusted slightly, can do the same there:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n // - if dots allowed or not possible: (?:/|^)\n // - if dots possible and not allowed: (?:/|^)(?!\\.)\n //\n // But it's better to have a simpler binding without a conditional, for\n // performance, so probably better to return both start options.\n //\n // Then the caller just ignores the end if it's not the first pattern,\n // and the start always gets applied.\n //\n // But that's always going to be $ if it's the ending pattern, or nothing,\n // so the caller can just attach $ at the end of the pattern when building.\n //\n // So the todo is:\n // - better detect what kind of start is needed\n // - return both flavors of starting pattern\n // - attach $ at the end of the pattern when creating the actual RegExp\n //\n // Ah, but wait, no, that all only applies to the root when the first pattern\n // is not an extglob. If the first pattern IS an extglob, then we need all\n // that dot prevention biz to live in the extglob portions, because eg\n // +(*|.x*) can match .xy but not .yx.\n //\n // So, return the two flavors if it's #root and the first child is not an\n // AST, otherwise leave it to the child AST to handle it, and there,\n // use the (?:^|/) style of start binding.\n //\n // Even simplified further:\n // - Since the start for a join is eg /(?!\\.) and the start for a part\n // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n // or start or whatever) and prepend ^ or / at the Regexp construction.\n toRegExpSource(\n allowDot?: boolean\n ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n const dot = allowDot ?? !!this.#options.dot\n if (this.#root === this) this.#fillNegs()\n if (!this.type) {\n const noEmpty = this.isStart() && this.isEnd()\n const src = this.#parts\n .map(p => {\n const [re, _, hasMagic, uflag] =\n typeof p === 'string'\n ? AST.#parseGlob(p, this.#hasMagic, noEmpty)\n : p.toRegExpSource(allowDot)\n this.#hasMagic = this.#hasMagic || hasMagic\n this.#uflag = this.#uflag || uflag\n return re\n })\n .join('')\n\n let start = ''\n if (this.isStart()) {\n if (typeof this.#parts[0] === 'string') {\n // this is the string that will match the start of the pattern,\n // so we need to protect against dots and such.\n\n // '.' and '..' cannot match unless the pattern is that exactly,\n // even if it starts with . or dot:true is set.\n const dotTravAllowed =\n this.#parts.length === 1 && justDots.has(this.#parts[0])\n if (!dotTravAllowed) {\n const aps = addPatternStart\n // check if we have a possibility of matching . or ..,\n // and prevent that.\n const needNoTrav =\n // dots are allowed, and the pattern starts with [ or .\n (dot && aps.has(src.charAt(0))) ||\n // the pattern starts with \\., and then [ or .\n (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n // the pattern starts with \\.\\., and then [ or .\n (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)))\n // no need to prevent dots if it can't match a dot, or if a\n // sub-pattern will be preventing it anyway.\n const needNoDot = !dot && !allowDot && aps.has(src.charAt(0))\n\n start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ''\n }\n }\n }\n\n // append the \"end of path portion\" pattern to negation tails\n let end = ''\n if (\n this.isEnd() &&\n this.#root.#filledNegs &&\n this.#parent?.type === '!'\n ) {\n end = '(?:$|\\\\/)'\n }\n const final = start + src + end\n return [\n final,\n unescape(src),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ]\n }\n\n // We need to calculate the body *twice* if it's a repeat pattern\n // at the start, once in nodot mode, then again in dot mode, so a\n // pattern like *(?) can match 'x.y'\n\n const repeated = this.type === '*' || this.type === '+'\n // some kind of extglob\n const start = this.type === '!' ? '(?:(?!(?:' : '(?:'\n let body = this.#partsToRegExp(dot)\n\n if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n // invalid extglob, has to at least be *something* present, if it's\n // the entire path portion.\n const s = this.toString()\n this.#parts = [s]\n this.type = null\n this.#hasMagic = undefined\n return [s, unescape(this.toString()), false, false]\n }\n\n // XXX abstract out this map method\n let bodyDotAllowed =\n !repeated || allowDot || dot || !startNoDot\n ? ''\n : this.#partsToRegExp(true)\n if (bodyDotAllowed === body) {\n bodyDotAllowed = ''\n }\n if (bodyDotAllowed) {\n body = `(?:${body})(?:${bodyDotAllowed})*?`\n }\n\n // an empty !() is exactly equivalent to a starNoEmpty\n let final = ''\n if (this.type === '!' && this.#emptyExt) {\n final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty\n } else {\n const close =\n this.type === '!'\n ? // !() must match something,but !(x) can match ''\n '))' +\n (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n star +\n ')'\n : this.type === '@'\n ? ')'\n : this.type === '?'\n ? ')?'\n : this.type === '+' && bodyDotAllowed\n ? ')'\n : this.type === '*' && bodyDotAllowed\n ? `)?`\n : `)${this.type}`\n final = start + body + close\n }\n return [\n final,\n unescape(body),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ]\n }\n\n #partsToRegExp(dot: boolean) {\n return this.#parts\n .map(p => {\n // extglob ASTs should only contain parent ASTs\n /* c8 ignore start */\n if (typeof p === 'string') {\n throw new Error('string type in extglob ast??')\n }\n /* c8 ignore stop */\n // can ignore hasMagic, because extglobs are already always magic\n const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot)\n this.#uflag = this.#uflag || uflag\n return re\n })\n .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n .join('|')\n }\n\n static #parseGlob(\n glob: string,\n hasMagic: boolean | undefined,\n noEmpty: boolean = false\n ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n let escaping = false\n let re = ''\n let uflag = false\n for (let i = 0; i < glob.length; i++) {\n const c = glob.charAt(i)\n if (escaping) {\n escaping = false\n re += (reSpecials.has(c) ? '\\\\' : '') + c\n continue\n }\n if (c === '\\\\') {\n if (i === glob.length - 1) {\n re += '\\\\\\\\'\n } else {\n escaping = true\n }\n continue\n }\n if (c === '[') {\n const [src, needUflag, consumed, magic] = parseClass(glob, i)\n if (consumed) {\n re += src\n uflag = uflag || needUflag\n i += consumed - 1\n hasMagic = hasMagic || magic\n continue\n }\n }\n if (c === '*') {\n if (noEmpty && glob === '*') re += starNoEmpty\n else re += star\n hasMagic = true\n continue\n }\n if (c === '?') {\n re += qmark\n hasMagic = true\n continue\n }\n re += regExpEscape(c)\n }\n return [re, unescape(glob), !!hasMagic, uflag]\n }\n}\n"]} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts b/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts new file mode 100644 index 00000000..b1572deb --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts @@ -0,0 +1,8 @@ +export type ParseClassResult = [ + src: string, + uFlag: boolean, + consumed: number, + hasMagic: boolean +]; +export declare const parseClass: (glob: string, position: number) => ParseClassResult; +//# sourceMappingURL=brace-expressions.d.ts.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map b/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map new file mode 100644 index 00000000..046b6313 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"brace-expressions.d.ts","sourceRoot":"","sources":["../../src/brace-expressions.ts"],"names":[],"mappings":"AA+BA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,OAAO;CAClB,CAAA;AAQD,eAAO,MAAM,UAAU,SACf,MAAM,YACF,MAAM,KACf,gBA6HF,CAAA"} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/brace-expressions.js b/node_modules/minimatch/dist/commonjs/brace-expressions.js new file mode 100644 index 00000000..0e13eefc --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/brace-expressions.js @@ -0,0 +1,152 @@ +"use strict"; +// translate the various posix character classes into unicode properties +// this works across all unicode locales +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseClass = void 0; +// { : [, /u flag required, negated] +const posixClasses = { + '[:alnum:]': ['\\p{L}\\p{Nl}\\p{Nd}', true], + '[:alpha:]': ['\\p{L}\\p{Nl}', true], + '[:ascii:]': ['\\x' + '00-\\x' + '7f', false], + '[:blank:]': ['\\p{Zs}\\t', true], + '[:cntrl:]': ['\\p{Cc}', true], + '[:digit:]': ['\\p{Nd}', true], + '[:graph:]': ['\\p{Z}\\p{C}', true, true], + '[:lower:]': ['\\p{Ll}', true], + '[:print:]': ['\\p{C}', true], + '[:punct:]': ['\\p{P}', true], + '[:space:]': ['\\p{Z}\\t\\r\\n\\v\\f', true], + '[:upper:]': ['\\p{Lu}', true], + '[:word:]': ['\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}', true], + '[:xdigit:]': ['A-Fa-f0-9', false], +}; +// only need to escape a few things inside of brace expressions +// escapes: [ \ ] - +const braceEscape = (s) => s.replace(/[[\]\\-]/g, '\\$&'); +// escape all regexp magic characters +const regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +// everything has already been escaped, we just have to join +const rangesToString = (ranges) => ranges.join(''); +// takes a glob string at a posix brace expression, and returns +// an equivalent regular expression source, and boolean indicating +// whether the /u flag needs to be applied, and the number of chars +// consumed to parse the character class. +// This also removes out of order ranges, and returns ($.) if the +// entire class just no good. +const parseClass = (glob, position) => { + const pos = position; + /* c8 ignore start */ + if (glob.charAt(pos) !== '[') { + throw new Error('not in a brace expression'); + } + /* c8 ignore stop */ + const ranges = []; + const negs = []; + let i = pos + 1; + let sawStart = false; + let uflag = false; + let escaping = false; + let negate = false; + let endPos = pos; + let rangeStart = ''; + WHILE: while (i < glob.length) { + const c = glob.charAt(i); + if ((c === '!' || c === '^') && i === pos + 1) { + negate = true; + i++; + continue; + } + if (c === ']' && sawStart && !escaping) { + endPos = i + 1; + break; + } + sawStart = true; + if (c === '\\') { + if (!escaping) { + escaping = true; + i++; + continue; + } + // escaped \ char, fall through and treat like normal char + } + if (c === '[' && !escaping) { + // either a posix class, a collation equivalent, or just a [ + for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) { + if (glob.startsWith(cls, i)) { + // invalid, [a-[] is fine, but not [a-[:alpha]] + if (rangeStart) { + return ['$.', false, glob.length - pos, true]; + } + i += cls.length; + if (neg) + negs.push(unip); + else + ranges.push(unip); + uflag = uflag || u; + continue WHILE; + } + } + } + // now it's just a normal character, effectively + escaping = false; + if (rangeStart) { + // throw this range away if it's not valid, but others + // can still match. + if (c > rangeStart) { + ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c)); + } + else if (c === rangeStart) { + ranges.push(braceEscape(c)); + } + rangeStart = ''; + i++; + continue; + } + // now might be the start of a range. + // can be either c-d or c-] or c] or c] at this point + if (glob.startsWith('-]', i + 1)) { + ranges.push(braceEscape(c + '-')); + i += 2; + continue; + } + if (glob.startsWith('-', i + 1)) { + rangeStart = c; + i += 2; + continue; + } + // not the start of a range, just a single character + ranges.push(braceEscape(c)); + i++; + } + if (endPos < i) { + // didn't see the end of the class, not a valid class, + // but might still be valid as a literal match. + return ['', false, 0, false]; + } + // if we got no ranges and no negates, then we have a range that + // cannot possibly match anything, and that poisons the whole glob + if (!ranges.length && !negs.length) { + return ['$.', false, glob.length - pos, true]; + } + // if we got one positive range, and it's a single character, then that's + // not actually a magic pattern, it's just that one literal character. + // we should not treat that as "magic", we should just return the literal + // character. [_] is a perfectly valid way to escape glob magic chars. + if (negs.length === 0 && + ranges.length === 1 && + /^\\?.$/.test(ranges[0]) && + !negate) { + const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]; + return [regexpEscape(r), false, endPos - pos, false]; + } + const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']'; + const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']'; + const comb = ranges.length && negs.length + ? '(' + sranges + '|' + snegs + ')' + : ranges.length + ? sranges + : snegs; + return [comb, uflag, endPos - pos, true]; +}; +exports.parseClass = parseClass; +//# sourceMappingURL=brace-expressions.js.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/brace-expressions.js.map b/node_modules/minimatch/dist/commonjs/brace-expressions.js.map new file mode 100644 index 00000000..fd76e8d3 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/brace-expressions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"brace-expressions.js","sourceRoot":"","sources":["../../src/brace-expressions.ts"],"names":[],"mappings":"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","sourcesContent":["// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n\n// { : [, /u flag required, negated]\nconst posixClasses: { [k: string]: [e: string, u: boolean, n?: boolean] } = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n}\n\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s: string) => s.replace(/[[\\]\\\\-]/g, '\\\\$&')\n// escape all regexp magic characters\nconst regexpEscape = (s: string) =>\n s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges: string[]): string => ranges.join('')\n\nexport type ParseClassResult = [\n src: string,\n uFlag: boolean,\n consumed: number,\n hasMagic: boolean\n]\n\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (\n glob: string,\n position: number\n): ParseClassResult => {\n const pos = position\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression')\n }\n /* c8 ignore stop */\n const ranges: string[] = []\n const negs: string[] = []\n\n let i = pos + 1\n let sawStart = false\n let uflag = false\n let escaping = false\n let negate = false\n let endPos = pos\n let rangeStart = ''\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i)\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true\n i++\n continue\n }\n\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1\n break\n }\n\n sawStart = true\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true\n i++\n continue\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true]\n }\n i += cls.length\n if (neg) negs.push(unip)\n else ranges.push(unip)\n uflag = uflag || u\n continue WHILE\n }\n }\n }\n\n // now it's just a normal character, effectively\n escaping = false\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c))\n } else if (c === rangeStart) {\n ranges.push(braceEscape(c))\n }\n rangeStart = ''\n i++\n continue\n }\n\n // now might be the start of a range.\n // can be either c-d or c-] or c] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'))\n i += 2\n continue\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c\n i += 2\n continue\n }\n\n // not the start of a range, just a single character\n ranges.push(braceEscape(c))\n i++\n }\n\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false]\n }\n\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true]\n }\n\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (\n negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate\n ) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]\n return [regexpEscape(r), false, endPos - pos, false]\n }\n\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']'\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']'\n const comb =\n ranges.length && negs.length\n ? '(' + sranges + '|' + snegs + ')'\n : ranges.length\n ? sranges\n : snegs\n\n return [comb, uflag, endPos - pos, true]\n}\n"]} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/escape.d.ts b/node_modules/minimatch/dist/commonjs/escape.d.ts new file mode 100644 index 00000000..7391e752 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/escape.d.ts @@ -0,0 +1,12 @@ +import { MinimatchOptions } from './index.js'; +/** + * Escape all magic characters in a glob pattern. + * + * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape} + * option is used, then characters are escaped by wrapping in `[]`, because + * a magic character wrapped in a character class can only be satisfied by + * that exact character. In this mode, `\` is _not_ escaped, because it is + * not interpreted as a magic character, but instead as a path separator. + */ +export declare const escape: (s: string, { windowsPathsNoEscape, }?: Pick) => string; +//# sourceMappingURL=escape.d.ts.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/escape.d.ts.map b/node_modules/minimatch/dist/commonjs/escape.d.ts.map new file mode 100644 index 00000000..7bcc19c6 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/escape.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,MACd,MAAM,8BAGN,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,WAQlD,CAAA"} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/escape.js b/node_modules/minimatch/dist/commonjs/escape.js new file mode 100644 index 00000000..02a4f8a8 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/escape.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.escape = void 0; +/** + * Escape all magic characters in a glob pattern. + * + * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape} + * option is used, then characters are escaped by wrapping in `[]`, because + * a magic character wrapped in a character class can only be satisfied by + * that exact character. In this mode, `\` is _not_ escaped, because it is + * not interpreted as a magic character, but instead as a path separator. + */ +const escape = (s, { windowsPathsNoEscape = false, } = {}) => { + // don't need to escape +@! because we escape the parens + // that make those magic, and escaping ! as [!] isn't valid, + // because [!]] is a valid glob class meaning not ']'. + return windowsPathsNoEscape + ? s.replace(/[?*()[\]]/g, '[$&]') + : s.replace(/[?*()[\]\\]/g, '\\$&'); +}; +exports.escape = escape; +//# sourceMappingURL=escape.js.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/escape.js.map b/node_modules/minimatch/dist/commonjs/escape.js.map new file mode 100644 index 00000000..264b2ea5 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/escape.js.map @@ -0,0 +1 @@ +{"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":";;;AACA;;;;;;;;GAQG;AACI,MAAM,MAAM,GAAG,CACpB,CAAS,EACT,EACE,oBAAoB,GAAG,KAAK,MACsB,EAAE,EACtD,EAAE;IACF,wDAAwD;IACxD,4DAA4D;IAC5D,sDAAsD;IACtD,OAAO,oBAAoB;QACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;QACjC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AACvC,CAAC,CAAA;AAZY,QAAA,MAAM,UAYlB","sourcesContent":["import { MinimatchOptions } from './index.js'\n/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character. In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (\n s: string,\n {\n windowsPathsNoEscape = false,\n }: Pick = {}\n) => {\n // don't need to escape +@! because we escape the parens\n // that make those magic, and escaping ! as [!] isn't valid,\n // because [!]] is a valid glob class meaning not ']'.\n return windowsPathsNoEscape\n ? s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&')\n}\n"]} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/index.d.ts b/node_modules/minimatch/dist/commonjs/index.d.ts new file mode 100644 index 00000000..41d16a98 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/index.d.ts @@ -0,0 +1,94 @@ +import { AST } from './ast.js'; +type Platform = 'aix' | 'android' | 'darwin' | 'freebsd' | 'haiku' | 'linux' | 'openbsd' | 'sunos' | 'win32' | 'cygwin' | 'netbsd'; +export interface MinimatchOptions { + nobrace?: boolean; + nocomment?: boolean; + nonegate?: boolean; + debug?: boolean; + noglobstar?: boolean; + noext?: boolean; + nonull?: boolean; + windowsPathsNoEscape?: boolean; + allowWindowsEscape?: boolean; + partial?: boolean; + dot?: boolean; + nocase?: boolean; + nocaseMagicOnly?: boolean; + magicalBraces?: boolean; + matchBase?: boolean; + flipNegate?: boolean; + preserveMultipleSlashes?: boolean; + optimizationLevel?: number; + platform?: Platform; + windowsNoMagicRoot?: boolean; +} +export declare const minimatch: { + (p: string, pattern: string, options?: MinimatchOptions): boolean; + sep: Sep; + GLOBSTAR: typeof GLOBSTAR; + filter: (pattern: string, options?: MinimatchOptions) => (p: string) => boolean; + defaults: (def: MinimatchOptions) => typeof minimatch; + braceExpand: (pattern: string, options?: MinimatchOptions) => string[]; + makeRe: (pattern: string, options?: MinimatchOptions) => false | MMRegExp; + match: (list: string[], pattern: string, options?: MinimatchOptions) => string[]; + AST: typeof AST; + Minimatch: typeof Minimatch; + escape: (s: string, { windowsPathsNoEscape, }?: Pick) => string; + unescape: (s: string, { windowsPathsNoEscape, }?: Pick) => string; +}; +type Sep = '\\' | '/'; +export declare const sep: Sep; +export declare const GLOBSTAR: unique symbol; +export declare const filter: (pattern: string, options?: MinimatchOptions) => (p: string) => boolean; +export declare const defaults: (def: MinimatchOptions) => typeof minimatch; +export declare const braceExpand: (pattern: string, options?: MinimatchOptions) => string[]; +export declare const makeRe: (pattern: string, options?: MinimatchOptions) => false | MMRegExp; +export declare const match: (list: string[], pattern: string, options?: MinimatchOptions) => string[]; +export type MMRegExp = RegExp & { + _src?: string; + _glob?: string; +}; +export type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR; +export type ParseReturn = ParseReturnFiltered | false; +export declare class Minimatch { + options: MinimatchOptions; + set: ParseReturnFiltered[][]; + pattern: string; + windowsPathsNoEscape: boolean; + nonegate: boolean; + negate: boolean; + comment: boolean; + empty: boolean; + preserveMultipleSlashes: boolean; + partial: boolean; + globSet: string[]; + globParts: string[][]; + nocase: boolean; + isWindows: boolean; + platform: Platform; + windowsNoMagicRoot: boolean; + regexp: false | null | MMRegExp; + constructor(pattern: string, options?: MinimatchOptions); + hasMagic(): boolean; + debug(..._: any[]): void; + make(): void; + preprocess(globParts: string[][]): string[][]; + adjascentGlobstarOptimize(globParts: string[][]): string[][]; + levelOneOptimize(globParts: string[][]): string[][]; + levelTwoFileOptimize(parts: string | string[]): string[]; + firstPhasePreProcess(globParts: string[][]): string[][]; + secondPhasePreProcess(globParts: string[][]): string[][]; + partsMatch(a: string[], b: string[], emptyGSMatch?: boolean): false | string[]; + parseNegate(): void; + matchOne(file: string[], pattern: ParseReturn[], partial?: boolean): boolean; + braceExpand(): string[]; + parse(pattern: string): ParseReturn; + makeRe(): false | MMRegExp; + slashSplit(p: string): string[]; + match(f: string, partial?: boolean): boolean; + static defaults(def: MinimatchOptions): typeof Minimatch; +} +export { AST } from './ast.js'; +export { escape } from './escape.js'; +export { unescape } from './unescape.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/index.d.ts.map b/node_modules/minimatch/dist/commonjs/index.d.ts.map new file mode 100644 index 00000000..6c8efb90 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/minimatch/dist/commonjs/index.js b/node_modules/minimatch/dist/commonjs/index.js new file mode 100644 index 00000000..64a0f1f8 --- /dev/null +++ b/node_modules/minimatch/dist/commonjs/index.js @@ -0,0 +1,1017 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.unescape = exports.escape = exports.AST = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = void 0; +const brace_expansion_1 = __importDefault(require("brace-expansion")); +const assert_valid_pattern_js_1 = require("./assert-valid-pattern.js"); +const ast_js_1 = require("./ast.js"); +const escape_js_1 = require("./escape.js"); +const unescape_js_1 = require("./unescape.js"); +const minimatch = (p, pattern, options = {}) => { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false; + } + return new Minimatch(pattern, options).match(p); +}; +exports.minimatch = minimatch; +// Optimized checking for the most common glob patterns. +const starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/; +const starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext); +const starDotExtTestDot = (ext) => (f) => f.endsWith(ext); +const starDotExtTestNocase = (ext) => { + ext = ext.toLowerCase(); + return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext); +}; +const starDotExtTestNocaseDot = (ext) => { + ext = ext.toLowerCase(); + return (f) => f.toLowerCase().endsWith(ext); +}; +const starDotStarRE = /^\*+\.\*+$/; +const starDotStarTest = (f) => !f.startsWith('.') && f.includes('.'); +const starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.'); +const dotStarRE = /^\.\*+$/; +const dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.'); +const starRE = /^\*+$/; +const starTest = (f) => f.length !== 0 && !f.startsWith('.'); +const starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..'; +const qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/; +const qmarksTestNocase = ([$0, ext = '']) => { + const noext = qmarksTestNoExt([$0]); + if (!ext) + return noext; + ext = ext.toLowerCase(); + return (f) => noext(f) && f.toLowerCase().endsWith(ext); +}; +const qmarksTestNocaseDot = ([$0, ext = '']) => { + const noext = qmarksTestNoExtDot([$0]); + if (!ext) + return noext; + ext = ext.toLowerCase(); + return (f) => noext(f) && f.toLowerCase().endsWith(ext); +}; +const qmarksTestDot = ([$0, ext = '']) => { + const noext = qmarksTestNoExtDot([$0]); + return !ext ? noext : (f) => noext(f) && f.endsWith(ext); +}; +const qmarksTest = ([$0, ext = '']) => { + const noext = qmarksTestNoExt([$0]); + return !ext ? noext : (f) => noext(f) && f.endsWith(ext); +}; +const qmarksTestNoExt = ([$0]) => { + const len = $0.length; + return (f) => f.length === len && !f.startsWith('.'); +}; +const qmarksTestNoExtDot = ([$0]) => { + const len = $0.length; + return (f) => f.length === len && f !== '.' && f !== '..'; +}; +/* c8 ignore start */ +const defaultPlatform = (typeof process === 'object' && process + ? (typeof process.env === 'object' && + process.env && + process.env.__MINIMATCH_TESTING_PLATFORM__) || + process.platform + : 'posix'); +const path = { + win32: { sep: '\\' }, + posix: { sep: '/' }, +}; +/* c8 ignore stop */ +exports.sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep; +exports.minimatch.sep = exports.sep; +exports.GLOBSTAR = Symbol('globstar **'); +exports.minimatch.GLOBSTAR = exports.GLOBSTAR; +// any single thing other than / +// don't need to escape / when using new RegExp() +const qmark = '[^/]'; +// * => any number of characters +const star = qmark + '*?'; +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +const twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?'; +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +const twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?'; +const filter = (pattern, options = {}) => (p) => (0, exports.minimatch)(p, pattern, options); +exports.filter = filter; +exports.minimatch.filter = exports.filter; +const ext = (a, b = {}) => Object.assign({}, a, b); +const defaults = (def) => { + if (!def || typeof def !== 'object' || !Object.keys(def).length) { + return exports.minimatch; + } + const orig = exports.minimatch; + const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options)); + return Object.assign(m, { + Minimatch: class Minimatch extends orig.Minimatch { + constructor(pattern, options = {}) { + super(pattern, ext(def, options)); + } + static defaults(options) { + return orig.defaults(ext(def, options)).Minimatch; + } + }, + AST: class AST extends orig.AST { + /* c8 ignore start */ + constructor(type, parent, options = {}) { + super(type, parent, ext(def, options)); + } + /* c8 ignore stop */ + static fromGlob(pattern, options = {}) { + return orig.AST.fromGlob(pattern, ext(def, options)); + } + }, + unescape: (s, options = {}) => orig.unescape(s, ext(def, options)), + escape: (s, options = {}) => orig.escape(s, ext(def, options)), + filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)), + defaults: (options) => orig.defaults(ext(def, options)), + makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)), + braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)), + match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)), + sep: orig.sep, + GLOBSTAR: exports.GLOBSTAR, + }); +}; +exports.defaults = defaults; +exports.minimatch.defaults = exports.defaults; +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +const braceExpand = (pattern, options = {}) => { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + // Thanks to Yeting Li for + // improving this regexp to avoid a ReDOS vulnerability. + if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { + // shortcut. no need to expand. + return [pattern]; + } + return (0, brace_expansion_1.default)(pattern); +}; +exports.braceExpand = braceExpand; +exports.minimatch.braceExpand = exports.braceExpand; +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe(); +exports.makeRe = makeRe; +exports.minimatch.makeRe = exports.makeRe; +const match = (list, pattern, options = {}) => { + const mm = new Minimatch(pattern, options); + list = list.filter(f => mm.match(f)); + if (mm.options.nonull && !list.length) { + list.push(pattern); + } + return list; +}; +exports.match = match; +exports.minimatch.match = exports.match; +// replace stuff like \* with * +const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/; +const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +class Minimatch { + options; + set; + pattern; + windowsPathsNoEscape; + nonegate; + negate; + comment; + empty; + preserveMultipleSlashes; + partial; + globSet; + globParts; + nocase; + isWindows; + platform; + windowsNoMagicRoot; + regexp; + constructor(pattern, options = {}) { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + options = options || {}; + this.options = options; + this.pattern = pattern; + this.platform = options.platform || defaultPlatform; + this.isWindows = this.platform === 'win32'; + this.windowsPathsNoEscape = + !!options.windowsPathsNoEscape || options.allowWindowsEscape === false; + if (this.windowsPathsNoEscape) { + this.pattern = this.pattern.replace(/\\/g, '/'); + } + this.preserveMultipleSlashes = !!options.preserveMultipleSlashes; + this.regexp = null; + this.negate = false; + this.nonegate = !!options.nonegate; + this.comment = false; + this.empty = false; + this.partial = !!options.partial; + this.nocase = !!this.options.nocase; + this.windowsNoMagicRoot = + options.windowsNoMagicRoot !== undefined + ? options.windowsNoMagicRoot + : !!(this.isWindows && this.nocase); + this.globSet = []; + this.globParts = []; + this.set = []; + // make the set of regexps etc. + this.make(); + } + hasMagic() { + if (this.options.magicalBraces && this.set.length > 1) { + return true; + } + for (const pattern of this.set) { + for (const part of pattern) { + if (typeof part !== 'string') + return true; + } + } + return false; + } + debug(..._) { } + make() { + const pattern = this.pattern; + const options = this.options; + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true; + return; + } + if (!pattern) { + this.empty = true; + return; + } + // step 1: figure out negation, etc. + this.parseNegate(); + // step 2: expand braces + this.globSet = [...new Set(this.braceExpand())]; + if (options.debug) { + this.debug = (...args) => console.error(...args); + } + this.debug(this.pattern, this.globSet); + // step 3: now we have a set, so turn each one into a series of + // path-portion matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + // + // First, we preprocess to make the glob pattern sets a bit simpler + // and deduped. There are some perf-killing patterns that can cause + // problems with a glob walk, but we can simplify them down a bit. + const rawGlobParts = this.globSet.map(s => this.slashSplit(s)); + this.globParts = this.preprocess(rawGlobParts); + this.debug(this.pattern, this.globParts); + // glob --> regexps + let set = this.globParts.map((s, _, __) => { + if (this.isWindows && this.windowsNoMagicRoot) { + // check if it's a drive or unc path. + const isUNC = s[0] === '' && + s[1] === '' && + (s[2] === '?' || !globMagic.test(s[2])) && + !globMagic.test(s[3]); + const isDrive = /^[a-z]:/i.test(s[0]); + if (isUNC) { + return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))]; + } + else if (isDrive) { + return [s[0], ...s.slice(1).map(ss => this.parse(ss))]; + } + } + return s.map(ss => this.parse(ss)); + }); + this.debug(this.pattern, set); + // filter out everything that didn't compile properly. + this.set = set.filter(s => s.indexOf(false) === -1); + // do not treat the ? in UNC paths as magic + if (this.isWindows) { + for (let i = 0; i < this.set.length; i++) { + const p = this.set[i]; + if (p[0] === '' && + p[1] === '' && + this.globParts[i][2] === '?' && + typeof p[3] === 'string' && + /^[a-z]:$/i.test(p[3])) { + p[2] = '?'; + } + } + } + this.debug(this.pattern, this.set); + } + // various transforms to equivalent pattern sets that are + // faster to process in a filesystem walk. The goal is to + // eliminate what we can, and push all ** patterns as far + // to the right as possible, even if it increases the number + // of patterns that we have to process. + preprocess(globParts) { + // if we're not in globstar mode, then turn all ** into * + if (this.options.noglobstar) { + for (let i = 0; i < globParts.length; i++) { + for (let j = 0; j < globParts[i].length; j++) { + if (globParts[i][j] === '**') { + globParts[i][j] = '*'; + } + } + } + } + const { optimizationLevel = 1 } = this.options; + if (optimizationLevel >= 2) { + // aggressive optimization for the purpose of fs walking + globParts = this.firstPhasePreProcess(globParts); + globParts = this.secondPhasePreProcess(globParts); + } + else if (optimizationLevel >= 1) { + // just basic optimizations to remove some .. parts + globParts = this.levelOneOptimize(globParts); + } + else { + // just collapse multiple ** portions into one + globParts = this.adjascentGlobstarOptimize(globParts); + } + return globParts; + } + // just get rid of adjascent ** portions + adjascentGlobstarOptimize(globParts) { + return globParts.map(parts => { + let gs = -1; + while (-1 !== (gs = parts.indexOf('**', gs + 1))) { + let i = gs; + while (parts[i + 1] === '**') { + i++; + } + if (i !== gs) { + parts.splice(gs, i - gs); + } + } + return parts; + }); + } + // get rid of adjascent ** and resolve .. portions + levelOneOptimize(globParts) { + return globParts.map(parts => { + parts = parts.reduce((set, part) => { + const prev = set[set.length - 1]; + if (part === '**' && prev === '**') { + return set; + } + if (part === '..') { + if (prev && prev !== '..' && prev !== '.' && prev !== '**') { + set.pop(); + return set; + } + } + set.push(part); + return set; + }, []); + return parts.length === 0 ? [''] : parts; + }); + } + levelTwoFileOptimize(parts) { + if (!Array.isArray(parts)) { + parts = this.slashSplit(parts); + } + let didSomething = false; + do { + didSomething = false; + //

// -> 
/
+            if (!this.preserveMultipleSlashes) {
+                for (let i = 1; i < parts.length - 1; i++) {
+                    const p = parts[i];
+                    // don't squeeze out UNC patterns
+                    if (i === 1 && p === '' && parts[0] === '')
+                        continue;
+                    if (p === '.' || p === '') {
+                        didSomething = true;
+                        parts.splice(i, 1);
+                        i--;
+                    }
+                }
+                if (parts[0] === '.' &&
+                    parts.length === 2 &&
+                    (parts[1] === '.' || parts[1] === '')) {
+                    didSomething = true;
+                    parts.pop();
+                }
+            }
+            // 
/

/../ ->

/
+            let dd = 0;
+            while (-1 !== (dd = parts.indexOf('..', dd + 1))) {
+                const p = parts[dd - 1];
+                if (p && p !== '.' && p !== '..' && p !== '**') {
+                    didSomething = true;
+                    parts.splice(dd - 1, 2);
+                    dd -= 2;
+                }
+            }
+        } while (didSomething);
+        return parts.length === 0 ? [''] : parts;
+    }
+    // First phase: single-pattern processing
+    // 
 is 1 or more portions
+    //  is 1 or more portions
+    // 

is any portion other than ., .., '', or ** + // is . or '' + // + // **/.. is *brutal* for filesystem walking performance, because + // it effectively resets the recursive walk each time it occurs, + // and ** cannot be reduced out by a .. pattern part like a regexp + // or most strings (other than .., ., and '') can be. + // + //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/} + //

// -> 
/
+    // 
/

/../ ->

/
+    // **/**/ -> **/
+    //
+    // **/*/ -> */**/ <== not valid because ** doesn't follow
+    // this WOULD be allowed if ** did follow symlinks, or * didn't
+    firstPhasePreProcess(globParts) {
+        let didSomething = false;
+        do {
+            didSomething = false;
+            // 
/**/../

/

/ -> {

/../

/

/,

/**/

/

/} + for (let parts of globParts) { + let gs = -1; + while (-1 !== (gs = parts.indexOf('**', gs + 1))) { + let gss = gs; + while (parts[gss + 1] === '**') { + //

/**/**/ -> 
/**/
+                        gss++;
+                    }
+                    // eg, if gs is 2 and gss is 4, that means we have 3 **
+                    // parts, and can remove 2 of them.
+                    if (gss > gs) {
+                        parts.splice(gs + 1, gss - gs);
+                    }
+                    let next = parts[gs + 1];
+                    const p = parts[gs + 2];
+                    const p2 = parts[gs + 3];
+                    if (next !== '..')
+                        continue;
+                    if (!p ||
+                        p === '.' ||
+                        p === '..' ||
+                        !p2 ||
+                        p2 === '.' ||
+                        p2 === '..') {
+                        continue;
+                    }
+                    didSomething = true;
+                    // edit parts in place, and push the new one
+                    parts.splice(gs, 1);
+                    const other = parts.slice(0);
+                    other[gs] = '**';
+                    globParts.push(other);
+                    gs--;
+                }
+                // 
// -> 
/
+                if (!this.preserveMultipleSlashes) {
+                    for (let i = 1; i < parts.length - 1; i++) {
+                        const p = parts[i];
+                        // don't squeeze out UNC patterns
+                        if (i === 1 && p === '' && parts[0] === '')
+                            continue;
+                        if (p === '.' || p === '') {
+                            didSomething = true;
+                            parts.splice(i, 1);
+                            i--;
+                        }
+                    }
+                    if (parts[0] === '.' &&
+                        parts.length === 2 &&
+                        (parts[1] === '.' || parts[1] === '')) {
+                        didSomething = true;
+                        parts.pop();
+                    }
+                }
+                // 
/

/../ ->

/
+                let dd = 0;
+                while (-1 !== (dd = parts.indexOf('..', dd + 1))) {
+                    const p = parts[dd - 1];
+                    if (p && p !== '.' && p !== '..' && p !== '**') {
+                        didSomething = true;
+                        const needDot = dd === 1 && parts[dd + 1] === '**';
+                        const splin = needDot ? ['.'] : [];
+                        parts.splice(dd - 1, 2, ...splin);
+                        if (parts.length === 0)
+                            parts.push('');
+                        dd -= 2;
+                    }
+                }
+            }
+        } while (didSomething);
+        return globParts;
+    }
+    // second phase: multi-pattern dedupes
+    // {
/*/,
/

/} ->

/*/
+    // {
/,
/} -> 
/
+    // {
/**/,
/} -> 
/**/
+    //
+    // {
/**/,
/**/

/} ->

/**/
+    // ^-- not valid because ** doens't follow symlinks
+    secondPhasePreProcess(globParts) {
+        for (let i = 0; i < globParts.length - 1; i++) {
+            for (let j = i + 1; j < globParts.length; j++) {
+                const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
+                if (matched) {
+                    globParts[i] = [];
+                    globParts[j] = matched;
+                    break;
+                }
+            }
+        }
+        return globParts.filter(gs => gs.length);
+    }
+    partsMatch(a, b, emptyGSMatch = false) {
+        let ai = 0;
+        let bi = 0;
+        let result = [];
+        let which = '';
+        while (ai < a.length && bi < b.length) {
+            if (a[ai] === b[bi]) {
+                result.push(which === 'b' ? b[bi] : a[ai]);
+                ai++;
+                bi++;
+            }
+            else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {
+                result.push(a[ai]);
+                ai++;
+            }
+            else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {
+                result.push(b[bi]);
+                bi++;
+            }
+            else if (a[ai] === '*' &&
+                b[bi] &&
+                (this.options.dot || !b[bi].startsWith('.')) &&
+                b[bi] !== '**') {
+                if (which === 'b')
+                    return false;
+                which = 'a';
+                result.push(a[ai]);
+                ai++;
+                bi++;
+            }
+            else if (b[bi] === '*' &&
+                a[ai] &&
+                (this.options.dot || !a[ai].startsWith('.')) &&
+                a[ai] !== '**') {
+                if (which === 'a')
+                    return false;
+                which = 'b';
+                result.push(b[bi]);
+                ai++;
+                bi++;
+            }
+            else {
+                return false;
+            }
+        }
+        // if we fall out of the loop, it means they two are identical
+        // as long as their lengths match
+        return a.length === b.length && result;
+    }
+    parseNegate() {
+        if (this.nonegate)
+            return;
+        const pattern = this.pattern;
+        let negate = false;
+        let negateOffset = 0;
+        for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {
+            negate = !negate;
+            negateOffset++;
+        }
+        if (negateOffset)
+            this.pattern = pattern.slice(negateOffset);
+        this.negate = negate;
+    }
+    // set partial to true to test if, for example,
+    // "/a/b" matches the start of "/*/b/*/d"
+    // Partial means, if you run out of file before you run
+    // out of pattern, then that's fine, as long as all
+    // the parts match.
+    matchOne(file, pattern, partial = false) {
+        const options = this.options;
+        // UNC paths like //?/X:/... can match X:/... and vice versa
+        // Drive letters in absolute drive or unc paths are always compared
+        // case-insensitively.
+        if (this.isWindows) {
+            const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]);
+            const fileUNC = !fileDrive &&
+                file[0] === '' &&
+                file[1] === '' &&
+                file[2] === '?' &&
+                /^[a-z]:$/i.test(file[3]);
+            const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]);
+            const patternUNC = !patternDrive &&
+                pattern[0] === '' &&
+                pattern[1] === '' &&
+                pattern[2] === '?' &&
+                typeof pattern[3] === 'string' &&
+                /^[a-z]:$/i.test(pattern[3]);
+            const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined;
+            const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined;
+            if (typeof fdi === 'number' && typeof pdi === 'number') {
+                const [fd, pd] = [file[fdi], pattern[pdi]];
+                if (fd.toLowerCase() === pd.toLowerCase()) {
+                    pattern[pdi] = fd;
+                    if (pdi > fdi) {
+                        pattern = pattern.slice(pdi);
+                    }
+                    else if (fdi > pdi) {
+                        file = file.slice(fdi);
+                    }
+                }
+            }
+        }
+        // resolve and reduce . and .. portions in the file as well.
+        // dont' need to do the second phase, because it's only one string[]
+        const { optimizationLevel = 1 } = this.options;
+        if (optimizationLevel >= 2) {
+            file = this.levelTwoFileOptimize(file);
+        }
+        this.debug('matchOne', this, { file, pattern });
+        this.debug('matchOne', file.length, pattern.length);
+        for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
+            this.debug('matchOne loop');
+            var p = pattern[pi];
+            var f = file[fi];
+            this.debug(pattern, p, f);
+            // should be impossible.
+            // some invalid regexp stuff in the set.
+            /* c8 ignore start */
+            if (p === false) {
+                return false;
+            }
+            /* c8 ignore stop */
+            if (p === exports.GLOBSTAR) {
+                this.debug('GLOBSTAR', [pattern, p, f]);
+                // "**"
+                // a/**/b/**/c would match the following:
+                // a/b/x/y/z/c
+                // a/x/y/z/b/c
+                // a/b/x/b/x/c
+                // a/b/c
+                // To do this, take the rest of the pattern after
+                // the **, and see if it would match the file remainder.
+                // If so, return success.
+                // If not, the ** "swallows" a segment, and try again.
+                // This is recursively awful.
+                //
+                // a/**/b/**/c matching a/b/x/y/z/c
+                // - a matches a
+                // - doublestar
+                //   - matchOne(b/x/y/z/c, b/**/c)
+                //     - b matches b
+                //     - doublestar
+                //       - matchOne(x/y/z/c, c) -> no
+                //       - matchOne(y/z/c, c) -> no
+                //       - matchOne(z/c, c) -> no
+                //       - matchOne(c, c) yes, hit
+                var fr = fi;
+                var pr = pi + 1;
+                if (pr === pl) {
+                    this.debug('** at the end');
+                    // a ** at the end will just swallow the rest.
+                    // We have found a match.
+                    // however, it will not swallow /.x, unless
+                    // options.dot is set.
+                    // . and .. are *never* matched by **, for explosively
+                    // exponential reasons.
+                    for (; fi < fl; fi++) {
+                        if (file[fi] === '.' ||
+                            file[fi] === '..' ||
+                            (!options.dot && file[fi].charAt(0) === '.'))
+                            return false;
+                    }
+                    return true;
+                }
+                // ok, let's see if we can swallow whatever we can.
+                while (fr < fl) {
+                    var swallowee = file[fr];
+                    this.debug('\nglobstar while', file, fr, pattern, pr, swallowee);
+                    // XXX remove this slice.  Just pass the start index.
+                    if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+                        this.debug('globstar found match!', fr, fl, swallowee);
+                        // found a match.
+                        return true;
+                    }
+                    else {
+                        // can't swallow "." or ".." ever.
+                        // can only swallow ".foo" when explicitly asked.
+                        if (swallowee === '.' ||
+                            swallowee === '..' ||
+                            (!options.dot && swallowee.charAt(0) === '.')) {
+                            this.debug('dot detected!', file, fr, pattern, pr);
+                            break;
+                        }
+                        // ** swallows a segment, and continue.
+                        this.debug('globstar swallow a segment, and continue');
+                        fr++;
+                    }
+                }
+                // no match was found.
+                // However, in partial mode, we can't say this is necessarily over.
+                /* c8 ignore start */
+                if (partial) {
+                    // ran out of file
+                    this.debug('\n>>> no match, partial?', file, fr, pattern, pr);
+                    if (fr === fl) {
+                        return true;
+                    }
+                }
+                /* c8 ignore stop */
+                return false;
+            }
+            // something other than **
+            // non-magic patterns just have to match exactly
+            // patterns with magic have been turned into regexps.
+            let hit;
+            if (typeof p === 'string') {
+                hit = f === p;
+                this.debug('string match', p, f, hit);
+            }
+            else {
+                hit = p.test(f);
+                this.debug('pattern match', p, f, hit);
+            }
+            if (!hit)
+                return false;
+        }
+        // Note: ending in / means that we'll get a final ""
+        // at the end of the pattern.  This can only match a
+        // corresponding "" at the end of the file.
+        // If the file ends in /, then it can only match a
+        // a pattern that ends in /, unless the pattern just
+        // doesn't have any more for it. But, a/b/ should *not*
+        // match "a/b/*", even though "" matches against the
+        // [^/]*? pattern, except in partial mode, where it might
+        // simply not be reached yet.
+        // However, a/b/ should still satisfy a/*
+        // now either we fell off the end of the pattern, or we're done.
+        if (fi === fl && pi === pl) {
+            // ran out of pattern and filename at the same time.
+            // an exact hit!
+            return true;
+        }
+        else if (fi === fl) {
+            // ran out of file, but still had pattern left.
+            // this is ok if we're doing the match as part of
+            // a glob fs traversal.
+            return partial;
+        }
+        else if (pi === pl) {
+            // ran out of pattern, still have file left.
+            // this is only acceptable if we're on the very last
+            // empty segment of a file with a trailing slash.
+            // a/* should match a/b/
+            return fi === fl - 1 && file[fi] === '';
+            /* c8 ignore start */
+        }
+        else {
+            // should be unreachable.
+            throw new Error('wtf?');
+        }
+        /* c8 ignore stop */
+    }
+    braceExpand() {
+        return (0, exports.braceExpand)(this.pattern, this.options);
+    }
+    parse(pattern) {
+        (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
+        const options = this.options;
+        // shortcuts
+        if (pattern === '**')
+            return exports.GLOBSTAR;
+        if (pattern === '')
+            return '';
+        // far and away, the most common glob pattern parts are
+        // *, *.*, and *.  Add a fast check method for those.
+        let m;
+        let fastTest = null;
+        if ((m = pattern.match(starRE))) {
+            fastTest = options.dot ? starTestDot : starTest;
+        }
+        else if ((m = pattern.match(starDotExtRE))) {
+            fastTest = (options.nocase
+                ? options.dot
+                    ? starDotExtTestNocaseDot
+                    : starDotExtTestNocase
+                : options.dot
+                    ? starDotExtTestDot
+                    : starDotExtTest)(m[1]);
+        }
+        else if ((m = pattern.match(qmarksRE))) {
+            fastTest = (options.nocase
+                ? options.dot
+                    ? qmarksTestNocaseDot
+                    : qmarksTestNocase
+                : options.dot
+                    ? qmarksTestDot
+                    : qmarksTest)(m);
+        }
+        else if ((m = pattern.match(starDotStarRE))) {
+            fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
+        }
+        else if ((m = pattern.match(dotStarRE))) {
+            fastTest = dotStarTest;
+        }
+        const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern();
+        if (fastTest && typeof re === 'object') {
+            // Avoids overriding in frozen environments
+            Reflect.defineProperty(re, 'test', { value: fastTest });
+        }
+        return re;
+    }
+    makeRe() {
+        if (this.regexp || this.regexp === false)
+            return this.regexp;
+        // at this point, this.set is a 2d array of partial
+        // pattern strings, or "**".
+        //
+        // It's better to use .match().  This function shouldn't
+        // be used, really, but it's pretty convenient sometimes,
+        // when you just want to work with a regex.
+        const set = this.set;
+        if (!set.length) {
+            this.regexp = false;
+            return this.regexp;
+        }
+        const options = this.options;
+        const twoStar = options.noglobstar
+            ? star
+            : options.dot
+                ? twoStarDot
+                : twoStarNoDot;
+        const flags = new Set(options.nocase ? ['i'] : []);
+        // regexpify non-globstar patterns
+        // if ** is only item, then we just do one twoStar
+        // if ** is first, and there are more, prepend (\/|twoStar\/)? to next
+        // if ** is last, append (\/twoStar|) to previous
+        // if ** is in the middle, append (\/|\/twoStar\/) to previous
+        // then filter out GLOBSTAR symbols
+        let re = set
+            .map(pattern => {
+            const pp = pattern.map(p => {
+                if (p instanceof RegExp) {
+                    for (const f of p.flags.split(''))
+                        flags.add(f);
+                }
+                return typeof p === 'string'
+                    ? regExpEscape(p)
+                    : p === exports.GLOBSTAR
+                        ? exports.GLOBSTAR
+                        : p._src;
+            });
+            pp.forEach((p, i) => {
+                const next = pp[i + 1];
+                const prev = pp[i - 1];
+                if (p !== exports.GLOBSTAR || prev === exports.GLOBSTAR) {
+                    return;
+                }
+                if (prev === undefined) {
+                    if (next !== undefined && next !== exports.GLOBSTAR) {
+                        pp[i + 1] = '(?:\\/|' + twoStar + '\\/)?' + next;
+                    }
+                    else {
+                        pp[i] = twoStar;
+                    }
+                }
+                else if (next === undefined) {
+                    pp[i - 1] = prev + '(?:\\/|' + twoStar + ')?';
+                }
+                else if (next !== exports.GLOBSTAR) {
+                    pp[i - 1] = prev + '(?:\\/|\\/' + twoStar + '\\/)' + next;
+                    pp[i + 1] = exports.GLOBSTAR;
+                }
+            });
+            return pp.filter(p => p !== exports.GLOBSTAR).join('/');
+        })
+            .join('|');
+        // need to wrap in parens if we had more than one thing with |,
+        // otherwise only the first will be anchored to ^ and the last to $
+        const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];
+        // must match entire pattern
+        // ending in a * or ** will make it less strict.
+        re = '^' + open + re + close + '$';
+        // can match anything, as long as it's not this.
+        if (this.negate)
+            re = '^(?!' + re + ').+$';
+        try {
+            this.regexp = new RegExp(re, [...flags].join(''));
+            /* c8 ignore start */
+        }
+        catch (ex) {
+            // should be impossible
+            this.regexp = false;
+        }
+        /* c8 ignore stop */
+        return this.regexp;
+    }
+    slashSplit(p) {
+        // if p starts with // on windows, we preserve that
+        // so that UNC paths aren't broken.  Otherwise, any number of
+        // / characters are coalesced into one, unless
+        // preserveMultipleSlashes is set to true.
+        if (this.preserveMultipleSlashes) {
+            return p.split('/');
+        }
+        else if (this.isWindows && /^\/\/[^\/]+/.test(p)) {
+            // add an extra '' for the one we lose
+            return ['', ...p.split(/\/+/)];
+        }
+        else {
+            return p.split(/\/+/);
+        }
+    }
+    match(f, partial = this.partial) {
+        this.debug('match', f, this.pattern);
+        // short-circuit in the case of busted things.
+        // comments, etc.
+        if (this.comment) {
+            return false;
+        }
+        if (this.empty) {
+            return f === '';
+        }
+        if (f === '/' && partial) {
+            return true;
+        }
+        const options = this.options;
+        // windows: need to use /, not \
+        if (this.isWindows) {
+            f = f.split('\\').join('/');
+        }
+        // treat the test path as a set of pathparts.
+        const ff = this.slashSplit(f);
+        this.debug(this.pattern, 'split', ff);
+        // just ONE of the pattern sets in this.set needs to match
+        // in order for it to be valid.  If negating, then just one
+        // match means that we have failed.
+        // Either way, return on the first hit.
+        const set = this.set;
+        this.debug(this.pattern, 'set', set);
+        // Find the basename of the path by looking for the last non-empty segment
+        let filename = ff[ff.length - 1];
+        if (!filename) {
+            for (let i = ff.length - 2; !filename && i >= 0; i--) {
+                filename = ff[i];
+            }
+        }
+        for (let i = 0; i < set.length; i++) {
+            const pattern = set[i];
+            let file = ff;
+            if (options.matchBase && pattern.length === 1) {
+                file = [filename];
+            }
+            const hit = this.matchOne(file, pattern, partial);
+            if (hit) {
+                if (options.flipNegate) {
+                    return true;
+                }
+                return !this.negate;
+            }
+        }
+        // didn't get any hits.  this is success if it's a negative
+        // pattern, failure otherwise.
+        if (options.flipNegate) {
+            return false;
+        }
+        return this.negate;
+    }
+    static defaults(def) {
+        return exports.minimatch.defaults(def).Minimatch;
+    }
+}
+exports.Minimatch = Minimatch;
+/* c8 ignore start */
+var ast_js_2 = require("./ast.js");
+Object.defineProperty(exports, "AST", { enumerable: true, get: function () { return ast_js_2.AST; } });
+var escape_js_2 = require("./escape.js");
+Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return escape_js_2.escape; } });
+var unescape_js_2 = require("./unescape.js");
+Object.defineProperty(exports, "unescape", { enumerable: true, get: function () { return unescape_js_2.unescape; } });
+/* c8 ignore stop */
+exports.minimatch.AST = ast_js_1.AST;
+exports.minimatch.Minimatch = Minimatch;
+exports.minimatch.escape = escape_js_1.escape;
+exports.minimatch.unescape = unescape_js_1.unescape;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/commonjs/index.js.map b/node_modules/minimatch/dist/commonjs/index.js.map
new file mode 100644
index 00000000..5e967693
--- /dev/null
+++ b/node_modules/minimatch/dist/commonjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import expand from 'brace-expansion'\nimport { assertValidPattern } from './assert-valid-pattern.js'\nimport { AST, ExtglobType } from './ast.js'\nimport { escape } from './escape.js'\nimport { unescape } from './unescape.js'\n\ntype Platform =\n  | 'aix'\n  | 'android'\n  | 'darwin'\n  | 'freebsd'\n  | 'haiku'\n  | 'linux'\n  | 'openbsd'\n  | 'sunos'\n  | 'win32'\n  | 'cygwin'\n  | 'netbsd'\n\nexport interface MinimatchOptions {\n  nobrace?: boolean\n  nocomment?: boolean\n  nonegate?: boolean\n  debug?: boolean\n  noglobstar?: boolean\n  noext?: boolean\n  nonull?: boolean\n  windowsPathsNoEscape?: boolean\n  allowWindowsEscape?: boolean\n  partial?: boolean\n  dot?: boolean\n  nocase?: boolean\n  nocaseMagicOnly?: boolean\n  magicalBraces?: boolean\n  matchBase?: boolean\n  flipNegate?: boolean\n  preserveMultipleSlashes?: boolean\n  optimizationLevel?: number\n  platform?: Platform\n  windowsNoMagicRoot?: boolean\n}\n\nexport const minimatch = (\n  p: string,\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  assertValidPattern(pattern)\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/\nconst starDotExtTest = (ext: string) => (f: string) =>\n  !f.startsWith('.') && f.endsWith(ext)\nconst starDotExtTestDot = (ext: string) => (f: string) => f.endsWith(ext)\nconst starDotExtTestNocase = (ext: string) => {\n  ext = ext.toLowerCase()\n  return (f: string) => !f.startsWith('.') && f.toLowerCase().endsWith(ext)\n}\nconst starDotExtTestNocaseDot = (ext: string) => {\n  ext = ext.toLowerCase()\n  return (f: string) => f.toLowerCase().endsWith(ext)\n}\nconst starDotStarRE = /^\\*+\\.\\*+$/\nconst starDotStarTest = (f: string) => !f.startsWith('.') && f.includes('.')\nconst starDotStarTestDot = (f: string) =>\n  f !== '.' && f !== '..' && f.includes('.')\nconst dotStarRE = /^\\.\\*+$/\nconst dotStarTest = (f: string) => f !== '.' && f !== '..' && f.startsWith('.')\nconst starRE = /^\\*+$/\nconst starTest = (f: string) => f.length !== 0 && !f.startsWith('.')\nconst starTestDot = (f: string) => f.length !== 0 && f !== '.' && f !== '..'\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/\nconst qmarksTestNocase = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExt([$0])\n  if (!ext) return noext\n  ext = ext.toLowerCase()\n  return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestNocaseDot = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExtDot([$0])\n  if (!ext) return noext\n  ext = ext.toLowerCase()\n  return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestDot = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExtDot([$0])\n  return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTest = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExt([$0])\n  return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTestNoExt = ([$0]: RegExpMatchArray) => {\n  const len = $0.length\n  return (f: string) => f.length === len && !f.startsWith('.')\n}\nconst qmarksTestNoExtDot = ([$0]: RegExpMatchArray) => {\n  const len = $0.length\n  return (f: string) => f.length === len && f !== '.' && f !== '..'\n}\n\n/* c8 ignore start */\nconst defaultPlatform: Platform = (\n  typeof process === 'object' && process\n    ? (typeof process.env === 'object' &&\n        process.env &&\n        process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n      process.platform\n    : 'posix'\n) as Platform\ntype Sep = '\\\\' | '/'\nconst path: { [k: string]: { sep: Sep } } = {\n  win32: { sep: '\\\\' },\n  posix: { sep: '/' },\n}\n/* c8 ignore stop */\n\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep\nminimatch.sep = sep\n\nexport const GLOBSTAR = Symbol('globstar **')\nminimatch.GLOBSTAR = GLOBSTAR\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?'\n\nexport const filter =\n  (pattern: string, options: MinimatchOptions = {}) =>\n  (p: string) =>\n    minimatch(p, pattern, options)\nminimatch.filter = filter\n\nconst ext = (a: MinimatchOptions, b: MinimatchOptions = {}) =>\n  Object.assign({}, a, b)\n\nexport const defaults = (def: MinimatchOptions): typeof minimatch => {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  const orig = minimatch\n\n  const m = (p: string, pattern: string, options: MinimatchOptions = {}) =>\n    orig(p, pattern, ext(def, options))\n\n  return Object.assign(m, {\n    Minimatch: class Minimatch extends orig.Minimatch {\n      constructor(pattern: string, options: MinimatchOptions = {}) {\n        super(pattern, ext(def, options))\n      }\n      static defaults(options: MinimatchOptions) {\n        return orig.defaults(ext(def, options)).Minimatch\n      }\n    },\n\n    AST: class AST extends orig.AST {\n      /* c8 ignore start */\n      constructor(\n        type: ExtglobType | null,\n        parent?: AST,\n        options: MinimatchOptions = {}\n      ) {\n        super(type, parent, ext(def, options))\n      }\n      /* c8 ignore stop */\n\n      static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n        return orig.AST.fromGlob(pattern, ext(def, options))\n      }\n    },\n\n    unescape: (\n      s: string,\n      options: Pick = {}\n    ) => orig.unescape(s, ext(def, options)),\n\n    escape: (\n      s: string,\n      options: Pick = {}\n    ) => orig.escape(s, ext(def, options)),\n\n    filter: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.filter(pattern, ext(def, options)),\n\n    defaults: (options: MinimatchOptions) => orig.defaults(ext(def, options)),\n\n    makeRe: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.makeRe(pattern, ext(def, options)),\n\n    braceExpand: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.braceExpand(pattern, ext(def, options)),\n\n    match: (list: string[], pattern: string, options: MinimatchOptions = {}) =>\n      orig.match(list, pattern, ext(def, options)),\n\n    sep: orig.sep,\n    GLOBSTAR: GLOBSTAR as typeof GLOBSTAR,\n  })\n}\nminimatch.defaults = defaults\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li  for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\nminimatch.braceExpand = braceExpand\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\n\nexport const makeRe = (pattern: string, options: MinimatchOptions = {}) =>\n  new Minimatch(pattern, options).makeRe()\nminimatch.makeRe = makeRe\n\nexport const match = (\n  list: string[],\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  const mm = new Minimatch(pattern, options)\n  list = list.filter(f => mm.match(f))\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\nminimatch.match = match\n\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/\nconst regExpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\nexport type MMRegExp = RegExp & {\n  _src?: string\n  _glob?: string\n}\n\nexport type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR\nexport type ParseReturn = ParseReturnFiltered | false\n\nexport class Minimatch {\n  options: MinimatchOptions\n  set: ParseReturnFiltered[][]\n  pattern: string\n\n  windowsPathsNoEscape: boolean\n  nonegate: boolean\n  negate: boolean\n  comment: boolean\n  empty: boolean\n  preserveMultipleSlashes: boolean\n  partial: boolean\n  globSet: string[]\n  globParts: string[][]\n  nocase: boolean\n\n  isWindows: boolean\n  platform: Platform\n  windowsNoMagicRoot: boolean\n\n  regexp: false | null | MMRegExp\n  constructor(pattern: string, options: MinimatchOptions = {}) {\n    assertValidPattern(pattern)\n\n    options = options || {}\n    this.options = options\n    this.pattern = pattern\n    this.platform = options.platform || defaultPlatform\n    this.isWindows = this.platform === 'win32'\n    this.windowsPathsNoEscape =\n      !!options.windowsPathsNoEscape || options.allowWindowsEscape === false\n    if (this.windowsPathsNoEscape) {\n      this.pattern = this.pattern.replace(/\\\\/g, '/')\n    }\n    this.preserveMultipleSlashes = !!options.preserveMultipleSlashes\n    this.regexp = null\n    this.negate = false\n    this.nonegate = !!options.nonegate\n    this.comment = false\n    this.empty = false\n    this.partial = !!options.partial\n    this.nocase = !!this.options.nocase\n    this.windowsNoMagicRoot =\n      options.windowsNoMagicRoot !== undefined\n        ? options.windowsNoMagicRoot\n        : !!(this.isWindows && this.nocase)\n\n    this.globSet = []\n    this.globParts = []\n    this.set = []\n\n    // make the set of regexps etc.\n    this.make()\n  }\n\n  hasMagic(): boolean {\n    if (this.options.magicalBraces && this.set.length > 1) {\n      return true\n    }\n    for (const pattern of this.set) {\n      for (const part of pattern) {\n        if (typeof part !== 'string') return true\n      }\n    }\n    return false\n  }\n\n  debug(..._: any[]) {}\n\n  make() {\n    const pattern = this.pattern\n    const options = this.options\n\n    // empty patterns and comments match nothing.\n    if (!options.nocomment && pattern.charAt(0) === '#') {\n      this.comment = true\n      return\n    }\n\n    if (!pattern) {\n      this.empty = true\n      return\n    }\n\n    // step 1: figure out negation, etc.\n    this.parseNegate()\n\n    // step 2: expand braces\n    this.globSet = [...new Set(this.braceExpand())]\n\n    if (options.debug) {\n      this.debug = (...args: any[]) => console.error(...args)\n    }\n\n    this.debug(this.pattern, this.globSet)\n\n    // step 3: now we have a set, so turn each one into a series of\n    // path-portion matching patterns.\n    // These will be regexps, except in the case of \"**\", which is\n    // set to the GLOBSTAR object for globstar behavior,\n    // and will not contain any / characters\n    //\n    // First, we preprocess to make the glob pattern sets a bit simpler\n    // and deduped.  There are some perf-killing patterns that can cause\n    // problems with a glob walk, but we can simplify them down a bit.\n    const rawGlobParts = this.globSet.map(s => this.slashSplit(s))\n    this.globParts = this.preprocess(rawGlobParts)\n    this.debug(this.pattern, this.globParts)\n\n    // glob --> regexps\n    let set = this.globParts.map((s, _, __) => {\n      if (this.isWindows && this.windowsNoMagicRoot) {\n        // check if it's a drive or unc path.\n        const isUNC =\n          s[0] === '' &&\n          s[1] === '' &&\n          (s[2] === '?' || !globMagic.test(s[2])) &&\n          !globMagic.test(s[3])\n        const isDrive = /^[a-z]:/i.test(s[0])\n        if (isUNC) {\n          return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))]\n        } else if (isDrive) {\n          return [s[0], ...s.slice(1).map(ss => this.parse(ss))]\n        }\n      }\n      return s.map(ss => this.parse(ss))\n    })\n\n    this.debug(this.pattern, set)\n\n    // filter out everything that didn't compile properly.\n    this.set = set.filter(\n      s => s.indexOf(false) === -1\n    ) as ParseReturnFiltered[][]\n\n    // do not treat the ? in UNC paths as magic\n    if (this.isWindows) {\n      for (let i = 0; i < this.set.length; i++) {\n        const p = this.set[i]\n        if (\n          p[0] === '' &&\n          p[1] === '' &&\n          this.globParts[i][2] === '?' &&\n          typeof p[3] === 'string' &&\n          /^[a-z]:$/i.test(p[3])\n        ) {\n          p[2] = '?'\n        }\n      }\n    }\n\n    this.debug(this.pattern, this.set)\n  }\n\n  // various transforms to equivalent pattern sets that are\n  // faster to process in a filesystem walk.  The goal is to\n  // eliminate what we can, and push all ** patterns as far\n  // to the right as possible, even if it increases the number\n  // of patterns that we have to process.\n  preprocess(globParts: string[][]) {\n    // if we're not in globstar mode, then turn all ** into *\n    if (this.options.noglobstar) {\n      for (let i = 0; i < globParts.length; i++) {\n        for (let j = 0; j < globParts[i].length; j++) {\n          if (globParts[i][j] === '**') {\n            globParts[i][j] = '*'\n          }\n        }\n      }\n    }\n\n    const { optimizationLevel = 1 } = this.options\n\n    if (optimizationLevel >= 2) {\n      // aggressive optimization for the purpose of fs walking\n      globParts = this.firstPhasePreProcess(globParts)\n      globParts = this.secondPhasePreProcess(globParts)\n    } else if (optimizationLevel >= 1) {\n      // just basic optimizations to remove some .. parts\n      globParts = this.levelOneOptimize(globParts)\n    } else {\n      // just collapse multiple ** portions into one\n      globParts = this.adjascentGlobstarOptimize(globParts)\n    }\n\n    return globParts\n  }\n\n  // just get rid of adjascent ** portions\n  adjascentGlobstarOptimize(globParts: string[][]) {\n    return globParts.map(parts => {\n      let gs: number = -1\n      while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n        let i = gs\n        while (parts[i + 1] === '**') {\n          i++\n        }\n        if (i !== gs) {\n          parts.splice(gs, i - gs)\n        }\n      }\n      return parts\n    })\n  }\n\n  // get rid of adjascent ** and resolve .. portions\n  levelOneOptimize(globParts: string[][]) {\n    return globParts.map(parts => {\n      parts = parts.reduce((set: string[], part) => {\n        const prev = set[set.length - 1]\n        if (part === '**' && prev === '**') {\n          return set\n        }\n        if (part === '..') {\n          if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n            set.pop()\n            return set\n          }\n        }\n        set.push(part)\n        return set\n      }, [])\n      return parts.length === 0 ? [''] : parts\n    })\n  }\n\n  levelTwoFileOptimize(parts: string | string[]) {\n    if (!Array.isArray(parts)) {\n      parts = this.slashSplit(parts)\n    }\n    let didSomething: boolean = false\n    do {\n      didSomething = false\n      // 
// -> 
/\n      if (!this.preserveMultipleSlashes) {\n        for (let i = 1; i < parts.length - 1; i++) {\n          const p = parts[i]\n          // don't squeeze out UNC patterns\n          if (i === 1 && p === '' && parts[0] === '') continue\n          if (p === '.' || p === '') {\n            didSomething = true\n            parts.splice(i, 1)\n            i--\n          }\n        }\n        if (\n          parts[0] === '.' &&\n          parts.length === 2 &&\n          (parts[1] === '.' || parts[1] === '')\n        ) {\n          didSomething = true\n          parts.pop()\n        }\n      }\n\n      // 
/

/../ ->

/\n      let dd: number = 0\n      while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n        const p = parts[dd - 1]\n        if (p && p !== '.' && p !== '..' && p !== '**') {\n          didSomething = true\n          parts.splice(dd - 1, 2)\n          dd -= 2\n        }\n      }\n    } while (didSomething)\n    return parts.length === 0 ? [''] : parts\n  }\n\n  // First phase: single-pattern processing\n  // 
 is 1 or more portions\n  //  is 1 or more portions\n  // 

is any portion other than ., .., '', or **\n // is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/}\n //

// -> 
/\n  // 
/

/../ ->

/\n  // **/**/ -> **/\n  //\n  // **/*/ -> */**/ <== not valid because ** doesn't follow\n  // this WOULD be allowed if ** did follow symlinks, or * didn't\n  firstPhasePreProcess(globParts: string[][]) {\n    let didSomething = false\n    do {\n      didSomething = false\n      // 
/**/../

/

/ -> {

/../

/

/,

/**/

/

/}\n for (let parts of globParts) {\n let gs: number = -1\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss: number = gs\n while (parts[gss + 1] === '**') {\n //

/**/**/ -> 
/**/\n            gss++\n          }\n          // eg, if gs is 2 and gss is 4, that means we have 3 **\n          // parts, and can remove 2 of them.\n          if (gss > gs) {\n            parts.splice(gs + 1, gss - gs)\n          }\n\n          let next = parts[gs + 1]\n          const p = parts[gs + 2]\n          const p2 = parts[gs + 3]\n          if (next !== '..') continue\n          if (\n            !p ||\n            p === '.' ||\n            p === '..' ||\n            !p2 ||\n            p2 === '.' ||\n            p2 === '..'\n          ) {\n            continue\n          }\n          didSomething = true\n          // edit parts in place, and push the new one\n          parts.splice(gs, 1)\n          const other = parts.slice(0)\n          other[gs] = '**'\n          globParts.push(other)\n          gs--\n        }\n\n        // 
// -> 
/\n        if (!this.preserveMultipleSlashes) {\n          for (let i = 1; i < parts.length - 1; i++) {\n            const p = parts[i]\n            // don't squeeze out UNC patterns\n            if (i === 1 && p === '' && parts[0] === '') continue\n            if (p === '.' || p === '') {\n              didSomething = true\n              parts.splice(i, 1)\n              i--\n            }\n          }\n          if (\n            parts[0] === '.' &&\n            parts.length === 2 &&\n            (parts[1] === '.' || parts[1] === '')\n          ) {\n            didSomething = true\n            parts.pop()\n          }\n        }\n\n        // 
/

/../ ->

/\n        let dd: number = 0\n        while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n          const p = parts[dd - 1]\n          if (p && p !== '.' && p !== '..' && p !== '**') {\n            didSomething = true\n            const needDot = dd === 1 && parts[dd + 1] === '**'\n            const splin = needDot ? ['.'] : []\n            parts.splice(dd - 1, 2, ...splin)\n            if (parts.length === 0) parts.push('')\n            dd -= 2\n          }\n        }\n      }\n    } while (didSomething)\n\n    return globParts\n  }\n\n  // second phase: multi-pattern dedupes\n  // {
/*/,
/

/} ->

/*/\n  // {
/,
/} -> 
/\n  // {
/**/,
/} -> 
/**/\n  //\n  // {
/**/,
/**/

/} ->

/**/\n  // ^-- not valid because ** doens't follow symlinks\n  secondPhasePreProcess(globParts: string[][]): string[][] {\n    for (let i = 0; i < globParts.length - 1; i++) {\n      for (let j = i + 1; j < globParts.length; j++) {\n        const matched = this.partsMatch(\n          globParts[i],\n          globParts[j],\n          !this.preserveMultipleSlashes\n        )\n        if (matched) {\n          globParts[i] = []\n          globParts[j] = matched\n          break\n        }\n      }\n    }\n    return globParts.filter(gs => gs.length)\n  }\n\n  partsMatch(\n    a: string[],\n    b: string[],\n    emptyGSMatch: boolean = false\n  ): false | string[] {\n    let ai = 0\n    let bi = 0\n    let result: string[] = []\n    let which: string = ''\n    while (ai < a.length && bi < b.length) {\n      if (a[ai] === b[bi]) {\n        result.push(which === 'b' ? b[bi] : a[ai])\n        ai++\n        bi++\n      } else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n        result.push(a[ai])\n        ai++\n      } else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n        result.push(b[bi])\n        bi++\n      } else if (\n        a[ai] === '*' &&\n        b[bi] &&\n        (this.options.dot || !b[bi].startsWith('.')) &&\n        b[bi] !== '**'\n      ) {\n        if (which === 'b') return false\n        which = 'a'\n        result.push(a[ai])\n        ai++\n        bi++\n      } else if (\n        b[bi] === '*' &&\n        a[ai] &&\n        (this.options.dot || !a[ai].startsWith('.')) &&\n        a[ai] !== '**'\n      ) {\n        if (which === 'a') return false\n        which = 'b'\n        result.push(b[bi])\n        ai++\n        bi++\n      } else {\n        return false\n      }\n    }\n    // if we fall out of the loop, it means they two are identical\n    // as long as their lengths match\n    return a.length === b.length && result\n  }\n\n  parseNegate() {\n    if (this.nonegate) return\n\n    const pattern = this.pattern\n    let negate = false\n    let negateOffset = 0\n\n    for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n      negate = !negate\n      negateOffset++\n    }\n\n    if (negateOffset) this.pattern = pattern.slice(negateOffset)\n    this.negate = negate\n  }\n\n  // set partial to true to test if, for example,\n  // \"/a/b\" matches the start of \"/*/b/*/d\"\n  // Partial means, if you run out of file before you run\n  // out of pattern, then that's fine, as long as all\n  // the parts match.\n  matchOne(file: string[], pattern: ParseReturn[], partial: boolean = false) {\n    const options = this.options\n\n    // UNC paths like //?/X:/... can match X:/... and vice versa\n    // Drive letters in absolute drive or unc paths are always compared\n    // case-insensitively.\n    if (this.isWindows) {\n      const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0])\n      const fileUNC =\n        !fileDrive &&\n        file[0] === '' &&\n        file[1] === '' &&\n        file[2] === '?' &&\n        /^[a-z]:$/i.test(file[3])\n\n      const patternDrive =\n        typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0])\n      const patternUNC =\n        !patternDrive &&\n        pattern[0] === '' &&\n        pattern[1] === '' &&\n        pattern[2] === '?' &&\n        typeof pattern[3] === 'string' &&\n        /^[a-z]:$/i.test(pattern[3])\n\n      const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined\n      const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined\n      if (typeof fdi === 'number' && typeof pdi === 'number') {\n        const [fd, pd]: [string, string] = [file[fdi], pattern[pdi] as string]\n        if (fd.toLowerCase() === pd.toLowerCase()) {\n          pattern[pdi] = fd\n          if (pdi > fdi) {\n            pattern = pattern.slice(pdi)\n          } else if (fdi > pdi) {\n            file = file.slice(fdi)\n          }\n        }\n      }\n    }\n\n    // resolve and reduce . and .. portions in the file as well.\n    // dont' need to do the second phase, because it's only one string[]\n    const { optimizationLevel = 1 } = this.options\n    if (optimizationLevel >= 2) {\n      file = this.levelTwoFileOptimize(file)\n    }\n\n    this.debug('matchOne', this, { file, pattern })\n    this.debug('matchOne', file.length, pattern.length)\n\n    for (\n      var fi = 0, pi = 0, fl = file.length, pl = pattern.length;\n      fi < fl && pi < pl;\n      fi++, pi++\n    ) {\n      this.debug('matchOne loop')\n      var p = pattern[pi]\n      var f = file[fi]\n\n      this.debug(pattern, p, f)\n\n      // should be impossible.\n      // some invalid regexp stuff in the set.\n      /* c8 ignore start */\n      if (p === false) {\n        return false\n      }\n      /* c8 ignore stop */\n\n      if (p === GLOBSTAR) {\n        this.debug('GLOBSTAR', [pattern, p, f])\n\n        // \"**\"\n        // a/**/b/**/c would match the following:\n        // a/b/x/y/z/c\n        // a/x/y/z/b/c\n        // a/b/x/b/x/c\n        // a/b/c\n        // To do this, take the rest of the pattern after\n        // the **, and see if it would match the file remainder.\n        // If so, return success.\n        // If not, the ** \"swallows\" a segment, and try again.\n        // This is recursively awful.\n        //\n        // a/**/b/**/c matching a/b/x/y/z/c\n        // - a matches a\n        // - doublestar\n        //   - matchOne(b/x/y/z/c, b/**/c)\n        //     - b matches b\n        //     - doublestar\n        //       - matchOne(x/y/z/c, c) -> no\n        //       - matchOne(y/z/c, c) -> no\n        //       - matchOne(z/c, c) -> no\n        //       - matchOne(c, c) yes, hit\n        var fr = fi\n        var pr = pi + 1\n        if (pr === pl) {\n          this.debug('** at the end')\n          // a ** at the end will just swallow the rest.\n          // We have found a match.\n          // however, it will not swallow /.x, unless\n          // options.dot is set.\n          // . and .. are *never* matched by **, for explosively\n          // exponential reasons.\n          for (; fi < fl; fi++) {\n            if (\n              file[fi] === '.' ||\n              file[fi] === '..' ||\n              (!options.dot && file[fi].charAt(0) === '.')\n            )\n              return false\n          }\n          return true\n        }\n\n        // ok, let's see if we can swallow whatever we can.\n        while (fr < fl) {\n          var swallowee = file[fr]\n\n          this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n          // XXX remove this slice.  Just pass the start index.\n          if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n            this.debug('globstar found match!', fr, fl, swallowee)\n            // found a match.\n            return true\n          } else {\n            // can't swallow \".\" or \"..\" ever.\n            // can only swallow \".foo\" when explicitly asked.\n            if (\n              swallowee === '.' ||\n              swallowee === '..' ||\n              (!options.dot && swallowee.charAt(0) === '.')\n            ) {\n              this.debug('dot detected!', file, fr, pattern, pr)\n              break\n            }\n\n            // ** swallows a segment, and continue.\n            this.debug('globstar swallow a segment, and continue')\n            fr++\n          }\n        }\n\n        // no match was found.\n        // However, in partial mode, we can't say this is necessarily over.\n        /* c8 ignore start */\n        if (partial) {\n          // ran out of file\n          this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n          if (fr === fl) {\n            return true\n          }\n        }\n        /* c8 ignore stop */\n        return false\n      }\n\n      // something other than **\n      // non-magic patterns just have to match exactly\n      // patterns with magic have been turned into regexps.\n      let hit: boolean\n      if (typeof p === 'string') {\n        hit = f === p\n        this.debug('string match', p, f, hit)\n      } else {\n        hit = p.test(f)\n        this.debug('pattern match', p, f, hit)\n      }\n\n      if (!hit) return false\n    }\n\n    // Note: ending in / means that we'll get a final \"\"\n    // at the end of the pattern.  This can only match a\n    // corresponding \"\" at the end of the file.\n    // If the file ends in /, then it can only match a\n    // a pattern that ends in /, unless the pattern just\n    // doesn't have any more for it. But, a/b/ should *not*\n    // match \"a/b/*\", even though \"\" matches against the\n    // [^/]*? pattern, except in partial mode, where it might\n    // simply not be reached yet.\n    // However, a/b/ should still satisfy a/*\n\n    // now either we fell off the end of the pattern, or we're done.\n    if (fi === fl && pi === pl) {\n      // ran out of pattern and filename at the same time.\n      // an exact hit!\n      return true\n    } else if (fi === fl) {\n      // ran out of file, but still had pattern left.\n      // this is ok if we're doing the match as part of\n      // a glob fs traversal.\n      return partial\n    } else if (pi === pl) {\n      // ran out of pattern, still have file left.\n      // this is only acceptable if we're on the very last\n      // empty segment of a file with a trailing slash.\n      // a/* should match a/b/\n      return fi === fl - 1 && file[fi] === ''\n\n      /* c8 ignore start */\n    } else {\n      // should be unreachable.\n      throw new Error('wtf?')\n    }\n    /* c8 ignore stop */\n  }\n\n  braceExpand() {\n    return braceExpand(this.pattern, this.options)\n  }\n\n  parse(pattern: string): ParseReturn {\n    assertValidPattern(pattern)\n\n    const options = this.options\n\n    // shortcuts\n    if (pattern === '**') return GLOBSTAR\n    if (pattern === '') return ''\n\n    // far and away, the most common glob pattern parts are\n    // *, *.*, and *.  Add a fast check method for those.\n    let m: RegExpMatchArray | null\n    let fastTest: null | ((f: string) => boolean) = null\n    if ((m = pattern.match(starRE))) {\n      fastTest = options.dot ? starTestDot : starTest\n    } else if ((m = pattern.match(starDotExtRE))) {\n      fastTest = (\n        options.nocase\n          ? options.dot\n            ? starDotExtTestNocaseDot\n            : starDotExtTestNocase\n          : options.dot\n          ? starDotExtTestDot\n          : starDotExtTest\n      )(m[1])\n    } else if ((m = pattern.match(qmarksRE))) {\n      fastTest = (\n        options.nocase\n          ? options.dot\n            ? qmarksTestNocaseDot\n            : qmarksTestNocase\n          : options.dot\n          ? qmarksTestDot\n          : qmarksTest\n      )(m)\n    } else if ((m = pattern.match(starDotStarRE))) {\n      fastTest = options.dot ? starDotStarTestDot : starDotStarTest\n    } else if ((m = pattern.match(dotStarRE))) {\n      fastTest = dotStarTest\n    }\n\n    const re = AST.fromGlob(pattern, this.options).toMMPattern()\n    if (fastTest && typeof re === 'object') {\n      // Avoids overriding in frozen environments\n      Reflect.defineProperty(re, 'test', { value: fastTest })\n    }\n    return re\n  }\n\n  makeRe() {\n    if (this.regexp || this.regexp === false) return this.regexp\n\n    // at this point, this.set is a 2d array of partial\n    // pattern strings, or \"**\".\n    //\n    // It's better to use .match().  This function shouldn't\n    // be used, really, but it's pretty convenient sometimes,\n    // when you just want to work with a regex.\n    const set = this.set\n\n    if (!set.length) {\n      this.regexp = false\n      return this.regexp\n    }\n    const options = this.options\n\n    const twoStar = options.noglobstar\n      ? star\n      : options.dot\n      ? twoStarDot\n      : twoStarNoDot\n    const flags = new Set(options.nocase ? ['i'] : [])\n\n    // regexpify non-globstar patterns\n    // if ** is only item, then we just do one twoStar\n    // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n    // if ** is last, append (\\/twoStar|) to previous\n    // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n    // then filter out GLOBSTAR symbols\n    let re = set\n      .map(pattern => {\n        const pp: (string | typeof GLOBSTAR)[] = pattern.map(p => {\n          if (p instanceof RegExp) {\n            for (const f of p.flags.split('')) flags.add(f)\n          }\n          return typeof p === 'string'\n            ? regExpEscape(p)\n            : p === GLOBSTAR\n            ? GLOBSTAR\n            : p._src\n        }) as (string | typeof GLOBSTAR)[]\n        pp.forEach((p, i) => {\n          const next = pp[i + 1]\n          const prev = pp[i - 1]\n          if (p !== GLOBSTAR || prev === GLOBSTAR) {\n            return\n          }\n          if (prev === undefined) {\n            if (next !== undefined && next !== GLOBSTAR) {\n              pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next\n            } else {\n              pp[i] = twoStar\n            }\n          } else if (next === undefined) {\n            pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?'\n          } else if (next !== GLOBSTAR) {\n            pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next\n            pp[i + 1] = GLOBSTAR\n          }\n        })\n        return pp.filter(p => p !== GLOBSTAR).join('/')\n      })\n      .join('|')\n\n    // need to wrap in parens if we had more than one thing with |,\n    // otherwise only the first will be anchored to ^ and the last to $\n    const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', '']\n    // must match entire pattern\n    // ending in a * or ** will make it less strict.\n    re = '^' + open + re + close + '$'\n\n    // can match anything, as long as it's not this.\n    if (this.negate) re = '^(?!' + re + ').+$'\n\n    try {\n      this.regexp = new RegExp(re, [...flags].join(''))\n      /* c8 ignore start */\n    } catch (ex) {\n      // should be impossible\n      this.regexp = false\n    }\n    /* c8 ignore stop */\n    return this.regexp\n  }\n\n  slashSplit(p: string) {\n    // if p starts with // on windows, we preserve that\n    // so that UNC paths aren't broken.  Otherwise, any number of\n    // / characters are coalesced into one, unless\n    // preserveMultipleSlashes is set to true.\n    if (this.preserveMultipleSlashes) {\n      return p.split('/')\n    } else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n      // add an extra '' for the one we lose\n      return ['', ...p.split(/\\/+/)]\n    } else {\n      return p.split(/\\/+/)\n    }\n  }\n\n  match(f: string, partial = this.partial) {\n    this.debug('match', f, this.pattern)\n    // short-circuit in the case of busted things.\n    // comments, etc.\n    if (this.comment) {\n      return false\n    }\n    if (this.empty) {\n      return f === ''\n    }\n\n    if (f === '/' && partial) {\n      return true\n    }\n\n    const options = this.options\n\n    // windows: need to use /, not \\\n    if (this.isWindows) {\n      f = f.split('\\\\').join('/')\n    }\n\n    // treat the test path as a set of pathparts.\n    const ff = this.slashSplit(f)\n    this.debug(this.pattern, 'split', ff)\n\n    // just ONE of the pattern sets in this.set needs to match\n    // in order for it to be valid.  If negating, then just one\n    // match means that we have failed.\n    // Either way, return on the first hit.\n\n    const set = this.set\n    this.debug(this.pattern, 'set', set)\n\n    // Find the basename of the path by looking for the last non-empty segment\n    let filename: string = ff[ff.length - 1]\n    if (!filename) {\n      for (let i = ff.length - 2; !filename && i >= 0; i--) {\n        filename = ff[i]\n      }\n    }\n\n    for (let i = 0; i < set.length; i++) {\n      const pattern = set[i]\n      let file = ff\n      if (options.matchBase && pattern.length === 1) {\n        file = [filename]\n      }\n      const hit = this.matchOne(file, pattern, partial)\n      if (hit) {\n        if (options.flipNegate) {\n          return true\n        }\n        return !this.negate\n      }\n    }\n\n    // didn't get any hits.  this is success if it's a negative\n    // pattern, failure otherwise.\n    if (options.flipNegate) {\n      return false\n    }\n    return this.negate\n  }\n\n  static defaults(def: MinimatchOptions) {\n    return minimatch.defaults(def).Minimatch\n  }\n}\n/* c8 ignore start */\nexport { AST } from './ast.js'\nexport { escape } from './escape.js'\nexport { unescape } from './unescape.js'\n/* c8 ignore stop */\nminimatch.AST = AST\nminimatch.Minimatch = Minimatch\nminimatch.escape = escape\nminimatch.unescape = unescape\n"]}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/commonjs/package.json b/node_modules/minimatch/dist/commonjs/package.json
new file mode 100644
index 00000000..5bbefffb
--- /dev/null
+++ b/node_modules/minimatch/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
diff --git a/node_modules/minimatch/dist/commonjs/unescape.d.ts b/node_modules/minimatch/dist/commonjs/unescape.d.ts
new file mode 100644
index 00000000..2a36f873
--- /dev/null
+++ b/node_modules/minimatch/dist/commonjs/unescape.d.ts
@@ -0,0 +1,17 @@
+import { MinimatchOptions } from './index.js';
+/**
+ * Un-escape a string that has been escaped with {@link escape}.
+ *
+ * If the {@link windowsPathsNoEscape} option is used, then square-brace
+ * escapes are removed, but not backslash escapes.  For example, it will turn
+ * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`,
+ * becuase `\` is a path separator in `windowsPathsNoEscape` mode.
+ *
+ * When `windowsPathsNoEscape` is not set, then both brace escapes and
+ * backslash escapes are removed.
+ *
+ * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
+ * or unescaped.
+ */
+export declare const unescape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
+//# sourceMappingURL=unescape.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/commonjs/unescape.d.ts.map b/node_modules/minimatch/dist/commonjs/unescape.d.ts.map
new file mode 100644
index 00000000..e268215b
--- /dev/null
+++ b/node_modules/minimatch/dist/commonjs/unescape.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"unescape.d.ts","sourceRoot":"","sources":["../../src/unescape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,QAAQ,MAChB,MAAM,8BAGN,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,WAKlD,CAAA"}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/commonjs/unescape.js b/node_modules/minimatch/dist/commonjs/unescape.js
new file mode 100644
index 00000000..47c36bce
--- /dev/null
+++ b/node_modules/minimatch/dist/commonjs/unescape.js
@@ -0,0 +1,24 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.unescape = void 0;
+/**
+ * Un-escape a string that has been escaped with {@link escape}.
+ *
+ * If the {@link windowsPathsNoEscape} option is used, then square-brace
+ * escapes are removed, but not backslash escapes.  For example, it will turn
+ * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`,
+ * becuase `\` is a path separator in `windowsPathsNoEscape` mode.
+ *
+ * When `windowsPathsNoEscape` is not set, then both brace escapes and
+ * backslash escapes are removed.
+ *
+ * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
+ * or unescaped.
+ */
+const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {
+    return windowsPathsNoEscape
+        ? s.replace(/\[([^\/\\])\]/g, '$1')
+        : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, '$1$2').replace(/\\([^\/])/g, '$1');
+};
+exports.unescape = unescape;
+//# sourceMappingURL=unescape.js.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/commonjs/unescape.js.map b/node_modules/minimatch/dist/commonjs/unescape.js.map
new file mode 100644
index 00000000..353d3aa0
--- /dev/null
+++ b/node_modules/minimatch/dist/commonjs/unescape.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unescape.js","sourceRoot":"","sources":["../../src/unescape.ts"],"names":[],"mappings":";;;AACA;;;;;;;;;;;;;GAaG;AACI,MAAM,QAAQ,GAAG,CACtB,CAAS,EACT,EACE,oBAAoB,GAAG,KAAK,MACsB,EAAE,EACtD,EAAE;IACF,OAAO,oBAAoB;QACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QACnC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAChF,CAAC,CAAA;AATY,QAAA,QAAQ,YASpB","sourcesContent":["import { MinimatchOptions } from './index.js'\n/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes.  For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick = {}\n) => {\n  return windowsPathsNoEscape\n    ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n    : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1')\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts b/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts
new file mode 100644
index 00000000..8e318b23
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts
@@ -0,0 +1,2 @@
+export declare const assertValidPattern: (pattern: any) => void;
+//# sourceMappingURL=assert-valid-pattern.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map b/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map
new file mode 100644
index 00000000..c61c0310
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"assert-valid-pattern.d.ts","sourceRoot":"","sources":["../../src/assert-valid-pattern.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAUlD,CAAA"}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/assert-valid-pattern.js b/node_modules/minimatch/dist/esm/assert-valid-pattern.js
new file mode 100644
index 00000000..7b534fc3
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/assert-valid-pattern.js
@@ -0,0 +1,10 @@
+const MAX_PATTERN_LENGTH = 1024 * 64;
+export const assertValidPattern = (pattern) => {
+    if (typeof pattern !== 'string') {
+        throw new TypeError('invalid pattern');
+    }
+    if (pattern.length > MAX_PATTERN_LENGTH) {
+        throw new TypeError('pattern is too long');
+    }
+};
+//# sourceMappingURL=assert-valid-pattern.js.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map b/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map
new file mode 100644
index 00000000..4f4bba85
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"assert-valid-pattern.js","sourceRoot":"","sources":["../../src/assert-valid-pattern.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAA2B,CACxD,OAAY,EACe,EAAE;IAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACxC,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC,CAAA","sourcesContent":["const MAX_PATTERN_LENGTH = 1024 * 64\nexport const assertValidPattern: (pattern: any) => void = (\n  pattern: any\n): asserts pattern is string => {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/ast.d.ts b/node_modules/minimatch/dist/esm/ast.d.ts
new file mode 100644
index 00000000..b8c1e544
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/ast.d.ts
@@ -0,0 +1,20 @@
+import { MinimatchOptions, MMRegExp } from './index.js';
+export type ExtglobType = '!' | '?' | '+' | '*' | '@';
+export declare class AST {
+    #private;
+    type: ExtglobType | null;
+    constructor(type: ExtglobType | null, parent?: AST, options?: MinimatchOptions);
+    get hasMagic(): boolean | undefined;
+    toString(): string;
+    push(...parts: (string | AST)[]): void;
+    toJSON(): any[];
+    isStart(): boolean;
+    isEnd(): boolean;
+    copyIn(part: AST | string): void;
+    clone(parent: AST): AST;
+    static fromGlob(pattern: string, options?: MinimatchOptions): AST;
+    toMMPattern(): MMRegExp | string;
+    get options(): MinimatchOptions;
+    toRegExpSource(allowDot?: boolean): [re: string, body: string, hasMagic: boolean, uflag: boolean];
+}
+//# sourceMappingURL=ast.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/ast.d.ts.map b/node_modules/minimatch/dist/esm/ast.d.ts.map
new file mode 100644
index 00000000..9e7bfb9a
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/ast.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAwCvD,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAkCrD,qBAAa,GAAG;;IACd,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;gBAiBtB,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,GAAE,gBAAqB;IAahC,IAAI,QAAQ,IAAI,OAAO,GAAG,SAAS,CAUlC;IAGD,QAAQ,IAAI,MAAM;IA+ClB,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;IAY/B,MAAM;IAgBN,OAAO,IAAI,OAAO;IAgBlB,KAAK,IAAI,OAAO;IAYhB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;IAKzB,KAAK,CAAC,MAAM,EAAE,GAAG;IAsIjB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAQ/D,WAAW,IAAI,QAAQ,GAAG,MAAM;IA2BhC,IAAI,OAAO,qBAEV;IAuED,cAAc,CACZ,QAAQ,CAAC,EAAE,OAAO,GACjB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;CAiMjE"}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/ast.js b/node_modules/minimatch/dist/esm/ast.js
new file mode 100644
index 00000000..2d2bced6
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/ast.js
@@ -0,0 +1,588 @@
+// parse a single path portion
+import { parseClass } from './brace-expressions.js';
+import { unescape } from './unescape.js';
+const types = new Set(['!', '?', '+', '*', '@']);
+const isExtglobType = (c) => types.has(c);
+// Patterns that get prepended to bind to the start of either the
+// entire string, or just a single path portion, to prevent dots
+// and/or traversal patterns, when needed.
+// Exts don't need the ^ or / bit, because the root binds that already.
+const startNoTraversal = '(?!(?:^|/)\\.\\.?(?:$|/))';
+const startNoDot = '(?!\\.)';
+// characters that indicate a start of pattern needs the "no dots" bit,
+// because a dot *might* be matched. ( is not in the list, because in
+// the case of a child extglob, it will handle the prevention itself.
+const addPatternStart = new Set(['[', '.']);
+// cases where traversal is A-OK, no dot prevention needed
+const justDots = new Set(['..', '.']);
+const reSpecials = new Set('().*{}+?[]^$\\!');
+const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
+// any single thing other than /
+const qmark = '[^/]';
+// * => any number of characters
+const star = qmark + '*?';
+// use + when we need to ensure that *something* matches, because the * is
+// the only thing in the path portion.
+const starNoEmpty = qmark + '+?';
+// remove the \ chars that we added if we end up doing a nonmagic compare
+// const deslash = (s: string) => s.replace(/\\(.)/g, '$1')
+export class AST {
+    type;
+    #root;
+    #hasMagic;
+    #uflag = false;
+    #parts = [];
+    #parent;
+    #parentIndex;
+    #negs;
+    #filledNegs = false;
+    #options;
+    #toString;
+    // set to true if it's an extglob with no children
+    // (which really means one child of '')
+    #emptyExt = false;
+    constructor(type, parent, options = {}) {
+        this.type = type;
+        // extglobs are inherently magical
+        if (type)
+            this.#hasMagic = true;
+        this.#parent = parent;
+        this.#root = this.#parent ? this.#parent.#root : this;
+        this.#options = this.#root === this ? options : this.#root.#options;
+        this.#negs = this.#root === this ? [] : this.#root.#negs;
+        if (type === '!' && !this.#root.#filledNegs)
+            this.#negs.push(this);
+        this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
+    }
+    get hasMagic() {
+        /* c8 ignore start */
+        if (this.#hasMagic !== undefined)
+            return this.#hasMagic;
+        /* c8 ignore stop */
+        for (const p of this.#parts) {
+            if (typeof p === 'string')
+                continue;
+            if (p.type || p.hasMagic)
+                return (this.#hasMagic = true);
+        }
+        // note: will be undefined until we generate the regexp src and find out
+        return this.#hasMagic;
+    }
+    // reconstructs the pattern
+    toString() {
+        if (this.#toString !== undefined)
+            return this.#toString;
+        if (!this.type) {
+            return (this.#toString = this.#parts.map(p => String(p)).join(''));
+        }
+        else {
+            return (this.#toString =
+                this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');
+        }
+    }
+    #fillNegs() {
+        /* c8 ignore start */
+        if (this !== this.#root)
+            throw new Error('should only call on root');
+        if (this.#filledNegs)
+            return this;
+        /* c8 ignore stop */
+        // call toString() once to fill this out
+        this.toString();
+        this.#filledNegs = true;
+        let n;
+        while ((n = this.#negs.pop())) {
+            if (n.type !== '!')
+                continue;
+            // walk up the tree, appending everthing that comes AFTER parentIndex
+            let p = n;
+            let pp = p.#parent;
+            while (pp) {
+                for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
+                    for (const part of n.#parts) {
+                        /* c8 ignore start */
+                        if (typeof part === 'string') {
+                            throw new Error('string part in extglob AST??');
+                        }
+                        /* c8 ignore stop */
+                        part.copyIn(pp.#parts[i]);
+                    }
+                }
+                p = pp;
+                pp = p.#parent;
+            }
+        }
+        return this;
+    }
+    push(...parts) {
+        for (const p of parts) {
+            if (p === '')
+                continue;
+            /* c8 ignore start */
+            if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {
+                throw new Error('invalid part: ' + p);
+            }
+            /* c8 ignore stop */
+            this.#parts.push(p);
+        }
+    }
+    toJSON() {
+        const ret = this.type === null
+            ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))
+            : [this.type, ...this.#parts.map(p => p.toJSON())];
+        if (this.isStart() && !this.type)
+            ret.unshift([]);
+        if (this.isEnd() &&
+            (this === this.#root ||
+                (this.#root.#filledNegs && this.#parent?.type === '!'))) {
+            ret.push({});
+        }
+        return ret;
+    }
+    isStart() {
+        if (this.#root === this)
+            return true;
+        // if (this.type) return !!this.#parent?.isStart()
+        if (!this.#parent?.isStart())
+            return false;
+        if (this.#parentIndex === 0)
+            return true;
+        // if everything AHEAD of this is a negation, then it's still the "start"
+        const p = this.#parent;
+        for (let i = 0; i < this.#parentIndex; i++) {
+            const pp = p.#parts[i];
+            if (!(pp instanceof AST && pp.type === '!')) {
+                return false;
+            }
+        }
+        return true;
+    }
+    isEnd() {
+        if (this.#root === this)
+            return true;
+        if (this.#parent?.type === '!')
+            return true;
+        if (!this.#parent?.isEnd())
+            return false;
+        if (!this.type)
+            return this.#parent?.isEnd();
+        // if not root, it'll always have a parent
+        /* c8 ignore start */
+        const pl = this.#parent ? this.#parent.#parts.length : 0;
+        /* c8 ignore stop */
+        return this.#parentIndex === pl - 1;
+    }
+    copyIn(part) {
+        if (typeof part === 'string')
+            this.push(part);
+        else
+            this.push(part.clone(this));
+    }
+    clone(parent) {
+        const c = new AST(this.type, parent);
+        for (const p of this.#parts) {
+            c.copyIn(p);
+        }
+        return c;
+    }
+    static #parseAST(str, ast, pos, opt) {
+        let escaping = false;
+        let inBrace = false;
+        let braceStart = -1;
+        let braceNeg = false;
+        if (ast.type === null) {
+            // outside of a extglob, append until we find a start
+            let i = pos;
+            let acc = '';
+            while (i < str.length) {
+                const c = str.charAt(i++);
+                // still accumulate escapes at this point, but we do ignore
+                // starts that are escaped
+                if (escaping || c === '\\') {
+                    escaping = !escaping;
+                    acc += c;
+                    continue;
+                }
+                if (inBrace) {
+                    if (i === braceStart + 1) {
+                        if (c === '^' || c === '!') {
+                            braceNeg = true;
+                        }
+                    }
+                    else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
+                        inBrace = false;
+                    }
+                    acc += c;
+                    continue;
+                }
+                else if (c === '[') {
+                    inBrace = true;
+                    braceStart = i;
+                    braceNeg = false;
+                    acc += c;
+                    continue;
+                }
+                if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {
+                    ast.push(acc);
+                    acc = '';
+                    const ext = new AST(c, ast);
+                    i = AST.#parseAST(str, ext, i, opt);
+                    ast.push(ext);
+                    continue;
+                }
+                acc += c;
+            }
+            ast.push(acc);
+            return i;
+        }
+        // some kind of extglob, pos is at the (
+        // find the next | or )
+        let i = pos + 1;
+        let part = new AST(null, ast);
+        const parts = [];
+        let acc = '';
+        while (i < str.length) {
+            const c = str.charAt(i++);
+            // still accumulate escapes at this point, but we do ignore
+            // starts that are escaped
+            if (escaping || c === '\\') {
+                escaping = !escaping;
+                acc += c;
+                continue;
+            }
+            if (inBrace) {
+                if (i === braceStart + 1) {
+                    if (c === '^' || c === '!') {
+                        braceNeg = true;
+                    }
+                }
+                else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
+                    inBrace = false;
+                }
+                acc += c;
+                continue;
+            }
+            else if (c === '[') {
+                inBrace = true;
+                braceStart = i;
+                braceNeg = false;
+                acc += c;
+                continue;
+            }
+            if (isExtglobType(c) && str.charAt(i) === '(') {
+                part.push(acc);
+                acc = '';
+                const ext = new AST(c, part);
+                part.push(ext);
+                i = AST.#parseAST(str, ext, i, opt);
+                continue;
+            }
+            if (c === '|') {
+                part.push(acc);
+                acc = '';
+                parts.push(part);
+                part = new AST(null, ast);
+                continue;
+            }
+            if (c === ')') {
+                if (acc === '' && ast.#parts.length === 0) {
+                    ast.#emptyExt = true;
+                }
+                part.push(acc);
+                acc = '';
+                ast.push(...parts, part);
+                return i;
+            }
+            acc += c;
+        }
+        // unfinished extglob
+        // if we got here, it was a malformed extglob! not an extglob, but
+        // maybe something else in there.
+        ast.type = null;
+        ast.#hasMagic = undefined;
+        ast.#parts = [str.substring(pos - 1)];
+        return i;
+    }
+    static fromGlob(pattern, options = {}) {
+        const ast = new AST(null, undefined, options);
+        AST.#parseAST(pattern, ast, 0, options);
+        return ast;
+    }
+    // returns the regular expression if there's magic, or the unescaped
+    // string if not.
+    toMMPattern() {
+        // should only be called on root
+        /* c8 ignore start */
+        if (this !== this.#root)
+            return this.#root.toMMPattern();
+        /* c8 ignore stop */
+        const glob = this.toString();
+        const [re, body, hasMagic, uflag] = this.toRegExpSource();
+        // if we're in nocase mode, and not nocaseMagicOnly, then we do
+        // still need a regular expression if we have to case-insensitively
+        // match capital/lowercase characters.
+        const anyMagic = hasMagic ||
+            this.#hasMagic ||
+            (this.#options.nocase &&
+                !this.#options.nocaseMagicOnly &&
+                glob.toUpperCase() !== glob.toLowerCase());
+        if (!anyMagic) {
+            return body;
+        }
+        const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');
+        return Object.assign(new RegExp(`^${re}$`, flags), {
+            _src: re,
+            _glob: glob,
+        });
+    }
+    get options() {
+        return this.#options;
+    }
+    // returns the string match, the regexp source, whether there's magic
+    // in the regexp (so a regular expression is required) and whether or
+    // not the uflag is needed for the regular expression (for posix classes)
+    // TODO: instead of injecting the start/end at this point, just return
+    // the BODY of the regexp, along with the start/end portions suitable
+    // for binding the start/end in either a joined full-path makeRe context
+    // (where we bind to (^|/), or a standalone matchPart context (where
+    // we bind to ^, and not /).  Otherwise slashes get duped!
+    //
+    // In part-matching mode, the start is:
+    // - if not isStart: nothing
+    // - if traversal possible, but not allowed: ^(?!\.\.?$)
+    // - if dots allowed or not possible: ^
+    // - if dots possible and not allowed: ^(?!\.)
+    // end is:
+    // - if not isEnd(): nothing
+    // - else: $
+    //
+    // In full-path matching mode, we put the slash at the START of the
+    // pattern, so start is:
+    // - if first pattern: same as part-matching mode
+    // - if not isStart(): nothing
+    // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
+    // - if dots allowed or not possible: /
+    // - if dots possible and not allowed: /(?!\.)
+    // end is:
+    // - if last pattern, same as part-matching mode
+    // - else nothing
+    //
+    // Always put the (?:$|/) on negated tails, though, because that has to be
+    // there to bind the end of the negated pattern portion, and it's easier to
+    // just stick it in now rather than try to inject it later in the middle of
+    // the pattern.
+    //
+    // We can just always return the same end, and leave it up to the caller
+    // to know whether it's going to be used joined or in parts.
+    // And, if the start is adjusted slightly, can do the same there:
+    // - if not isStart: nothing
+    // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
+    // - if dots allowed or not possible: (?:/|^)
+    // - if dots possible and not allowed: (?:/|^)(?!\.)
+    //
+    // But it's better to have a simpler binding without a conditional, for
+    // performance, so probably better to return both start options.
+    //
+    // Then the caller just ignores the end if it's not the first pattern,
+    // and the start always gets applied.
+    //
+    // But that's always going to be $ if it's the ending pattern, or nothing,
+    // so the caller can just attach $ at the end of the pattern when building.
+    //
+    // So the todo is:
+    // - better detect what kind of start is needed
+    // - return both flavors of starting pattern
+    // - attach $ at the end of the pattern when creating the actual RegExp
+    //
+    // Ah, but wait, no, that all only applies to the root when the first pattern
+    // is not an extglob. If the first pattern IS an extglob, then we need all
+    // that dot prevention biz to live in the extglob portions, because eg
+    // +(*|.x*) can match .xy but not .yx.
+    //
+    // So, return the two flavors if it's #root and the first child is not an
+    // AST, otherwise leave it to the child AST to handle it, and there,
+    // use the (?:^|/) style of start binding.
+    //
+    // Even simplified further:
+    // - Since the start for a join is eg /(?!\.) and the start for a part
+    // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
+    // or start or whatever) and prepend ^ or / at the Regexp construction.
+    toRegExpSource(allowDot) {
+        const dot = allowDot ?? !!this.#options.dot;
+        if (this.#root === this)
+            this.#fillNegs();
+        if (!this.type) {
+            const noEmpty = this.isStart() && this.isEnd();
+            const src = this.#parts
+                .map(p => {
+                const [re, _, hasMagic, uflag] = typeof p === 'string'
+                    ? AST.#parseGlob(p, this.#hasMagic, noEmpty)
+                    : p.toRegExpSource(allowDot);
+                this.#hasMagic = this.#hasMagic || hasMagic;
+                this.#uflag = this.#uflag || uflag;
+                return re;
+            })
+                .join('');
+            let start = '';
+            if (this.isStart()) {
+                if (typeof this.#parts[0] === 'string') {
+                    // this is the string that will match the start of the pattern,
+                    // so we need to protect against dots and such.
+                    // '.' and '..' cannot match unless the pattern is that exactly,
+                    // even if it starts with . or dot:true is set.
+                    const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
+                    if (!dotTravAllowed) {
+                        const aps = addPatternStart;
+                        // check if we have a possibility of matching . or ..,
+                        // and prevent that.
+                        const needNoTrav = 
+                        // dots are allowed, and the pattern starts with [ or .
+                        (dot && aps.has(src.charAt(0))) ||
+                            // the pattern starts with \., and then [ or .
+                            (src.startsWith('\\.') && aps.has(src.charAt(2))) ||
+                            // the pattern starts with \.\., and then [ or .
+                            (src.startsWith('\\.\\.') && aps.has(src.charAt(4)));
+                        // no need to prevent dots if it can't match a dot, or if a
+                        // sub-pattern will be preventing it anyway.
+                        const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
+                        start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : '';
+                    }
+                }
+            }
+            // append the "end of path portion" pattern to negation tails
+            let end = '';
+            if (this.isEnd() &&
+                this.#root.#filledNegs &&
+                this.#parent?.type === '!') {
+                end = '(?:$|\\/)';
+            }
+            const final = start + src + end;
+            return [
+                final,
+                unescape(src),
+                (this.#hasMagic = !!this.#hasMagic),
+                this.#uflag,
+            ];
+        }
+        // We need to calculate the body *twice* if it's a repeat pattern
+        // at the start, once in nodot mode, then again in dot mode, so a
+        // pattern like *(?) can match 'x.y'
+        const repeated = this.type === '*' || this.type === '+';
+        // some kind of extglob
+        const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
+        let body = this.#partsToRegExp(dot);
+        if (this.isStart() && this.isEnd() && !body && this.type !== '!') {
+            // invalid extglob, has to at least be *something* present, if it's
+            // the entire path portion.
+            const s = this.toString();
+            this.#parts = [s];
+            this.type = null;
+            this.#hasMagic = undefined;
+            return [s, unescape(this.toString()), false, false];
+        }
+        // XXX abstract out this map method
+        let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot
+            ? ''
+            : this.#partsToRegExp(true);
+        if (bodyDotAllowed === body) {
+            bodyDotAllowed = '';
+        }
+        if (bodyDotAllowed) {
+            body = `(?:${body})(?:${bodyDotAllowed})*?`;
+        }
+        // an empty !() is exactly equivalent to a starNoEmpty
+        let final = '';
+        if (this.type === '!' && this.#emptyExt) {
+            final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;
+        }
+        else {
+            const close = this.type === '!'
+                ? // !() must match something,but !(x) can match ''
+                    '))' +
+                        (this.isStart() && !dot && !allowDot ? startNoDot : '') +
+                        star +
+                        ')'
+                : this.type === '@'
+                    ? ')'
+                    : this.type === '?'
+                        ? ')?'
+                        : this.type === '+' && bodyDotAllowed
+                            ? ')'
+                            : this.type === '*' && bodyDotAllowed
+                                ? `)?`
+                                : `)${this.type}`;
+            final = start + body + close;
+        }
+        return [
+            final,
+            unescape(body),
+            (this.#hasMagic = !!this.#hasMagic),
+            this.#uflag,
+        ];
+    }
+    #partsToRegExp(dot) {
+        return this.#parts
+            .map(p => {
+            // extglob ASTs should only contain parent ASTs
+            /* c8 ignore start */
+            if (typeof p === 'string') {
+                throw new Error('string type in extglob ast??');
+            }
+            /* c8 ignore stop */
+            // can ignore hasMagic, because extglobs are already always magic
+            const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
+            this.#uflag = this.#uflag || uflag;
+            return re;
+        })
+            .filter(p => !(this.isStart() && this.isEnd()) || !!p)
+            .join('|');
+    }
+    static #parseGlob(glob, hasMagic, noEmpty = false) {
+        let escaping = false;
+        let re = '';
+        let uflag = false;
+        for (let i = 0; i < glob.length; i++) {
+            const c = glob.charAt(i);
+            if (escaping) {
+                escaping = false;
+                re += (reSpecials.has(c) ? '\\' : '') + c;
+                continue;
+            }
+            if (c === '\\') {
+                if (i === glob.length - 1) {
+                    re += '\\\\';
+                }
+                else {
+                    escaping = true;
+                }
+                continue;
+            }
+            if (c === '[') {
+                const [src, needUflag, consumed, magic] = parseClass(glob, i);
+                if (consumed) {
+                    re += src;
+                    uflag = uflag || needUflag;
+                    i += consumed - 1;
+                    hasMagic = hasMagic || magic;
+                    continue;
+                }
+            }
+            if (c === '*') {
+                if (noEmpty && glob === '*')
+                    re += starNoEmpty;
+                else
+                    re += star;
+                hasMagic = true;
+                continue;
+            }
+            if (c === '?') {
+                re += qmark;
+                hasMagic = true;
+                continue;
+            }
+            re += regExpEscape(c);
+        }
+        return [re, unescape(glob), !!hasMagic, uflag];
+    }
+}
+//# sourceMappingURL=ast.js.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/ast.js.map b/node_modules/minimatch/dist/esm/ast.js.map
new file mode 100644
index 00000000..d37c8c46
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/ast.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAwCxC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAC7D,MAAM,aAAa,GAAG,CAAC,CAAS,EAAoB,EAAE,CACpD,KAAK,CAAC,GAAG,CAAC,CAAgB,CAAC,CAAA;AAE7B,iEAAiE;AACjE,gEAAgE;AAChE,0CAA0C;AAC1C,uEAAuE;AACvE,MAAM,gBAAgB,GAAG,2BAA2B,CAAA;AACpD,MAAM,UAAU,GAAG,SAAS,CAAA;AAE5B,uEAAuE;AACvE,qEAAqE;AACrE,qEAAqE;AACrE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAC3C,0DAA0D;AAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;AACrC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAC7C,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CACjC,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAA;AAE/C,gCAAgC;AAChC,MAAM,KAAK,GAAG,MAAM,CAAA;AAEpB,gCAAgC;AAChC,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAA;AACzB,0EAA0E;AAC1E,sCAAsC;AACtC,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,CAAA;AAEhC,yEAAyE;AACzE,2DAA2D;AAE3D,MAAM,OAAO,GAAG;IACd,IAAI,CAAoB;IACf,KAAK,CAAK;IAEnB,SAAS,CAAU;IACnB,MAAM,GAAY,KAAK,CAAA;IACvB,MAAM,GAAqB,EAAE,CAAA;IACpB,OAAO,CAAM;IACb,YAAY,CAAQ;IAC7B,KAAK,CAAO;IACZ,WAAW,GAAY,KAAK,CAAA;IAC5B,QAAQ,CAAkB;IAC1B,SAAS,CAAS;IAClB,kDAAkD;IAClD,uCAAuC;IACvC,SAAS,GAAY,KAAK,CAAA;IAE1B,YACE,IAAwB,EACxB,MAAY,EACZ,UAA4B,EAAE;QAE9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,kCAAkC;QAClC,IAAI,IAAI;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAA;QACnE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;QACxD,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,QAAQ;QACV,qBAAqB;QACrB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAA;QACvD,oBAAoB;QACpB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,SAAQ;YACnC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;QAC1D,CAAC;QACD,wEAAwE;QACxE,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,2BAA2B;IAC3B,QAAQ;QACN,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAA;QACvD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,SAAS;gBACpB,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;IAED,SAAS;QACP,qBAAqB;QACrB,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACpE,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAA;QACjC,oBAAoB;QAEpB,wCAAwC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAkB,CAAA;QACtB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;gBAAE,SAAQ;YAC5B,qEAAqE;YACrE,IAAI,CAAC,GAAoB,CAAC,CAAA;YAC1B,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAA;YAClB,OAAO,EAAE,EAAE,CAAC;gBACV,KACE,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,EAC1B,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAChC,CAAC,EAAE,EACH,CAAC;oBACD,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;wBAC5B,qBAAqB;wBACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC7B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;wBACjD,CAAC;wBACD,oBAAoB;wBACpB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC3B,CAAC;gBACH,CAAC;gBACD,CAAC,GAAG,EAAE,CAAA;gBACN,EAAE,GAAG,CAAC,CAAC,OAAO,CAAA;YAChB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,GAAG,KAAuB;QAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,EAAE;gBAAE,SAAQ;YACtB,qBAAqB;YACrB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;YACvC,CAAC;YACD,oBAAoB;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,GAAG,GACP,IAAI,CAAC,IAAI,KAAK,IAAI;YAChB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAC/D,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACjD,IACE,IAAI,CAAC,KAAK,EAAE;YACZ,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;gBAClB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,EACzD,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QACpC,kDAAkD;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;YAAE,OAAO,KAAK,CAAA;QAC1C,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACxC,yEAAyE;QACzE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAA;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACtB,IAAI,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QACpC,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;YAAE,OAAO,KAAK,CAAA;QACxC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAA;QAC5C,0CAA0C;QAC1C,qBAAqB;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,oBAAoB;QACpB,OAAO,IAAI,CAAC,YAAY,KAAK,EAAE,GAAG,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,CAAC,IAAkB;QACvB,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;YACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,MAAW;QACf,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACpC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACb,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,CAAC,SAAS,CACd,GAAW,EACX,GAAQ,EACR,GAAW,EACX,GAAqB;QAErB,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAA;QACnB,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACtB,qDAAqD;YACrD,IAAI,CAAC,GAAG,GAAG,CAAA;YACX,IAAI,GAAG,GAAG,EAAE,CAAA;YACZ,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;gBACzB,2DAA2D;gBAC3D,0BAA0B;gBAC1B,IAAI,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC3B,QAAQ,GAAG,CAAC,QAAQ,CAAA;oBACpB,GAAG,IAAI,CAAC,CAAA;oBACR,SAAQ;gBACV,CAAC;gBAED,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;wBACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;4BAC3B,QAAQ,GAAG,IAAI,CAAA;wBACjB,CAAC;oBACH,CAAC;yBAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;wBAC5D,OAAO,GAAG,KAAK,CAAA;oBACjB,CAAC;oBACD,GAAG,IAAI,CAAC,CAAA;oBACR,SAAQ;gBACV,CAAC;qBAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;oBACrB,OAAO,GAAG,IAAI,CAAA;oBACd,UAAU,GAAG,CAAC,CAAA;oBACd,QAAQ,GAAG,KAAK,CAAA;oBAChB,GAAG,IAAI,CAAC,CAAA;oBACR,SAAQ;gBACV,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC5D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBACb,GAAG,GAAG,EAAE,CAAA;oBACR,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;oBAC3B,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;oBACnC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBACb,SAAQ;gBACV,CAAC;gBACD,GAAG,IAAI,CAAC,CAAA;YACV,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACb,OAAO,CAAC,CAAA;QACV,CAAC;QAED,wCAAwC;QACxC,uBAAuB;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;QACf,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAU,EAAE,CAAA;QACvB,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;YACzB,2DAA2D;YAC3D,0BAA0B;YAC1B,IAAI,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3B,QAAQ,GAAG,CAAC,QAAQ,CAAA;gBACpB,GAAG,IAAI,CAAC,CAAA;gBACR,SAAQ;YACV,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;wBAC3B,QAAQ,GAAG,IAAI,CAAA;oBACjB,CAAC;gBACH,CAAC;qBAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;oBAC5D,OAAO,GAAG,KAAK,CAAA;gBACjB,CAAC;gBACD,GAAG,IAAI,CAAC,CAAA;gBACR,SAAQ;YACV,CAAC;iBAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrB,OAAO,GAAG,IAAI,CAAA;gBACd,UAAU,GAAG,CAAC,CAAA;gBACd,QAAQ,GAAG,KAAK,CAAA;gBAChB,GAAG,IAAI,CAAC,CAAA;gBACR,SAAQ;YACV,CAAC;YAED,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACd,GAAG,GAAG,EAAE,CAAA;gBACR,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;gBAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACd,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;gBACnC,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACd,GAAG,GAAG,EAAE,CAAA;gBACR,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAChB,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;gBACzB,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAA;gBACtB,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACd,GAAG,GAAG,EAAE,CAAA;gBACR,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAA;gBACxB,OAAO,CAAC,CAAA;YACV,CAAC;YACD,GAAG,IAAI,CAAC,CAAA;QACV,CAAC;QAED,qBAAqB;QACrB,kEAAkE;QAClE,iCAAiC;QACjC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QACf,GAAG,CAAC,SAAS,GAAG,SAAS,CAAA;QACzB,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACrC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,OAAe,EAAE,UAA4B,EAAE;QAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAC7C,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;QACvC,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,oEAAoE;IACpE,iBAAiB;IACjB,WAAW;QACT,gCAAgC;QAChC,qBAAqB;QACrB,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QACxD,oBAAoB;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC5B,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QACzD,+DAA+D;QAC/D,mEAAmE;QACnE,sCAAsC;QACtC,MAAM,QAAQ,GACZ,QAAQ;YACR,IAAI,CAAC,SAAS;YACd,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;gBACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe;gBAC9B,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACpE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE;YACjD,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,qEAAqE;IACrE,qEAAqE;IACrE,yEAAyE;IACzE,sEAAsE;IACtE,qEAAqE;IACrE,wEAAwE;IACxE,oEAAoE;IACpE,0DAA0D;IAC1D,EAAE;IACF,uCAAuC;IACvC,4BAA4B;IAC5B,wDAAwD;IACxD,uCAAuC;IACvC,8CAA8C;IAC9C,UAAU;IACV,4BAA4B;IAC5B,YAAY;IACZ,EAAE;IACF,mEAAmE;IACnE,wBAAwB;IACxB,iDAAiD;IACjD,8BAA8B;IAC9B,8DAA8D;IAC9D,uCAAuC;IACvC,8CAA8C;IAC9C,UAAU;IACV,gDAAgD;IAChD,iBAAiB;IACjB,EAAE;IACF,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,eAAe;IACf,EAAE;IACF,wEAAwE;IACxE,4DAA4D;IAC5D,iEAAiE;IACjE,4BAA4B;IAC5B,8DAA8D;IAC9D,6CAA6C;IAC7C,oDAAoD;IACpD,EAAE;IACF,uEAAuE;IACvE,gEAAgE;IAChE,EAAE;IACF,sEAAsE;IACtE,qCAAqC;IACrC,EAAE;IACF,0EAA0E;IAC1E,2EAA2E;IAC3E,EAAE;IACF,kBAAkB;IAClB,+CAA+C;IAC/C,4CAA4C;IAC5C,uEAAuE;IACvE,EAAE;IACF,6EAA6E;IAC7E,0EAA0E;IAC1E,sEAAsE;IACtE,sCAAsC;IACtC,EAAE;IACF,yEAAyE;IACzE,oEAAoE;IACpE,0CAA0C;IAC1C,EAAE;IACF,2BAA2B;IAC3B,sEAAsE;IACtE,qEAAqE;IACrE,uEAAuE;IACvE,cAAc,CACZ,QAAkB;QAElB,MAAM,GAAG,GAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAA;QAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,IAAI,CAAC,SAAS,EAAE,CAAA;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;iBACpB,GAAG,CAAC,CAAC,CAAC,EAAE;gBACP,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAC5B,OAAO,CAAC,KAAK,QAAQ;oBACnB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;oBAC5C,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;gBAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAA;gBAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAA;gBAClC,OAAO,EAAE,CAAA;YACX,CAAC,CAAC;iBACD,IAAI,CAAC,EAAE,CAAC,CAAA;YAEX,IAAI,KAAK,GAAG,EAAE,CAAA;YACd,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACvC,+DAA+D;oBAC/D,+CAA+C;oBAE/C,gEAAgE;oBAChE,+CAA+C;oBAC/C,MAAM,cAAc,GAClB,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,MAAM,GAAG,GAAG,eAAe,CAAA;wBAC3B,sDAAsD;wBACtD,oBAAoB;wBACpB,MAAM,UAAU;wBACd,uDAAuD;wBACvD,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC/B,8CAA8C;4BAC9C,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BACjD,gDAAgD;4BAChD,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;wBACtD,2DAA2D;wBAC3D,4CAA4C;wBAC5C,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;wBAE7D,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;oBACrE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,6DAA6D;YAC7D,IAAI,GAAG,GAAG,EAAE,CAAA;YACZ,IACE,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,CAAC,WAAW;gBACtB,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,GAAG,EAC1B,CAAC;gBACD,GAAG,GAAG,WAAW,CAAA;YACnB,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,CAAA;YAC/B,OAAO;gBACL,KAAK;gBACL,QAAQ,CAAC,GAAG,CAAC;gBACb,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnC,IAAI,CAAC,MAAM;aACZ,CAAA;QACH,CAAC;QAED,iEAAiE;QACjE,iEAAiE;QACjE,oCAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAA;QACvD,uBAAuB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAA;QACrD,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAEnC,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjE,mEAAmE;YACnE,2BAA2B;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;YAC1B,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QACrD,CAAC;QAED,mCAAmC;QACnC,IAAI,cAAc,GAChB,CAAC,QAAQ,IAAI,QAAQ,IAAI,GAAG,IAAI,CAAC,UAAU;YACzC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,cAAc,GAAG,EAAE,CAAA;QACrB,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,GAAG,MAAM,IAAI,OAAO,cAAc,KAAK,CAAA;QAC7C,CAAC;QAED,sDAAsD;QACtD,IAAI,KAAK,GAAG,EAAE,CAAA;QACd,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAA;QAClE,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,KAAK,GAAG;gBACf,CAAC,CAAC,iDAAiD;oBACjD,IAAI;wBACJ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvD,IAAI;wBACJ,GAAG;gBACL,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;oBACnB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;wBACnB,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,cAAc;4BACrC,CAAC,CAAC,GAAG;4BACL,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,cAAc;gCACrC,CAAC,CAAC,IAAI;gCACN,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;YACrB,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAA;QAC9B,CAAC;QACD,OAAO;YACL,KAAK;YACL,QAAQ,CAAC,IAAI,CAAC;YACd,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,MAAM;SACZ,CAAA;IACH,CAAC;IAED,cAAc,CAAC,GAAY;QACzB,OAAO,IAAI,CAAC,MAAM;aACf,GAAG,CAAC,CAAC,CAAC,EAAE;YACP,+CAA+C;YAC/C,qBAAqB;YACrB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACjD,CAAC;YACD,oBAAoB;YACpB,iEAAiE;YACjE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;YACvD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAA;YAClC,OAAO,EAAE,CAAA;QACX,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACrD,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IAED,MAAM,CAAC,UAAU,CACf,IAAY,EACZ,QAA6B,EAC7B,UAAmB,KAAK;QAExB,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,IAAI,EAAE,GAAG,EAAE,CAAA;QACX,IAAI,KAAK,GAAG,KAAK,CAAA;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,GAAG,KAAK,CAAA;gBAChB,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;gBACzC,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,EAAE,IAAI,MAAM,CAAA;gBACd,CAAC;qBAAM,CAAC;oBACN,QAAQ,GAAG,IAAI,CAAA;gBACjB,CAAC;gBACD,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC7D,IAAI,QAAQ,EAAE,CAAC;oBACb,EAAE,IAAI,GAAG,CAAA;oBACT,KAAK,GAAG,KAAK,IAAI,SAAS,CAAA;oBAC1B,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAA;oBACjB,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAA;oBAC5B,SAAQ;gBACV,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,IAAI,OAAO,IAAI,IAAI,KAAK,GAAG;oBAAE,EAAE,IAAI,WAAW,CAAA;;oBACzC,EAAE,IAAI,IAAI,CAAA;gBACf,QAAQ,GAAG,IAAI,CAAA;gBACf,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,EAAE,IAAI,KAAK,CAAA;gBACX,QAAQ,GAAG,IAAI,CAAA;gBACf,SAAQ;YACV,CAAC;YACD,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAChD,CAAC;CACF","sourcesContent":["// parse a single path portion\n\nimport { parseClass } from './brace-expressions.js'\nimport { MinimatchOptions, MMRegExp } from './index.js'\nimport { unescape } from './unescape.js'\n\n// classes [] are handled by the parseClass method\n// for positive extglobs, we sub-parse the contents, and combine,\n// with the appropriate regexp close.\n// for negative extglobs, we sub-parse the contents, but then\n// have to include the rest of the pattern, then the parent, etc.,\n// as the thing that cannot be because RegExp negative lookaheads\n// are different from globs.\n//\n// So for example:\n// a@(i|w!(x|y)z|j)b => ^a(i|w((!?(x|y)zb).*)z|j)b$\n//   1   2 3   4 5 6      1   2    3   46      5 6\n//\n// Assembling the extglob requires not just the negated patterns themselves,\n// but also anything following the negative patterns up to the boundary\n// of the current pattern, plus anything following in the parent pattern.\n//\n//\n// So, first, we parse the string into an AST of extglobs, without turning\n// anything into regexps yet.\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y']}, 'z'], ['j']]}, 'b']\n//\n// Then, for all the negative extglobs, we append whatever comes after in\n// each parent as their tail\n//\n// ['a', {@ [['i'], ['w', {!['x', 'y'], 'z', 'b'}, 'z'], ['j']]}, 'b']\n//\n// Lastly, we turn each of these pieces into a regexp, and join\n//\n//                                 v----- .* because there's more following,\n//                                 v    v  otherwise, .+ because it must be\n//                                 v    v  *something* there.\n// ['^a', {@ ['i', 'w(?:(!?(?:x|y).*zb$).*)z', 'j' ]}, 'b$']\n//   copy what follows into here--^^^^^\n// ['^a', '(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)', 'b$']\n// ['^a(?:i|w(?:(?!(?:x|y).*zb$).*)z|j)b$']\n\nexport type ExtglobType = '!' | '?' | '+' | '*' | '@'\nconst types = new Set(['!', '?', '+', '*', '@'])\nconst isExtglobType = (c: string): c is ExtglobType =>\n  types.has(c as ExtglobType)\n\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))'\nconst startNoDot = '(?!\\\\.)'\n\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.'])\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.'])\nconst reSpecials = new Set('().*{}+?[]^$\\\\!')\nconst regExpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// any single thing other than /\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark + '+?'\n\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\n\nexport class AST {\n  type: ExtglobType | null\n  readonly #root: AST\n\n  #hasMagic?: boolean\n  #uflag: boolean = false\n  #parts: (string | AST)[] = []\n  readonly #parent?: AST\n  readonly #parentIndex: number\n  #negs: AST[]\n  #filledNegs: boolean = false\n  #options: MinimatchOptions\n  #toString?: string\n  // set to true if it's an extglob with no children\n  // (which really means one child of '')\n  #emptyExt: boolean = false\n\n  constructor(\n    type: ExtglobType | null,\n    parent?: AST,\n    options: MinimatchOptions = {}\n  ) {\n    this.type = type\n    // extglobs are inherently magical\n    if (type) this.#hasMagic = true\n    this.#parent = parent\n    this.#root = this.#parent ? this.#parent.#root : this\n    this.#options = this.#root === this ? options : this.#root.#options\n    this.#negs = this.#root === this ? [] : this.#root.#negs\n    if (type === '!' && !this.#root.#filledNegs) this.#negs.push(this)\n    this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0\n  }\n\n  get hasMagic(): boolean | undefined {\n    /* c8 ignore start */\n    if (this.#hasMagic !== undefined) return this.#hasMagic\n    /* c8 ignore stop */\n    for (const p of this.#parts) {\n      if (typeof p === 'string') continue\n      if (p.type || p.hasMagic) return (this.#hasMagic = true)\n    }\n    // note: will be undefined until we generate the regexp src and find out\n    return this.#hasMagic\n  }\n\n  // reconstructs the pattern\n  toString(): string {\n    if (this.#toString !== undefined) return this.#toString\n    if (!this.type) {\n      return (this.#toString = this.#parts.map(p => String(p)).join(''))\n    } else {\n      return (this.#toString =\n        this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')')\n    }\n  }\n\n  #fillNegs() {\n    /* c8 ignore start */\n    if (this !== this.#root) throw new Error('should only call on root')\n    if (this.#filledNegs) return this\n    /* c8 ignore stop */\n\n    // call toString() once to fill this out\n    this.toString()\n    this.#filledNegs = true\n    let n: AST | undefined\n    while ((n = this.#negs.pop())) {\n      if (n.type !== '!') continue\n      // walk up the tree, appending everthing that comes AFTER parentIndex\n      let p: AST | undefined = n\n      let pp = p.#parent\n      while (pp) {\n        for (\n          let i = p.#parentIndex + 1;\n          !pp.type && i < pp.#parts.length;\n          i++\n        ) {\n          for (const part of n.#parts) {\n            /* c8 ignore start */\n            if (typeof part === 'string') {\n              throw new Error('string part in extglob AST??')\n            }\n            /* c8 ignore stop */\n            part.copyIn(pp.#parts[i])\n          }\n        }\n        p = pp\n        pp = p.#parent\n      }\n    }\n    return this\n  }\n\n  push(...parts: (string | AST)[]) {\n    for (const p of parts) {\n      if (p === '') continue\n      /* c8 ignore start */\n      if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {\n        throw new Error('invalid part: ' + p)\n      }\n      /* c8 ignore stop */\n      this.#parts.push(p)\n    }\n  }\n\n  toJSON() {\n    const ret: any[] =\n      this.type === null\n        ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))\n        : [this.type, ...this.#parts.map(p => (p as AST).toJSON())]\n    if (this.isStart() && !this.type) ret.unshift([])\n    if (\n      this.isEnd() &&\n      (this === this.#root ||\n        (this.#root.#filledNegs && this.#parent?.type === '!'))\n    ) {\n      ret.push({})\n    }\n    return ret\n  }\n\n  isStart(): boolean {\n    if (this.#root === this) return true\n    // if (this.type) return !!this.#parent?.isStart()\n    if (!this.#parent?.isStart()) return false\n    if (this.#parentIndex === 0) return true\n    // if everything AHEAD of this is a negation, then it's still the \"start\"\n    const p = this.#parent\n    for (let i = 0; i < this.#parentIndex; i++) {\n      const pp = p.#parts[i]\n      if (!(pp instanceof AST && pp.type === '!')) {\n        return false\n      }\n    }\n    return true\n  }\n\n  isEnd(): boolean {\n    if (this.#root === this) return true\n    if (this.#parent?.type === '!') return true\n    if (!this.#parent?.isEnd()) return false\n    if (!this.type) return this.#parent?.isEnd()\n    // if not root, it'll always have a parent\n    /* c8 ignore start */\n    const pl = this.#parent ? this.#parent.#parts.length : 0\n    /* c8 ignore stop */\n    return this.#parentIndex === pl - 1\n  }\n\n  copyIn(part: AST | string) {\n    if (typeof part === 'string') this.push(part)\n    else this.push(part.clone(this))\n  }\n\n  clone(parent: AST) {\n    const c = new AST(this.type, parent)\n    for (const p of this.#parts) {\n      c.copyIn(p)\n    }\n    return c\n  }\n\n  static #parseAST(\n    str: string,\n    ast: AST,\n    pos: number,\n    opt: MinimatchOptions\n  ): number {\n    let escaping = false\n    let inBrace = false\n    let braceStart = -1\n    let braceNeg = false\n    if (ast.type === null) {\n      // outside of a extglob, append until we find a start\n      let i = pos\n      let acc = ''\n      while (i < str.length) {\n        const c = str.charAt(i++)\n        // still accumulate escapes at this point, but we do ignore\n        // starts that are escaped\n        if (escaping || c === '\\\\') {\n          escaping = !escaping\n          acc += c\n          continue\n        }\n\n        if (inBrace) {\n          if (i === braceStart + 1) {\n            if (c === '^' || c === '!') {\n              braceNeg = true\n            }\n          } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n            inBrace = false\n          }\n          acc += c\n          continue\n        } else if (c === '[') {\n          inBrace = true\n          braceStart = i\n          braceNeg = false\n          acc += c\n          continue\n        }\n\n        if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {\n          ast.push(acc)\n          acc = ''\n          const ext = new AST(c, ast)\n          i = AST.#parseAST(str, ext, i, opt)\n          ast.push(ext)\n          continue\n        }\n        acc += c\n      }\n      ast.push(acc)\n      return i\n    }\n\n    // some kind of extglob, pos is at the (\n    // find the next | or )\n    let i = pos + 1\n    let part = new AST(null, ast)\n    const parts: AST[] = []\n    let acc = ''\n    while (i < str.length) {\n      const c = str.charAt(i++)\n      // still accumulate escapes at this point, but we do ignore\n      // starts that are escaped\n      if (escaping || c === '\\\\') {\n        escaping = !escaping\n        acc += c\n        continue\n      }\n\n      if (inBrace) {\n        if (i === braceStart + 1) {\n          if (c === '^' || c === '!') {\n            braceNeg = true\n          }\n        } else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n          inBrace = false\n        }\n        acc += c\n        continue\n      } else if (c === '[') {\n        inBrace = true\n        braceStart = i\n        braceNeg = false\n        acc += c\n        continue\n      }\n\n      if (isExtglobType(c) && str.charAt(i) === '(') {\n        part.push(acc)\n        acc = ''\n        const ext = new AST(c, part)\n        part.push(ext)\n        i = AST.#parseAST(str, ext, i, opt)\n        continue\n      }\n      if (c === '|') {\n        part.push(acc)\n        acc = ''\n        parts.push(part)\n        part = new AST(null, ast)\n        continue\n      }\n      if (c === ')') {\n        if (acc === '' && ast.#parts.length === 0) {\n          ast.#emptyExt = true\n        }\n        part.push(acc)\n        acc = ''\n        ast.push(...parts, part)\n        return i\n      }\n      acc += c\n    }\n\n    // unfinished extglob\n    // if we got here, it was a malformed extglob! not an extglob, but\n    // maybe something else in there.\n    ast.type = null\n    ast.#hasMagic = undefined\n    ast.#parts = [str.substring(pos - 1)]\n    return i\n  }\n\n  static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n    const ast = new AST(null, undefined, options)\n    AST.#parseAST(pattern, ast, 0, options)\n    return ast\n  }\n\n  // returns the regular expression if there's magic, or the unescaped\n  // string if not.\n  toMMPattern(): MMRegExp | string {\n    // should only be called on root\n    /* c8 ignore start */\n    if (this !== this.#root) return this.#root.toMMPattern()\n    /* c8 ignore stop */\n    const glob = this.toString()\n    const [re, body, hasMagic, uflag] = this.toRegExpSource()\n    // if we're in nocase mode, and not nocaseMagicOnly, then we do\n    // still need a regular expression if we have to case-insensitively\n    // match capital/lowercase characters.\n    const anyMagic =\n      hasMagic ||\n      this.#hasMagic ||\n      (this.#options.nocase &&\n        !this.#options.nocaseMagicOnly &&\n        glob.toUpperCase() !== glob.toLowerCase())\n    if (!anyMagic) {\n      return body\n    }\n\n    const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '')\n    return Object.assign(new RegExp(`^${re}$`, flags), {\n      _src: re,\n      _glob: glob,\n    })\n  }\n\n  get options() {\n    return this.#options\n  }\n\n  // returns the string match, the regexp source, whether there's magic\n  // in the regexp (so a regular expression is required) and whether or\n  // not the uflag is needed for the regular expression (for posix classes)\n  // TODO: instead of injecting the start/end at this point, just return\n  // the BODY of the regexp, along with the start/end portions suitable\n  // for binding the start/end in either a joined full-path makeRe context\n  // (where we bind to (^|/), or a standalone matchPart context (where\n  // we bind to ^, and not /).  Otherwise slashes get duped!\n  //\n  // In part-matching mode, the start is:\n  // - if not isStart: nothing\n  // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n  // - if dots allowed or not possible: ^\n  // - if dots possible and not allowed: ^(?!\\.)\n  // end is:\n  // - if not isEnd(): nothing\n  // - else: $\n  //\n  // In full-path matching mode, we put the slash at the START of the\n  // pattern, so start is:\n  // - if first pattern: same as part-matching mode\n  // - if not isStart(): nothing\n  // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n  // - if dots allowed or not possible: /\n  // - if dots possible and not allowed: /(?!\\.)\n  // end is:\n  // - if last pattern, same as part-matching mode\n  // - else nothing\n  //\n  // Always put the (?:$|/) on negated tails, though, because that has to be\n  // there to bind the end of the negated pattern portion, and it's easier to\n  // just stick it in now rather than try to inject it later in the middle of\n  // the pattern.\n  //\n  // We can just always return the same end, and leave it up to the caller\n  // to know whether it's going to be used joined or in parts.\n  // And, if the start is adjusted slightly, can do the same there:\n  // - if not isStart: nothing\n  // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n  // - if dots allowed or not possible: (?:/|^)\n  // - if dots possible and not allowed: (?:/|^)(?!\\.)\n  //\n  // But it's better to have a simpler binding without a conditional, for\n  // performance, so probably better to return both start options.\n  //\n  // Then the caller just ignores the end if it's not the first pattern,\n  // and the start always gets applied.\n  //\n  // But that's always going to be $ if it's the ending pattern, or nothing,\n  // so the caller can just attach $ at the end of the pattern when building.\n  //\n  // So the todo is:\n  // - better detect what kind of start is needed\n  // - return both flavors of starting pattern\n  // - attach $ at the end of the pattern when creating the actual RegExp\n  //\n  // Ah, but wait, no, that all only applies to the root when the first pattern\n  // is not an extglob. If the first pattern IS an extglob, then we need all\n  // that dot prevention biz to live in the extglob portions, because eg\n  // +(*|.x*) can match .xy but not .yx.\n  //\n  // So, return the two flavors if it's #root and the first child is not an\n  // AST, otherwise leave it to the child AST to handle it, and there,\n  // use the (?:^|/) style of start binding.\n  //\n  // Even simplified further:\n  // - Since the start for a join is eg /(?!\\.) and the start for a part\n  // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n  // or start or whatever) and prepend ^ or / at the Regexp construction.\n  toRegExpSource(\n    allowDot?: boolean\n  ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n    const dot = allowDot ?? !!this.#options.dot\n    if (this.#root === this) this.#fillNegs()\n    if (!this.type) {\n      const noEmpty = this.isStart() && this.isEnd()\n      const src = this.#parts\n        .map(p => {\n          const [re, _, hasMagic, uflag] =\n            typeof p === 'string'\n              ? AST.#parseGlob(p, this.#hasMagic, noEmpty)\n              : p.toRegExpSource(allowDot)\n          this.#hasMagic = this.#hasMagic || hasMagic\n          this.#uflag = this.#uflag || uflag\n          return re\n        })\n        .join('')\n\n      let start = ''\n      if (this.isStart()) {\n        if (typeof this.#parts[0] === 'string') {\n          // this is the string that will match the start of the pattern,\n          // so we need to protect against dots and such.\n\n          // '.' and '..' cannot match unless the pattern is that exactly,\n          // even if it starts with . or dot:true is set.\n          const dotTravAllowed =\n            this.#parts.length === 1 && justDots.has(this.#parts[0])\n          if (!dotTravAllowed) {\n            const aps = addPatternStart\n            // check if we have a possibility of matching . or ..,\n            // and prevent that.\n            const needNoTrav =\n              // dots are allowed, and the pattern starts with [ or .\n              (dot && aps.has(src.charAt(0))) ||\n              // the pattern starts with \\., and then [ or .\n              (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n              // the pattern starts with \\.\\., and then [ or .\n              (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)))\n            // no need to prevent dots if it can't match a dot, or if a\n            // sub-pattern will be preventing it anyway.\n            const needNoDot = !dot && !allowDot && aps.has(src.charAt(0))\n\n            start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ''\n          }\n        }\n      }\n\n      // append the \"end of path portion\" pattern to negation tails\n      let end = ''\n      if (\n        this.isEnd() &&\n        this.#root.#filledNegs &&\n        this.#parent?.type === '!'\n      ) {\n        end = '(?:$|\\\\/)'\n      }\n      const final = start + src + end\n      return [\n        final,\n        unescape(src),\n        (this.#hasMagic = !!this.#hasMagic),\n        this.#uflag,\n      ]\n    }\n\n    // We need to calculate the body *twice* if it's a repeat pattern\n    // at the start, once in nodot mode, then again in dot mode, so a\n    // pattern like *(?) can match 'x.y'\n\n    const repeated = this.type === '*' || this.type === '+'\n    // some kind of extglob\n    const start = this.type === '!' ? '(?:(?!(?:' : '(?:'\n    let body = this.#partsToRegExp(dot)\n\n    if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n      // invalid extglob, has to at least be *something* present, if it's\n      // the entire path portion.\n      const s = this.toString()\n      this.#parts = [s]\n      this.type = null\n      this.#hasMagic = undefined\n      return [s, unescape(this.toString()), false, false]\n    }\n\n    // XXX abstract out this map method\n    let bodyDotAllowed =\n      !repeated || allowDot || dot || !startNoDot\n        ? ''\n        : this.#partsToRegExp(true)\n    if (bodyDotAllowed === body) {\n      bodyDotAllowed = ''\n    }\n    if (bodyDotAllowed) {\n      body = `(?:${body})(?:${bodyDotAllowed})*?`\n    }\n\n    // an empty !() is exactly equivalent to a starNoEmpty\n    let final = ''\n    if (this.type === '!' && this.#emptyExt) {\n      final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty\n    } else {\n      const close =\n        this.type === '!'\n          ? // !() must match something,but !(x) can match ''\n            '))' +\n            (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n            star +\n            ')'\n          : this.type === '@'\n          ? ')'\n          : this.type === '?'\n          ? ')?'\n          : this.type === '+' && bodyDotAllowed\n          ? ')'\n          : this.type === '*' && bodyDotAllowed\n          ? `)?`\n          : `)${this.type}`\n      final = start + body + close\n    }\n    return [\n      final,\n      unescape(body),\n      (this.#hasMagic = !!this.#hasMagic),\n      this.#uflag,\n    ]\n  }\n\n  #partsToRegExp(dot: boolean) {\n    return this.#parts\n      .map(p => {\n        // extglob ASTs should only contain parent ASTs\n        /* c8 ignore start */\n        if (typeof p === 'string') {\n          throw new Error('string type in extglob ast??')\n        }\n        /* c8 ignore stop */\n        // can ignore hasMagic, because extglobs are already always magic\n        const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot)\n        this.#uflag = this.#uflag || uflag\n        return re\n      })\n      .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n      .join('|')\n  }\n\n  static #parseGlob(\n    glob: string,\n    hasMagic: boolean | undefined,\n    noEmpty: boolean = false\n  ): [re: string, body: string, hasMagic: boolean, uflag: boolean] {\n    let escaping = false\n    let re = ''\n    let uflag = false\n    for (let i = 0; i < glob.length; i++) {\n      const c = glob.charAt(i)\n      if (escaping) {\n        escaping = false\n        re += (reSpecials.has(c) ? '\\\\' : '') + c\n        continue\n      }\n      if (c === '\\\\') {\n        if (i === glob.length - 1) {\n          re += '\\\\\\\\'\n        } else {\n          escaping = true\n        }\n        continue\n      }\n      if (c === '[') {\n        const [src, needUflag, consumed, magic] = parseClass(glob, i)\n        if (consumed) {\n          re += src\n          uflag = uflag || needUflag\n          i += consumed - 1\n          hasMagic = hasMagic || magic\n          continue\n        }\n      }\n      if (c === '*') {\n        if (noEmpty && glob === '*') re += starNoEmpty\n        else re += star\n        hasMagic = true\n        continue\n      }\n      if (c === '?') {\n        re += qmark\n        hasMagic = true\n        continue\n      }\n      re += regExpEscape(c)\n    }\n    return [re, unescape(glob), !!hasMagic, uflag]\n  }\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/brace-expressions.d.ts b/node_modules/minimatch/dist/esm/brace-expressions.d.ts
new file mode 100644
index 00000000..b1572deb
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/brace-expressions.d.ts
@@ -0,0 +1,8 @@
+export type ParseClassResult = [
+    src: string,
+    uFlag: boolean,
+    consumed: number,
+    hasMagic: boolean
+];
+export declare const parseClass: (glob: string, position: number) => ParseClassResult;
+//# sourceMappingURL=brace-expressions.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map b/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map
new file mode 100644
index 00000000..046b6313
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"brace-expressions.d.ts","sourceRoot":"","sources":["../../src/brace-expressions.ts"],"names":[],"mappings":"AA+BA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,OAAO;CAClB,CAAA;AAQD,eAAO,MAAM,UAAU,SACf,MAAM,YACF,MAAM,KACf,gBA6HF,CAAA"}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/brace-expressions.js b/node_modules/minimatch/dist/esm/brace-expressions.js
new file mode 100644
index 00000000..c629d6ae
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/brace-expressions.js
@@ -0,0 +1,148 @@
+// translate the various posix character classes into unicode properties
+// this works across all unicode locales
+// { : [, /u flag required, negated]
+const posixClasses = {
+    '[:alnum:]': ['\\p{L}\\p{Nl}\\p{Nd}', true],
+    '[:alpha:]': ['\\p{L}\\p{Nl}', true],
+    '[:ascii:]': ['\\x' + '00-\\x' + '7f', false],
+    '[:blank:]': ['\\p{Zs}\\t', true],
+    '[:cntrl:]': ['\\p{Cc}', true],
+    '[:digit:]': ['\\p{Nd}', true],
+    '[:graph:]': ['\\p{Z}\\p{C}', true, true],
+    '[:lower:]': ['\\p{Ll}', true],
+    '[:print:]': ['\\p{C}', true],
+    '[:punct:]': ['\\p{P}', true],
+    '[:space:]': ['\\p{Z}\\t\\r\\n\\v\\f', true],
+    '[:upper:]': ['\\p{Lu}', true],
+    '[:word:]': ['\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}', true],
+    '[:xdigit:]': ['A-Fa-f0-9', false],
+};
+// only need to escape a few things inside of brace expressions
+// escapes: [ \ ] -
+const braceEscape = (s) => s.replace(/[[\]\\-]/g, '\\$&');
+// escape all regexp magic characters
+const regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
+// everything has already been escaped, we just have to join
+const rangesToString = (ranges) => ranges.join('');
+// takes a glob string at a posix brace expression, and returns
+// an equivalent regular expression source, and boolean indicating
+// whether the /u flag needs to be applied, and the number of chars
+// consumed to parse the character class.
+// This also removes out of order ranges, and returns ($.) if the
+// entire class just no good.
+export const parseClass = (glob, position) => {
+    const pos = position;
+    /* c8 ignore start */
+    if (glob.charAt(pos) !== '[') {
+        throw new Error('not in a brace expression');
+    }
+    /* c8 ignore stop */
+    const ranges = [];
+    const negs = [];
+    let i = pos + 1;
+    let sawStart = false;
+    let uflag = false;
+    let escaping = false;
+    let negate = false;
+    let endPos = pos;
+    let rangeStart = '';
+    WHILE: while (i < glob.length) {
+        const c = glob.charAt(i);
+        if ((c === '!' || c === '^') && i === pos + 1) {
+            negate = true;
+            i++;
+            continue;
+        }
+        if (c === ']' && sawStart && !escaping) {
+            endPos = i + 1;
+            break;
+        }
+        sawStart = true;
+        if (c === '\\') {
+            if (!escaping) {
+                escaping = true;
+                i++;
+                continue;
+            }
+            // escaped \ char, fall through and treat like normal char
+        }
+        if (c === '[' && !escaping) {
+            // either a posix class, a collation equivalent, or just a [
+            for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {
+                if (glob.startsWith(cls, i)) {
+                    // invalid, [a-[] is fine, but not [a-[:alpha]]
+                    if (rangeStart) {
+                        return ['$.', false, glob.length - pos, true];
+                    }
+                    i += cls.length;
+                    if (neg)
+                        negs.push(unip);
+                    else
+                        ranges.push(unip);
+                    uflag = uflag || u;
+                    continue WHILE;
+                }
+            }
+        }
+        // now it's just a normal character, effectively
+        escaping = false;
+        if (rangeStart) {
+            // throw this range away if it's not valid, but others
+            // can still match.
+            if (c > rangeStart) {
+                ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));
+            }
+            else if (c === rangeStart) {
+                ranges.push(braceEscape(c));
+            }
+            rangeStart = '';
+            i++;
+            continue;
+        }
+        // now might be the start of a range.
+        // can be either c-d or c-] or c] or c] at this point
+        if (glob.startsWith('-]', i + 1)) {
+            ranges.push(braceEscape(c + '-'));
+            i += 2;
+            continue;
+        }
+        if (glob.startsWith('-', i + 1)) {
+            rangeStart = c;
+            i += 2;
+            continue;
+        }
+        // not the start of a range, just a single character
+        ranges.push(braceEscape(c));
+        i++;
+    }
+    if (endPos < i) {
+        // didn't see the end of the class, not a valid class,
+        // but might still be valid as a literal match.
+        return ['', false, 0, false];
+    }
+    // if we got no ranges and no negates, then we have a range that
+    // cannot possibly match anything, and that poisons the whole glob
+    if (!ranges.length && !negs.length) {
+        return ['$.', false, glob.length - pos, true];
+    }
+    // if we got one positive range, and it's a single character, then that's
+    // not actually a magic pattern, it's just that one literal character.
+    // we should not treat that as "magic", we should just return the literal
+    // character. [_] is a perfectly valid way to escape glob magic chars.
+    if (negs.length === 0 &&
+        ranges.length === 1 &&
+        /^\\?.$/.test(ranges[0]) &&
+        !negate) {
+        const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];
+        return [regexpEscape(r), false, endPos - pos, false];
+    }
+    const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';
+    const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';
+    const comb = ranges.length && negs.length
+        ? '(' + sranges + '|' + snegs + ')'
+        : ranges.length
+            ? sranges
+            : snegs;
+    return [comb, uflag, endPos - pos, true];
+};
+//# sourceMappingURL=brace-expressions.js.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/brace-expressions.js.map b/node_modules/minimatch/dist/esm/brace-expressions.js.map
new file mode 100644
index 00000000..5c1e6e61
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/brace-expressions.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"brace-expressions.js","sourceRoot":"","sources":["../../src/brace-expressions.ts"],"names":[],"mappings":"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","sourcesContent":["// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n\n// { : [, /u flag required, negated]\nconst posixClasses: { [k: string]: [e: string, u: boolean, n?: boolean] } = {\n  '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n  '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n  '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n  '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n  '[:cntrl:]': ['\\\\p{Cc}', true],\n  '[:digit:]': ['\\\\p{Nd}', true],\n  '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n  '[:lower:]': ['\\\\p{Ll}', true],\n  '[:print:]': ['\\\\p{C}', true],\n  '[:punct:]': ['\\\\p{P}', true],\n  '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n  '[:upper:]': ['\\\\p{Lu}', true],\n  '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n  '[:xdigit:]': ['A-Fa-f0-9', false],\n}\n\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s: string) => s.replace(/[[\\]\\\\-]/g, '\\\\$&')\n// escape all regexp magic characters\nconst regexpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges: string[]): string => ranges.join('')\n\nexport type ParseClassResult = [\n  src: string,\n  uFlag: boolean,\n  consumed: number,\n  hasMagic: boolean\n]\n\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (\n  glob: string,\n  position: number\n): ParseClassResult => {\n  const pos = position\n  /* c8 ignore start */\n  if (glob.charAt(pos) !== '[') {\n    throw new Error('not in a brace expression')\n  }\n  /* c8 ignore stop */\n  const ranges: string[] = []\n  const negs: string[] = []\n\n  let i = pos + 1\n  let sawStart = false\n  let uflag = false\n  let escaping = false\n  let negate = false\n  let endPos = pos\n  let rangeStart = ''\n  WHILE: while (i < glob.length) {\n    const c = glob.charAt(i)\n    if ((c === '!' || c === '^') && i === pos + 1) {\n      negate = true\n      i++\n      continue\n    }\n\n    if (c === ']' && sawStart && !escaping) {\n      endPos = i + 1\n      break\n    }\n\n    sawStart = true\n    if (c === '\\\\') {\n      if (!escaping) {\n        escaping = true\n        i++\n        continue\n      }\n      // escaped \\ char, fall through and treat like normal char\n    }\n    if (c === '[' && !escaping) {\n      // either a posix class, a collation equivalent, or just a [\n      for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n        if (glob.startsWith(cls, i)) {\n          // invalid, [a-[] is fine, but not [a-[:alpha]]\n          if (rangeStart) {\n            return ['$.', false, glob.length - pos, true]\n          }\n          i += cls.length\n          if (neg) negs.push(unip)\n          else ranges.push(unip)\n          uflag = uflag || u\n          continue WHILE\n        }\n      }\n    }\n\n    // now it's just a normal character, effectively\n    escaping = false\n    if (rangeStart) {\n      // throw this range away if it's not valid, but others\n      // can still match.\n      if (c > rangeStart) {\n        ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c))\n      } else if (c === rangeStart) {\n        ranges.push(braceEscape(c))\n      }\n      rangeStart = ''\n      i++\n      continue\n    }\n\n    // now might be the start of a range.\n    // can be either c-d or c-] or c] or c] at this point\n    if (glob.startsWith('-]', i + 1)) {\n      ranges.push(braceEscape(c + '-'))\n      i += 2\n      continue\n    }\n    if (glob.startsWith('-', i + 1)) {\n      rangeStart = c\n      i += 2\n      continue\n    }\n\n    // not the start of a range, just a single character\n    ranges.push(braceEscape(c))\n    i++\n  }\n\n  if (endPos < i) {\n    // didn't see the end of the class, not a valid class,\n    // but might still be valid as a literal match.\n    return ['', false, 0, false]\n  }\n\n  // if we got no ranges and no negates, then we have a range that\n  // cannot possibly match anything, and that poisons the whole glob\n  if (!ranges.length && !negs.length) {\n    return ['$.', false, glob.length - pos, true]\n  }\n\n  // if we got one positive range, and it's a single character, then that's\n  // not actually a magic pattern, it's just that one literal character.\n  // we should not treat that as \"magic\", we should just return the literal\n  // character. [_] is a perfectly valid way to escape glob magic chars.\n  if (\n    negs.length === 0 &&\n    ranges.length === 1 &&\n    /^\\\\?.$/.test(ranges[0]) &&\n    !negate\n  ) {\n    const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]\n    return [regexpEscape(r), false, endPos - pos, false]\n  }\n\n  const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']'\n  const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']'\n  const comb =\n    ranges.length && negs.length\n      ? '(' + sranges + '|' + snegs + ')'\n      : ranges.length\n      ? sranges\n      : snegs\n\n  return [comb, uflag, endPos - pos, true]\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/escape.d.ts b/node_modules/minimatch/dist/esm/escape.d.ts
new file mode 100644
index 00000000..7391e752
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/escape.d.ts
@@ -0,0 +1,12 @@
+import { MinimatchOptions } from './index.js';
+/**
+ * Escape all magic characters in a glob pattern.
+ *
+ * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}
+ * option is used, then characters are escaped by wrapping in `[]`, because
+ * a magic character wrapped in a character class can only be satisfied by
+ * that exact character.  In this mode, `\` is _not_ escaped, because it is
+ * not interpreted as a magic character, but instead as a path separator.
+ */
+export declare const escape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
+//# sourceMappingURL=escape.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/escape.d.ts.map b/node_modules/minimatch/dist/esm/escape.d.ts.map
new file mode 100644
index 00000000..7bcc19c6
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/escape.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,MACd,MAAM,8BAGN,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,WAQlD,CAAA"}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/escape.js b/node_modules/minimatch/dist/esm/escape.js
new file mode 100644
index 00000000..16f7c8c7
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/escape.js
@@ -0,0 +1,18 @@
+/**
+ * Escape all magic characters in a glob pattern.
+ *
+ * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}
+ * option is used, then characters are escaped by wrapping in `[]`, because
+ * a magic character wrapped in a character class can only be satisfied by
+ * that exact character.  In this mode, `\` is _not_ escaped, because it is
+ * not interpreted as a magic character, but instead as a path separator.
+ */
+export const escape = (s, { windowsPathsNoEscape = false, } = {}) => {
+    // don't need to escape +@! because we escape the parens
+    // that make those magic, and escaping ! as [!] isn't valid,
+    // because [!]] is a valid glob class meaning not ']'.
+    return windowsPathsNoEscape
+        ? s.replace(/[?*()[\]]/g, '[$&]')
+        : s.replace(/[?*()[\]\\]/g, '\\$&');
+};
+//# sourceMappingURL=escape.js.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/escape.js.map b/node_modules/minimatch/dist/esm/escape.js.map
new file mode 100644
index 00000000..170fd1ad
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/escape.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,CAAS,EACT,EACE,oBAAoB,GAAG,KAAK,MACsB,EAAE,EACtD,EAAE;IACF,wDAAwD;IACxD,4DAA4D;IAC5D,sDAAsD;IACtD,OAAO,oBAAoB;QACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;QACjC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AACvC,CAAC,CAAA","sourcesContent":["import { MinimatchOptions } from './index.js'\n/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character.  In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick = {}\n) => {\n  // don't need to escape +@! because we escape the parens\n  // that make those magic, and escaping ! as [!] isn't valid,\n  // because [!]] is a valid glob class meaning not ']'.\n  return windowsPathsNoEscape\n    ? s.replace(/[?*()[\\]]/g, '[$&]')\n    : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&')\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/index.d.ts b/node_modules/minimatch/dist/esm/index.d.ts
new file mode 100644
index 00000000..41d16a98
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/index.d.ts
@@ -0,0 +1,94 @@
+import { AST } from './ast.js';
+type Platform = 'aix' | 'android' | 'darwin' | 'freebsd' | 'haiku' | 'linux' | 'openbsd' | 'sunos' | 'win32' | 'cygwin' | 'netbsd';
+export interface MinimatchOptions {
+    nobrace?: boolean;
+    nocomment?: boolean;
+    nonegate?: boolean;
+    debug?: boolean;
+    noglobstar?: boolean;
+    noext?: boolean;
+    nonull?: boolean;
+    windowsPathsNoEscape?: boolean;
+    allowWindowsEscape?: boolean;
+    partial?: boolean;
+    dot?: boolean;
+    nocase?: boolean;
+    nocaseMagicOnly?: boolean;
+    magicalBraces?: boolean;
+    matchBase?: boolean;
+    flipNegate?: boolean;
+    preserveMultipleSlashes?: boolean;
+    optimizationLevel?: number;
+    platform?: Platform;
+    windowsNoMagicRoot?: boolean;
+}
+export declare const minimatch: {
+    (p: string, pattern: string, options?: MinimatchOptions): boolean;
+    sep: Sep;
+    GLOBSTAR: typeof GLOBSTAR;
+    filter: (pattern: string, options?: MinimatchOptions) => (p: string) => boolean;
+    defaults: (def: MinimatchOptions) => typeof minimatch;
+    braceExpand: (pattern: string, options?: MinimatchOptions) => string[];
+    makeRe: (pattern: string, options?: MinimatchOptions) => false | MMRegExp;
+    match: (list: string[], pattern: string, options?: MinimatchOptions) => string[];
+    AST: typeof AST;
+    Minimatch: typeof Minimatch;
+    escape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
+    unescape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
+};
+type Sep = '\\' | '/';
+export declare const sep: Sep;
+export declare const GLOBSTAR: unique symbol;
+export declare const filter: (pattern: string, options?: MinimatchOptions) => (p: string) => boolean;
+export declare const defaults: (def: MinimatchOptions) => typeof minimatch;
+export declare const braceExpand: (pattern: string, options?: MinimatchOptions) => string[];
+export declare const makeRe: (pattern: string, options?: MinimatchOptions) => false | MMRegExp;
+export declare const match: (list: string[], pattern: string, options?: MinimatchOptions) => string[];
+export type MMRegExp = RegExp & {
+    _src?: string;
+    _glob?: string;
+};
+export type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR;
+export type ParseReturn = ParseReturnFiltered | false;
+export declare class Minimatch {
+    options: MinimatchOptions;
+    set: ParseReturnFiltered[][];
+    pattern: string;
+    windowsPathsNoEscape: boolean;
+    nonegate: boolean;
+    negate: boolean;
+    comment: boolean;
+    empty: boolean;
+    preserveMultipleSlashes: boolean;
+    partial: boolean;
+    globSet: string[];
+    globParts: string[][];
+    nocase: boolean;
+    isWindows: boolean;
+    platform: Platform;
+    windowsNoMagicRoot: boolean;
+    regexp: false | null | MMRegExp;
+    constructor(pattern: string, options?: MinimatchOptions);
+    hasMagic(): boolean;
+    debug(..._: any[]): void;
+    make(): void;
+    preprocess(globParts: string[][]): string[][];
+    adjascentGlobstarOptimize(globParts: string[][]): string[][];
+    levelOneOptimize(globParts: string[][]): string[][];
+    levelTwoFileOptimize(parts: string | string[]): string[];
+    firstPhasePreProcess(globParts: string[][]): string[][];
+    secondPhasePreProcess(globParts: string[][]): string[][];
+    partsMatch(a: string[], b: string[], emptyGSMatch?: boolean): false | string[];
+    parseNegate(): void;
+    matchOne(file: string[], pattern: ParseReturn[], partial?: boolean): boolean;
+    braceExpand(): string[];
+    parse(pattern: string): ParseReturn;
+    makeRe(): false | MMRegExp;
+    slashSplit(p: string): string[];
+    match(f: string, partial?: boolean): boolean;
+    static defaults(def: MinimatchOptions): typeof Minimatch;
+}
+export { AST } from './ast.js';
+export { escape } from './escape.js';
+export { unescape } from './unescape.js';
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/index.d.ts.map b/node_modules/minimatch/dist/esm/index.d.ts.map
new file mode 100644
index 00000000..6c8efb90
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/index.js b/node_modules/minimatch/dist/esm/index.js
new file mode 100644
index 00000000..84b577b0
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/index.js
@@ -0,0 +1,1001 @@
+import expand from 'brace-expansion';
+import { assertValidPattern } from './assert-valid-pattern.js';
+import { AST } from './ast.js';
+import { escape } from './escape.js';
+import { unescape } from './unescape.js';
+export const minimatch = (p, pattern, options = {}) => {
+    assertValidPattern(pattern);
+    // shortcut: comments match nothing.
+    if (!options.nocomment && pattern.charAt(0) === '#') {
+        return false;
+    }
+    return new Minimatch(pattern, options).match(p);
+};
+// Optimized checking for the most common glob patterns.
+const starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/;
+const starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);
+const starDotExtTestDot = (ext) => (f) => f.endsWith(ext);
+const starDotExtTestNocase = (ext) => {
+    ext = ext.toLowerCase();
+    return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);
+};
+const starDotExtTestNocaseDot = (ext) => {
+    ext = ext.toLowerCase();
+    return (f) => f.toLowerCase().endsWith(ext);
+};
+const starDotStarRE = /^\*+\.\*+$/;
+const starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');
+const starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');
+const dotStarRE = /^\.\*+$/;
+const dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');
+const starRE = /^\*+$/;
+const starTest = (f) => f.length !== 0 && !f.startsWith('.');
+const starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';
+const qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/;
+const qmarksTestNocase = ([$0, ext = '']) => {
+    const noext = qmarksTestNoExt([$0]);
+    if (!ext)
+        return noext;
+    ext = ext.toLowerCase();
+    return (f) => noext(f) && f.toLowerCase().endsWith(ext);
+};
+const qmarksTestNocaseDot = ([$0, ext = '']) => {
+    const noext = qmarksTestNoExtDot([$0]);
+    if (!ext)
+        return noext;
+    ext = ext.toLowerCase();
+    return (f) => noext(f) && f.toLowerCase().endsWith(ext);
+};
+const qmarksTestDot = ([$0, ext = '']) => {
+    const noext = qmarksTestNoExtDot([$0]);
+    return !ext ? noext : (f) => noext(f) && f.endsWith(ext);
+};
+const qmarksTest = ([$0, ext = '']) => {
+    const noext = qmarksTestNoExt([$0]);
+    return !ext ? noext : (f) => noext(f) && f.endsWith(ext);
+};
+const qmarksTestNoExt = ([$0]) => {
+    const len = $0.length;
+    return (f) => f.length === len && !f.startsWith('.');
+};
+const qmarksTestNoExtDot = ([$0]) => {
+    const len = $0.length;
+    return (f) => f.length === len && f !== '.' && f !== '..';
+};
+/* c8 ignore start */
+const defaultPlatform = (typeof process === 'object' && process
+    ? (typeof process.env === 'object' &&
+        process.env &&
+        process.env.__MINIMATCH_TESTING_PLATFORM__) ||
+        process.platform
+    : 'posix');
+const path = {
+    win32: { sep: '\\' },
+    posix: { sep: '/' },
+};
+/* c8 ignore stop */
+export const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;
+minimatch.sep = sep;
+export const GLOBSTAR = Symbol('globstar **');
+minimatch.GLOBSTAR = GLOBSTAR;
+// any single thing other than /
+// don't need to escape / when using new RegExp()
+const qmark = '[^/]';
+// * => any number of characters
+const star = qmark + '*?';
+// ** when dots are allowed.  Anything goes, except .. and .
+// not (^ or / followed by one or two dots followed by $ or /),
+// followed by anything, any number of times.
+const twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?';
+// not a ^ or / followed by a dot,
+// followed by anything, any number of times.
+const twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?';
+export const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);
+minimatch.filter = filter;
+const ext = (a, b = {}) => Object.assign({}, a, b);
+export const defaults = (def) => {
+    if (!def || typeof def !== 'object' || !Object.keys(def).length) {
+        return minimatch;
+    }
+    const orig = minimatch;
+    const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));
+    return Object.assign(m, {
+        Minimatch: class Minimatch extends orig.Minimatch {
+            constructor(pattern, options = {}) {
+                super(pattern, ext(def, options));
+            }
+            static defaults(options) {
+                return orig.defaults(ext(def, options)).Minimatch;
+            }
+        },
+        AST: class AST extends orig.AST {
+            /* c8 ignore start */
+            constructor(type, parent, options = {}) {
+                super(type, parent, ext(def, options));
+            }
+            /* c8 ignore stop */
+            static fromGlob(pattern, options = {}) {
+                return orig.AST.fromGlob(pattern, ext(def, options));
+            }
+        },
+        unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),
+        escape: (s, options = {}) => orig.escape(s, ext(def, options)),
+        filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),
+        defaults: (options) => orig.defaults(ext(def, options)),
+        makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),
+        braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),
+        match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),
+        sep: orig.sep,
+        GLOBSTAR: GLOBSTAR,
+    });
+};
+minimatch.defaults = defaults;
+// Brace expansion:
+// a{b,c}d -> abd acd
+// a{b,}c -> abc ac
+// a{0..3}d -> a0d a1d a2d a3d
+// a{b,c{d,e}f}g -> abg acdfg acefg
+// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
+//
+// Invalid sets are not expanded.
+// a{2..}b -> a{2..}b
+// a{b}c -> a{b}c
+export const braceExpand = (pattern, options = {}) => {
+    assertValidPattern(pattern);
+    // Thanks to Yeting Li  for
+    // improving this regexp to avoid a ReDOS vulnerability.
+    if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
+        // shortcut. no need to expand.
+        return [pattern];
+    }
+    return expand(pattern);
+};
+minimatch.braceExpand = braceExpand;
+// parse a component of the expanded set.
+// At this point, no pattern may contain "/" in it
+// so we're going to return a 2d array, where each entry is the full
+// pattern, split on '/', and then turned into a regular expression.
+// A regexp is made at the end which joins each array with an
+// escaped /, and another full one which joins each regexp with |.
+//
+// Following the lead of Bash 4.1, note that "**" only has special meaning
+// when it is the *only* thing in a path portion.  Otherwise, any series
+// of * is equivalent to a single *.  Globstar behavior is enabled by
+// default, and can be disabled by setting options.noglobstar.
+export const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();
+minimatch.makeRe = makeRe;
+export const match = (list, pattern, options = {}) => {
+    const mm = new Minimatch(pattern, options);
+    list = list.filter(f => mm.match(f));
+    if (mm.options.nonull && !list.length) {
+        list.push(pattern);
+    }
+    return list;
+};
+minimatch.match = match;
+// replace stuff like \* with *
+const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
+const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
+export class Minimatch {
+    options;
+    set;
+    pattern;
+    windowsPathsNoEscape;
+    nonegate;
+    negate;
+    comment;
+    empty;
+    preserveMultipleSlashes;
+    partial;
+    globSet;
+    globParts;
+    nocase;
+    isWindows;
+    platform;
+    windowsNoMagicRoot;
+    regexp;
+    constructor(pattern, options = {}) {
+        assertValidPattern(pattern);
+        options = options || {};
+        this.options = options;
+        this.pattern = pattern;
+        this.platform = options.platform || defaultPlatform;
+        this.isWindows = this.platform === 'win32';
+        this.windowsPathsNoEscape =
+            !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;
+        if (this.windowsPathsNoEscape) {
+            this.pattern = this.pattern.replace(/\\/g, '/');
+        }
+        this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;
+        this.regexp = null;
+        this.negate = false;
+        this.nonegate = !!options.nonegate;
+        this.comment = false;
+        this.empty = false;
+        this.partial = !!options.partial;
+        this.nocase = !!this.options.nocase;
+        this.windowsNoMagicRoot =
+            options.windowsNoMagicRoot !== undefined
+                ? options.windowsNoMagicRoot
+                : !!(this.isWindows && this.nocase);
+        this.globSet = [];
+        this.globParts = [];
+        this.set = [];
+        // make the set of regexps etc.
+        this.make();
+    }
+    hasMagic() {
+        if (this.options.magicalBraces && this.set.length > 1) {
+            return true;
+        }
+        for (const pattern of this.set) {
+            for (const part of pattern) {
+                if (typeof part !== 'string')
+                    return true;
+            }
+        }
+        return false;
+    }
+    debug(..._) { }
+    make() {
+        const pattern = this.pattern;
+        const options = this.options;
+        // empty patterns and comments match nothing.
+        if (!options.nocomment && pattern.charAt(0) === '#') {
+            this.comment = true;
+            return;
+        }
+        if (!pattern) {
+            this.empty = true;
+            return;
+        }
+        // step 1: figure out negation, etc.
+        this.parseNegate();
+        // step 2: expand braces
+        this.globSet = [...new Set(this.braceExpand())];
+        if (options.debug) {
+            this.debug = (...args) => console.error(...args);
+        }
+        this.debug(this.pattern, this.globSet);
+        // step 3: now we have a set, so turn each one into a series of
+        // path-portion matching patterns.
+        // These will be regexps, except in the case of "**", which is
+        // set to the GLOBSTAR object for globstar behavior,
+        // and will not contain any / characters
+        //
+        // First, we preprocess to make the glob pattern sets a bit simpler
+        // and deduped.  There are some perf-killing patterns that can cause
+        // problems with a glob walk, but we can simplify them down a bit.
+        const rawGlobParts = this.globSet.map(s => this.slashSplit(s));
+        this.globParts = this.preprocess(rawGlobParts);
+        this.debug(this.pattern, this.globParts);
+        // glob --> regexps
+        let set = this.globParts.map((s, _, __) => {
+            if (this.isWindows && this.windowsNoMagicRoot) {
+                // check if it's a drive or unc path.
+                const isUNC = s[0] === '' &&
+                    s[1] === '' &&
+                    (s[2] === '?' || !globMagic.test(s[2])) &&
+                    !globMagic.test(s[3]);
+                const isDrive = /^[a-z]:/i.test(s[0]);
+                if (isUNC) {
+                    return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];
+                }
+                else if (isDrive) {
+                    return [s[0], ...s.slice(1).map(ss => this.parse(ss))];
+                }
+            }
+            return s.map(ss => this.parse(ss));
+        });
+        this.debug(this.pattern, set);
+        // filter out everything that didn't compile properly.
+        this.set = set.filter(s => s.indexOf(false) === -1);
+        // do not treat the ? in UNC paths as magic
+        if (this.isWindows) {
+            for (let i = 0; i < this.set.length; i++) {
+                const p = this.set[i];
+                if (p[0] === '' &&
+                    p[1] === '' &&
+                    this.globParts[i][2] === '?' &&
+                    typeof p[3] === 'string' &&
+                    /^[a-z]:$/i.test(p[3])) {
+                    p[2] = '?';
+                }
+            }
+        }
+        this.debug(this.pattern, this.set);
+    }
+    // various transforms to equivalent pattern sets that are
+    // faster to process in a filesystem walk.  The goal is to
+    // eliminate what we can, and push all ** patterns as far
+    // to the right as possible, even if it increases the number
+    // of patterns that we have to process.
+    preprocess(globParts) {
+        // if we're not in globstar mode, then turn all ** into *
+        if (this.options.noglobstar) {
+            for (let i = 0; i < globParts.length; i++) {
+                for (let j = 0; j < globParts[i].length; j++) {
+                    if (globParts[i][j] === '**') {
+                        globParts[i][j] = '*';
+                    }
+                }
+            }
+        }
+        const { optimizationLevel = 1 } = this.options;
+        if (optimizationLevel >= 2) {
+            // aggressive optimization for the purpose of fs walking
+            globParts = this.firstPhasePreProcess(globParts);
+            globParts = this.secondPhasePreProcess(globParts);
+        }
+        else if (optimizationLevel >= 1) {
+            // just basic optimizations to remove some .. parts
+            globParts = this.levelOneOptimize(globParts);
+        }
+        else {
+            // just collapse multiple ** portions into one
+            globParts = this.adjascentGlobstarOptimize(globParts);
+        }
+        return globParts;
+    }
+    // just get rid of adjascent ** portions
+    adjascentGlobstarOptimize(globParts) {
+        return globParts.map(parts => {
+            let gs = -1;
+            while (-1 !== (gs = parts.indexOf('**', gs + 1))) {
+                let i = gs;
+                while (parts[i + 1] === '**') {
+                    i++;
+                }
+                if (i !== gs) {
+                    parts.splice(gs, i - gs);
+                }
+            }
+            return parts;
+        });
+    }
+    // get rid of adjascent ** and resolve .. portions
+    levelOneOptimize(globParts) {
+        return globParts.map(parts => {
+            parts = parts.reduce((set, part) => {
+                const prev = set[set.length - 1];
+                if (part === '**' && prev === '**') {
+                    return set;
+                }
+                if (part === '..') {
+                    if (prev && prev !== '..' && prev !== '.' && prev !== '**') {
+                        set.pop();
+                        return set;
+                    }
+                }
+                set.push(part);
+                return set;
+            }, []);
+            return parts.length === 0 ? [''] : parts;
+        });
+    }
+    levelTwoFileOptimize(parts) {
+        if (!Array.isArray(parts)) {
+            parts = this.slashSplit(parts);
+        }
+        let didSomething = false;
+        do {
+            didSomething = false;
+            // 
// -> 
/
+            if (!this.preserveMultipleSlashes) {
+                for (let i = 1; i < parts.length - 1; i++) {
+                    const p = parts[i];
+                    // don't squeeze out UNC patterns
+                    if (i === 1 && p === '' && parts[0] === '')
+                        continue;
+                    if (p === '.' || p === '') {
+                        didSomething = true;
+                        parts.splice(i, 1);
+                        i--;
+                    }
+                }
+                if (parts[0] === '.' &&
+                    parts.length === 2 &&
+                    (parts[1] === '.' || parts[1] === '')) {
+                    didSomething = true;
+                    parts.pop();
+                }
+            }
+            // 
/

/../ ->

/
+            let dd = 0;
+            while (-1 !== (dd = parts.indexOf('..', dd + 1))) {
+                const p = parts[dd - 1];
+                if (p && p !== '.' && p !== '..' && p !== '**') {
+                    didSomething = true;
+                    parts.splice(dd - 1, 2);
+                    dd -= 2;
+                }
+            }
+        } while (didSomething);
+        return parts.length === 0 ? [''] : parts;
+    }
+    // First phase: single-pattern processing
+    // 
 is 1 or more portions
+    //  is 1 or more portions
+    // 

is any portion other than ., .., '', or ** + // is . or '' + // + // **/.. is *brutal* for filesystem walking performance, because + // it effectively resets the recursive walk each time it occurs, + // and ** cannot be reduced out by a .. pattern part like a regexp + // or most strings (other than .., ., and '') can be. + // + //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/} + //

// -> 
/
+    // 
/

/../ ->

/
+    // **/**/ -> **/
+    //
+    // **/*/ -> */**/ <== not valid because ** doesn't follow
+    // this WOULD be allowed if ** did follow symlinks, or * didn't
+    firstPhasePreProcess(globParts) {
+        let didSomething = false;
+        do {
+            didSomething = false;
+            // 
/**/../

/

/ -> {

/../

/

/,

/**/

/

/} + for (let parts of globParts) { + let gs = -1; + while (-1 !== (gs = parts.indexOf('**', gs + 1))) { + let gss = gs; + while (parts[gss + 1] === '**') { + //

/**/**/ -> 
/**/
+                        gss++;
+                    }
+                    // eg, if gs is 2 and gss is 4, that means we have 3 **
+                    // parts, and can remove 2 of them.
+                    if (gss > gs) {
+                        parts.splice(gs + 1, gss - gs);
+                    }
+                    let next = parts[gs + 1];
+                    const p = parts[gs + 2];
+                    const p2 = parts[gs + 3];
+                    if (next !== '..')
+                        continue;
+                    if (!p ||
+                        p === '.' ||
+                        p === '..' ||
+                        !p2 ||
+                        p2 === '.' ||
+                        p2 === '..') {
+                        continue;
+                    }
+                    didSomething = true;
+                    // edit parts in place, and push the new one
+                    parts.splice(gs, 1);
+                    const other = parts.slice(0);
+                    other[gs] = '**';
+                    globParts.push(other);
+                    gs--;
+                }
+                // 
// -> 
/
+                if (!this.preserveMultipleSlashes) {
+                    for (let i = 1; i < parts.length - 1; i++) {
+                        const p = parts[i];
+                        // don't squeeze out UNC patterns
+                        if (i === 1 && p === '' && parts[0] === '')
+                            continue;
+                        if (p === '.' || p === '') {
+                            didSomething = true;
+                            parts.splice(i, 1);
+                            i--;
+                        }
+                    }
+                    if (parts[0] === '.' &&
+                        parts.length === 2 &&
+                        (parts[1] === '.' || parts[1] === '')) {
+                        didSomething = true;
+                        parts.pop();
+                    }
+                }
+                // 
/

/../ ->

/
+                let dd = 0;
+                while (-1 !== (dd = parts.indexOf('..', dd + 1))) {
+                    const p = parts[dd - 1];
+                    if (p && p !== '.' && p !== '..' && p !== '**') {
+                        didSomething = true;
+                        const needDot = dd === 1 && parts[dd + 1] === '**';
+                        const splin = needDot ? ['.'] : [];
+                        parts.splice(dd - 1, 2, ...splin);
+                        if (parts.length === 0)
+                            parts.push('');
+                        dd -= 2;
+                    }
+                }
+            }
+        } while (didSomething);
+        return globParts;
+    }
+    // second phase: multi-pattern dedupes
+    // {
/*/,
/

/} ->

/*/
+    // {
/,
/} -> 
/
+    // {
/**/,
/} -> 
/**/
+    //
+    // {
/**/,
/**/

/} ->

/**/
+    // ^-- not valid because ** doens't follow symlinks
+    secondPhasePreProcess(globParts) {
+        for (let i = 0; i < globParts.length - 1; i++) {
+            for (let j = i + 1; j < globParts.length; j++) {
+                const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
+                if (matched) {
+                    globParts[i] = [];
+                    globParts[j] = matched;
+                    break;
+                }
+            }
+        }
+        return globParts.filter(gs => gs.length);
+    }
+    partsMatch(a, b, emptyGSMatch = false) {
+        let ai = 0;
+        let bi = 0;
+        let result = [];
+        let which = '';
+        while (ai < a.length && bi < b.length) {
+            if (a[ai] === b[bi]) {
+                result.push(which === 'b' ? b[bi] : a[ai]);
+                ai++;
+                bi++;
+            }
+            else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {
+                result.push(a[ai]);
+                ai++;
+            }
+            else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {
+                result.push(b[bi]);
+                bi++;
+            }
+            else if (a[ai] === '*' &&
+                b[bi] &&
+                (this.options.dot || !b[bi].startsWith('.')) &&
+                b[bi] !== '**') {
+                if (which === 'b')
+                    return false;
+                which = 'a';
+                result.push(a[ai]);
+                ai++;
+                bi++;
+            }
+            else if (b[bi] === '*' &&
+                a[ai] &&
+                (this.options.dot || !a[ai].startsWith('.')) &&
+                a[ai] !== '**') {
+                if (which === 'a')
+                    return false;
+                which = 'b';
+                result.push(b[bi]);
+                ai++;
+                bi++;
+            }
+            else {
+                return false;
+            }
+        }
+        // if we fall out of the loop, it means they two are identical
+        // as long as their lengths match
+        return a.length === b.length && result;
+    }
+    parseNegate() {
+        if (this.nonegate)
+            return;
+        const pattern = this.pattern;
+        let negate = false;
+        let negateOffset = 0;
+        for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {
+            negate = !negate;
+            negateOffset++;
+        }
+        if (negateOffset)
+            this.pattern = pattern.slice(negateOffset);
+        this.negate = negate;
+    }
+    // set partial to true to test if, for example,
+    // "/a/b" matches the start of "/*/b/*/d"
+    // Partial means, if you run out of file before you run
+    // out of pattern, then that's fine, as long as all
+    // the parts match.
+    matchOne(file, pattern, partial = false) {
+        const options = this.options;
+        // UNC paths like //?/X:/... can match X:/... and vice versa
+        // Drive letters in absolute drive or unc paths are always compared
+        // case-insensitively.
+        if (this.isWindows) {
+            const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]);
+            const fileUNC = !fileDrive &&
+                file[0] === '' &&
+                file[1] === '' &&
+                file[2] === '?' &&
+                /^[a-z]:$/i.test(file[3]);
+            const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]);
+            const patternUNC = !patternDrive &&
+                pattern[0] === '' &&
+                pattern[1] === '' &&
+                pattern[2] === '?' &&
+                typeof pattern[3] === 'string' &&
+                /^[a-z]:$/i.test(pattern[3]);
+            const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined;
+            const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined;
+            if (typeof fdi === 'number' && typeof pdi === 'number') {
+                const [fd, pd] = [file[fdi], pattern[pdi]];
+                if (fd.toLowerCase() === pd.toLowerCase()) {
+                    pattern[pdi] = fd;
+                    if (pdi > fdi) {
+                        pattern = pattern.slice(pdi);
+                    }
+                    else if (fdi > pdi) {
+                        file = file.slice(fdi);
+                    }
+                }
+            }
+        }
+        // resolve and reduce . and .. portions in the file as well.
+        // dont' need to do the second phase, because it's only one string[]
+        const { optimizationLevel = 1 } = this.options;
+        if (optimizationLevel >= 2) {
+            file = this.levelTwoFileOptimize(file);
+        }
+        this.debug('matchOne', this, { file, pattern });
+        this.debug('matchOne', file.length, pattern.length);
+        for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
+            this.debug('matchOne loop');
+            var p = pattern[pi];
+            var f = file[fi];
+            this.debug(pattern, p, f);
+            // should be impossible.
+            // some invalid regexp stuff in the set.
+            /* c8 ignore start */
+            if (p === false) {
+                return false;
+            }
+            /* c8 ignore stop */
+            if (p === GLOBSTAR) {
+                this.debug('GLOBSTAR', [pattern, p, f]);
+                // "**"
+                // a/**/b/**/c would match the following:
+                // a/b/x/y/z/c
+                // a/x/y/z/b/c
+                // a/b/x/b/x/c
+                // a/b/c
+                // To do this, take the rest of the pattern after
+                // the **, and see if it would match the file remainder.
+                // If so, return success.
+                // If not, the ** "swallows" a segment, and try again.
+                // This is recursively awful.
+                //
+                // a/**/b/**/c matching a/b/x/y/z/c
+                // - a matches a
+                // - doublestar
+                //   - matchOne(b/x/y/z/c, b/**/c)
+                //     - b matches b
+                //     - doublestar
+                //       - matchOne(x/y/z/c, c) -> no
+                //       - matchOne(y/z/c, c) -> no
+                //       - matchOne(z/c, c) -> no
+                //       - matchOne(c, c) yes, hit
+                var fr = fi;
+                var pr = pi + 1;
+                if (pr === pl) {
+                    this.debug('** at the end');
+                    // a ** at the end will just swallow the rest.
+                    // We have found a match.
+                    // however, it will not swallow /.x, unless
+                    // options.dot is set.
+                    // . and .. are *never* matched by **, for explosively
+                    // exponential reasons.
+                    for (; fi < fl; fi++) {
+                        if (file[fi] === '.' ||
+                            file[fi] === '..' ||
+                            (!options.dot && file[fi].charAt(0) === '.'))
+                            return false;
+                    }
+                    return true;
+                }
+                // ok, let's see if we can swallow whatever we can.
+                while (fr < fl) {
+                    var swallowee = file[fr];
+                    this.debug('\nglobstar while', file, fr, pattern, pr, swallowee);
+                    // XXX remove this slice.  Just pass the start index.
+                    if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+                        this.debug('globstar found match!', fr, fl, swallowee);
+                        // found a match.
+                        return true;
+                    }
+                    else {
+                        // can't swallow "." or ".." ever.
+                        // can only swallow ".foo" when explicitly asked.
+                        if (swallowee === '.' ||
+                            swallowee === '..' ||
+                            (!options.dot && swallowee.charAt(0) === '.')) {
+                            this.debug('dot detected!', file, fr, pattern, pr);
+                            break;
+                        }
+                        // ** swallows a segment, and continue.
+                        this.debug('globstar swallow a segment, and continue');
+                        fr++;
+                    }
+                }
+                // no match was found.
+                // However, in partial mode, we can't say this is necessarily over.
+                /* c8 ignore start */
+                if (partial) {
+                    // ran out of file
+                    this.debug('\n>>> no match, partial?', file, fr, pattern, pr);
+                    if (fr === fl) {
+                        return true;
+                    }
+                }
+                /* c8 ignore stop */
+                return false;
+            }
+            // something other than **
+            // non-magic patterns just have to match exactly
+            // patterns with magic have been turned into regexps.
+            let hit;
+            if (typeof p === 'string') {
+                hit = f === p;
+                this.debug('string match', p, f, hit);
+            }
+            else {
+                hit = p.test(f);
+                this.debug('pattern match', p, f, hit);
+            }
+            if (!hit)
+                return false;
+        }
+        // Note: ending in / means that we'll get a final ""
+        // at the end of the pattern.  This can only match a
+        // corresponding "" at the end of the file.
+        // If the file ends in /, then it can only match a
+        // a pattern that ends in /, unless the pattern just
+        // doesn't have any more for it. But, a/b/ should *not*
+        // match "a/b/*", even though "" matches against the
+        // [^/]*? pattern, except in partial mode, where it might
+        // simply not be reached yet.
+        // However, a/b/ should still satisfy a/*
+        // now either we fell off the end of the pattern, or we're done.
+        if (fi === fl && pi === pl) {
+            // ran out of pattern and filename at the same time.
+            // an exact hit!
+            return true;
+        }
+        else if (fi === fl) {
+            // ran out of file, but still had pattern left.
+            // this is ok if we're doing the match as part of
+            // a glob fs traversal.
+            return partial;
+        }
+        else if (pi === pl) {
+            // ran out of pattern, still have file left.
+            // this is only acceptable if we're on the very last
+            // empty segment of a file with a trailing slash.
+            // a/* should match a/b/
+            return fi === fl - 1 && file[fi] === '';
+            /* c8 ignore start */
+        }
+        else {
+            // should be unreachable.
+            throw new Error('wtf?');
+        }
+        /* c8 ignore stop */
+    }
+    braceExpand() {
+        return braceExpand(this.pattern, this.options);
+    }
+    parse(pattern) {
+        assertValidPattern(pattern);
+        const options = this.options;
+        // shortcuts
+        if (pattern === '**')
+            return GLOBSTAR;
+        if (pattern === '')
+            return '';
+        // far and away, the most common glob pattern parts are
+        // *, *.*, and *.  Add a fast check method for those.
+        let m;
+        let fastTest = null;
+        if ((m = pattern.match(starRE))) {
+            fastTest = options.dot ? starTestDot : starTest;
+        }
+        else if ((m = pattern.match(starDotExtRE))) {
+            fastTest = (options.nocase
+                ? options.dot
+                    ? starDotExtTestNocaseDot
+                    : starDotExtTestNocase
+                : options.dot
+                    ? starDotExtTestDot
+                    : starDotExtTest)(m[1]);
+        }
+        else if ((m = pattern.match(qmarksRE))) {
+            fastTest = (options.nocase
+                ? options.dot
+                    ? qmarksTestNocaseDot
+                    : qmarksTestNocase
+                : options.dot
+                    ? qmarksTestDot
+                    : qmarksTest)(m);
+        }
+        else if ((m = pattern.match(starDotStarRE))) {
+            fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
+        }
+        else if ((m = pattern.match(dotStarRE))) {
+            fastTest = dotStarTest;
+        }
+        const re = AST.fromGlob(pattern, this.options).toMMPattern();
+        if (fastTest && typeof re === 'object') {
+            // Avoids overriding in frozen environments
+            Reflect.defineProperty(re, 'test', { value: fastTest });
+        }
+        return re;
+    }
+    makeRe() {
+        if (this.regexp || this.regexp === false)
+            return this.regexp;
+        // at this point, this.set is a 2d array of partial
+        // pattern strings, or "**".
+        //
+        // It's better to use .match().  This function shouldn't
+        // be used, really, but it's pretty convenient sometimes,
+        // when you just want to work with a regex.
+        const set = this.set;
+        if (!set.length) {
+            this.regexp = false;
+            return this.regexp;
+        }
+        const options = this.options;
+        const twoStar = options.noglobstar
+            ? star
+            : options.dot
+                ? twoStarDot
+                : twoStarNoDot;
+        const flags = new Set(options.nocase ? ['i'] : []);
+        // regexpify non-globstar patterns
+        // if ** is only item, then we just do one twoStar
+        // if ** is first, and there are more, prepend (\/|twoStar\/)? to next
+        // if ** is last, append (\/twoStar|) to previous
+        // if ** is in the middle, append (\/|\/twoStar\/) to previous
+        // then filter out GLOBSTAR symbols
+        let re = set
+            .map(pattern => {
+            const pp = pattern.map(p => {
+                if (p instanceof RegExp) {
+                    for (const f of p.flags.split(''))
+                        flags.add(f);
+                }
+                return typeof p === 'string'
+                    ? regExpEscape(p)
+                    : p === GLOBSTAR
+                        ? GLOBSTAR
+                        : p._src;
+            });
+            pp.forEach((p, i) => {
+                const next = pp[i + 1];
+                const prev = pp[i - 1];
+                if (p !== GLOBSTAR || prev === GLOBSTAR) {
+                    return;
+                }
+                if (prev === undefined) {
+                    if (next !== undefined && next !== GLOBSTAR) {
+                        pp[i + 1] = '(?:\\/|' + twoStar + '\\/)?' + next;
+                    }
+                    else {
+                        pp[i] = twoStar;
+                    }
+                }
+                else if (next === undefined) {
+                    pp[i - 1] = prev + '(?:\\/|' + twoStar + ')?';
+                }
+                else if (next !== GLOBSTAR) {
+                    pp[i - 1] = prev + '(?:\\/|\\/' + twoStar + '\\/)' + next;
+                    pp[i + 1] = GLOBSTAR;
+                }
+            });
+            return pp.filter(p => p !== GLOBSTAR).join('/');
+        })
+            .join('|');
+        // need to wrap in parens if we had more than one thing with |,
+        // otherwise only the first will be anchored to ^ and the last to $
+        const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];
+        // must match entire pattern
+        // ending in a * or ** will make it less strict.
+        re = '^' + open + re + close + '$';
+        // can match anything, as long as it's not this.
+        if (this.negate)
+            re = '^(?!' + re + ').+$';
+        try {
+            this.regexp = new RegExp(re, [...flags].join(''));
+            /* c8 ignore start */
+        }
+        catch (ex) {
+            // should be impossible
+            this.regexp = false;
+        }
+        /* c8 ignore stop */
+        return this.regexp;
+    }
+    slashSplit(p) {
+        // if p starts with // on windows, we preserve that
+        // so that UNC paths aren't broken.  Otherwise, any number of
+        // / characters are coalesced into one, unless
+        // preserveMultipleSlashes is set to true.
+        if (this.preserveMultipleSlashes) {
+            return p.split('/');
+        }
+        else if (this.isWindows && /^\/\/[^\/]+/.test(p)) {
+            // add an extra '' for the one we lose
+            return ['', ...p.split(/\/+/)];
+        }
+        else {
+            return p.split(/\/+/);
+        }
+    }
+    match(f, partial = this.partial) {
+        this.debug('match', f, this.pattern);
+        // short-circuit in the case of busted things.
+        // comments, etc.
+        if (this.comment) {
+            return false;
+        }
+        if (this.empty) {
+            return f === '';
+        }
+        if (f === '/' && partial) {
+            return true;
+        }
+        const options = this.options;
+        // windows: need to use /, not \
+        if (this.isWindows) {
+            f = f.split('\\').join('/');
+        }
+        // treat the test path as a set of pathparts.
+        const ff = this.slashSplit(f);
+        this.debug(this.pattern, 'split', ff);
+        // just ONE of the pattern sets in this.set needs to match
+        // in order for it to be valid.  If negating, then just one
+        // match means that we have failed.
+        // Either way, return on the first hit.
+        const set = this.set;
+        this.debug(this.pattern, 'set', set);
+        // Find the basename of the path by looking for the last non-empty segment
+        let filename = ff[ff.length - 1];
+        if (!filename) {
+            for (let i = ff.length - 2; !filename && i >= 0; i--) {
+                filename = ff[i];
+            }
+        }
+        for (let i = 0; i < set.length; i++) {
+            const pattern = set[i];
+            let file = ff;
+            if (options.matchBase && pattern.length === 1) {
+                file = [filename];
+            }
+            const hit = this.matchOne(file, pattern, partial);
+            if (hit) {
+                if (options.flipNegate) {
+                    return true;
+                }
+                return !this.negate;
+            }
+        }
+        // didn't get any hits.  this is success if it's a negative
+        // pattern, failure otherwise.
+        if (options.flipNegate) {
+            return false;
+        }
+        return this.negate;
+    }
+    static defaults(def) {
+        return minimatch.defaults(def).Minimatch;
+    }
+}
+/* c8 ignore start */
+export { AST } from './ast.js';
+export { escape } from './escape.js';
+export { unescape } from './unescape.js';
+/* c8 ignore stop */
+minimatch.AST = AST;
+minimatch.Minimatch = Minimatch;
+minimatch.escape = escape;
+minimatch.unescape = unescape;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/index.js.map b/node_modules/minimatch/dist/esm/index.js.map
new file mode 100644
index 00000000..2ba6134d
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import expand from 'brace-expansion'\nimport { assertValidPattern } from './assert-valid-pattern.js'\nimport { AST, ExtglobType } from './ast.js'\nimport { escape } from './escape.js'\nimport { unescape } from './unescape.js'\n\ntype Platform =\n  | 'aix'\n  | 'android'\n  | 'darwin'\n  | 'freebsd'\n  | 'haiku'\n  | 'linux'\n  | 'openbsd'\n  | 'sunos'\n  | 'win32'\n  | 'cygwin'\n  | 'netbsd'\n\nexport interface MinimatchOptions {\n  nobrace?: boolean\n  nocomment?: boolean\n  nonegate?: boolean\n  debug?: boolean\n  noglobstar?: boolean\n  noext?: boolean\n  nonull?: boolean\n  windowsPathsNoEscape?: boolean\n  allowWindowsEscape?: boolean\n  partial?: boolean\n  dot?: boolean\n  nocase?: boolean\n  nocaseMagicOnly?: boolean\n  magicalBraces?: boolean\n  matchBase?: boolean\n  flipNegate?: boolean\n  preserveMultipleSlashes?: boolean\n  optimizationLevel?: number\n  platform?: Platform\n  windowsNoMagicRoot?: boolean\n}\n\nexport const minimatch = (\n  p: string,\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  assertValidPattern(pattern)\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?\\*\\[\\(]*)$/\nconst starDotExtTest = (ext: string) => (f: string) =>\n  !f.startsWith('.') && f.endsWith(ext)\nconst starDotExtTestDot = (ext: string) => (f: string) => f.endsWith(ext)\nconst starDotExtTestNocase = (ext: string) => {\n  ext = ext.toLowerCase()\n  return (f: string) => !f.startsWith('.') && f.toLowerCase().endsWith(ext)\n}\nconst starDotExtTestNocaseDot = (ext: string) => {\n  ext = ext.toLowerCase()\n  return (f: string) => f.toLowerCase().endsWith(ext)\n}\nconst starDotStarRE = /^\\*+\\.\\*+$/\nconst starDotStarTest = (f: string) => !f.startsWith('.') && f.includes('.')\nconst starDotStarTestDot = (f: string) =>\n  f !== '.' && f !== '..' && f.includes('.')\nconst dotStarRE = /^\\.\\*+$/\nconst dotStarTest = (f: string) => f !== '.' && f !== '..' && f.startsWith('.')\nconst starRE = /^\\*+$/\nconst starTest = (f: string) => f.length !== 0 && !f.startsWith('.')\nconst starTestDot = (f: string) => f.length !== 0 && f !== '.' && f !== '..'\nconst qmarksRE = /^\\?+([^+@!?\\*\\[\\(]*)?$/\nconst qmarksTestNocase = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExt([$0])\n  if (!ext) return noext\n  ext = ext.toLowerCase()\n  return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestNocaseDot = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExtDot([$0])\n  if (!ext) return noext\n  ext = ext.toLowerCase()\n  return (f: string) => noext(f) && f.toLowerCase().endsWith(ext)\n}\nconst qmarksTestDot = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExtDot([$0])\n  return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTest = ([$0, ext = '']: RegExpMatchArray) => {\n  const noext = qmarksTestNoExt([$0])\n  return !ext ? noext : (f: string) => noext(f) && f.endsWith(ext)\n}\nconst qmarksTestNoExt = ([$0]: RegExpMatchArray) => {\n  const len = $0.length\n  return (f: string) => f.length === len && !f.startsWith('.')\n}\nconst qmarksTestNoExtDot = ([$0]: RegExpMatchArray) => {\n  const len = $0.length\n  return (f: string) => f.length === len && f !== '.' && f !== '..'\n}\n\n/* c8 ignore start */\nconst defaultPlatform: Platform = (\n  typeof process === 'object' && process\n    ? (typeof process.env === 'object' &&\n        process.env &&\n        process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n      process.platform\n    : 'posix'\n) as Platform\ntype Sep = '\\\\' | '/'\nconst path: { [k: string]: { sep: Sep } } = {\n  win32: { sep: '\\\\' },\n  posix: { sep: '/' },\n}\n/* c8 ignore stop */\n\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep\nminimatch.sep = sep\n\nexport const GLOBSTAR = Symbol('globstar **')\nminimatch.GLOBSTAR = GLOBSTAR\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]'\n\n// * => any number of characters\nconst star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?'\n\nexport const filter =\n  (pattern: string, options: MinimatchOptions = {}) =>\n  (p: string) =>\n    minimatch(p, pattern, options)\nminimatch.filter = filter\n\nconst ext = (a: MinimatchOptions, b: MinimatchOptions = {}) =>\n  Object.assign({}, a, b)\n\nexport const defaults = (def: MinimatchOptions): typeof minimatch => {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  const orig = minimatch\n\n  const m = (p: string, pattern: string, options: MinimatchOptions = {}) =>\n    orig(p, pattern, ext(def, options))\n\n  return Object.assign(m, {\n    Minimatch: class Minimatch extends orig.Minimatch {\n      constructor(pattern: string, options: MinimatchOptions = {}) {\n        super(pattern, ext(def, options))\n      }\n      static defaults(options: MinimatchOptions) {\n        return orig.defaults(ext(def, options)).Minimatch\n      }\n    },\n\n    AST: class AST extends orig.AST {\n      /* c8 ignore start */\n      constructor(\n        type: ExtglobType | null,\n        parent?: AST,\n        options: MinimatchOptions = {}\n      ) {\n        super(type, parent, ext(def, options))\n      }\n      /* c8 ignore stop */\n\n      static fromGlob(pattern: string, options: MinimatchOptions = {}) {\n        return orig.AST.fromGlob(pattern, ext(def, options))\n      }\n    },\n\n    unescape: (\n      s: string,\n      options: Pick = {}\n    ) => orig.unescape(s, ext(def, options)),\n\n    escape: (\n      s: string,\n      options: Pick = {}\n    ) => orig.escape(s, ext(def, options)),\n\n    filter: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.filter(pattern, ext(def, options)),\n\n    defaults: (options: MinimatchOptions) => orig.defaults(ext(def, options)),\n\n    makeRe: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.makeRe(pattern, ext(def, options)),\n\n    braceExpand: (pattern: string, options: MinimatchOptions = {}) =>\n      orig.braceExpand(pattern, ext(def, options)),\n\n    match: (list: string[], pattern: string, options: MinimatchOptions = {}) =>\n      orig.match(list, pattern, ext(def, options)),\n\n    sep: orig.sep,\n    GLOBSTAR: GLOBSTAR as typeof GLOBSTAR,\n  })\n}\nminimatch.defaults = defaults\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li  for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\nminimatch.braceExpand = braceExpand\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\n\nexport const makeRe = (pattern: string, options: MinimatchOptions = {}) =>\n  new Minimatch(pattern, options).makeRe()\nminimatch.makeRe = makeRe\n\nexport const match = (\n  list: string[],\n  pattern: string,\n  options: MinimatchOptions = {}\n) => {\n  const mm = new Minimatch(pattern, options)\n  list = list.filter(f => mm.match(f))\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\nminimatch.match = match\n\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/\nconst regExpEscape = (s: string) =>\n  s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n\nexport type MMRegExp = RegExp & {\n  _src?: string\n  _glob?: string\n}\n\nexport type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR\nexport type ParseReturn = ParseReturnFiltered | false\n\nexport class Minimatch {\n  options: MinimatchOptions\n  set: ParseReturnFiltered[][]\n  pattern: string\n\n  windowsPathsNoEscape: boolean\n  nonegate: boolean\n  negate: boolean\n  comment: boolean\n  empty: boolean\n  preserveMultipleSlashes: boolean\n  partial: boolean\n  globSet: string[]\n  globParts: string[][]\n  nocase: boolean\n\n  isWindows: boolean\n  platform: Platform\n  windowsNoMagicRoot: boolean\n\n  regexp: false | null | MMRegExp\n  constructor(pattern: string, options: MinimatchOptions = {}) {\n    assertValidPattern(pattern)\n\n    options = options || {}\n    this.options = options\n    this.pattern = pattern\n    this.platform = options.platform || defaultPlatform\n    this.isWindows = this.platform === 'win32'\n    this.windowsPathsNoEscape =\n      !!options.windowsPathsNoEscape || options.allowWindowsEscape === false\n    if (this.windowsPathsNoEscape) {\n      this.pattern = this.pattern.replace(/\\\\/g, '/')\n    }\n    this.preserveMultipleSlashes = !!options.preserveMultipleSlashes\n    this.regexp = null\n    this.negate = false\n    this.nonegate = !!options.nonegate\n    this.comment = false\n    this.empty = false\n    this.partial = !!options.partial\n    this.nocase = !!this.options.nocase\n    this.windowsNoMagicRoot =\n      options.windowsNoMagicRoot !== undefined\n        ? options.windowsNoMagicRoot\n        : !!(this.isWindows && this.nocase)\n\n    this.globSet = []\n    this.globParts = []\n    this.set = []\n\n    // make the set of regexps etc.\n    this.make()\n  }\n\n  hasMagic(): boolean {\n    if (this.options.magicalBraces && this.set.length > 1) {\n      return true\n    }\n    for (const pattern of this.set) {\n      for (const part of pattern) {\n        if (typeof part !== 'string') return true\n      }\n    }\n    return false\n  }\n\n  debug(..._: any[]) {}\n\n  make() {\n    const pattern = this.pattern\n    const options = this.options\n\n    // empty patterns and comments match nothing.\n    if (!options.nocomment && pattern.charAt(0) === '#') {\n      this.comment = true\n      return\n    }\n\n    if (!pattern) {\n      this.empty = true\n      return\n    }\n\n    // step 1: figure out negation, etc.\n    this.parseNegate()\n\n    // step 2: expand braces\n    this.globSet = [...new Set(this.braceExpand())]\n\n    if (options.debug) {\n      this.debug = (...args: any[]) => console.error(...args)\n    }\n\n    this.debug(this.pattern, this.globSet)\n\n    // step 3: now we have a set, so turn each one into a series of\n    // path-portion matching patterns.\n    // These will be regexps, except in the case of \"**\", which is\n    // set to the GLOBSTAR object for globstar behavior,\n    // and will not contain any / characters\n    //\n    // First, we preprocess to make the glob pattern sets a bit simpler\n    // and deduped.  There are some perf-killing patterns that can cause\n    // problems with a glob walk, but we can simplify them down a bit.\n    const rawGlobParts = this.globSet.map(s => this.slashSplit(s))\n    this.globParts = this.preprocess(rawGlobParts)\n    this.debug(this.pattern, this.globParts)\n\n    // glob --> regexps\n    let set = this.globParts.map((s, _, __) => {\n      if (this.isWindows && this.windowsNoMagicRoot) {\n        // check if it's a drive or unc path.\n        const isUNC =\n          s[0] === '' &&\n          s[1] === '' &&\n          (s[2] === '?' || !globMagic.test(s[2])) &&\n          !globMagic.test(s[3])\n        const isDrive = /^[a-z]:/i.test(s[0])\n        if (isUNC) {\n          return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))]\n        } else if (isDrive) {\n          return [s[0], ...s.slice(1).map(ss => this.parse(ss))]\n        }\n      }\n      return s.map(ss => this.parse(ss))\n    })\n\n    this.debug(this.pattern, set)\n\n    // filter out everything that didn't compile properly.\n    this.set = set.filter(\n      s => s.indexOf(false) === -1\n    ) as ParseReturnFiltered[][]\n\n    // do not treat the ? in UNC paths as magic\n    if (this.isWindows) {\n      for (let i = 0; i < this.set.length; i++) {\n        const p = this.set[i]\n        if (\n          p[0] === '' &&\n          p[1] === '' &&\n          this.globParts[i][2] === '?' &&\n          typeof p[3] === 'string' &&\n          /^[a-z]:$/i.test(p[3])\n        ) {\n          p[2] = '?'\n        }\n      }\n    }\n\n    this.debug(this.pattern, this.set)\n  }\n\n  // various transforms to equivalent pattern sets that are\n  // faster to process in a filesystem walk.  The goal is to\n  // eliminate what we can, and push all ** patterns as far\n  // to the right as possible, even if it increases the number\n  // of patterns that we have to process.\n  preprocess(globParts: string[][]) {\n    // if we're not in globstar mode, then turn all ** into *\n    if (this.options.noglobstar) {\n      for (let i = 0; i < globParts.length; i++) {\n        for (let j = 0; j < globParts[i].length; j++) {\n          if (globParts[i][j] === '**') {\n            globParts[i][j] = '*'\n          }\n        }\n      }\n    }\n\n    const { optimizationLevel = 1 } = this.options\n\n    if (optimizationLevel >= 2) {\n      // aggressive optimization for the purpose of fs walking\n      globParts = this.firstPhasePreProcess(globParts)\n      globParts = this.secondPhasePreProcess(globParts)\n    } else if (optimizationLevel >= 1) {\n      // just basic optimizations to remove some .. parts\n      globParts = this.levelOneOptimize(globParts)\n    } else {\n      // just collapse multiple ** portions into one\n      globParts = this.adjascentGlobstarOptimize(globParts)\n    }\n\n    return globParts\n  }\n\n  // just get rid of adjascent ** portions\n  adjascentGlobstarOptimize(globParts: string[][]) {\n    return globParts.map(parts => {\n      let gs: number = -1\n      while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n        let i = gs\n        while (parts[i + 1] === '**') {\n          i++\n        }\n        if (i !== gs) {\n          parts.splice(gs, i - gs)\n        }\n      }\n      return parts\n    })\n  }\n\n  // get rid of adjascent ** and resolve .. portions\n  levelOneOptimize(globParts: string[][]) {\n    return globParts.map(parts => {\n      parts = parts.reduce((set: string[], part) => {\n        const prev = set[set.length - 1]\n        if (part === '**' && prev === '**') {\n          return set\n        }\n        if (part === '..') {\n          if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n            set.pop()\n            return set\n          }\n        }\n        set.push(part)\n        return set\n      }, [])\n      return parts.length === 0 ? [''] : parts\n    })\n  }\n\n  levelTwoFileOptimize(parts: string | string[]) {\n    if (!Array.isArray(parts)) {\n      parts = this.slashSplit(parts)\n    }\n    let didSomething: boolean = false\n    do {\n      didSomething = false\n      // 
// -> 
/\n      if (!this.preserveMultipleSlashes) {\n        for (let i = 1; i < parts.length - 1; i++) {\n          const p = parts[i]\n          // don't squeeze out UNC patterns\n          if (i === 1 && p === '' && parts[0] === '') continue\n          if (p === '.' || p === '') {\n            didSomething = true\n            parts.splice(i, 1)\n            i--\n          }\n        }\n        if (\n          parts[0] === '.' &&\n          parts.length === 2 &&\n          (parts[1] === '.' || parts[1] === '')\n        ) {\n          didSomething = true\n          parts.pop()\n        }\n      }\n\n      // 
/

/../ ->

/\n      let dd: number = 0\n      while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n        const p = parts[dd - 1]\n        if (p && p !== '.' && p !== '..' && p !== '**') {\n          didSomething = true\n          parts.splice(dd - 1, 2)\n          dd -= 2\n        }\n      }\n    } while (didSomething)\n    return parts.length === 0 ? [''] : parts\n  }\n\n  // First phase: single-pattern processing\n  // 
 is 1 or more portions\n  //  is 1 or more portions\n  // 

is any portion other than ., .., '', or **\n // is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/}\n //

// -> 
/\n  // 
/

/../ ->

/\n  // **/**/ -> **/\n  //\n  // **/*/ -> */**/ <== not valid because ** doesn't follow\n  // this WOULD be allowed if ** did follow symlinks, or * didn't\n  firstPhasePreProcess(globParts: string[][]) {\n    let didSomething = false\n    do {\n      didSomething = false\n      // 
/**/../

/

/ -> {

/../

/

/,

/**/

/

/}\n for (let parts of globParts) {\n let gs: number = -1\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss: number = gs\n while (parts[gss + 1] === '**') {\n //

/**/**/ -> 
/**/\n            gss++\n          }\n          // eg, if gs is 2 and gss is 4, that means we have 3 **\n          // parts, and can remove 2 of them.\n          if (gss > gs) {\n            parts.splice(gs + 1, gss - gs)\n          }\n\n          let next = parts[gs + 1]\n          const p = parts[gs + 2]\n          const p2 = parts[gs + 3]\n          if (next !== '..') continue\n          if (\n            !p ||\n            p === '.' ||\n            p === '..' ||\n            !p2 ||\n            p2 === '.' ||\n            p2 === '..'\n          ) {\n            continue\n          }\n          didSomething = true\n          // edit parts in place, and push the new one\n          parts.splice(gs, 1)\n          const other = parts.slice(0)\n          other[gs] = '**'\n          globParts.push(other)\n          gs--\n        }\n\n        // 
// -> 
/\n        if (!this.preserveMultipleSlashes) {\n          for (let i = 1; i < parts.length - 1; i++) {\n            const p = parts[i]\n            // don't squeeze out UNC patterns\n            if (i === 1 && p === '' && parts[0] === '') continue\n            if (p === '.' || p === '') {\n              didSomething = true\n              parts.splice(i, 1)\n              i--\n            }\n          }\n          if (\n            parts[0] === '.' &&\n            parts.length === 2 &&\n            (parts[1] === '.' || parts[1] === '')\n          ) {\n            didSomething = true\n            parts.pop()\n          }\n        }\n\n        // 
/

/../ ->

/\n        let dd: number = 0\n        while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n          const p = parts[dd - 1]\n          if (p && p !== '.' && p !== '..' && p !== '**') {\n            didSomething = true\n            const needDot = dd === 1 && parts[dd + 1] === '**'\n            const splin = needDot ? ['.'] : []\n            parts.splice(dd - 1, 2, ...splin)\n            if (parts.length === 0) parts.push('')\n            dd -= 2\n          }\n        }\n      }\n    } while (didSomething)\n\n    return globParts\n  }\n\n  // second phase: multi-pattern dedupes\n  // {
/*/,
/

/} ->

/*/\n  // {
/,
/} -> 
/\n  // {
/**/,
/} -> 
/**/\n  //\n  // {
/**/,
/**/

/} ->

/**/\n  // ^-- not valid because ** doens't follow symlinks\n  secondPhasePreProcess(globParts: string[][]): string[][] {\n    for (let i = 0; i < globParts.length - 1; i++) {\n      for (let j = i + 1; j < globParts.length; j++) {\n        const matched = this.partsMatch(\n          globParts[i],\n          globParts[j],\n          !this.preserveMultipleSlashes\n        )\n        if (matched) {\n          globParts[i] = []\n          globParts[j] = matched\n          break\n        }\n      }\n    }\n    return globParts.filter(gs => gs.length)\n  }\n\n  partsMatch(\n    a: string[],\n    b: string[],\n    emptyGSMatch: boolean = false\n  ): false | string[] {\n    let ai = 0\n    let bi = 0\n    let result: string[] = []\n    let which: string = ''\n    while (ai < a.length && bi < b.length) {\n      if (a[ai] === b[bi]) {\n        result.push(which === 'b' ? b[bi] : a[ai])\n        ai++\n        bi++\n      } else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n        result.push(a[ai])\n        ai++\n      } else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n        result.push(b[bi])\n        bi++\n      } else if (\n        a[ai] === '*' &&\n        b[bi] &&\n        (this.options.dot || !b[bi].startsWith('.')) &&\n        b[bi] !== '**'\n      ) {\n        if (which === 'b') return false\n        which = 'a'\n        result.push(a[ai])\n        ai++\n        bi++\n      } else if (\n        b[bi] === '*' &&\n        a[ai] &&\n        (this.options.dot || !a[ai].startsWith('.')) &&\n        a[ai] !== '**'\n      ) {\n        if (which === 'a') return false\n        which = 'b'\n        result.push(b[bi])\n        ai++\n        bi++\n      } else {\n        return false\n      }\n    }\n    // if we fall out of the loop, it means they two are identical\n    // as long as their lengths match\n    return a.length === b.length && result\n  }\n\n  parseNegate() {\n    if (this.nonegate) return\n\n    const pattern = this.pattern\n    let negate = false\n    let negateOffset = 0\n\n    for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n      negate = !negate\n      negateOffset++\n    }\n\n    if (negateOffset) this.pattern = pattern.slice(negateOffset)\n    this.negate = negate\n  }\n\n  // set partial to true to test if, for example,\n  // \"/a/b\" matches the start of \"/*/b/*/d\"\n  // Partial means, if you run out of file before you run\n  // out of pattern, then that's fine, as long as all\n  // the parts match.\n  matchOne(file: string[], pattern: ParseReturn[], partial: boolean = false) {\n    const options = this.options\n\n    // UNC paths like //?/X:/... can match X:/... and vice versa\n    // Drive letters in absolute drive or unc paths are always compared\n    // case-insensitively.\n    if (this.isWindows) {\n      const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0])\n      const fileUNC =\n        !fileDrive &&\n        file[0] === '' &&\n        file[1] === '' &&\n        file[2] === '?' &&\n        /^[a-z]:$/i.test(file[3])\n\n      const patternDrive =\n        typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0])\n      const patternUNC =\n        !patternDrive &&\n        pattern[0] === '' &&\n        pattern[1] === '' &&\n        pattern[2] === '?' &&\n        typeof pattern[3] === 'string' &&\n        /^[a-z]:$/i.test(pattern[3])\n\n      const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined\n      const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined\n      if (typeof fdi === 'number' && typeof pdi === 'number') {\n        const [fd, pd]: [string, string] = [file[fdi], pattern[pdi] as string]\n        if (fd.toLowerCase() === pd.toLowerCase()) {\n          pattern[pdi] = fd\n          if (pdi > fdi) {\n            pattern = pattern.slice(pdi)\n          } else if (fdi > pdi) {\n            file = file.slice(fdi)\n          }\n        }\n      }\n    }\n\n    // resolve and reduce . and .. portions in the file as well.\n    // dont' need to do the second phase, because it's only one string[]\n    const { optimizationLevel = 1 } = this.options\n    if (optimizationLevel >= 2) {\n      file = this.levelTwoFileOptimize(file)\n    }\n\n    this.debug('matchOne', this, { file, pattern })\n    this.debug('matchOne', file.length, pattern.length)\n\n    for (\n      var fi = 0, pi = 0, fl = file.length, pl = pattern.length;\n      fi < fl && pi < pl;\n      fi++, pi++\n    ) {\n      this.debug('matchOne loop')\n      var p = pattern[pi]\n      var f = file[fi]\n\n      this.debug(pattern, p, f)\n\n      // should be impossible.\n      // some invalid regexp stuff in the set.\n      /* c8 ignore start */\n      if (p === false) {\n        return false\n      }\n      /* c8 ignore stop */\n\n      if (p === GLOBSTAR) {\n        this.debug('GLOBSTAR', [pattern, p, f])\n\n        // \"**\"\n        // a/**/b/**/c would match the following:\n        // a/b/x/y/z/c\n        // a/x/y/z/b/c\n        // a/b/x/b/x/c\n        // a/b/c\n        // To do this, take the rest of the pattern after\n        // the **, and see if it would match the file remainder.\n        // If so, return success.\n        // If not, the ** \"swallows\" a segment, and try again.\n        // This is recursively awful.\n        //\n        // a/**/b/**/c matching a/b/x/y/z/c\n        // - a matches a\n        // - doublestar\n        //   - matchOne(b/x/y/z/c, b/**/c)\n        //     - b matches b\n        //     - doublestar\n        //       - matchOne(x/y/z/c, c) -> no\n        //       - matchOne(y/z/c, c) -> no\n        //       - matchOne(z/c, c) -> no\n        //       - matchOne(c, c) yes, hit\n        var fr = fi\n        var pr = pi + 1\n        if (pr === pl) {\n          this.debug('** at the end')\n          // a ** at the end will just swallow the rest.\n          // We have found a match.\n          // however, it will not swallow /.x, unless\n          // options.dot is set.\n          // . and .. are *never* matched by **, for explosively\n          // exponential reasons.\n          for (; fi < fl; fi++) {\n            if (\n              file[fi] === '.' ||\n              file[fi] === '..' ||\n              (!options.dot && file[fi].charAt(0) === '.')\n            )\n              return false\n          }\n          return true\n        }\n\n        // ok, let's see if we can swallow whatever we can.\n        while (fr < fl) {\n          var swallowee = file[fr]\n\n          this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n          // XXX remove this slice.  Just pass the start index.\n          if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n            this.debug('globstar found match!', fr, fl, swallowee)\n            // found a match.\n            return true\n          } else {\n            // can't swallow \".\" or \"..\" ever.\n            // can only swallow \".foo\" when explicitly asked.\n            if (\n              swallowee === '.' ||\n              swallowee === '..' ||\n              (!options.dot && swallowee.charAt(0) === '.')\n            ) {\n              this.debug('dot detected!', file, fr, pattern, pr)\n              break\n            }\n\n            // ** swallows a segment, and continue.\n            this.debug('globstar swallow a segment, and continue')\n            fr++\n          }\n        }\n\n        // no match was found.\n        // However, in partial mode, we can't say this is necessarily over.\n        /* c8 ignore start */\n        if (partial) {\n          // ran out of file\n          this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n          if (fr === fl) {\n            return true\n          }\n        }\n        /* c8 ignore stop */\n        return false\n      }\n\n      // something other than **\n      // non-magic patterns just have to match exactly\n      // patterns with magic have been turned into regexps.\n      let hit: boolean\n      if (typeof p === 'string') {\n        hit = f === p\n        this.debug('string match', p, f, hit)\n      } else {\n        hit = p.test(f)\n        this.debug('pattern match', p, f, hit)\n      }\n\n      if (!hit) return false\n    }\n\n    // Note: ending in / means that we'll get a final \"\"\n    // at the end of the pattern.  This can only match a\n    // corresponding \"\" at the end of the file.\n    // If the file ends in /, then it can only match a\n    // a pattern that ends in /, unless the pattern just\n    // doesn't have any more for it. But, a/b/ should *not*\n    // match \"a/b/*\", even though \"\" matches against the\n    // [^/]*? pattern, except in partial mode, where it might\n    // simply not be reached yet.\n    // However, a/b/ should still satisfy a/*\n\n    // now either we fell off the end of the pattern, or we're done.\n    if (fi === fl && pi === pl) {\n      // ran out of pattern and filename at the same time.\n      // an exact hit!\n      return true\n    } else if (fi === fl) {\n      // ran out of file, but still had pattern left.\n      // this is ok if we're doing the match as part of\n      // a glob fs traversal.\n      return partial\n    } else if (pi === pl) {\n      // ran out of pattern, still have file left.\n      // this is only acceptable if we're on the very last\n      // empty segment of a file with a trailing slash.\n      // a/* should match a/b/\n      return fi === fl - 1 && file[fi] === ''\n\n      /* c8 ignore start */\n    } else {\n      // should be unreachable.\n      throw new Error('wtf?')\n    }\n    /* c8 ignore stop */\n  }\n\n  braceExpand() {\n    return braceExpand(this.pattern, this.options)\n  }\n\n  parse(pattern: string): ParseReturn {\n    assertValidPattern(pattern)\n\n    const options = this.options\n\n    // shortcuts\n    if (pattern === '**') return GLOBSTAR\n    if (pattern === '') return ''\n\n    // far and away, the most common glob pattern parts are\n    // *, *.*, and *.  Add a fast check method for those.\n    let m: RegExpMatchArray | null\n    let fastTest: null | ((f: string) => boolean) = null\n    if ((m = pattern.match(starRE))) {\n      fastTest = options.dot ? starTestDot : starTest\n    } else if ((m = pattern.match(starDotExtRE))) {\n      fastTest = (\n        options.nocase\n          ? options.dot\n            ? starDotExtTestNocaseDot\n            : starDotExtTestNocase\n          : options.dot\n          ? starDotExtTestDot\n          : starDotExtTest\n      )(m[1])\n    } else if ((m = pattern.match(qmarksRE))) {\n      fastTest = (\n        options.nocase\n          ? options.dot\n            ? qmarksTestNocaseDot\n            : qmarksTestNocase\n          : options.dot\n          ? qmarksTestDot\n          : qmarksTest\n      )(m)\n    } else if ((m = pattern.match(starDotStarRE))) {\n      fastTest = options.dot ? starDotStarTestDot : starDotStarTest\n    } else if ((m = pattern.match(dotStarRE))) {\n      fastTest = dotStarTest\n    }\n\n    const re = AST.fromGlob(pattern, this.options).toMMPattern()\n    if (fastTest && typeof re === 'object') {\n      // Avoids overriding in frozen environments\n      Reflect.defineProperty(re, 'test', { value: fastTest })\n    }\n    return re\n  }\n\n  makeRe() {\n    if (this.regexp || this.regexp === false) return this.regexp\n\n    // at this point, this.set is a 2d array of partial\n    // pattern strings, or \"**\".\n    //\n    // It's better to use .match().  This function shouldn't\n    // be used, really, but it's pretty convenient sometimes,\n    // when you just want to work with a regex.\n    const set = this.set\n\n    if (!set.length) {\n      this.regexp = false\n      return this.regexp\n    }\n    const options = this.options\n\n    const twoStar = options.noglobstar\n      ? star\n      : options.dot\n      ? twoStarDot\n      : twoStarNoDot\n    const flags = new Set(options.nocase ? ['i'] : [])\n\n    // regexpify non-globstar patterns\n    // if ** is only item, then we just do one twoStar\n    // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n    // if ** is last, append (\\/twoStar|) to previous\n    // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n    // then filter out GLOBSTAR symbols\n    let re = set\n      .map(pattern => {\n        const pp: (string | typeof GLOBSTAR)[] = pattern.map(p => {\n          if (p instanceof RegExp) {\n            for (const f of p.flags.split('')) flags.add(f)\n          }\n          return typeof p === 'string'\n            ? regExpEscape(p)\n            : p === GLOBSTAR\n            ? GLOBSTAR\n            : p._src\n        }) as (string | typeof GLOBSTAR)[]\n        pp.forEach((p, i) => {\n          const next = pp[i + 1]\n          const prev = pp[i - 1]\n          if (p !== GLOBSTAR || prev === GLOBSTAR) {\n            return\n          }\n          if (prev === undefined) {\n            if (next !== undefined && next !== GLOBSTAR) {\n              pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next\n            } else {\n              pp[i] = twoStar\n            }\n          } else if (next === undefined) {\n            pp[i - 1] = prev + '(?:\\\\/|' + twoStar + ')?'\n          } else if (next !== GLOBSTAR) {\n            pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next\n            pp[i + 1] = GLOBSTAR\n          }\n        })\n        return pp.filter(p => p !== GLOBSTAR).join('/')\n      })\n      .join('|')\n\n    // need to wrap in parens if we had more than one thing with |,\n    // otherwise only the first will be anchored to ^ and the last to $\n    const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', '']\n    // must match entire pattern\n    // ending in a * or ** will make it less strict.\n    re = '^' + open + re + close + '$'\n\n    // can match anything, as long as it's not this.\n    if (this.negate) re = '^(?!' + re + ').+$'\n\n    try {\n      this.regexp = new RegExp(re, [...flags].join(''))\n      /* c8 ignore start */\n    } catch (ex) {\n      // should be impossible\n      this.regexp = false\n    }\n    /* c8 ignore stop */\n    return this.regexp\n  }\n\n  slashSplit(p: string) {\n    // if p starts with // on windows, we preserve that\n    // so that UNC paths aren't broken.  Otherwise, any number of\n    // / characters are coalesced into one, unless\n    // preserveMultipleSlashes is set to true.\n    if (this.preserveMultipleSlashes) {\n      return p.split('/')\n    } else if (this.isWindows && /^\\/\\/[^\\/]+/.test(p)) {\n      // add an extra '' for the one we lose\n      return ['', ...p.split(/\\/+/)]\n    } else {\n      return p.split(/\\/+/)\n    }\n  }\n\n  match(f: string, partial = this.partial) {\n    this.debug('match', f, this.pattern)\n    // short-circuit in the case of busted things.\n    // comments, etc.\n    if (this.comment) {\n      return false\n    }\n    if (this.empty) {\n      return f === ''\n    }\n\n    if (f === '/' && partial) {\n      return true\n    }\n\n    const options = this.options\n\n    // windows: need to use /, not \\\n    if (this.isWindows) {\n      f = f.split('\\\\').join('/')\n    }\n\n    // treat the test path as a set of pathparts.\n    const ff = this.slashSplit(f)\n    this.debug(this.pattern, 'split', ff)\n\n    // just ONE of the pattern sets in this.set needs to match\n    // in order for it to be valid.  If negating, then just one\n    // match means that we have failed.\n    // Either way, return on the first hit.\n\n    const set = this.set\n    this.debug(this.pattern, 'set', set)\n\n    // Find the basename of the path by looking for the last non-empty segment\n    let filename: string = ff[ff.length - 1]\n    if (!filename) {\n      for (let i = ff.length - 2; !filename && i >= 0; i--) {\n        filename = ff[i]\n      }\n    }\n\n    for (let i = 0; i < set.length; i++) {\n      const pattern = set[i]\n      let file = ff\n      if (options.matchBase && pattern.length === 1) {\n        file = [filename]\n      }\n      const hit = this.matchOne(file, pattern, partial)\n      if (hit) {\n        if (options.flipNegate) {\n          return true\n        }\n        return !this.negate\n      }\n    }\n\n    // didn't get any hits.  this is success if it's a negative\n    // pattern, failure otherwise.\n    if (options.flipNegate) {\n      return false\n    }\n    return this.negate\n  }\n\n  static defaults(def: MinimatchOptions) {\n    return minimatch.defaults(def).Minimatch\n  }\n}\n/* c8 ignore start */\nexport { AST } from './ast.js'\nexport { escape } from './escape.js'\nexport { unescape } from './unescape.js'\n/* c8 ignore stop */\nminimatch.AST = AST\nminimatch.Minimatch = Minimatch\nminimatch.escape = escape\nminimatch.unescape = unescape\n"]}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/package.json b/node_modules/minimatch/dist/esm/package.json
new file mode 100644
index 00000000..3dbc1ca5
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "module"
+}
diff --git a/node_modules/minimatch/dist/esm/unescape.d.ts b/node_modules/minimatch/dist/esm/unescape.d.ts
new file mode 100644
index 00000000..2a36f873
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/unescape.d.ts
@@ -0,0 +1,17 @@
+import { MinimatchOptions } from './index.js';
+/**
+ * Un-escape a string that has been escaped with {@link escape}.
+ *
+ * If the {@link windowsPathsNoEscape} option is used, then square-brace
+ * escapes are removed, but not backslash escapes.  For example, it will turn
+ * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`,
+ * becuase `\` is a path separator in `windowsPathsNoEscape` mode.
+ *
+ * When `windowsPathsNoEscape` is not set, then both brace escapes and
+ * backslash escapes are removed.
+ *
+ * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
+ * or unescaped.
+ */
+export declare const unescape: (s: string, { windowsPathsNoEscape, }?: Pick) => string;
+//# sourceMappingURL=unescape.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/unescape.d.ts.map b/node_modules/minimatch/dist/esm/unescape.d.ts.map
new file mode 100644
index 00000000..e268215b
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/unescape.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"unescape.d.ts","sourceRoot":"","sources":["../../src/unescape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,QAAQ,MAChB,MAAM,8BAGN,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,WAKlD,CAAA"}
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/unescape.js b/node_modules/minimatch/dist/esm/unescape.js
new file mode 100644
index 00000000..0faf9a2b
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/unescape.js
@@ -0,0 +1,20 @@
+/**
+ * Un-escape a string that has been escaped with {@link escape}.
+ *
+ * If the {@link windowsPathsNoEscape} option is used, then square-brace
+ * escapes are removed, but not backslash escapes.  For example, it will turn
+ * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`,
+ * becuase `\` is a path separator in `windowsPathsNoEscape` mode.
+ *
+ * When `windowsPathsNoEscape` is not set, then both brace escapes and
+ * backslash escapes are removed.
+ *
+ * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
+ * or unescaped.
+ */
+export const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {
+    return windowsPathsNoEscape
+        ? s.replace(/\[([^\/\\])\]/g, '$1')
+        : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, '$1$2').replace(/\\([^\/])/g, '$1');
+};
+//# sourceMappingURL=unescape.js.map
\ No newline at end of file
diff --git a/node_modules/minimatch/dist/esm/unescape.js.map b/node_modules/minimatch/dist/esm/unescape.js.map
new file mode 100644
index 00000000..eb146c20
--- /dev/null
+++ b/node_modules/minimatch/dist/esm/unescape.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unescape.js","sourceRoot":"","sources":["../../src/unescape.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,CAAS,EACT,EACE,oBAAoB,GAAG,KAAK,MACsB,EAAE,EACtD,EAAE;IACF,OAAO,oBAAoB;QACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QACnC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAChF,CAAC,CAAA","sourcesContent":["import { MinimatchOptions } from './index.js'\n/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes.  For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick = {}\n) => {\n  return windowsPathsNoEscape\n    ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n    : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1')\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json
new file mode 100644
index 00000000..5f6b84d8
--- /dev/null
+++ b/node_modules/minimatch/package.json
@@ -0,0 +1,80 @@
+{
+  "author": "Isaac Z. Schlueter  (http://blog.izs.me)",
+  "name": "minimatch",
+  "description": "a glob matcher in javascript",
+  "version": "10.0.1",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/isaacs/minimatch.git"
+  },
+  "main": "./dist/commonjs/index.js",
+  "types": "./dist/commonjs/index.d.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"
+      }
+    }
+  },
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "preversion": "npm test",
+    "postversion": "npm publish",
+    "prepublishOnly": "git push origin --follow-tags",
+    "prepare": "tshy",
+    "pretest": "npm run prepare",
+    "presnap": "npm run prepare",
+    "test": "tap",
+    "snap": "tap",
+    "format": "prettier --write . --loglevel warn",
+    "benchmark": "node benchmark/index.js",
+    "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
+  },
+  "prettier": {
+    "semi": false,
+    "printWidth": 80,
+    "tabWidth": 2,
+    "useTabs": false,
+    "singleQuote": true,
+    "jsxSingleQuote": false,
+    "bracketSameLine": true,
+    "arrowParens": "avoid",
+    "endOfLine": "lf"
+  },
+  "engines": {
+    "node": "20 || >=22"
+  },
+  "dependencies": {
+    "brace-expansion": "^2.0.1"
+  },
+  "devDependencies": {
+    "@types/brace-expansion": "^1.1.2",
+    "@types/node": "^20.14.10",
+    "mkdirp": "^3.0.1",
+    "prettier": "^3.3.2",
+    "tap": "^20.0.3",
+    "tshy": "^2.0.1",
+    "typedoc": "^0.26.3",
+    "typescript": "^5.5.3"
+  },
+  "funding": {
+    "url": "https://github.com/sponsors/isaacs"
+  },
+  "license": "ISC",
+  "tshy": {
+    "exports": {
+      "./package.json": "./package.json",
+      ".": "./src/index.ts"
+    }
+  },
+  "type": "module",
+  "module": "./dist/esm/index.js"
+}
diff --git a/node_modules/minipass/LICENSE b/node_modules/minipass/LICENSE
new file mode 100644
index 00000000..97f8e32e
--- /dev/null
+++ b/node_modules/minipass/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2017-2023 npm, Inc., Isaac Z. Schlueter, and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/minipass/README.md b/node_modules/minipass/README.md
new file mode 100644
index 00000000..11263305
--- /dev/null
+++ b/node_modules/minipass/README.md
@@ -0,0 +1,825 @@
+# minipass
+
+A _very_ minimal implementation of a [PassThrough
+stream](https://nodejs.org/api/stream.html#stream_class_stream_passthrough)
+
+[It's very
+fast](https://docs.google.com/spreadsheets/d/1K_HR5oh3r80b8WVMWCPPjfuWXUgfkmhlX7FGI6JJ8tY/edit?usp=sharing)
+for objects, strings, and buffers.
+
+Supports `pipe()`ing (including multi-`pipe()` and backpressure
+transmission), buffering data until either a `data` event handler
+or `pipe()` is added (so you don't lose the first chunk), and
+most other cases where PassThrough is a good idea.
+
+There is a `read()` method, but it's much more efficient to
+consume data from this stream via `'data'` events or by calling
+`pipe()` into some other stream. Calling `read()` requires the
+buffer to be flattened in some cases, which requires copying
+memory.
+
+If you set `objectMode: true` in the options, then whatever is
+written will be emitted. Otherwise, it'll do a minimal amount of
+Buffer copying to ensure proper Streams semantics when `read(n)`
+is called.
+
+`objectMode` can only be set at instantiation. Attempting to
+write something other than a String or Buffer without having set
+`objectMode` in the options will throw an error.
+
+This is not a `through` or `through2` stream. It doesn't
+transform the data, it just passes it right through. If you want
+to transform the data, extend the class, and override the
+`write()` method. Once you're done transforming the data however
+you want, call `super.write()` with the transform output.
+
+For some examples of streams that extend Minipass in various
+ways, check out:
+
+- [minizlib](http://npm.im/minizlib)
+- [fs-minipass](http://npm.im/fs-minipass)
+- [tar](http://npm.im/tar)
+- [minipass-collect](http://npm.im/minipass-collect)
+- [minipass-flush](http://npm.im/minipass-flush)
+- [minipass-pipeline](http://npm.im/minipass-pipeline)
+- [tap](http://npm.im/tap)
+- [tap-parser](http://npm.im/tap-parser)
+- [treport](http://npm.im/treport)
+- [minipass-fetch](http://npm.im/minipass-fetch)
+- [pacote](http://npm.im/pacote)
+- [make-fetch-happen](http://npm.im/make-fetch-happen)
+- [cacache](http://npm.im/cacache)
+- [ssri](http://npm.im/ssri)
+- [npm-registry-fetch](http://npm.im/npm-registry-fetch)
+- [minipass-json-stream](http://npm.im/minipass-json-stream)
+- [minipass-sized](http://npm.im/minipass-sized)
+
+## Usage in TypeScript
+
+The `Minipass` class takes three type template definitions:
+
+- `RType` the type being read, which defaults to `Buffer`. If
+  `RType` is `string`, then the constructor _must_ get an options
+  object specifying either an `encoding` or `objectMode: true`.
+  If it's anything other than `string` or `Buffer`, then it
+  _must_ get an options object specifying `objectMode: true`.
+- `WType` the type being written. If `RType` is `Buffer` or
+  `string`, then this defaults to `ContiguousData` (Buffer,
+  string, ArrayBuffer, or ArrayBufferView). Otherwise, it
+  defaults to `RType`.
+- `Events` type mapping event names to the arguments emitted
+  with that event, which extends `Minipass.Events`.
+
+To declare types for custom events in subclasses, extend the
+third parameter with your own event signatures. For example:
+
+```js
+import { Minipass } from 'minipass'
+
+// a NDJSON stream that emits 'jsonError' when it can't stringify
+export interface Events extends Minipass.Events {
+  jsonError: [e: Error]
+}
+
+export class NDJSONStream extends Minipass {
+  constructor() {
+    super({ objectMode: true })
+  }
+
+  // data is type `any` because that's WType
+  write(data, encoding, cb) {
+    try {
+      const json = JSON.stringify(data)
+      return super.write(json + '\n', encoding, cb)
+    } catch (er) {
+      if (!er instanceof Error) {
+        er = Object.assign(new Error('json stringify failed'), {
+          cause: er,
+        })
+      }
+      // trying to emit with something OTHER than an error will
+      // fail, because we declared the event arguments type.
+      this.emit('jsonError', er)
+    }
+  }
+}
+
+const s = new NDJSONStream()
+s.on('jsonError', e => {
+  // here, TS knows that e is an Error
+})
+```
+
+Emitting/handling events that aren't declared in this way is
+fine, but the arguments will be typed as `unknown`.
+
+## Differences from Node.js Streams
+
+There are several things that make Minipass streams different
+from (and in some ways superior to) Node.js core streams.
+
+Please read these caveats if you are familiar with node-core
+streams and intend to use Minipass streams in your programs.
+
+You can avoid most of these differences entirely (for a very
+small performance penalty) by setting `{async: true}` in the
+constructor options.
+
+### Timing
+
+Minipass streams are designed to support synchronous use-cases.
+Thus, data is emitted as soon as it is available, always. It is
+buffered until read, but no longer. Another way to look at it is
+that Minipass streams are exactly as synchronous as the logic
+that writes into them.
+
+This can be surprising if your code relies on
+`PassThrough.write()` always providing data on the next tick
+rather than the current one, or being able to call `resume()` and
+not have the entire buffer disappear immediately.
+
+However, without this synchronicity guarantee, there would be no
+way for Minipass to achieve the speeds it does, or support the
+synchronous use cases that it does. Simply put, waiting takes
+time.
+
+This non-deferring approach makes Minipass streams much easier to
+reason about, especially in the context of Promises and other
+flow-control mechanisms.
+
+Example:
+
+```js
+// hybrid module, either works
+import { Minipass } from 'minipass'
+// or:
+const { Minipass } = require('minipass')
+
+const stream = new Minipass()
+stream.on('data', () => console.log('data event'))
+console.log('before write')
+stream.write('hello')
+console.log('after write')
+// output:
+// before write
+// data event
+// after write
+```
+
+### Exception: Async Opt-In
+
+If you wish to have a Minipass stream with behavior that more
+closely mimics Node.js core streams, you can set the stream in
+async mode either by setting `async: true` in the constructor
+options, or by setting `stream.async = true` later on.
+
+```js
+// hybrid module, either works
+import { Minipass } from 'minipass'
+// or:
+const { Minipass } = require('minipass')
+
+const asyncStream = new Minipass({ async: true })
+asyncStream.on('data', () => console.log('data event'))
+console.log('before write')
+asyncStream.write('hello')
+console.log('after write')
+// output:
+// before write
+// after write
+// data event <-- this is deferred until the next tick
+```
+
+Switching _out_ of async mode is unsafe, as it could cause data
+corruption, and so is not enabled. Example:
+
+```js
+import { Minipass } from 'minipass'
+const stream = new Minipass({ encoding: 'utf8' })
+stream.on('data', chunk => console.log(chunk))
+stream.async = true
+console.log('before writes')
+stream.write('hello')
+setStreamSyncAgainSomehow(stream) // <-- this doesn't actually exist!
+stream.write('world')
+console.log('after writes')
+// hypothetical output would be:
+// before writes
+// world
+// after writes
+// hello
+// NOT GOOD!
+```
+
+To avoid this problem, once set into async mode, any attempt to
+make the stream sync again will be ignored.
+
+```js
+const { Minipass } = require('minipass')
+const stream = new Minipass({ encoding: 'utf8' })
+stream.on('data', chunk => console.log(chunk))
+stream.async = true
+console.log('before writes')
+stream.write('hello')
+stream.async = false // <-- no-op, stream already async
+stream.write('world')
+console.log('after writes')
+// actual output:
+// before writes
+// after writes
+// hello
+// world
+```
+
+### No High/Low Water Marks
+
+Node.js core streams will optimistically fill up a buffer,
+returning `true` on all writes until the limit is hit, even if
+the data has nowhere to go. Then, they will not attempt to draw
+more data in until the buffer size dips below a minimum value.
+
+Minipass streams are much simpler. The `write()` method will
+return `true` if the data has somewhere to go (which is to say,
+given the timing guarantees, that the data is already there by
+the time `write()` returns).
+
+If the data has nowhere to go, then `write()` returns false, and
+the data sits in a buffer, to be drained out immediately as soon
+as anyone consumes it.
+
+Since nothing is ever buffered unnecessarily, there is much less
+copying data, and less bookkeeping about buffer capacity levels.
+
+### Hazards of Buffering (or: Why Minipass Is So Fast)
+
+Since data written to a Minipass stream is immediately written
+all the way through the pipeline, and `write()` always returns
+true/false based on whether the data was fully flushed,
+backpressure is communicated immediately to the upstream caller.
+This minimizes buffering.
+
+Consider this case:
+
+```js
+const { PassThrough } = require('stream')
+const p1 = new PassThrough({ highWaterMark: 1024 })
+const p2 = new PassThrough({ highWaterMark: 1024 })
+const p3 = new PassThrough({ highWaterMark: 1024 })
+const p4 = new PassThrough({ highWaterMark: 1024 })
+
+p1.pipe(p2).pipe(p3).pipe(p4)
+p4.on('data', () => console.log('made it through'))
+
+// this returns false and buffers, then writes to p2 on next tick (1)
+// p2 returns false and buffers, pausing p1, then writes to p3 on next tick (2)
+// p3 returns false and buffers, pausing p2, then writes to p4 on next tick (3)
+// p4 returns false and buffers, pausing p3, then emits 'data' and 'drain'
+// on next tick (4)
+// p3 sees p4's 'drain' event, and calls resume(), emitting 'resume' and
+// 'drain' on next tick (5)
+// p2 sees p3's 'drain', calls resume(), emits 'resume' and 'drain' on next tick (6)
+// p1 sees p2's 'drain', calls resume(), emits 'resume' and 'drain' on next
+// tick (7)
+
+p1.write(Buffer.alloc(2048)) // returns false
+```
+
+Along the way, the data was buffered and deferred at each stage,
+and multiple event deferrals happened, for an unblocked pipeline
+where it was perfectly safe to write all the way through!
+
+Furthermore, setting a `highWaterMark` of `1024` might lead
+someone reading the code to think an advisory maximum of 1KiB is
+being set for the pipeline. However, the actual advisory
+buffering level is the _sum_ of `highWaterMark` values, since
+each one has its own bucket.
+
+Consider the Minipass case:
+
+```js
+const m1 = new Minipass()
+const m2 = new Minipass()
+const m3 = new Minipass()
+const m4 = new Minipass()
+
+m1.pipe(m2).pipe(m3).pipe(m4)
+m4.on('data', () => console.log('made it through'))
+
+// m1 is flowing, so it writes the data to m2 immediately
+// m2 is flowing, so it writes the data to m3 immediately
+// m3 is flowing, so it writes the data to m4 immediately
+// m4 is flowing, so it fires the 'data' event immediately, returns true
+// m4's write returned true, so m3 is still flowing, returns true
+// m3's write returned true, so m2 is still flowing, returns true
+// m2's write returned true, so m1 is still flowing, returns true
+// No event deferrals or buffering along the way!
+
+m1.write(Buffer.alloc(2048)) // returns true
+```
+
+It is extremely unlikely that you _don't_ want to buffer any data
+written, or _ever_ buffer data that can be flushed all the way
+through. Neither node-core streams nor Minipass ever fail to
+buffer written data, but node-core streams do a lot of
+unnecessary buffering and pausing.
+
+As always, the faster implementation is the one that does less
+stuff and waits less time to do it.
+
+### Immediately emit `end` for empty streams (when not paused)
+
+If a stream is not paused, and `end()` is called before writing
+any data into it, then it will emit `end` immediately.
+
+If you have logic that occurs on the `end` event which you don't
+want to potentially happen immediately (for example, closing file
+descriptors, moving on to the next entry in an archive parse
+stream, etc.) then be sure to call `stream.pause()` on creation,
+and then `stream.resume()` once you are ready to respond to the
+`end` event.
+
+However, this is _usually_ not a problem because:
+
+### Emit `end` When Asked
+
+One hazard of immediately emitting `'end'` is that you may not
+yet have had a chance to add a listener. In order to avoid this
+hazard, Minipass streams safely re-emit the `'end'` event if a
+new listener is added after `'end'` has been emitted.
+
+Ie, if you do `stream.on('end', someFunction)`, and the stream
+has already emitted `end`, then it will call the handler right
+away. (You can think of this somewhat like attaching a new
+`.then(fn)` to a previously-resolved Promise.)
+
+To prevent calling handlers multiple times who would not expect
+multiple ends to occur, all listeners are removed from the
+`'end'` event whenever it is emitted.
+
+### Emit `error` When Asked
+
+The most recent error object passed to the `'error'` event is
+stored on the stream. If a new `'error'` event handler is added,
+and an error was previously emitted, then the event handler will
+be called immediately (or on `process.nextTick` in the case of
+async streams).
+
+This makes it much more difficult to end up trying to interact
+with a broken stream, if the error handler is added after an
+error was previously emitted.
+
+### Impact of "immediate flow" on Tee-streams
+
+A "tee stream" is a stream piping to multiple destinations:
+
+```js
+const tee = new Minipass()
+t.pipe(dest1)
+t.pipe(dest2)
+t.write('foo') // goes to both destinations
+```
+
+Since Minipass streams _immediately_ process any pending data
+through the pipeline when a new pipe destination is added, this
+can have surprising effects, especially when a stream comes in
+from some other function and may or may not have data in its
+buffer.
+
+```js
+// WARNING! WILL LOSE DATA!
+const src = new Minipass()
+src.write('foo')
+src.pipe(dest1) // 'foo' chunk flows to dest1 immediately, and is gone
+src.pipe(dest2) // gets nothing!
+```
+
+One solution is to create a dedicated tee-stream junction that
+pipes to both locations, and then pipe to _that_ instead.
+
+```js
+// Safe example: tee to both places
+const src = new Minipass()
+src.write('foo')
+const tee = new Minipass()
+tee.pipe(dest1)
+tee.pipe(dest2)
+src.pipe(tee) // tee gets 'foo', pipes to both locations
+```
+
+The same caveat applies to `on('data')` event listeners. The
+first one added will _immediately_ receive all of the data,
+leaving nothing for the second:
+
+```js
+// WARNING! WILL LOSE DATA!
+const src = new Minipass()
+src.write('foo')
+src.on('data', handler1) // receives 'foo' right away
+src.on('data', handler2) // nothing to see here!
+```
+
+Using a dedicated tee-stream can be used in this case as well:
+
+```js
+// Safe example: tee to both data handlers
+const src = new Minipass()
+src.write('foo')
+const tee = new Minipass()
+tee.on('data', handler1)
+tee.on('data', handler2)
+src.pipe(tee)
+```
+
+All of the hazards in this section are avoided by setting `{
+async: true }` in the Minipass constructor, or by setting
+`stream.async = true` afterwards. Note that this does add some
+overhead, so should only be done in cases where you are willing
+to lose a bit of performance in order to avoid having to refactor
+program logic.
+
+## USAGE
+
+It's a stream! Use it like a stream and it'll most likely do what
+you want.
+
+```js
+import { Minipass } from 'minipass'
+const mp = new Minipass(options) // options is optional
+mp.write('foo')
+mp.pipe(someOtherStream)
+mp.end('bar')
+```
+
+### OPTIONS
+
+- `encoding` How would you like the data coming _out_ of the
+  stream to be encoded? Accepts any values that can be passed to
+  `Buffer.toString()`.
+- `objectMode` Emit data exactly as it comes in. This will be
+  flipped on by default if you write() something other than a
+  string or Buffer at any point. Setting `objectMode: true` will
+  prevent setting any encoding value.
+- `async` Defaults to `false`. Set to `true` to defer data
+  emission until next tick. This reduces performance slightly,
+  but makes Minipass streams use timing behavior closer to Node
+  core streams. See [Timing](#timing) for more details.
+- `signal` An `AbortSignal` that will cause the stream to unhook
+  itself from everything and become as inert as possible. Note
+  that providing a `signal` parameter will make `'error'` events
+  no longer throw if they are unhandled, but they will still be
+  emitted to handlers if any are attached.
+
+### API
+
+Implements the user-facing portions of Node.js's `Readable` and
+`Writable` streams.
+
+### Methods
+
+- `write(chunk, [encoding], [callback])` - Put data in. (Note
+  that, in the base Minipass class, the same data will come out.)
+  Returns `false` if the stream will buffer the next write, or
+  true if it's still in "flowing" mode.
+- `end([chunk, [encoding]], [callback])` - Signal that you have
+  no more data to write. This will queue an `end` event to be
+  fired when all the data has been consumed.
+- `pause()` - No more data for a while, please. This also
+  prevents `end` from being emitted for empty streams until the
+  stream is resumed.
+- `resume()` - Resume the stream. If there's data in the buffer,
+  it is all discarded. Any buffered events are immediately
+  emitted.
+- `pipe(dest)` - Send all output to the stream provided. When
+  data is emitted, it is immediately written to any and all pipe
+  destinations. (Or written on next tick in `async` mode.)
+- `unpipe(dest)` - Stop piping to the destination stream. This is
+  immediate, meaning that any asynchronously queued data will
+  _not_ make it to the destination when running in `async` mode.
+  - `options.end` - Boolean, end the destination stream when the
+    source stream ends. Default `true`.
+  - `options.proxyErrors` - Boolean, proxy `error` events from
+    the source stream to the destination stream. Note that errors
+    are _not_ proxied after the pipeline terminates, either due
+    to the source emitting `'end'` or manually unpiping with
+    `src.unpipe(dest)`. Default `false`.
+- `on(ev, fn)`, `emit(ev, fn)` - Minipass streams are
+  EventEmitters. Some events are given special treatment,
+  however. (See below under "events".)
+- `promise()` - Returns a Promise that resolves when the stream
+  emits `end`, or rejects if the stream emits `error`.
+- `collect()` - Return a Promise that resolves on `end` with an
+  array containing each chunk of data that was emitted, or
+  rejects if the stream emits `error`. Note that this consumes
+  the stream data.
+- `concat()` - Same as `collect()`, but concatenates the data
+  into a single Buffer object. Will reject the returned promise
+  if the stream is in objectMode, or if it goes into objectMode
+  by the end of the data.
+- `read(n)` - Consume `n` bytes of data out of the buffer. If `n`
+  is not provided, then consume all of it. If `n` bytes are not
+  available, then it returns null. **Note** consuming streams in
+  this way is less efficient, and can lead to unnecessary Buffer
+  copying.
+- `destroy([er])` - Destroy the stream. If an error is provided,
+  then an `'error'` event is emitted. If the stream has a
+  `close()` method, and has not emitted a `'close'` event yet,
+  then `stream.close()` will be called. Any Promises returned by
+  `.promise()`, `.collect()` or `.concat()` will be rejected.
+  After being destroyed, writing to the stream will emit an
+  error. No more data will be emitted if the stream is destroyed,
+  even if it was previously buffered.
+
+### Properties
+
+- `bufferLength` Read-only. Total number of bytes buffered, or in
+  the case of objectMode, the total number of objects.
+- `encoding` Read-only. The encoding that has been set.
+- `flowing` Read-only. Boolean indicating whether a chunk written
+  to the stream will be immediately emitted.
+- `emittedEnd` Read-only. Boolean indicating whether the end-ish
+  events (ie, `end`, `prefinish`, `finish`) have been emitted.
+  Note that listening on any end-ish event will immediateyl
+  re-emit it if it has already been emitted.
+- `writable` Whether the stream is writable. Default `true`. Set
+  to `false` when `end()`
+- `readable` Whether the stream is readable. Default `true`.
+- `pipes` An array of Pipe objects referencing streams that this
+  stream is piping into.
+- `destroyed` A getter that indicates whether the stream was
+  destroyed.
+- `paused` True if the stream has been explicitly paused,
+  otherwise false.
+- `objectMode` Indicates whether the stream is in `objectMode`.
+- `aborted` Readonly property set when the `AbortSignal`
+  dispatches an `abort` event.
+
+### Events
+
+- `data` Emitted when there's data to read. Argument is the data
+  to read. This is never emitted while not flowing. If a listener
+  is attached, that will resume the stream.
+- `end` Emitted when there's no more data to read. This will be
+  emitted immediately for empty streams when `end()` is called.
+  If a listener is attached, and `end` was already emitted, then
+  it will be emitted again. All listeners are removed when `end`
+  is emitted.
+- `prefinish` An end-ish event that follows the same logic as
+  `end` and is emitted in the same conditions where `end` is
+  emitted. Emitted after `'end'`.
+- `finish` An end-ish event that follows the same logic as `end`
+  and is emitted in the same conditions where `end` is emitted.
+  Emitted after `'prefinish'`.
+- `close` An indication that an underlying resource has been
+  released. Minipass does not emit this event, but will defer it
+  until after `end` has been emitted, since it throws off some
+  stream libraries otherwise.
+- `drain` Emitted when the internal buffer empties, and it is
+  again suitable to `write()` into the stream.
+- `readable` Emitted when data is buffered and ready to be read
+  by a consumer.
+- `resume` Emitted when stream changes state from buffering to
+  flowing mode. (Ie, when `resume` is called, `pipe` is called,
+  or a `data` event listener is added.)
+
+### Static Methods
+
+- `Minipass.isStream(stream)` Returns `true` if the argument is a
+  stream, and false otherwise. To be considered a stream, the
+  object must be either an instance of Minipass, or an
+  EventEmitter that has either a `pipe()` method, or both
+  `write()` and `end()` methods. (Pretty much any stream in
+  node-land will return `true` for this.)
+
+## EXAMPLES
+
+Here are some examples of things you can do with Minipass
+streams.
+
+### simple "are you done yet" promise
+
+```js
+mp.promise().then(
+  () => {
+    // stream is finished
+  },
+  er => {
+    // stream emitted an error
+  }
+)
+```
+
+### collecting
+
+```js
+mp.collect().then(all => {
+  // all is an array of all the data emitted
+  // encoding is supported in this case, so
+  // so the result will be a collection of strings if
+  // an encoding is specified, or buffers/objects if not.
+  //
+  // In an async function, you may do
+  // const data = await stream.collect()
+})
+```
+
+### collecting into a single blob
+
+This is a bit slower because it concatenates the data into one
+chunk for you, but if you're going to do it yourself anyway, it's
+convenient this way:
+
+```js
+mp.concat().then(onebigchunk => {
+  // onebigchunk is a string if the stream
+  // had an encoding set, or a buffer otherwise.
+})
+```
+
+### iteration
+
+You can iterate over streams synchronously or asynchronously in
+platforms that support it.
+
+Synchronous iteration will end when the currently available data
+is consumed, even if the `end` event has not been reached. In
+string and buffer mode, the data is concatenated, so unless
+multiple writes are occurring in the same tick as the `read()`,
+sync iteration loops will generally only have a single iteration.
+
+To consume chunks in this way exactly as they have been written,
+with no flattening, create the stream with the `{ objectMode:
+true }` option.
+
+```js
+const mp = new Minipass({ objectMode: true })
+mp.write('a')
+mp.write('b')
+for (let letter of mp) {
+  console.log(letter) // a, b
+}
+mp.write('c')
+mp.write('d')
+for (let letter of mp) {
+  console.log(letter) // c, d
+}
+mp.write('e')
+mp.end()
+for (let letter of mp) {
+  console.log(letter) // e
+}
+for (let letter of mp) {
+  console.log(letter) // nothing
+}
+```
+
+Asynchronous iteration will continue until the end event is reached,
+consuming all of the data.
+
+```js
+const mp = new Minipass({ encoding: 'utf8' })
+
+// some source of some data
+let i = 5
+const inter = setInterval(() => {
+  if (i-- > 0) mp.write(Buffer.from('foo\n', 'utf8'))
+  else {
+    mp.end()
+    clearInterval(inter)
+  }
+}, 100)
+
+// consume the data with asynchronous iteration
+async function consume() {
+  for await (let chunk of mp) {
+    console.log(chunk)
+  }
+  return 'ok'
+}
+
+consume().then(res => console.log(res))
+// logs `foo\n` 5 times, and then `ok`
+```
+
+### subclass that `console.log()`s everything written into it
+
+```js
+class Logger extends Minipass {
+  write(chunk, encoding, callback) {
+    console.log('WRITE', chunk, encoding)
+    return super.write(chunk, encoding, callback)
+  }
+  end(chunk, encoding, callback) {
+    console.log('END', chunk, encoding)
+    return super.end(chunk, encoding, callback)
+  }
+}
+
+someSource.pipe(new Logger()).pipe(someDest)
+```
+
+### same thing, but using an inline anonymous class
+
+```js
+// js classes are fun
+someSource
+  .pipe(
+    new (class extends Minipass {
+      emit(ev, ...data) {
+        // let's also log events, because debugging some weird thing
+        console.log('EMIT', ev)
+        return super.emit(ev, ...data)
+      }
+      write(chunk, encoding, callback) {
+        console.log('WRITE', chunk, encoding)
+        return super.write(chunk, encoding, callback)
+      }
+      end(chunk, encoding, callback) {
+        console.log('END', chunk, encoding)
+        return super.end(chunk, encoding, callback)
+      }
+    })()
+  )
+  .pipe(someDest)
+```
+
+### subclass that defers 'end' for some reason
+
+```js
+class SlowEnd extends Minipass {
+  emit(ev, ...args) {
+    if (ev === 'end') {
+      console.log('going to end, hold on a sec')
+      setTimeout(() => {
+        console.log('ok, ready to end now')
+        super.emit('end', ...args)
+      }, 100)
+      return true
+    } else {
+      return super.emit(ev, ...args)
+    }
+  }
+}
+```
+
+### transform that creates newline-delimited JSON
+
+```js
+class NDJSONEncode extends Minipass {
+  write(obj, cb) {
+    try {
+      // JSON.stringify can throw, emit an error on that
+      return super.write(JSON.stringify(obj) + '\n', 'utf8', cb)
+    } catch (er) {
+      this.emit('error', er)
+    }
+  }
+  end(obj, cb) {
+    if (typeof obj === 'function') {
+      cb = obj
+      obj = undefined
+    }
+    if (obj !== undefined) {
+      this.write(obj)
+    }
+    return super.end(cb)
+  }
+}
+```
+
+### transform that parses newline-delimited JSON
+
+```js
+class NDJSONDecode extends Minipass {
+  constructor(options) {
+    // always be in object mode, as far as Minipass is concerned
+    super({ objectMode: true })
+    this._jsonBuffer = ''
+  }
+  write(chunk, encoding, cb) {
+    if (
+      typeof chunk === 'string' &&
+      typeof encoding === 'string' &&
+      encoding !== 'utf8'
+    ) {
+      chunk = Buffer.from(chunk, encoding).toString()
+    } else if (Buffer.isBuffer(chunk)) {
+      chunk = chunk.toString()
+    }
+    if (typeof encoding === 'function') {
+      cb = encoding
+    }
+    const jsonData = (this._jsonBuffer + chunk).split('\n')
+    this._jsonBuffer = jsonData.pop()
+    for (let i = 0; i < jsonData.length; i++) {
+      try {
+        // JSON.parse can throw, emit an error on that
+        super.write(JSON.parse(jsonData[i]))
+      } catch (er) {
+        this.emit('error', er)
+        continue
+      }
+    }
+    if (cb) cb()
+  }
+}
+```
diff --git a/node_modules/minipass/dist/commonjs/index.d.ts b/node_modules/minipass/dist/commonjs/index.d.ts
new file mode 100644
index 00000000..031e61a8
--- /dev/null
+++ b/node_modules/minipass/dist/commonjs/index.d.ts
@@ -0,0 +1,549 @@
+/// 
+/// 
+/// 
+/// 
+import { EventEmitter } from 'node:events';
+import { StringDecoder } from 'node:string_decoder';
+/**
+ * Same as StringDecoder, but exposing the `lastNeed` flag on the type
+ */
+type SD = StringDecoder & {
+    lastNeed: boolean;
+};
+export type { SD, Pipe, PipeProxyErrors };
+/**
+ * Return true if the argument is a Minipass stream, Node stream, or something
+ * else that Minipass can interact with.
+ */
+export declare const isStream: (s: any) => s is NodeJS.WriteStream | NodeJS.ReadStream | Minipass | (NodeJS.ReadStream & {
+    fd: number;
+}) | (EventEmitter & {
+    pause(): any;
+    resume(): any;
+    pipe(...destArgs: any[]): any;
+}) | (NodeJS.WriteStream & {
+    fd: number;
+}) | (EventEmitter & {
+    end(): any;
+    write(chunk: any, ...args: any[]): any;
+});
+/**
+ * Return true if the argument is a valid {@link Minipass.Readable}
+ */
+export declare const isReadable: (s: any) => s is Minipass.Readable;
+/**
+ * Return true if the argument is a valid {@link Minipass.Writable}
+ */
+export declare const isWritable: (s: any) => s is Minipass.Readable;
+declare const EOF: unique symbol;
+declare const MAYBE_EMIT_END: unique symbol;
+declare const EMITTED_END: unique symbol;
+declare const EMITTING_END: unique symbol;
+declare const EMITTED_ERROR: unique symbol;
+declare const CLOSED: unique symbol;
+declare const READ: unique symbol;
+declare const FLUSH: unique symbol;
+declare const FLUSHCHUNK: unique symbol;
+declare const ENCODING: unique symbol;
+declare const DECODER: unique symbol;
+declare const FLOWING: unique symbol;
+declare const PAUSED: unique symbol;
+declare const RESUME: unique symbol;
+declare const BUFFER: unique symbol;
+declare const PIPES: unique symbol;
+declare const BUFFERLENGTH: unique symbol;
+declare const BUFFERPUSH: unique symbol;
+declare const BUFFERSHIFT: unique symbol;
+declare const OBJECTMODE: unique symbol;
+declare const DESTROYED: unique symbol;
+declare const ERROR: unique symbol;
+declare const EMITDATA: unique symbol;
+declare const EMITEND: unique symbol;
+declare const EMITEND2: unique symbol;
+declare const ASYNC: unique symbol;
+declare const ABORT: unique symbol;
+declare const ABORTED: unique symbol;
+declare const SIGNAL: unique symbol;
+declare const DATALISTENERS: unique symbol;
+declare const DISCARDED: unique symbol;
+/**
+ * Options that may be passed to stream.pipe()
+ */
+export interface PipeOptions {
+    /**
+     * end the destination stream when the source stream ends
+     */
+    end?: boolean;
+    /**
+     * proxy errors from the source stream to the destination stream
+     */
+    proxyErrors?: boolean;
+}
+/**
+ * Internal class representing a pipe to a destination stream.
+ *
+ * @internal
+ */
+declare class Pipe {
+    src: Minipass;
+    dest: Minipass;
+    opts: PipeOptions;
+    ondrain: () => any;
+    constructor(src: Minipass, dest: Minipass.Writable, opts: PipeOptions);
+    unpipe(): void;
+    proxyErrors(_er: any): void;
+    end(): void;
+}
+/**
+ * Internal class representing a pipe to a destination stream where
+ * errors are proxied.
+ *
+ * @internal
+ */
+declare class PipeProxyErrors extends Pipe {
+    unpipe(): void;
+    constructor(src: Minipass, dest: Minipass.Writable, opts: PipeOptions);
+}
+export declare namespace Minipass {
+    /**
+     * Encoding used to create a stream that outputs strings rather than
+     * Buffer objects.
+     */
+    export type Encoding = BufferEncoding | 'buffer' | null;
+    /**
+     * Any stream that Minipass can pipe into
+     */
+    export type Writable = Minipass | NodeJS.WriteStream | (NodeJS.WriteStream & {
+        fd: number;
+    }) | (EventEmitter & {
+        end(): any;
+        write(chunk: any, ...args: any[]): any;
+    });
+    /**
+     * Any stream that can be read from
+     */
+    export type Readable = Minipass | NodeJS.ReadStream | (NodeJS.ReadStream & {
+        fd: number;
+    }) | (EventEmitter & {
+        pause(): any;
+        resume(): any;
+        pipe(...destArgs: any[]): any;
+    });
+    /**
+     * Utility type that can be iterated sync or async
+     */
+    export type DualIterable = Iterable & AsyncIterable;
+    type EventArguments = Record;
+    /**
+     * The listing of events that a Minipass class can emit.
+     * Extend this when extending the Minipass class, and pass as
+     * the third template argument.  The key is the name of the event,
+     * and the value is the argument list.
+     *
+     * Any undeclared events will still be allowed, but the handler will get
+     * arguments as `unknown[]`.
+     */
+    export interface Events extends EventArguments {
+        readable: [];
+        data: [chunk: RType];
+        error: [er: unknown];
+        abort: [reason: unknown];
+        drain: [];
+        resume: [];
+        end: [];
+        finish: [];
+        prefinish: [];
+        close: [];
+        [DESTROYED]: [er?: unknown];
+        [ERROR]: [er: unknown];
+    }
+    /**
+     * String or buffer-like data that can be joined and sliced
+     */
+    export type ContiguousData = Buffer | ArrayBufferLike | ArrayBufferView | string;
+    export type BufferOrString = Buffer | string;
+    /**
+     * Options passed to the Minipass constructor.
+     */
+    export type SharedOptions = {
+        /**
+         * Defer all data emission and other events until the end of the
+         * current tick, similar to Node core streams
+         */
+        async?: boolean;
+        /**
+         * A signal which will abort the stream
+         */
+        signal?: AbortSignal;
+        /**
+         * Output string encoding. Set to `null` or `'buffer'` (or omit) to
+         * emit Buffer objects rather than strings.
+         *
+         * Conflicts with `objectMode`
+         */
+        encoding?: BufferEncoding | null | 'buffer';
+        /**
+         * Output data exactly as it was written, supporting non-buffer/string
+         * data (such as arbitrary objects, falsey values, etc.)
+         *
+         * Conflicts with `encoding`
+         */
+        objectMode?: boolean;
+    };
+    /**
+     * Options for a string encoded output
+     */
+    export type EncodingOptions = SharedOptions & {
+        encoding: BufferEncoding;
+        objectMode?: false;
+    };
+    /**
+     * Options for contiguous data buffer output
+     */
+    export type BufferOptions = SharedOptions & {
+        encoding?: null | 'buffer';
+        objectMode?: false;
+    };
+    /**
+     * Options for objectMode arbitrary output
+     */
+    export type ObjectModeOptions = SharedOptions & {
+        objectMode: true;
+        encoding?: null;
+    };
+    /**
+     * Utility type to determine allowed options based on read type
+     */
+    export type Options = ObjectModeOptions | (T extends string ? EncodingOptions : T extends Buffer ? BufferOptions : SharedOptions);
+    export {};
+}
+/**
+ * Main export, the Minipass class
+ *
+ * `RType` is the type of data emitted, defaults to Buffer
+ *
+ * `WType` is the type of data to be written, if RType is buffer or string,
+ * then any {@link Minipass.ContiguousData} is allowed.
+ *
+ * `Events` is the set of event handler signatures that this object
+ * will emit, see {@link Minipass.Events}
+ */
+export declare class Minipass = Minipass.Events> extends EventEmitter implements Minipass.DualIterable {
+    [FLOWING]: boolean;
+    [PAUSED]: boolean;
+    [PIPES]: Pipe[];
+    [BUFFER]: RType[];
+    [OBJECTMODE]: boolean;
+    [ENCODING]: BufferEncoding | null;
+    [ASYNC]: boolean;
+    [DECODER]: SD | null;
+    [EOF]: boolean;
+    [EMITTED_END]: boolean;
+    [EMITTING_END]: boolean;
+    [CLOSED]: boolean;
+    [EMITTED_ERROR]: unknown;
+    [BUFFERLENGTH]: number;
+    [DESTROYED]: boolean;
+    [SIGNAL]?: AbortSignal;
+    [ABORTED]: boolean;
+    [DATALISTENERS]: number;
+    [DISCARDED]: boolean;
+    /**
+     * true if the stream can be written
+     */
+    writable: boolean;
+    /**
+     * true if the stream can be read
+     */
+    readable: boolean;
+    /**
+     * If `RType` is Buffer, then options do not need to be provided.
+     * Otherwise, an options object must be provided to specify either
+     * {@link Minipass.SharedOptions.objectMode} or
+     * {@link Minipass.SharedOptions.encoding}, as appropriate.
+     */
+    constructor(...args: [Minipass.ObjectModeOptions] | (RType extends Buffer ? [] | [Minipass.Options] : [Minipass.Options]));
+    /**
+     * The amount of data stored in the buffer waiting to be read.
+     *
+     * For Buffer strings, this will be the total byte length.
+     * For string encoding streams, this will be the string character length,
+     * according to JavaScript's `string.length` logic.
+     * For objectMode streams, this is a count of the items waiting to be
+     * emitted.
+     */
+    get bufferLength(): number;
+    /**
+     * The `BufferEncoding` currently in use, or `null`
+     */
+    get encoding(): BufferEncoding | null;
+    /**
+     * @deprecated - This is a read only property
+     */
+    set encoding(_enc: BufferEncoding | null);
+    /**
+     * @deprecated - Encoding may only be set at instantiation time
+     */
+    setEncoding(_enc: Minipass.Encoding): void;
+    /**
+     * True if this is an objectMode stream
+     */
+    get objectMode(): boolean;
+    /**
+     * @deprecated - This is a read-only property
+     */
+    set objectMode(_om: boolean);
+    /**
+     * true if this is an async stream
+     */
+    get ['async'](): boolean;
+    /**
+     * Set to true to make this stream async.
+     *
+     * Once set, it cannot be unset, as this would potentially cause incorrect
+     * behavior.  Ie, a sync stream can be made async, but an async stream
+     * cannot be safely made sync.
+     */
+    set ['async'](a: boolean);
+    [ABORT](): void;
+    /**
+     * True if the stream has been aborted.
+     */
+    get aborted(): boolean;
+    /**
+     * No-op setter. Stream aborted status is set via the AbortSignal provided
+     * in the constructor options.
+     */
+    set aborted(_: boolean);
+    /**
+     * Write data into the stream
+     *
+     * If the chunk written is a string, and encoding is not specified, then
+     * `utf8` will be assumed. If the stream encoding matches the encoding of
+     * a written string, and the state of the string decoder allows it, then
+     * the string will be passed through to either the output or the internal
+     * buffer without any processing. Otherwise, it will be turned into a
+     * Buffer object for processing into the desired encoding.
+     *
+     * If provided, `cb` function is called immediately before return for
+     * sync streams, or on next tick for async streams, because for this
+     * base class, a chunk is considered "processed" once it is accepted
+     * and either emitted or buffered. That is, the callback does not indicate
+     * that the chunk has been eventually emitted, though of course child
+     * classes can override this function to do whatever processing is required
+     * and call `super.write(...)` only once processing is completed.
+     */
+    write(chunk: WType, cb?: () => void): boolean;
+    write(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): boolean;
+    /**
+     * Low-level explicit read method.
+     *
+     * In objectMode, the argument is ignored, and one item is returned if
+     * available.
+     *
+     * `n` is the number of bytes (or in the case of encoding streams,
+     * characters) to consume. If `n` is not provided, then the entire buffer
+     * is returned, or `null` is returned if no data is available.
+     *
+     * If `n` is greater that the amount of data in the internal buffer,
+     * then `null` is returned.
+     */
+    read(n?: number | null): RType | null;
+    [READ](n: number | null, chunk: RType): RType;
+    /**
+     * End the stream, optionally providing a final write.
+     *
+     * See {@link Minipass#write} for argument descriptions
+     */
+    end(cb?: () => void): this;
+    end(chunk: WType, cb?: () => void): this;
+    end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this;
+    [RESUME](): void;
+    /**
+     * Resume the stream if it is currently in a paused state
+     *
+     * If called when there are no pipe destinations or `data` event listeners,
+     * this will place the stream in a "discarded" state, where all data will
+     * be thrown away. The discarded state is removed if a pipe destination or
+     * data handler is added, if pause() is called, or if any synchronous or
+     * asynchronous iteration is started.
+     */
+    resume(): void;
+    /**
+     * Pause the stream
+     */
+    pause(): void;
+    /**
+     * true if the stream has been forcibly destroyed
+     */
+    get destroyed(): boolean;
+    /**
+     * true if the stream is currently in a flowing state, meaning that
+     * any writes will be immediately emitted.
+     */
+    get flowing(): boolean;
+    /**
+     * true if the stream is currently in a paused state
+     */
+    get paused(): boolean;
+    [BUFFERPUSH](chunk: RType): void;
+    [BUFFERSHIFT](): RType;
+    [FLUSH](noDrain?: boolean): void;
+    [FLUSHCHUNK](chunk: RType): boolean;
+    /**
+     * Pipe all data emitted by this stream into the destination provided.
+     *
+     * Triggers the flow of data.
+     */
+    pipe(dest: W, opts?: PipeOptions): W;
+    /**
+     * Fully unhook a piped destination stream.
+     *
+     * If the destination stream was the only consumer of this stream (ie,
+     * there are no other piped destinations or `'data'` event listeners)
+     * then the flow of data will stop until there is another consumer or
+     * {@link Minipass#resume} is explicitly called.
+     */
+    unpipe(dest: W): void;
+    /**
+     * Alias for {@link Minipass#on}
+     */
+    addListener(ev: Event, handler: (...args: Events[Event]) => any): this;
+    /**
+     * Mostly identical to `EventEmitter.on`, with the following
+     * behavior differences to prevent data loss and unnecessary hangs:
+     *
+     * - Adding a 'data' event handler will trigger the flow of data
+     *
+     * - Adding a 'readable' event handler when there is data waiting to be read
+     *   will cause 'readable' to be emitted immediately.
+     *
+     * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
+     *   already passed will cause the event to be emitted immediately and all
+     *   handlers removed.
+     *
+     * - Adding an 'error' event handler after an error has been emitted will
+     *   cause the event to be re-emitted immediately with the error previously
+     *   raised.
+     */
+    on(ev: Event, handler: (...args: Events[Event]) => any): this;
+    /**
+     * Alias for {@link Minipass#off}
+     */
+    removeListener(ev: Event, handler: (...args: Events[Event]) => any): this;
+    /**
+     * Mostly identical to `EventEmitter.off`
+     *
+     * If a 'data' event handler is removed, and it was the last consumer
+     * (ie, there are no pipe destinations or other 'data' event listeners),
+     * then the flow of data will stop until there is another consumer or
+     * {@link Minipass#resume} is explicitly called.
+     */
+    off(ev: Event, handler: (...args: Events[Event]) => any): this;
+    /**
+     * Mostly identical to `EventEmitter.removeAllListeners`
+     *
+     * If all 'data' event handlers are removed, and they were the last consumer
+     * (ie, there are no pipe destinations), then the flow of data will stop
+     * until there is another consumer or {@link Minipass#resume} is explicitly
+     * called.
+     */
+    removeAllListeners(ev?: Event): this;
+    /**
+     * true if the 'end' event has been emitted
+     */
+    get emittedEnd(): boolean;
+    [MAYBE_EMIT_END](): void;
+    /**
+     * Mostly identical to `EventEmitter.emit`, with the following
+     * behavior differences to prevent data loss and unnecessary hangs:
+     *
+     * If the stream has been destroyed, and the event is something other
+     * than 'close' or 'error', then `false` is returned and no handlers
+     * are called.
+     *
+     * If the event is 'end', and has already been emitted, then the event
+     * is ignored. If the stream is in a paused or non-flowing state, then
+     * the event will be deferred until data flow resumes. If the stream is
+     * async, then handlers will be called on the next tick rather than
+     * immediately.
+     *
+     * If the event is 'close', and 'end' has not yet been emitted, then
+     * the event will be deferred until after 'end' is emitted.
+     *
+     * If the event is 'error', and an AbortSignal was provided for the stream,
+     * and there are no listeners, then the event is ignored, matching the
+     * behavior of node core streams in the presense of an AbortSignal.
+     *
+     * If the event is 'finish' or 'prefinish', then all listeners will be
+     * removed after emitting the event, to prevent double-firing.
+     */
+    emit(ev: Event, ...args: Events[Event]): boolean;
+    [EMITDATA](data: RType): boolean;
+    [EMITEND](): boolean;
+    [EMITEND2](): boolean;
+    /**
+     * Return a Promise that resolves to an array of all emitted data once
+     * the stream ends.
+     */
+    collect(): Promise;
+    /**
+     * Return a Promise that resolves to the concatenation of all emitted data
+     * once the stream ends.
+     *
+     * Not allowed on objectMode streams.
+     */
+    concat(): Promise;
+    /**
+     * Return a void Promise that resolves once the stream ends.
+     */
+    promise(): Promise;
+    /**
+     * Asynchronous `for await of` iteration.
+     *
+     * This will continue emitting all chunks until the stream terminates.
+     */
+    [Symbol.asyncIterator](): AsyncGenerator;
+    /**
+     * Synchronous `for of` iteration.
+     *
+     * The iteration will terminate when the internal buffer runs out, even
+     * if the stream has not yet terminated.
+     */
+    [Symbol.iterator](): Generator;
+    /**
+     * Destroy a stream, preventing it from being used for any further purpose.
+     *
+     * If the stream has a `close()` method, then it will be called on
+     * destruction.
+     *
+     * After destruction, any attempt to write data, read data, or emit most
+     * events will be ignored.
+     *
+     * If an error argument is provided, then it will be emitted in an
+     * 'error' event.
+     */
+    destroy(er?: unknown): this;
+    /**
+     * Alias for {@link isStream}
+     *
+     * Former export location, maintained for backwards compatibility.
+     *
+     * @deprecated
+     */
+    static get isStream(): (s: any) => s is NodeJS.WriteStream | NodeJS.ReadStream | Minipass | (NodeJS.ReadStream & {
+        fd: number;
+    }) | (EventEmitter & {
+        pause(): any;
+        resume(): any;
+        pipe(...destArgs: any[]): any;
+    }) | (NodeJS.WriteStream & {
+        fd: number;
+    }) | (EventEmitter & {
+        end(): any;
+        write(chunk: any, ...args: any[]): any;
+    });
+}
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minipass/dist/commonjs/index.d.ts.map b/node_modules/minipass/dist/commonjs/index.d.ts.map
new file mode 100644
index 00000000..cac7e00a
--- /dev/null
+++ b/node_modules/minipass/dist/commonjs/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/minipass/dist/commonjs/index.js b/node_modules/minipass/dist/commonjs/index.js
new file mode 100644
index 00000000..068c095b
--- /dev/null
+++ b/node_modules/minipass/dist/commonjs/index.js
@@ -0,0 +1,1028 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Minipass = exports.isWritable = exports.isReadable = exports.isStream = void 0;
+const proc = typeof process === 'object' && process
+    ? process
+    : {
+        stdout: null,
+        stderr: null,
+    };
+const node_events_1 = require("node:events");
+const node_stream_1 = __importDefault(require("node:stream"));
+const node_string_decoder_1 = require("node:string_decoder");
+/**
+ * Return true if the argument is a Minipass stream, Node stream, or something
+ * else that Minipass can interact with.
+ */
+const isStream = (s) => !!s &&
+    typeof s === 'object' &&
+    (s instanceof Minipass ||
+        s instanceof node_stream_1.default ||
+        (0, exports.isReadable)(s) ||
+        (0, exports.isWritable)(s));
+exports.isStream = isStream;
+/**
+ * Return true if the argument is a valid {@link Minipass.Readable}
+ */
+const isReadable = (s) => !!s &&
+    typeof s === 'object' &&
+    s instanceof node_events_1.EventEmitter &&
+    typeof s.pipe === 'function' &&
+    // node core Writable streams have a pipe() method, but it throws
+    s.pipe !== node_stream_1.default.Writable.prototype.pipe;
+exports.isReadable = isReadable;
+/**
+ * Return true if the argument is a valid {@link Minipass.Writable}
+ */
+const isWritable = (s) => !!s &&
+    typeof s === 'object' &&
+    s instanceof node_events_1.EventEmitter &&
+    typeof s.write === 'function' &&
+    typeof s.end === 'function';
+exports.isWritable = isWritable;
+const EOF = Symbol('EOF');
+const MAYBE_EMIT_END = Symbol('maybeEmitEnd');
+const EMITTED_END = Symbol('emittedEnd');
+const EMITTING_END = Symbol('emittingEnd');
+const EMITTED_ERROR = Symbol('emittedError');
+const CLOSED = Symbol('closed');
+const READ = Symbol('read');
+const FLUSH = Symbol('flush');
+const FLUSHCHUNK = Symbol('flushChunk');
+const ENCODING = Symbol('encoding');
+const DECODER = Symbol('decoder');
+const FLOWING = Symbol('flowing');
+const PAUSED = Symbol('paused');
+const RESUME = Symbol('resume');
+const BUFFER = Symbol('buffer');
+const PIPES = Symbol('pipes');
+const BUFFERLENGTH = Symbol('bufferLength');
+const BUFFERPUSH = Symbol('bufferPush');
+const BUFFERSHIFT = Symbol('bufferShift');
+const OBJECTMODE = Symbol('objectMode');
+// internal event when stream is destroyed
+const DESTROYED = Symbol('destroyed');
+// internal event when stream has an error
+const ERROR = Symbol('error');
+const EMITDATA = Symbol('emitData');
+const EMITEND = Symbol('emitEnd');
+const EMITEND2 = Symbol('emitEnd2');
+const ASYNC = Symbol('async');
+const ABORT = Symbol('abort');
+const ABORTED = Symbol('aborted');
+const SIGNAL = Symbol('signal');
+const DATALISTENERS = Symbol('dataListeners');
+const DISCARDED = Symbol('discarded');
+const defer = (fn) => Promise.resolve().then(fn);
+const nodefer = (fn) => fn();
+const isEndish = (ev) => ev === 'end' || ev === 'finish' || ev === 'prefinish';
+const isArrayBufferLike = (b) => b instanceof ArrayBuffer ||
+    (!!b &&
+        typeof b === 'object' &&
+        b.constructor &&
+        b.constructor.name === 'ArrayBuffer' &&
+        b.byteLength >= 0);
+const isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);
+/**
+ * Internal class representing a pipe to a destination stream.
+ *
+ * @internal
+ */
+class Pipe {
+    src;
+    dest;
+    opts;
+    ondrain;
+    constructor(src, dest, opts) {
+        this.src = src;
+        this.dest = dest;
+        this.opts = opts;
+        this.ondrain = () => src[RESUME]();
+        this.dest.on('drain', this.ondrain);
+    }
+    unpipe() {
+        this.dest.removeListener('drain', this.ondrain);
+    }
+    // only here for the prototype
+    /* c8 ignore start */
+    proxyErrors(_er) { }
+    /* c8 ignore stop */
+    end() {
+        this.unpipe();
+        if (this.opts.end)
+            this.dest.end();
+    }
+}
+/**
+ * Internal class representing a pipe to a destination stream where
+ * errors are proxied.
+ *
+ * @internal
+ */
+class PipeProxyErrors 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);
+    }
+}
+const isObjectModeOptions = (o) => !!o.objectMode;
+const isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== 'buffer';
+/**
+ * Main export, the Minipass class
+ *
+ * `RType` is the type of data emitted, defaults to Buffer
+ *
+ * `WType` is the type of data to be written, if RType is buffer or string,
+ * then any {@link Minipass.ContiguousData} is allowed.
+ *
+ * `Events` is the set of event handler signatures that this object
+ * will emit, see {@link Minipass.Events}
+ */
+class Minipass extends node_events_1.EventEmitter {
+    [FLOWING] = false;
+    [PAUSED] = false;
+    [PIPES] = [];
+    [BUFFER] = [];
+    [OBJECTMODE];
+    [ENCODING];
+    [ASYNC];
+    [DECODER];
+    [EOF] = false;
+    [EMITTED_END] = false;
+    [EMITTING_END] = false;
+    [CLOSED] = false;
+    [EMITTED_ERROR] = null;
+    [BUFFERLENGTH] = 0;
+    [DESTROYED] = false;
+    [SIGNAL];
+    [ABORTED] = false;
+    [DATALISTENERS] = 0;
+    [DISCARDED] = false;
+    /**
+     * true if the stream can be written
+     */
+    writable = true;
+    /**
+     * true if the stream can be read
+     */
+    readable = true;
+    /**
+     * If `RType` is Buffer, then options do not need to be provided.
+     * Otherwise, an options object must be provided to specify either
+     * {@link Minipass.SharedOptions.objectMode} or
+     * {@link Minipass.SharedOptions.encoding}, as appropriate.
+     */
+    constructor(...args) {
+        const options = (args[0] ||
+            {});
+        super();
+        if (options.objectMode && typeof options.encoding === 'string') {
+            throw new TypeError('Encoding and objectMode may not be used together');
+        }
+        if (isObjectModeOptions(options)) {
+            this[OBJECTMODE] = true;
+            this[ENCODING] = null;
+        }
+        else if (isEncodingOptions(options)) {
+            this[ENCODING] = options.encoding;
+            this[OBJECTMODE] = false;
+        }
+        else {
+            this[OBJECTMODE] = false;
+            this[ENCODING] = null;
+        }
+        this[ASYNC] = !!options.async;
+        this[DECODER] = this[ENCODING]
+            ? new node_string_decoder_1.StringDecoder(this[ENCODING])
+            : null;
+        //@ts-ignore - private option for debugging and testing
+        if (options && options.debugExposeBuffer === true) {
+            Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] });
+        }
+        //@ts-ignore - private option for debugging and testing
+        if (options && options.debugExposePipes === true) {
+            Object.defineProperty(this, 'pipes', { get: () => this[PIPES] });
+        }
+        const { signal } = options;
+        if (signal) {
+            this[SIGNAL] = signal;
+            if (signal.aborted) {
+                this[ABORT]();
+            }
+            else {
+                signal.addEventListener('abort', () => this[ABORT]());
+            }
+        }
+    }
+    /**
+     * The amount of data stored in the buffer waiting to be read.
+     *
+     * For Buffer strings, this will be the total byte length.
+     * For string encoding streams, this will be the string character length,
+     * according to JavaScript's `string.length` logic.
+     * For objectMode streams, this is a count of the items waiting to be
+     * emitted.
+     */
+    get bufferLength() {
+        return this[BUFFERLENGTH];
+    }
+    /**
+     * The `BufferEncoding` currently in use, or `null`
+     */
+    get encoding() {
+        return this[ENCODING];
+    }
+    /**
+     * @deprecated - This is a read only property
+     */
+    set encoding(_enc) {
+        throw new Error('Encoding must be set at instantiation time');
+    }
+    /**
+     * @deprecated - Encoding may only be set at instantiation time
+     */
+    setEncoding(_enc) {
+        throw new Error('Encoding must be set at instantiation time');
+    }
+    /**
+     * True if this is an objectMode stream
+     */
+    get objectMode() {
+        return this[OBJECTMODE];
+    }
+    /**
+     * @deprecated - This is a read-only property
+     */
+    set objectMode(_om) {
+        throw new Error('objectMode must be set at instantiation time');
+    }
+    /**
+     * true if this is an async stream
+     */
+    get ['async']() {
+        return this[ASYNC];
+    }
+    /**
+     * Set to true to make this stream async.
+     *
+     * Once set, it cannot be unset, as this would potentially cause incorrect
+     * behavior.  Ie, a sync stream can be made async, but an async stream
+     * cannot be safely made sync.
+     */
+    set ['async'](a) {
+        this[ASYNC] = this[ASYNC] || !!a;
+    }
+    // drop everything and get out of the flow completely
+    [ABORT]() {
+        this[ABORTED] = true;
+        this.emit('abort', this[SIGNAL]?.reason);
+        this.destroy(this[SIGNAL]?.reason);
+    }
+    /**
+     * True if the stream has been aborted.
+     */
+    get aborted() {
+        return this[ABORTED];
+    }
+    /**
+     * No-op setter. Stream aborted status is set via the AbortSignal provided
+     * in the constructor options.
+     */
+    set aborted(_) { }
+    write(chunk, encoding, cb) {
+        if (this[ABORTED])
+            return false;
+        if (this[EOF])
+            throw new Error('write after end');
+        if (this[DESTROYED]) {
+            this.emit('error', Object.assign(new Error('Cannot call write after a stream was destroyed'), { code: 'ERR_STREAM_DESTROYED' }));
+            return true;
+        }
+        if (typeof encoding === 'function') {
+            cb = encoding;
+            encoding = 'utf8';
+        }
+        if (!encoding)
+            encoding = 'utf8';
+        const fn = this[ASYNC] ? defer : nodefer;
+        // convert array buffers and typed array views into buffers
+        // at some point in the future, we may want to do the opposite!
+        // leave strings and buffers as-is
+        // anything is only allowed if in object mode, so throw
+        if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
+            if (isArrayBufferView(chunk)) {
+                //@ts-ignore - sinful unsafe type changing
+                chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
+            }
+            else if (isArrayBufferLike(chunk)) {
+                //@ts-ignore - sinful unsafe type changing
+                chunk = Buffer.from(chunk);
+            }
+            else if (typeof chunk !== 'string') {
+                throw new Error('Non-contiguous data written to non-objectMode stream');
+            }
+        }
+        // handle object mode up front, since it's simpler
+        // this yields better performance, fewer checks later.
+        if (this[OBJECTMODE]) {
+            // maybe impossible?
+            /* c8 ignore start */
+            if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
+                this[FLUSH](true);
+            /* c8 ignore stop */
+            if (this[FLOWING])
+                this.emit('data', chunk);
+            else
+                this[BUFFERPUSH](chunk);
+            if (this[BUFFERLENGTH] !== 0)
+                this.emit('readable');
+            if (cb)
+                fn(cb);
+            return this[FLOWING];
+        }
+        // at this point the chunk is a buffer or string
+        // don't buffer it up or send it to the decoder
+        if (!chunk.length) {
+            if (this[BUFFERLENGTH] !== 0)
+                this.emit('readable');
+            if (cb)
+                fn(cb);
+            return this[FLOWING];
+        }
+        // fast-path writing strings of same encoding to a stream with
+        // an empty buffer, skipping the buffer/decoder dance
+        if (typeof chunk === 'string' &&
+            // unless it is a string already ready for us to use
+            !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {
+            //@ts-ignore - sinful unsafe type change
+            chunk = Buffer.from(chunk, encoding);
+        }
+        if (Buffer.isBuffer(chunk) && this[ENCODING]) {
+            //@ts-ignore - sinful unsafe type change
+            chunk = this[DECODER].write(chunk);
+        }
+        // Note: flushing CAN potentially switch us into not-flowing mode
+        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)
+            fn(cb);
+        return this[FLOWING];
+    }
+    /**
+     * Low-level explicit read method.
+     *
+     * In objectMode, the argument is ignored, and one item is returned if
+     * available.
+     *
+     * `n` is the number of bytes (or in the case of encoding streams,
+     * characters) to consume. If `n` is not provided, then the entire buffer
+     * is returned, or `null` is returned if no data is available.
+     *
+     * If `n` is greater that the amount of data in the internal buffer,
+     * then `null` is returned.
+     */
+    read(n) {
+        if (this[DESTROYED])
+            return null;
+        this[DISCARDED] = false;
+        if (this[BUFFERLENGTH] === 0 ||
+            n === 0 ||
+            (n && n > this[BUFFERLENGTH])) {
+            this[MAYBE_EMIT_END]();
+            return null;
+        }
+        if (this[OBJECTMODE])
+            n = null;
+        if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {
+            // not object mode, so if we have an encoding, then RType is string
+            // otherwise, must be Buffer
+            this[BUFFER] = [
+                (this[ENCODING]
+                    ? this[BUFFER].join('')
+                    : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])),
+            ];
+        }
+        const ret = this[READ](n || null, this[BUFFER][0]);
+        this[MAYBE_EMIT_END]();
+        return ret;
+    }
+    [READ](n, chunk) {
+        if (this[OBJECTMODE])
+            this[BUFFERSHIFT]();
+        else {
+            const c = chunk;
+            if (n === c.length || n === null)
+                this[BUFFERSHIFT]();
+            else if (typeof c === 'string') {
+                this[BUFFER][0] = c.slice(n);
+                chunk = c.slice(0, n);
+                this[BUFFERLENGTH] -= n;
+            }
+            else {
+                this[BUFFER][0] = c.subarray(n);
+                chunk = c.subarray(0, n);
+                this[BUFFERLENGTH] -= n;
+            }
+        }
+        this.emit('data', chunk);
+        if (!this[BUFFER].length && !this[EOF])
+            this.emit('drain');
+        return chunk;
+    }
+    end(chunk, encoding, cb) {
+        if (typeof chunk === 'function') {
+            cb = chunk;
+            chunk = undefined;
+        }
+        if (typeof encoding === 'function') {
+            cb = encoding;
+            encoding = 'utf8';
+        }
+        if (chunk !== undefined)
+            this.write(chunk, encoding);
+        if (cb)
+            this.once('end', cb);
+        this[EOF] = true;
+        this.writable = false;
+        // if we haven't written anything, then go ahead and emit,
+        // even if we're not reading.
+        // we'll re-emit if a new 'end' listener is added anyway.
+        // This makes MP more suitable to write-only use cases.
+        if (this[FLOWING] || !this[PAUSED])
+            this[MAYBE_EMIT_END]();
+        return this;
+    }
+    // don't let the internal resume be overwritten
+    [RESUME]() {
+        if (this[DESTROYED])
+            return;
+        if (!this[DATALISTENERS] && !this[PIPES].length) {
+            this[DISCARDED] = true;
+        }
+        this[PAUSED] = false;
+        this[FLOWING] = true;
+        this.emit('resume');
+        if (this[BUFFER].length)
+            this[FLUSH]();
+        else if (this[EOF])
+            this[MAYBE_EMIT_END]();
+        else
+            this.emit('drain');
+    }
+    /**
+     * Resume the stream if it is currently in a paused state
+     *
+     * If called when there are no pipe destinations or `data` event listeners,
+     * this will place the stream in a "discarded" state, where all data will
+     * be thrown away. The discarded state is removed if a pipe destination or
+     * data handler is added, if pause() is called, or if any synchronous or
+     * asynchronous iteration is started.
+     */
+    resume() {
+        return this[RESUME]();
+    }
+    /**
+     * Pause the stream
+     */
+    pause() {
+        this[FLOWING] = false;
+        this[PAUSED] = true;
+        this[DISCARDED] = false;
+    }
+    /**
+     * true if the stream has been forcibly destroyed
+     */
+    get destroyed() {
+        return this[DESTROYED];
+    }
+    /**
+     * true if the stream is currently in a flowing state, meaning that
+     * any writes will be immediately emitted.
+     */
+    get flowing() {
+        return this[FLOWING];
+    }
+    /**
+     * true if the stream is currently in a paused state
+     */
+    get paused() {
+        return this[PAUSED];
+    }
+    [BUFFERPUSH](chunk) {
+        if (this[OBJECTMODE])
+            this[BUFFERLENGTH] += 1;
+        else
+            this[BUFFERLENGTH] += chunk.length;
+        this[BUFFER].push(chunk);
+    }
+    [BUFFERSHIFT]() {
+        if (this[OBJECTMODE])
+            this[BUFFERLENGTH] -= 1;
+        else
+            this[BUFFERLENGTH] -= this[BUFFER][0].length;
+        return this[BUFFER].shift();
+    }
+    [FLUSH](noDrain = false) {
+        do { } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&
+            this[BUFFER].length);
+        if (!noDrain && !this[BUFFER].length && !this[EOF])
+            this.emit('drain');
+    }
+    [FLUSHCHUNK](chunk) {
+        this.emit('data', chunk);
+        return this[FLOWING];
+    }
+    /**
+     * Pipe all data emitted by this stream into the destination provided.
+     *
+     * Triggers the flow of data.
+     */
+    pipe(dest, opts) {
+        if (this[DESTROYED])
+            return dest;
+        this[DISCARDED] = false;
+        const ended = this[EMITTED_END];
+        opts = opts || {};
+        if (dest === proc.stdout || dest === proc.stderr)
+            opts.end = false;
+        else
+            opts.end = opts.end !== false;
+        opts.proxyErrors = !!opts.proxyErrors;
+        // piping an ended stream ends immediately
+        if (ended) {
+            if (opts.end)
+                dest.end();
+        }
+        else {
+            // "as" here just ignores the WType, which pipes don't care about,
+            // since they're only consuming from us, and writing to the dest
+            this[PIPES].push(!opts.proxyErrors
+                ? new Pipe(this, dest, opts)
+                : new PipeProxyErrors(this, dest, opts));
+            if (this[ASYNC])
+                defer(() => this[RESUME]());
+            else
+                this[RESUME]();
+        }
+        return dest;
+    }
+    /**
+     * Fully unhook a piped destination stream.
+     *
+     * If the destination stream was the only consumer of this stream (ie,
+     * there are no other piped destinations or `'data'` event listeners)
+     * then the flow of data will stop until there is another consumer or
+     * {@link Minipass#resume} is explicitly called.
+     */
+    unpipe(dest) {
+        const p = this[PIPES].find(p => p.dest === dest);
+        if (p) {
+            if (this[PIPES].length === 1) {
+                if (this[FLOWING] && this[DATALISTENERS] === 0) {
+                    this[FLOWING] = false;
+                }
+                this[PIPES] = [];
+            }
+            else
+                this[PIPES].splice(this[PIPES].indexOf(p), 1);
+            p.unpipe();
+        }
+    }
+    /**
+     * Alias for {@link Minipass#on}
+     */
+    addListener(ev, handler) {
+        return this.on(ev, handler);
+    }
+    /**
+     * Mostly identical to `EventEmitter.on`, with the following
+     * behavior differences to prevent data loss and unnecessary hangs:
+     *
+     * - Adding a 'data' event handler will trigger the flow of data
+     *
+     * - Adding a 'readable' event handler when there is data waiting to be read
+     *   will cause 'readable' to be emitted immediately.
+     *
+     * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
+     *   already passed will cause the event to be emitted immediately and all
+     *   handlers removed.
+     *
+     * - Adding an 'error' event handler after an error has been emitted will
+     *   cause the event to be re-emitted immediately with the error previously
+     *   raised.
+     */
+    on(ev, handler) {
+        const ret = super.on(ev, handler);
+        if (ev === 'data') {
+            this[DISCARDED] = false;
+            this[DATALISTENERS]++;
+            if (!this[PIPES].length && !this[FLOWING]) {
+                this[RESUME]();
+            }
+        }
+        else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {
+            super.emit('readable');
+        }
+        else if (isEndish(ev) && this[EMITTED_END]) {
+            super.emit(ev);
+            this.removeAllListeners(ev);
+        }
+        else if (ev === 'error' && this[EMITTED_ERROR]) {
+            const h = handler;
+            if (this[ASYNC])
+                defer(() => h.call(this, this[EMITTED_ERROR]));
+            else
+                h.call(this, this[EMITTED_ERROR]);
+        }
+        return ret;
+    }
+    /**
+     * Alias for {@link Minipass#off}
+     */
+    removeListener(ev, handler) {
+        return this.off(ev, handler);
+    }
+    /**
+     * Mostly identical to `EventEmitter.off`
+     *
+     * If a 'data' event handler is removed, and it was the last consumer
+     * (ie, there are no pipe destinations or other 'data' event listeners),
+     * then the flow of data will stop until there is another consumer or
+     * {@link Minipass#resume} is explicitly called.
+     */
+    off(ev, handler) {
+        const ret = super.off(ev, handler);
+        // if we previously had listeners, and now we don't, and we don't
+        // have any pipes, then stop the flow, unless it's been explicitly
+        // put in a discarded flowing state via stream.resume().
+        if (ev === 'data') {
+            this[DATALISTENERS] = this.listeners('data').length;
+            if (this[DATALISTENERS] === 0 &&
+                !this[DISCARDED] &&
+                !this[PIPES].length) {
+                this[FLOWING] = false;
+            }
+        }
+        return ret;
+    }
+    /**
+     * Mostly identical to `EventEmitter.removeAllListeners`
+     *
+     * If all 'data' event handlers are removed, and they were the last consumer
+     * (ie, there are no pipe destinations), then the flow of data will stop
+     * until there is another consumer or {@link Minipass#resume} is explicitly
+     * called.
+     */
+    removeAllListeners(ev) {
+        const ret = super.removeAllListeners(ev);
+        if (ev === 'data' || ev === undefined) {
+            this[DATALISTENERS] = 0;
+            if (!this[DISCARDED] && !this[PIPES].length) {
+                this[FLOWING] = false;
+            }
+        }
+        return ret;
+    }
+    /**
+     * true if the 'end' event has been emitted
+     */
+    get emittedEnd() {
+        return this[EMITTED_END];
+    }
+    [MAYBE_EMIT_END]() {
+        if (!this[EMITTING_END] &&
+            !this[EMITTED_END] &&
+            !this[DESTROYED] &&
+            this[BUFFER].length === 0 &&
+            this[EOF]) {
+            this[EMITTING_END] = true;
+            this.emit('end');
+            this.emit('prefinish');
+            this.emit('finish');
+            if (this[CLOSED])
+                this.emit('close');
+            this[EMITTING_END] = false;
+        }
+    }
+    /**
+     * Mostly identical to `EventEmitter.emit`, with the following
+     * behavior differences to prevent data loss and unnecessary hangs:
+     *
+     * If the stream has been destroyed, and the event is something other
+     * than 'close' or 'error', then `false` is returned and no handlers
+     * are called.
+     *
+     * If the event is 'end', and has already been emitted, then the event
+     * is ignored. If the stream is in a paused or non-flowing state, then
+     * the event will be deferred until data flow resumes. If the stream is
+     * async, then handlers will be called on the next tick rather than
+     * immediately.
+     *
+     * If the event is 'close', and 'end' has not yet been emitted, then
+     * the event will be deferred until after 'end' is emitted.
+     *
+     * If the event is 'error', and an AbortSignal was provided for the stream,
+     * and there are no listeners, then the event is ignored, matching the
+     * behavior of node core streams in the presense of an AbortSignal.
+     *
+     * If the event is 'finish' or 'prefinish', then all listeners will be
+     * removed after emitting the event, to prevent double-firing.
+     */
+    emit(ev, ...args) {
+        const data = args[0];
+        // error and close are only events allowed after calling destroy()
+        if (ev !== 'error' &&
+            ev !== 'close' &&
+            ev !== DESTROYED &&
+            this[DESTROYED]) {
+            return false;
+        }
+        else if (ev === 'data') {
+            return !this[OBJECTMODE] && !data
+                ? false
+                : this[ASYNC]
+                    ? (defer(() => this[EMITDATA](data)), true)
+                    : this[EMITDATA](data);
+        }
+        else if (ev === 'end') {
+            return this[EMITEND]();
+        }
+        else if (ev === 'close') {
+            this[CLOSED] = true;
+            // don't emit close before 'end' and 'finish'
+            if (!this[EMITTED_END] && !this[DESTROYED])
+                return false;
+            const ret = super.emit('close');
+            this.removeAllListeners('close');
+            return ret;
+        }
+        else if (ev === 'error') {
+            this[EMITTED_ERROR] = data;
+            super.emit(ERROR, data);
+            const ret = !this[SIGNAL] || this.listeners('error').length
+                ? super.emit('error', data)
+                : false;
+            this[MAYBE_EMIT_END]();
+            return ret;
+        }
+        else if (ev === 'resume') {
+            const ret = super.emit('resume');
+            this[MAYBE_EMIT_END]();
+            return ret;
+        }
+        else if (ev === 'finish' || ev === 'prefinish') {
+            const ret = super.emit(ev);
+            this.removeAllListeners(ev);
+            return ret;
+        }
+        // Some other unknown event
+        const ret = super.emit(ev, ...args);
+        this[MAYBE_EMIT_END]();
+        return ret;
+    }
+    [EMITDATA](data) {
+        for (const p of this[PIPES]) {
+            if (p.dest.write(data) === false)
+                this.pause();
+        }
+        const ret = this[DISCARDED] ? false : super.emit('data', data);
+        this[MAYBE_EMIT_END]();
+        return ret;
+    }
+    [EMITEND]() {
+        if (this[EMITTED_END])
+            return false;
+        this[EMITTED_END] = true;
+        this.readable = false;
+        return this[ASYNC]
+            ? (defer(() => this[EMITEND2]()), true)
+            : this[EMITEND2]();
+    }
+    [EMITEND2]() {
+        if (this[DECODER]) {
+            const data = this[DECODER].end();
+            if (data) {
+                for (const p of this[PIPES]) {
+                    p.dest.write(data);
+                }
+                if (!this[DISCARDED])
+                    super.emit('data', data);
+            }
+        }
+        for (const p of this[PIPES]) {
+            p.end();
+        }
+        const ret = super.emit('end');
+        this.removeAllListeners('end');
+        return ret;
+    }
+    /**
+     * Return a Promise that resolves to an array of all emitted data once
+     * the stream ends.
+     */
+    async collect() {
+        const buf = Object.assign([], {
+            dataLength: 0,
+        });
+        if (!this[OBJECTMODE])
+            buf.dataLength = 0;
+        // set the promise first, in case an error is raised
+        // by triggering the flow here.
+        const p = this.promise();
+        this.on('data', c => {
+            buf.push(c);
+            if (!this[OBJECTMODE])
+                buf.dataLength += c.length;
+        });
+        await p;
+        return buf;
+    }
+    /**
+     * Return a Promise that resolves to the concatenation of all emitted data
+     * once the stream ends.
+     *
+     * Not allowed on objectMode streams.
+     */
+    async concat() {
+        if (this[OBJECTMODE]) {
+            throw new Error('cannot concat in objectMode');
+        }
+        const buf = await this.collect();
+        return (this[ENCODING]
+            ? buf.join('')
+            : Buffer.concat(buf, buf.dataLength));
+    }
+    /**
+     * Return a void Promise that resolves once the stream ends.
+     */
+    async promise() {
+        return new Promise((resolve, reject) => {
+            this.on(DESTROYED, () => reject(new Error('stream destroyed')));
+            this.on('error', er => reject(er));
+            this.on('end', () => resolve());
+        });
+    }
+    /**
+     * Asynchronous `for await of` iteration.
+     *
+     * This will continue emitting all chunks until the stream terminates.
+     */
+    [Symbol.asyncIterator]() {
+        // set this up front, in case the consumer doesn't call next()
+        // right away.
+        this[DISCARDED] = false;
+        let stopped = false;
+        const stop = async () => {
+            this.pause();
+            stopped = true;
+            return { value: undefined, done: true };
+        };
+        const next = () => {
+            if (stopped)
+                return stop();
+            const res = this.read();
+            if (res !== null)
+                return Promise.resolve({ done: false, value: res });
+            if (this[EOF])
+                return stop();
+            let resolve;
+            let reject;
+            const onerr = (er) => {
+                this.off('data', ondata);
+                this.off('end', onend);
+                this.off(DESTROYED, ondestroy);
+                stop();
+                reject(er);
+            };
+            const ondata = (value) => {
+                this.off('error', onerr);
+                this.off('end', onend);
+                this.off(DESTROYED, ondestroy);
+                this.pause();
+                resolve({ value, done: !!this[EOF] });
+            };
+            const onend = () => {
+                this.off('error', onerr);
+                this.off('data', ondata);
+                this.off(DESTROYED, ondestroy);
+                stop();
+                resolve({ done: true, value: undefined });
+            };
+            const ondestroy = () => onerr(new Error('stream destroyed'));
+            return new Promise((res, rej) => {
+                reject = rej;
+                resolve = res;
+                this.once(DESTROYED, ondestroy);
+                this.once('error', onerr);
+                this.once('end', onend);
+                this.once('data', ondata);
+            });
+        };
+        return {
+            next,
+            throw: stop,
+            return: stop,
+            [Symbol.asyncIterator]() {
+                return this;
+            },
+        };
+    }
+    /**
+     * Synchronous `for of` iteration.
+     *
+     * The iteration will terminate when the internal buffer runs out, even
+     * if the stream has not yet terminated.
+     */
+    [Symbol.iterator]() {
+        // set this up front, in case the consumer doesn't call next()
+        // right away.
+        this[DISCARDED] = false;
+        let stopped = false;
+        const stop = () => {
+            this.pause();
+            this.off(ERROR, stop);
+            this.off(DESTROYED, stop);
+            this.off('end', stop);
+            stopped = true;
+            return { done: true, value: undefined };
+        };
+        const next = () => {
+            if (stopped)
+                return stop();
+            const value = this.read();
+            return value === null ? stop() : { done: false, value };
+        };
+        this.once('end', stop);
+        this.once(ERROR, stop);
+        this.once(DESTROYED, stop);
+        return {
+            next,
+            throw: stop,
+            return: stop,
+            [Symbol.iterator]() {
+                return this;
+            },
+        };
+    }
+    /**
+     * Destroy a stream, preventing it from being used for any further purpose.
+     *
+     * If the stream has a `close()` method, then it will be called on
+     * destruction.
+     *
+     * After destruction, any attempt to write data, read data, or emit most
+     * events will be ignored.
+     *
+     * If an error argument is provided, then it will be emitted in an
+     * 'error' event.
+     */
+    destroy(er) {
+        if (this[DESTROYED]) {
+            if (er)
+                this.emit('error', er);
+            else
+                this.emit(DESTROYED);
+            return this;
+        }
+        this[DESTROYED] = true;
+        this[DISCARDED] = true;
+        // throw away all buffered data, it's never coming out
+        this[BUFFER].length = 0;
+        this[BUFFERLENGTH] = 0;
+        const wc = this;
+        if (typeof wc.close === 'function' && !this[CLOSED])
+            wc.close();
+        if (er)
+            this.emit('error', er);
+        // if no error to emit, still reject pending promises
+        else
+            this.emit(DESTROYED);
+        return this;
+    }
+    /**
+     * Alias for {@link isStream}
+     *
+     * Former export location, maintained for backwards compatibility.
+     *
+     * @deprecated
+     */
+    static get isStream() {
+        return exports.isStream;
+    }
+}
+exports.Minipass = Minipass;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/minipass/dist/commonjs/index.js.map b/node_modules/minipass/dist/commonjs/index.js.map
new file mode 100644
index 00000000..9f3ef4b7
--- /dev/null
+++ b/node_modules/minipass/dist/commonjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const proc =\n  typeof process === 'object' && process\n    ? process\n    : {\n        stdout: null,\n        stderr: null,\n      }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n  s: any\n): s is Minipass.Readable | Minipass.Writable =>\n  !!s &&\n  typeof s === 'object' &&\n  (s instanceof Minipass ||\n    s instanceof Stream ||\n    isReadable(s) ||\n    isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Readable).pipe === 'function' &&\n  // node core Writable streams have a pipe() method, but it throws\n  (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Writable).write === 'function' &&\n  typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n  ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n  b instanceof ArrayBuffer ||\n  (!!b &&\n    typeof b === 'object' &&\n    b.constructor &&\n    b.constructor.name === 'ArrayBuffer' &&\n    b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n  !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n  /**\n   * end the destination stream when the source stream ends\n   */\n  end?: boolean\n  /**\n   * proxy errors from the source stream to the destination stream\n   */\n  proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n  src: Minipass\n  dest: Minipass\n  opts: PipeOptions\n  ondrain: () => any\n  constructor(\n    src: Minipass,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    this.src = src\n    this.dest = dest as Minipass\n    this.opts = opts\n    this.ondrain = () => src[RESUME]()\n    this.dest.on('drain', this.ondrain)\n  }\n  unpipe() {\n    this.dest.removeListener('drain', this.ondrain)\n  }\n  // only here for the prototype\n  /* c8 ignore start */\n  proxyErrors(_er: any) {}\n  /* c8 ignore stop */\n  end() {\n    this.unpipe()\n    if (this.opts.end) this.dest.end()\n  }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n  unpipe() {\n    this.src.removeListener('error', this.proxyErrors)\n    super.unpipe()\n  }\n  constructor(\n    src: Minipass,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    super(src, dest, opts)\n    this.proxyErrors = er => dest.emit('error', er)\n    src.on('error', this.proxyErrors)\n  }\n}\n\nexport namespace Minipass {\n  /**\n   * Encoding used to create a stream that outputs strings rather than\n   * Buffer objects.\n   */\n  export type Encoding = BufferEncoding | 'buffer' | null\n\n  /**\n   * Any stream that Minipass can pipe into\n   */\n  export type Writable =\n    | Minipass\n    | NodeJS.WriteStream\n    | (NodeJS.WriteStream & { fd: number })\n    | (EventEmitter & {\n        end(): any\n        write(chunk: any, ...args: any[]): any\n      })\n\n  /**\n   * Any stream that can be read from\n   */\n  export type Readable =\n    | Minipass\n    | NodeJS.ReadStream\n    | (NodeJS.ReadStream & { fd: number })\n    | (EventEmitter & {\n        pause(): any\n        resume(): any\n        pipe(...destArgs: any[]): any\n      })\n\n  /**\n   * Utility type that can be iterated sync or async\n   */\n  export type DualIterable = Iterable & AsyncIterable\n\n  type EventArguments = Record\n\n  /**\n   * The listing of events that a Minipass class can emit.\n   * Extend this when extending the Minipass class, and pass as\n   * the third template argument.  The key is the name of the event,\n   * and the value is the argument list.\n   *\n   * Any undeclared events will still be allowed, but the handler will get\n   * arguments as `unknown[]`.\n   */\n  export interface Events\n    extends EventArguments {\n    readable: []\n    data: [chunk: RType]\n    error: [er: unknown]\n    abort: [reason: unknown]\n    drain: []\n    resume: []\n    end: []\n    finish: []\n    prefinish: []\n    close: []\n    [DESTROYED]: [er?: unknown]\n    [ERROR]: [er: unknown]\n  }\n\n  /**\n   * String or buffer-like data that can be joined and sliced\n   */\n  export type ContiguousData =\n    | Buffer\n    | ArrayBufferLike\n    | ArrayBufferView\n    | string\n  export type BufferOrString = Buffer | string\n\n  /**\n   * Options passed to the Minipass constructor.\n   */\n  export type SharedOptions = {\n    /**\n     * Defer all data emission and other events until the end of the\n     * current tick, similar to Node core streams\n     */\n    async?: boolean\n    /**\n     * A signal which will abort the stream\n     */\n    signal?: AbortSignal\n    /**\n     * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n     * emit Buffer objects rather than strings.\n     *\n     * Conflicts with `objectMode`\n     */\n    encoding?: BufferEncoding | null | 'buffer'\n    /**\n     * Output data exactly as it was written, supporting non-buffer/string\n     * data (such as arbitrary objects, falsey values, etc.)\n     *\n     * Conflicts with `encoding`\n     */\n    objectMode?: boolean\n  }\n\n  /**\n   * Options for a string encoded output\n   */\n  export type EncodingOptions = SharedOptions & {\n    encoding: BufferEncoding\n    objectMode?: false\n  }\n\n  /**\n   * Options for contiguous data buffer output\n   */\n  export type BufferOptions = SharedOptions & {\n    encoding?: null | 'buffer'\n    objectMode?: false\n  }\n\n  /**\n   * Options for objectMode arbitrary output\n   */\n  export type ObjectModeOptions = SharedOptions & {\n    objectMode: true\n    encoding?: null\n  }\n\n  /**\n   * Utility type to determine allowed options based on read type\n   */\n  export type Options =\n    | ObjectModeOptions\n    | (T extends string\n        ? EncodingOptions\n        : T extends Buffer\n        ? BufferOptions\n        : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n  !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n    RType extends unknown = Buffer,\n    WType extends unknown = RType extends Minipass.BufferOrString\n      ? Minipass.ContiguousData\n      : RType,\n    Events extends Minipass.Events = Minipass.Events\n  >\n  extends EventEmitter\n  implements Minipass.DualIterable\n{\n  [FLOWING]: boolean = false;\n  [PAUSED]: boolean = false;\n  [PIPES]: Pipe[] = [];\n  [BUFFER]: RType[] = [];\n  [OBJECTMODE]: boolean;\n  [ENCODING]: BufferEncoding | null;\n  [ASYNC]: boolean;\n  [DECODER]: SD | null;\n  [EOF]: boolean = false;\n  [EMITTED_END]: boolean = false;\n  [EMITTING_END]: boolean = false;\n  [CLOSED]: boolean = false;\n  [EMITTED_ERROR]: unknown = null;\n  [BUFFERLENGTH]: number = 0;\n  [DESTROYED]: boolean = false;\n  [SIGNAL]?: AbortSignal;\n  [ABORTED]: boolean = false;\n  [DATALISTENERS]: number = 0;\n  [DISCARDED]: boolean = false\n\n  /**\n   * true if the stream can be written\n   */\n  writable: boolean = true\n  /**\n   * true if the stream can be read\n   */\n  readable: boolean = true\n\n  /**\n   * If `RType` is Buffer, then options do not need to be provided.\n   * Otherwise, an options object must be provided to specify either\n   * {@link Minipass.SharedOptions.objectMode} or\n   * {@link Minipass.SharedOptions.encoding}, as appropriate.\n   */\n  constructor(\n    ...args:\n      | [Minipass.ObjectModeOptions]\n      | (RType extends Buffer\n          ? [] | [Minipass.Options]\n          : [Minipass.Options])\n  ) {\n    const options: Minipass.Options = (args[0] ||\n      {}) as Minipass.Options\n    super()\n    if (options.objectMode && typeof options.encoding === 'string') {\n      throw new TypeError(\n        'Encoding and objectMode may not be used together'\n      )\n    }\n    if (isObjectModeOptions(options)) {\n      this[OBJECTMODE] = true\n      this[ENCODING] = null\n    } else if (isEncodingOptions(options)) {\n      this[ENCODING] = options.encoding\n      this[OBJECTMODE] = false\n    } else {\n      this[OBJECTMODE] = false\n      this[ENCODING] = null\n    }\n    this[ASYNC] = !!options.async\n    this[DECODER] = this[ENCODING]\n      ? (new StringDecoder(this[ENCODING]) as SD)\n      : null\n\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposeBuffer === true) {\n      Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n    }\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposePipes === true) {\n      Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n    }\n\n    const { signal } = options\n    if (signal) {\n      this[SIGNAL] = signal\n      if (signal.aborted) {\n        this[ABORT]()\n      } else {\n        signal.addEventListener('abort', () => this[ABORT]())\n      }\n    }\n  }\n\n  /**\n   * The amount of data stored in the buffer waiting to be read.\n   *\n   * For Buffer strings, this will be the total byte length.\n   * For string encoding streams, this will be the string character length,\n   * according to JavaScript's `string.length` logic.\n   * For objectMode streams, this is a count of the items waiting to be\n   * emitted.\n   */\n  get bufferLength() {\n    return this[BUFFERLENGTH]\n  }\n\n  /**\n   * The `BufferEncoding` currently in use, or `null`\n   */\n  get encoding() {\n    return this[ENCODING]\n  }\n\n  /**\n   * @deprecated - This is a read only property\n   */\n  set encoding(_enc) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * @deprecated - Encoding may only be set at instantiation time\n   */\n  setEncoding(_enc: Minipass.Encoding) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * True if this is an objectMode stream\n   */\n  get objectMode() {\n    return this[OBJECTMODE]\n  }\n\n  /**\n   * @deprecated - This is a read-only property\n   */\n  set objectMode(_om) {\n    throw new Error('objectMode must be set at instantiation time')\n  }\n\n  /**\n   * true if this is an async stream\n   */\n  get ['async'](): boolean {\n    return this[ASYNC]\n  }\n  /**\n   * Set to true to make this stream async.\n   *\n   * Once set, it cannot be unset, as this would potentially cause incorrect\n   * behavior.  Ie, a sync stream can be made async, but an async stream\n   * cannot be safely made sync.\n   */\n  set ['async'](a: boolean) {\n    this[ASYNC] = this[ASYNC] || !!a\n  }\n\n  // drop everything and get out of the flow completely\n  [ABORT]() {\n    this[ABORTED] = true\n    this.emit('abort', this[SIGNAL]?.reason)\n    this.destroy(this[SIGNAL]?.reason)\n  }\n\n  /**\n   * True if the stream has been aborted.\n   */\n  get aborted() {\n    return this[ABORTED]\n  }\n  /**\n   * No-op setter. Stream aborted status is set via the AbortSignal provided\n   * in the constructor options.\n   */\n  set aborted(_) {}\n\n  /**\n   * Write data into the stream\n   *\n   * If the chunk written is a string, and encoding is not specified, then\n   * `utf8` will be assumed. If the stream encoding matches the encoding of\n   * a written string, and the state of the string decoder allows it, then\n   * the string will be passed through to either the output or the internal\n   * buffer without any processing. Otherwise, it will be turned into a\n   * Buffer object for processing into the desired encoding.\n   *\n   * If provided, `cb` function is called immediately before return for\n   * sync streams, or on next tick for async streams, because for this\n   * base class, a chunk is considered \"processed\" once it is accepted\n   * and either emitted or buffered. That is, the callback does not indicate\n   * that the chunk has been eventually emitted, though of course child\n   * classes can override this function to do whatever processing is required\n   * and call `super.write(...)` only once processing is completed.\n   */\n  write(chunk: WType, cb?: () => void): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding,\n    cb?: () => void\n  ): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): boolean {\n    if (this[ABORTED]) return false\n    if (this[EOF]) throw new Error('write after end')\n\n    if (this[DESTROYED]) {\n      this.emit(\n        'error',\n        Object.assign(\n          new Error('Cannot call write after a stream was destroyed'),\n          { code: 'ERR_STREAM_DESTROYED' }\n        )\n      )\n      return true\n    }\n\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n\n    if (!encoding) encoding = 'utf8'\n\n    const fn = this[ASYNC] ? defer : nodefer\n\n    // convert array buffers and typed array views into buffers\n    // at some point in the future, we may want to do the opposite!\n    // leave strings and buffers as-is\n    // anything is only allowed if in object mode, so throw\n    if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n      if (isArrayBufferView(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(\n          chunk.buffer,\n          chunk.byteOffset,\n          chunk.byteLength\n        )\n      } else if (isArrayBufferLike(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(chunk)\n      } else if (typeof chunk !== 'string') {\n        throw new Error(\n          'Non-contiguous data written to non-objectMode stream'\n        )\n      }\n    }\n\n    // handle object mode up front, since it's simpler\n    // this yields better performance, fewer checks later.\n    if (this[OBJECTMODE]) {\n      // maybe impossible?\n      /* c8 ignore start */\n      if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n      /* c8 ignore stop */\n\n      if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n      else this[BUFFERPUSH](chunk as unknown as RType)\n\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n      if (cb) fn(cb)\n\n      return this[FLOWING]\n    }\n\n    // at this point the chunk is a buffer or string\n    // don't buffer it up or send it to the decoder\n    if (!(chunk as Minipass.BufferOrString).length) {\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n      if (cb) fn(cb)\n      return this[FLOWING]\n    }\n\n    // fast-path writing strings of same encoding to a stream with\n    // an empty buffer, skipping the buffer/decoder dance\n    if (\n      typeof chunk === 'string' &&\n      // unless it is a string already ready for us to use\n      !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n    ) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = Buffer.from(chunk, encoding)\n    }\n\n    if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = this[DECODER].write(chunk)\n    }\n\n    // Note: flushing CAN potentially switch us into not-flowing mode\n    if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n    if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n    else this[BUFFERPUSH](chunk as unknown as RType)\n\n    if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n    if (cb) fn(cb)\n\n    return this[FLOWING]\n  }\n\n  /**\n   * Low-level explicit read method.\n   *\n   * In objectMode, the argument is ignored, and one item is returned if\n   * available.\n   *\n   * `n` is the number of bytes (or in the case of encoding streams,\n   * characters) to consume. If `n` is not provided, then the entire buffer\n   * is returned, or `null` is returned if no data is available.\n   *\n   * If `n` is greater that the amount of data in the internal buffer,\n   * then `null` is returned.\n   */\n  read(n?: number | null): RType | null {\n    if (this[DESTROYED]) return null\n    this[DISCARDED] = false\n\n    if (\n      this[BUFFERLENGTH] === 0 ||\n      n === 0 ||\n      (n && n > this[BUFFERLENGTH])\n    ) {\n      this[MAYBE_EMIT_END]()\n      return null\n    }\n\n    if (this[OBJECTMODE]) n = null\n\n    if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n      // not object mode, so if we have an encoding, then RType is string\n      // otherwise, must be Buffer\n      this[BUFFER] = [\n        (this[ENCODING]\n          ? this[BUFFER].join('')\n          : Buffer.concat(\n              this[BUFFER] as Buffer[],\n              this[BUFFERLENGTH]\n            )) as RType,\n      ]\n    }\n\n    const ret = this[READ](n || null, this[BUFFER][0] as RType)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [READ](n: number | null, chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n    else {\n      const c = chunk as Minipass.BufferOrString\n      if (n === c.length || n === null) this[BUFFERSHIFT]()\n      else if (typeof c === 'string') {\n        this[BUFFER][0] = c.slice(n) as RType\n        chunk = c.slice(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      } else {\n        this[BUFFER][0] = c.subarray(n) as RType\n        chunk = c.subarray(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      }\n    }\n\n    this.emit('data', chunk)\n\n    if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n    return chunk\n  }\n\n  /**\n   * End the stream, optionally providing a final write.\n   *\n   * See {@link Minipass#write} for argument descriptions\n   */\n  end(cb?: () => void): this\n  end(chunk: WType, cb?: () => void): this\n  end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n  end(\n    chunk?: WType | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): this {\n    if (typeof chunk === 'function') {\n      cb = chunk as () => void\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n    if (chunk !== undefined) this.write(chunk, encoding)\n    if (cb) this.once('end', cb)\n    this[EOF] = true\n    this.writable = false\n\n    // if we haven't written anything, then go ahead and emit,\n    // even if we're not reading.\n    // we'll re-emit if a new 'end' listener is added anyway.\n    // This makes MP more suitable to write-only use cases.\n    if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n    return this\n  }\n\n  // don't let the internal resume be overwritten\n  [RESUME]() {\n    if (this[DESTROYED]) return\n\n    if (!this[DATALISTENERS] && !this[PIPES].length) {\n      this[DISCARDED] = true\n    }\n    this[PAUSED] = false\n    this[FLOWING] = true\n    this.emit('resume')\n    if (this[BUFFER].length) this[FLUSH]()\n    else if (this[EOF]) this[MAYBE_EMIT_END]()\n    else this.emit('drain')\n  }\n\n  /**\n   * Resume the stream if it is currently in a paused state\n   *\n   * If called when there are no pipe destinations or `data` event listeners,\n   * this will place the stream in a \"discarded\" state, where all data will\n   * be thrown away. The discarded state is removed if a pipe destination or\n   * data handler is added, if pause() is called, or if any synchronous or\n   * asynchronous iteration is started.\n   */\n  resume() {\n    return this[RESUME]()\n  }\n\n  /**\n   * Pause the stream\n   */\n  pause() {\n    this[FLOWING] = false\n    this[PAUSED] = true\n    this[DISCARDED] = false\n  }\n\n  /**\n   * true if the stream has been forcibly destroyed\n   */\n  get destroyed() {\n    return this[DESTROYED]\n  }\n\n  /**\n   * true if the stream is currently in a flowing state, meaning that\n   * any writes will be immediately emitted.\n   */\n  get flowing() {\n    return this[FLOWING]\n  }\n\n  /**\n   * true if the stream is currently in a paused state\n   */\n  get paused() {\n    return this[PAUSED]\n  }\n\n  [BUFFERPUSH](chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n    else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n    this[BUFFER].push(chunk)\n  }\n\n  [BUFFERSHIFT](): RType {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n    else\n      this[BUFFERLENGTH] -= (\n        this[BUFFER][0] as Minipass.BufferOrString\n      ).length\n    return this[BUFFER].shift() as RType\n  }\n\n  [FLUSH](noDrain: boolean = false) {\n    do {} while (\n      this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n      this[BUFFER].length\n    )\n\n    if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n  }\n\n  [FLUSHCHUNK](chunk: RType) {\n    this.emit('data', chunk)\n    return this[FLOWING]\n  }\n\n  /**\n   * Pipe all data emitted by this stream into the destination provided.\n   *\n   * Triggers the flow of data.\n   */\n  pipe(dest: W, opts?: PipeOptions): W {\n    if (this[DESTROYED]) return dest\n    this[DISCARDED] = false\n\n    const ended = this[EMITTED_END]\n    opts = opts || {}\n    if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n    else opts.end = opts.end !== false\n    opts.proxyErrors = !!opts.proxyErrors\n\n    // piping an ended stream ends immediately\n    if (ended) {\n      if (opts.end) dest.end()\n    } else {\n      // \"as\" here just ignores the WType, which pipes don't care about,\n      // since they're only consuming from us, and writing to the dest\n      this[PIPES].push(\n        !opts.proxyErrors\n          ? new Pipe(this as Minipass, dest, opts)\n          : new PipeProxyErrors(this as Minipass, dest, opts)\n      )\n      if (this[ASYNC]) defer(() => this[RESUME]())\n      else this[RESUME]()\n    }\n\n    return dest\n  }\n\n  /**\n   * Fully unhook a piped destination stream.\n   *\n   * If the destination stream was the only consumer of this stream (ie,\n   * there are no other piped destinations or `'data'` event listeners)\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  unpipe(dest: W) {\n    const p = this[PIPES].find(p => p.dest === dest)\n    if (p) {\n      if (this[PIPES].length === 1) {\n        if (this[FLOWING] && this[DATALISTENERS] === 0) {\n          this[FLOWING] = false\n        }\n        this[PIPES] = []\n      } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n      p.unpipe()\n    }\n  }\n\n  /**\n   * Alias for {@link Minipass#on}\n   */\n  addListener(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    return this.on(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.on`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * - Adding a 'data' event handler will trigger the flow of data\n   *\n   * - Adding a 'readable' event handler when there is data waiting to be read\n   *   will cause 'readable' to be emitted immediately.\n   *\n   * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n   *   already passed will cause the event to be emitted immediately and all\n   *   handlers removed.\n   *\n   * - Adding an 'error' event handler after an error has been emitted will\n   *   cause the event to be re-emitted immediately with the error previously\n   *   raised.\n   */\n  on(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    const ret = super.on(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    if (ev === 'data') {\n      this[DISCARDED] = false\n      this[DATALISTENERS]++\n      if (!this[PIPES].length && !this[FLOWING]) {\n        this[RESUME]()\n      }\n    } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n      super.emit('readable')\n    } else if (isEndish(ev) && this[EMITTED_END]) {\n      super.emit(ev)\n      this.removeAllListeners(ev)\n    } else if (ev === 'error' && this[EMITTED_ERROR]) {\n      const h = handler as (...a: Events['error']) => any\n      if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n      else h.call(this, this[EMITTED_ERROR])\n    }\n    return ret\n  }\n\n  /**\n   * Alias for {@link Minipass#off}\n   */\n  removeListener(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    return this.off(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.off`\n   *\n   * If a 'data' event handler is removed, and it was the last consumer\n   * (ie, there are no pipe destinations or other 'data' event listeners),\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  off(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    const ret = super.off(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    // if we previously had listeners, and now we don't, and we don't\n    // have any pipes, then stop the flow, unless it's been explicitly\n    // put in a discarded flowing state via stream.resume().\n    if (ev === 'data') {\n      this[DATALISTENERS] = this.listeners('data').length\n      if (\n        this[DATALISTENERS] === 0 &&\n        !this[DISCARDED] &&\n        !this[PIPES].length\n      ) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.removeAllListeners`\n   *\n   * If all 'data' event handlers are removed, and they were the last consumer\n   * (ie, there are no pipe destinations), then the flow of data will stop\n   * until there is another consumer or {@link Minipass#resume} is explicitly\n   * called.\n   */\n  removeAllListeners(ev?: Event) {\n    const ret = super.removeAllListeners(ev as string | symbol | undefined)\n    if (ev === 'data' || ev === undefined) {\n      this[DATALISTENERS] = 0\n      if (!this[DISCARDED] && !this[PIPES].length) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * true if the 'end' event has been emitted\n   */\n  get emittedEnd() {\n    return this[EMITTED_END]\n  }\n\n  [MAYBE_EMIT_END]() {\n    if (\n      !this[EMITTING_END] &&\n      !this[EMITTED_END] &&\n      !this[DESTROYED] &&\n      this[BUFFER].length === 0 &&\n      this[EOF]\n    ) {\n      this[EMITTING_END] = true\n      this.emit('end')\n      this.emit('prefinish')\n      this.emit('finish')\n      if (this[CLOSED]) this.emit('close')\n      this[EMITTING_END] = false\n    }\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.emit`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * If the stream has been destroyed, and the event is something other\n   * than 'close' or 'error', then `false` is returned and no handlers\n   * are called.\n   *\n   * If the event is 'end', and has already been emitted, then the event\n   * is ignored. If the stream is in a paused or non-flowing state, then\n   * the event will be deferred until data flow resumes. If the stream is\n   * async, then handlers will be called on the next tick rather than\n   * immediately.\n   *\n   * If the event is 'close', and 'end' has not yet been emitted, then\n   * the event will be deferred until after 'end' is emitted.\n   *\n   * If the event is 'error', and an AbortSignal was provided for the stream,\n   * and there are no listeners, then the event is ignored, matching the\n   * behavior of node core streams in the presense of an AbortSignal.\n   *\n   * If the event is 'finish' or 'prefinish', then all listeners will be\n   * removed after emitting the event, to prevent double-firing.\n   */\n  emit(\n    ev: Event,\n    ...args: Events[Event]\n  ): boolean {\n    const data = args[0]\n    // error and close are only events allowed after calling destroy()\n    if (\n      ev !== 'error' &&\n      ev !== 'close' &&\n      ev !== DESTROYED &&\n      this[DESTROYED]\n    ) {\n      return false\n    } else if (ev === 'data') {\n      return !this[OBJECTMODE] && !data\n        ? false\n        : this[ASYNC]\n        ? (defer(() => this[EMITDATA](data as RType)), true)\n        : this[EMITDATA](data as RType)\n    } else if (ev === 'end') {\n      return this[EMITEND]()\n    } else if (ev === 'close') {\n      this[CLOSED] = true\n      // don't emit close before 'end' and 'finish'\n      if (!this[EMITTED_END] && !this[DESTROYED]) return false\n      const ret = super.emit('close')\n      this.removeAllListeners('close')\n      return ret\n    } else if (ev === 'error') {\n      this[EMITTED_ERROR] = data\n      super.emit(ERROR, data)\n      const ret =\n        !this[SIGNAL] || this.listeners('error').length\n          ? super.emit('error', data)\n          : false\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'resume') {\n      const ret = super.emit('resume')\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'finish' || ev === 'prefinish') {\n      const ret = super.emit(ev)\n      this.removeAllListeners(ev)\n      return ret\n    }\n\n    // Some other unknown event\n    const ret = super.emit(ev as string, ...args)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITDATA](data: RType) {\n    for (const p of this[PIPES]) {\n      if (p.dest.write(data as RType) === false) this.pause()\n    }\n    const ret = this[DISCARDED] ? false : super.emit('data', data)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITEND]() {\n    if (this[EMITTED_END]) return false\n\n    this[EMITTED_END] = true\n    this.readable = false\n    return this[ASYNC]\n      ? (defer(() => this[EMITEND2]()), true)\n      : this[EMITEND2]()\n  }\n\n  [EMITEND2]() {\n    if (this[DECODER]) {\n      const data = this[DECODER].end()\n      if (data) {\n        for (const p of this[PIPES]) {\n          p.dest.write(data as RType)\n        }\n        if (!this[DISCARDED]) super.emit('data', data)\n      }\n    }\n\n    for (const p of this[PIPES]) {\n      p.end()\n    }\n    const ret = super.emit('end')\n    this.removeAllListeners('end')\n    return ret\n  }\n\n  /**\n   * Return a Promise that resolves to an array of all emitted data once\n   * the stream ends.\n   */\n  async collect(): Promise {\n    const buf: RType[] & { dataLength: number } = Object.assign([], {\n      dataLength: 0,\n    })\n    if (!this[OBJECTMODE]) buf.dataLength = 0\n    // set the promise first, in case an error is raised\n    // by triggering the flow here.\n    const p = this.promise()\n    this.on('data', c => {\n      buf.push(c)\n      if (!this[OBJECTMODE])\n        buf.dataLength += (c as Minipass.BufferOrString).length\n    })\n    await p\n    return buf\n  }\n\n  /**\n   * Return a Promise that resolves to the concatenation of all emitted data\n   * once the stream ends.\n   *\n   * Not allowed on objectMode streams.\n   */\n  async concat(): Promise {\n    if (this[OBJECTMODE]) {\n      throw new Error('cannot concat in objectMode')\n    }\n    const buf = await this.collect()\n    return (\n      this[ENCODING]\n        ? buf.join('')\n        : Buffer.concat(buf as Buffer[], buf.dataLength)\n    ) as RType\n  }\n\n  /**\n   * Return a void Promise that resolves once the stream ends.\n   */\n  async promise(): Promise {\n    return new Promise((resolve, reject) => {\n      this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n      this.on('error', er => reject(er))\n      this.on('end', () => resolve())\n    })\n  }\n\n  /**\n   * Asynchronous `for await of` iteration.\n   *\n   * This will continue emitting all chunks until the stream terminates.\n   */\n  [Symbol.asyncIterator](): AsyncGenerator {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = async (): Promise> => {\n      this.pause()\n      stopped = true\n      return { value: undefined, done: true }\n    }\n    const next = (): Promise> => {\n      if (stopped) return stop()\n      const res = this.read()\n      if (res !== null) return Promise.resolve({ done: false, value: res })\n\n      if (this[EOF]) return stop()\n\n      let resolve!: (res: IteratorResult) => void\n      let reject!: (er: unknown) => void\n      const onerr = (er: unknown) => {\n        this.off('data', ondata)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        reject(er)\n      }\n      const ondata = (value: RType) => {\n        this.off('error', onerr)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        this.pause()\n        resolve({ value, done: !!this[EOF] })\n      }\n      const onend = () => {\n        this.off('error', onerr)\n        this.off('data', ondata)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        resolve({ done: true, value: undefined })\n      }\n      const ondestroy = () => onerr(new Error('stream destroyed'))\n      return new Promise>((res, rej) => {\n        reject = rej\n        resolve = res\n        this.once(DESTROYED, ondestroy)\n        this.once('error', onerr)\n        this.once('end', onend)\n        this.once('data', ondata)\n      })\n    }\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.asyncIterator]() {\n        return this\n      },\n    }\n  }\n\n  /**\n   * Synchronous `for of` iteration.\n   *\n   * The iteration will terminate when the internal buffer runs out, even\n   * if the stream has not yet terminated.\n   */\n  [Symbol.iterator](): Generator {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = (): IteratorReturnResult => {\n      this.pause()\n      this.off(ERROR, stop)\n      this.off(DESTROYED, stop)\n      this.off('end', stop)\n      stopped = true\n      return { done: true, value: undefined }\n    }\n\n    const next = (): IteratorResult => {\n      if (stopped) return stop()\n      const value = this.read()\n      return value === null ? stop() : { done: false, value }\n    }\n\n    this.once('end', stop)\n    this.once(ERROR, stop)\n    this.once(DESTROYED, stop)\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.iterator]() {\n        return this\n      },\n    }\n  }\n\n  /**\n   * Destroy a stream, preventing it from being used for any further purpose.\n   *\n   * If the stream has a `close()` method, then it will be called on\n   * destruction.\n   *\n   * After destruction, any attempt to write data, read data, or emit most\n   * events will be ignored.\n   *\n   * If an error argument is provided, then it will be emitted in an\n   * 'error' event.\n   */\n  destroy(er?: unknown) {\n    if (this[DESTROYED]) {\n      if (er) this.emit('error', er)\n      else this.emit(DESTROYED)\n      return this\n    }\n\n    this[DESTROYED] = true\n    this[DISCARDED] = true\n\n    // throw away all buffered data, it's never coming out\n    this[BUFFER].length = 0\n    this[BUFFERLENGTH] = 0\n\n    const wc = this as Minipass & {\n      close?: () => void\n    }\n    if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n    if (er) this.emit('error', er)\n    // if no error to emit, still reject pending promises\n    else this.emit(DESTROYED)\n\n    return this\n  }\n\n  /**\n   * Alias for {@link isStream}\n   *\n   * Former export location, maintained for backwards compatibility.\n   *\n   * @deprecated\n   */\n  static get isStream() {\n    return isStream\n  }\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/minipass/dist/commonjs/package.json b/node_modules/minipass/dist/commonjs/package.json
new file mode 100644
index 00000000..5bbefffb
--- /dev/null
+++ b/node_modules/minipass/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
diff --git a/node_modules/minipass/dist/esm/index.d.ts b/node_modules/minipass/dist/esm/index.d.ts
new file mode 100644
index 00000000..6dbfbcf9
--- /dev/null
+++ b/node_modules/minipass/dist/esm/index.d.ts
@@ -0,0 +1,549 @@
+/// 
+/// 
+/// 
+/// 
+import { EventEmitter } from 'node:events';
+import { StringDecoder } from 'node:string_decoder';
+/**
+ * Same as StringDecoder, but exposing the `lastNeed` flag on the type
+ */
+type SD = StringDecoder & {
+    lastNeed: boolean;
+};
+export type { SD, Pipe, PipeProxyErrors };
+/**
+ * Return true if the argument is a Minipass stream, Node stream, or something
+ * else that Minipass can interact with.
+ */
+export declare const isStream: (s: any) => s is NodeJS.WriteStream | NodeJS.ReadStream | Minipass | (NodeJS.ReadStream & {
+    fd: number;
+}) | (EventEmitter & {
+    pause(): any;
+    resume(): any;
+    pipe(...destArgs: any[]): any;
+}) | (NodeJS.WriteStream & {
+    fd: number;
+}) | (EventEmitter & {
+    end(): any;
+    write(chunk: any, ...args: any[]): any;
+});
+/**
+ * Return true if the argument is a valid {@link Minipass.Readable}
+ */
+export declare const isReadable: (s: any) => s is Minipass.Readable;
+/**
+ * Return true if the argument is a valid {@link Minipass.Writable}
+ */
+export declare const isWritable: (s: any) => s is Minipass.Readable;
+declare const EOF: unique symbol;
+declare const MAYBE_EMIT_END: unique symbol;
+declare const EMITTED_END: unique symbol;
+declare const EMITTING_END: unique symbol;
+declare const EMITTED_ERROR: unique symbol;
+declare const CLOSED: unique symbol;
+declare const READ: unique symbol;
+declare const FLUSH: unique symbol;
+declare const FLUSHCHUNK: unique symbol;
+declare const ENCODING: unique symbol;
+declare const DECODER: unique symbol;
+declare const FLOWING: unique symbol;
+declare const PAUSED: unique symbol;
+declare const RESUME: unique symbol;
+declare const BUFFER: unique symbol;
+declare const PIPES: unique symbol;
+declare const BUFFERLENGTH: unique symbol;
+declare const BUFFERPUSH: unique symbol;
+declare const BUFFERSHIFT: unique symbol;
+declare const OBJECTMODE: unique symbol;
+declare const DESTROYED: unique symbol;
+declare const ERROR: unique symbol;
+declare const EMITDATA: unique symbol;
+declare const EMITEND: unique symbol;
+declare const EMITEND2: unique symbol;
+declare const ASYNC: unique symbol;
+declare const ABORT: unique symbol;
+declare const ABORTED: unique symbol;
+declare const SIGNAL: unique symbol;
+declare const DATALISTENERS: unique symbol;
+declare const DISCARDED: unique symbol;
+/**
+ * Options that may be passed to stream.pipe()
+ */
+export interface PipeOptions {
+    /**
+     * end the destination stream when the source stream ends
+     */
+    end?: boolean;
+    /**
+     * proxy errors from the source stream to the destination stream
+     */
+    proxyErrors?: boolean;
+}
+/**
+ * Internal class representing a pipe to a destination stream.
+ *
+ * @internal
+ */
+declare class Pipe {
+    src: Minipass;
+    dest: Minipass;
+    opts: PipeOptions;
+    ondrain: () => any;
+    constructor(src: Minipass, dest: Minipass.Writable, opts: PipeOptions);
+    unpipe(): void;
+    proxyErrors(_er: any): void;
+    end(): void;
+}
+/**
+ * Internal class representing a pipe to a destination stream where
+ * errors are proxied.
+ *
+ * @internal
+ */
+declare class PipeProxyErrors extends Pipe {
+    unpipe(): void;
+    constructor(src: Minipass, dest: Minipass.Writable, opts: PipeOptions);
+}
+export declare namespace Minipass {
+    /**
+     * Encoding used to create a stream that outputs strings rather than
+     * Buffer objects.
+     */
+    export type Encoding = BufferEncoding | 'buffer' | null;
+    /**
+     * Any stream that Minipass can pipe into
+     */
+    export type Writable = Minipass | NodeJS.WriteStream | (NodeJS.WriteStream & {
+        fd: number;
+    }) | (EventEmitter & {
+        end(): any;
+        write(chunk: any, ...args: any[]): any;
+    });
+    /**
+     * Any stream that can be read from
+     */
+    export type Readable = Minipass | NodeJS.ReadStream | (NodeJS.ReadStream & {
+        fd: number;
+    }) | (EventEmitter & {
+        pause(): any;
+        resume(): any;
+        pipe(...destArgs: any[]): any;
+    });
+    /**
+     * Utility type that can be iterated sync or async
+     */
+    export type DualIterable = Iterable & AsyncIterable;
+    type EventArguments = Record;
+    /**
+     * The listing of events that a Minipass class can emit.
+     * Extend this when extending the Minipass class, and pass as
+     * the third template argument.  The key is the name of the event,
+     * and the value is the argument list.
+     *
+     * Any undeclared events will still be allowed, but the handler will get
+     * arguments as `unknown[]`.
+     */
+    export interface Events extends EventArguments {
+        readable: [];
+        data: [chunk: RType];
+        error: [er: unknown];
+        abort: [reason: unknown];
+        drain: [];
+        resume: [];
+        end: [];
+        finish: [];
+        prefinish: [];
+        close: [];
+        [DESTROYED]: [er?: unknown];
+        [ERROR]: [er: unknown];
+    }
+    /**
+     * String or buffer-like data that can be joined and sliced
+     */
+    export type ContiguousData = Buffer | ArrayBufferLike | ArrayBufferView | string;
+    export type BufferOrString = Buffer | string;
+    /**
+     * Options passed to the Minipass constructor.
+     */
+    export type SharedOptions = {
+        /**
+         * Defer all data emission and other events until the end of the
+         * current tick, similar to Node core streams
+         */
+        async?: boolean;
+        /**
+         * A signal which will abort the stream
+         */
+        signal?: AbortSignal;
+        /**
+         * Output string encoding. Set to `null` or `'buffer'` (or omit) to
+         * emit Buffer objects rather than strings.
+         *
+         * Conflicts with `objectMode`
+         */
+        encoding?: BufferEncoding | null | 'buffer';
+        /**
+         * Output data exactly as it was written, supporting non-buffer/string
+         * data (such as arbitrary objects, falsey values, etc.)
+         *
+         * Conflicts with `encoding`
+         */
+        objectMode?: boolean;
+    };
+    /**
+     * Options for a string encoded output
+     */
+    export type EncodingOptions = SharedOptions & {
+        encoding: BufferEncoding;
+        objectMode?: false;
+    };
+    /**
+     * Options for contiguous data buffer output
+     */
+    export type BufferOptions = SharedOptions & {
+        encoding?: null | 'buffer';
+        objectMode?: false;
+    };
+    /**
+     * Options for objectMode arbitrary output
+     */
+    export type ObjectModeOptions = SharedOptions & {
+        objectMode: true;
+        encoding?: null;
+    };
+    /**
+     * Utility type to determine allowed options based on read type
+     */
+    export type Options = ObjectModeOptions | (T extends string ? EncodingOptions : T extends Buffer ? BufferOptions : SharedOptions);
+    export {};
+}
+/**
+ * Main export, the Minipass class
+ *
+ * `RType` is the type of data emitted, defaults to Buffer
+ *
+ * `WType` is the type of data to be written, if RType is buffer or string,
+ * then any {@link Minipass.ContiguousData} is allowed.
+ *
+ * `Events` is the set of event handler signatures that this object
+ * will emit, see {@link Minipass.Events}
+ */
+export declare class Minipass = Minipass.Events> extends EventEmitter implements Minipass.DualIterable {
+    [FLOWING]: boolean;
+    [PAUSED]: boolean;
+    [PIPES]: Pipe[];
+    [BUFFER]: RType[];
+    [OBJECTMODE]: boolean;
+    [ENCODING]: BufferEncoding | null;
+    [ASYNC]: boolean;
+    [DECODER]: SD | null;
+    [EOF]: boolean;
+    [EMITTED_END]: boolean;
+    [EMITTING_END]: boolean;
+    [CLOSED]: boolean;
+    [EMITTED_ERROR]: unknown;
+    [BUFFERLENGTH]: number;
+    [DESTROYED]: boolean;
+    [SIGNAL]?: AbortSignal;
+    [ABORTED]: boolean;
+    [DATALISTENERS]: number;
+    [DISCARDED]: boolean;
+    /**
+     * true if the stream can be written
+     */
+    writable: boolean;
+    /**
+     * true if the stream can be read
+     */
+    readable: boolean;
+    /**
+     * If `RType` is Buffer, then options do not need to be provided.
+     * Otherwise, an options object must be provided to specify either
+     * {@link Minipass.SharedOptions.objectMode} or
+     * {@link Minipass.SharedOptions.encoding}, as appropriate.
+     */
+    constructor(...args: [Minipass.ObjectModeOptions] | (RType extends Buffer ? [] | [Minipass.Options] : [Minipass.Options]));
+    /**
+     * The amount of data stored in the buffer waiting to be read.
+     *
+     * For Buffer strings, this will be the total byte length.
+     * For string encoding streams, this will be the string character length,
+     * according to JavaScript's `string.length` logic.
+     * For objectMode streams, this is a count of the items waiting to be
+     * emitted.
+     */
+    get bufferLength(): number;
+    /**
+     * The `BufferEncoding` currently in use, or `null`
+     */
+    get encoding(): BufferEncoding | null;
+    /**
+     * @deprecated - This is a read only property
+     */
+    set encoding(_enc: BufferEncoding | null);
+    /**
+     * @deprecated - Encoding may only be set at instantiation time
+     */
+    setEncoding(_enc: Minipass.Encoding): void;
+    /**
+     * True if this is an objectMode stream
+     */
+    get objectMode(): boolean;
+    /**
+     * @deprecated - This is a read-only property
+     */
+    set objectMode(_om: boolean);
+    /**
+     * true if this is an async stream
+     */
+    get ['async'](): boolean;
+    /**
+     * Set to true to make this stream async.
+     *
+     * Once set, it cannot be unset, as this would potentially cause incorrect
+     * behavior.  Ie, a sync stream can be made async, but an async stream
+     * cannot be safely made sync.
+     */
+    set ['async'](a: boolean);
+    [ABORT](): void;
+    /**
+     * True if the stream has been aborted.
+     */
+    get aborted(): boolean;
+    /**
+     * No-op setter. Stream aborted status is set via the AbortSignal provided
+     * in the constructor options.
+     */
+    set aborted(_: boolean);
+    /**
+     * Write data into the stream
+     *
+     * If the chunk written is a string, and encoding is not specified, then
+     * `utf8` will be assumed. If the stream encoding matches the encoding of
+     * a written string, and the state of the string decoder allows it, then
+     * the string will be passed through to either the output or the internal
+     * buffer without any processing. Otherwise, it will be turned into a
+     * Buffer object for processing into the desired encoding.
+     *
+     * If provided, `cb` function is called immediately before return for
+     * sync streams, or on next tick for async streams, because for this
+     * base class, a chunk is considered "processed" once it is accepted
+     * and either emitted or buffered. That is, the callback does not indicate
+     * that the chunk has been eventually emitted, though of course child
+     * classes can override this function to do whatever processing is required
+     * and call `super.write(...)` only once processing is completed.
+     */
+    write(chunk: WType, cb?: () => void): boolean;
+    write(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): boolean;
+    /**
+     * Low-level explicit read method.
+     *
+     * In objectMode, the argument is ignored, and one item is returned if
+     * available.
+     *
+     * `n` is the number of bytes (or in the case of encoding streams,
+     * characters) to consume. If `n` is not provided, then the entire buffer
+     * is returned, or `null` is returned if no data is available.
+     *
+     * If `n` is greater that the amount of data in the internal buffer,
+     * then `null` is returned.
+     */
+    read(n?: number | null): RType | null;
+    [READ](n: number | null, chunk: RType): RType;
+    /**
+     * End the stream, optionally providing a final write.
+     *
+     * See {@link Minipass#write} for argument descriptions
+     */
+    end(cb?: () => void): this;
+    end(chunk: WType, cb?: () => void): this;
+    end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this;
+    [RESUME](): void;
+    /**
+     * Resume the stream if it is currently in a paused state
+     *
+     * If called when there are no pipe destinations or `data` event listeners,
+     * this will place the stream in a "discarded" state, where all data will
+     * be thrown away. The discarded state is removed if a pipe destination or
+     * data handler is added, if pause() is called, or if any synchronous or
+     * asynchronous iteration is started.
+     */
+    resume(): void;
+    /**
+     * Pause the stream
+     */
+    pause(): void;
+    /**
+     * true if the stream has been forcibly destroyed
+     */
+    get destroyed(): boolean;
+    /**
+     * true if the stream is currently in a flowing state, meaning that
+     * any writes will be immediately emitted.
+     */
+    get flowing(): boolean;
+    /**
+     * true if the stream is currently in a paused state
+     */
+    get paused(): boolean;
+    [BUFFERPUSH](chunk: RType): void;
+    [BUFFERSHIFT](): RType;
+    [FLUSH](noDrain?: boolean): void;
+    [FLUSHCHUNK](chunk: RType): boolean;
+    /**
+     * Pipe all data emitted by this stream into the destination provided.
+     *
+     * Triggers the flow of data.
+     */
+    pipe(dest: W, opts?: PipeOptions): W;
+    /**
+     * Fully unhook a piped destination stream.
+     *
+     * If the destination stream was the only consumer of this stream (ie,
+     * there are no other piped destinations or `'data'` event listeners)
+     * then the flow of data will stop until there is another consumer or
+     * {@link Minipass#resume} is explicitly called.
+     */
+    unpipe(dest: W): void;
+    /**
+     * Alias for {@link Minipass#on}
+     */
+    addListener(ev: Event, handler: (...args: Events[Event]) => any): this;
+    /**
+     * Mostly identical to `EventEmitter.on`, with the following
+     * behavior differences to prevent data loss and unnecessary hangs:
+     *
+     * - Adding a 'data' event handler will trigger the flow of data
+     *
+     * - Adding a 'readable' event handler when there is data waiting to be read
+     *   will cause 'readable' to be emitted immediately.
+     *
+     * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
+     *   already passed will cause the event to be emitted immediately and all
+     *   handlers removed.
+     *
+     * - Adding an 'error' event handler after an error has been emitted will
+     *   cause the event to be re-emitted immediately with the error previously
+     *   raised.
+     */
+    on(ev: Event, handler: (...args: Events[Event]) => any): this;
+    /**
+     * Alias for {@link Minipass#off}
+     */
+    removeListener(ev: Event, handler: (...args: Events[Event]) => any): this;
+    /**
+     * Mostly identical to `EventEmitter.off`
+     *
+     * If a 'data' event handler is removed, and it was the last consumer
+     * (ie, there are no pipe destinations or other 'data' event listeners),
+     * then the flow of data will stop until there is another consumer or
+     * {@link Minipass#resume} is explicitly called.
+     */
+    off(ev: Event, handler: (...args: Events[Event]) => any): this;
+    /**
+     * Mostly identical to `EventEmitter.removeAllListeners`
+     *
+     * If all 'data' event handlers are removed, and they were the last consumer
+     * (ie, there are no pipe destinations), then the flow of data will stop
+     * until there is another consumer or {@link Minipass#resume} is explicitly
+     * called.
+     */
+    removeAllListeners(ev?: Event): this;
+    /**
+     * true if the 'end' event has been emitted
+     */
+    get emittedEnd(): boolean;
+    [MAYBE_EMIT_END](): void;
+    /**
+     * Mostly identical to `EventEmitter.emit`, with the following
+     * behavior differences to prevent data loss and unnecessary hangs:
+     *
+     * If the stream has been destroyed, and the event is something other
+     * than 'close' or 'error', then `false` is returned and no handlers
+     * are called.
+     *
+     * If the event is 'end', and has already been emitted, then the event
+     * is ignored. If the stream is in a paused or non-flowing state, then
+     * the event will be deferred until data flow resumes. If the stream is
+     * async, then handlers will be called on the next tick rather than
+     * immediately.
+     *
+     * If the event is 'close', and 'end' has not yet been emitted, then
+     * the event will be deferred until after 'end' is emitted.
+     *
+     * If the event is 'error', and an AbortSignal was provided for the stream,
+     * and there are no listeners, then the event is ignored, matching the
+     * behavior of node core streams in the presense of an AbortSignal.
+     *
+     * If the event is 'finish' or 'prefinish', then all listeners will be
+     * removed after emitting the event, to prevent double-firing.
+     */
+    emit(ev: Event, ...args: Events[Event]): boolean;
+    [EMITDATA](data: RType): boolean;
+    [EMITEND](): boolean;
+    [EMITEND2](): boolean;
+    /**
+     * Return a Promise that resolves to an array of all emitted data once
+     * the stream ends.
+     */
+    collect(): Promise;
+    /**
+     * Return a Promise that resolves to the concatenation of all emitted data
+     * once the stream ends.
+     *
+     * Not allowed on objectMode streams.
+     */
+    concat(): Promise;
+    /**
+     * Return a void Promise that resolves once the stream ends.
+     */
+    promise(): Promise;
+    /**
+     * Asynchronous `for await of` iteration.
+     *
+     * This will continue emitting all chunks until the stream terminates.
+     */
+    [Symbol.asyncIterator](): AsyncGenerator;
+    /**
+     * Synchronous `for of` iteration.
+     *
+     * The iteration will terminate when the internal buffer runs out, even
+     * if the stream has not yet terminated.
+     */
+    [Symbol.iterator](): Generator;
+    /**
+     * Destroy a stream, preventing it from being used for any further purpose.
+     *
+     * If the stream has a `close()` method, then it will be called on
+     * destruction.
+     *
+     * After destruction, any attempt to write data, read data, or emit most
+     * events will be ignored.
+     *
+     * If an error argument is provided, then it will be emitted in an
+     * 'error' event.
+     */
+    destroy(er?: unknown): this;
+    /**
+     * Alias for {@link isStream}
+     *
+     * Former export location, maintained for backwards compatibility.
+     *
+     * @deprecated
+     */
+    static get isStream(): (s: any) => s is NodeJS.WriteStream | NodeJS.ReadStream | Minipass | (NodeJS.ReadStream & {
+        fd: number;
+    }) | (EventEmitter & {
+        pause(): any;
+        resume(): any;
+        pipe(...destArgs: any[]): any;
+    }) | (NodeJS.WriteStream & {
+        fd: number;
+    }) | (EventEmitter & {
+        end(): any;
+        write(chunk: any, ...args: any[]): any;
+    });
+}
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/minipass/dist/esm/index.d.ts.map b/node_modules/minipass/dist/esm/index.d.ts.map
new file mode 100644
index 00000000..cac7e00a
--- /dev/null
+++ b/node_modules/minipass/dist/esm/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/minipass/dist/esm/index.js b/node_modules/minipass/dist/esm/index.js
new file mode 100644
index 00000000..b5fa4513
--- /dev/null
+++ b/node_modules/minipass/dist/esm/index.js
@@ -0,0 +1,1018 @@
+const proc = typeof process === 'object' && process
+    ? process
+    : {
+        stdout: null,
+        stderr: null,
+    };
+import { EventEmitter } from 'node:events';
+import Stream from 'node:stream';
+import { StringDecoder } from 'node:string_decoder';
+/**
+ * Return true if the argument is a Minipass stream, Node stream, or something
+ * else that Minipass can interact with.
+ */
+export const isStream = (s) => !!s &&
+    typeof s === 'object' &&
+    (s instanceof Minipass ||
+        s instanceof Stream ||
+        isReadable(s) ||
+        isWritable(s));
+/**
+ * Return true if the argument is a valid {@link Minipass.Readable}
+ */
+export const isReadable = (s) => !!s &&
+    typeof s === 'object' &&
+    s instanceof EventEmitter &&
+    typeof s.pipe === 'function' &&
+    // node core Writable streams have a pipe() method, but it throws
+    s.pipe !== Stream.Writable.prototype.pipe;
+/**
+ * Return true if the argument is a valid {@link Minipass.Writable}
+ */
+export const isWritable = (s) => !!s &&
+    typeof s === 'object' &&
+    s instanceof EventEmitter &&
+    typeof s.write === 'function' &&
+    typeof s.end === 'function';
+const EOF = Symbol('EOF');
+const MAYBE_EMIT_END = Symbol('maybeEmitEnd');
+const EMITTED_END = Symbol('emittedEnd');
+const EMITTING_END = Symbol('emittingEnd');
+const EMITTED_ERROR = Symbol('emittedError');
+const CLOSED = Symbol('closed');
+const READ = Symbol('read');
+const FLUSH = Symbol('flush');
+const FLUSHCHUNK = Symbol('flushChunk');
+const ENCODING = Symbol('encoding');
+const DECODER = Symbol('decoder');
+const FLOWING = Symbol('flowing');
+const PAUSED = Symbol('paused');
+const RESUME = Symbol('resume');
+const BUFFER = Symbol('buffer');
+const PIPES = Symbol('pipes');
+const BUFFERLENGTH = Symbol('bufferLength');
+const BUFFERPUSH = Symbol('bufferPush');
+const BUFFERSHIFT = Symbol('bufferShift');
+const OBJECTMODE = Symbol('objectMode');
+// internal event when stream is destroyed
+const DESTROYED = Symbol('destroyed');
+// internal event when stream has an error
+const ERROR = Symbol('error');
+const EMITDATA = Symbol('emitData');
+const EMITEND = Symbol('emitEnd');
+const EMITEND2 = Symbol('emitEnd2');
+const ASYNC = Symbol('async');
+const ABORT = Symbol('abort');
+const ABORTED = Symbol('aborted');
+const SIGNAL = Symbol('signal');
+const DATALISTENERS = Symbol('dataListeners');
+const DISCARDED = Symbol('discarded');
+const defer = (fn) => Promise.resolve().then(fn);
+const nodefer = (fn) => fn();
+const isEndish = (ev) => ev === 'end' || ev === 'finish' || ev === 'prefinish';
+const isArrayBufferLike = (b) => b instanceof ArrayBuffer ||
+    (!!b &&
+        typeof b === 'object' &&
+        b.constructor &&
+        b.constructor.name === 'ArrayBuffer' &&
+        b.byteLength >= 0);
+const isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);
+/**
+ * Internal class representing a pipe to a destination stream.
+ *
+ * @internal
+ */
+class Pipe {
+    src;
+    dest;
+    opts;
+    ondrain;
+    constructor(src, dest, opts) {
+        this.src = src;
+        this.dest = dest;
+        this.opts = opts;
+        this.ondrain = () => src[RESUME]();
+        this.dest.on('drain', this.ondrain);
+    }
+    unpipe() {
+        this.dest.removeListener('drain', this.ondrain);
+    }
+    // only here for the prototype
+    /* c8 ignore start */
+    proxyErrors(_er) { }
+    /* c8 ignore stop */
+    end() {
+        this.unpipe();
+        if (this.opts.end)
+            this.dest.end();
+    }
+}
+/**
+ * Internal class representing a pipe to a destination stream where
+ * errors are proxied.
+ *
+ * @internal
+ */
+class PipeProxyErrors 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);
+    }
+}
+const isObjectModeOptions = (o) => !!o.objectMode;
+const isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== 'buffer';
+/**
+ * Main export, the Minipass class
+ *
+ * `RType` is the type of data emitted, defaults to Buffer
+ *
+ * `WType` is the type of data to be written, if RType is buffer or string,
+ * then any {@link Minipass.ContiguousData} is allowed.
+ *
+ * `Events` is the set of event handler signatures that this object
+ * will emit, see {@link Minipass.Events}
+ */
+export class Minipass extends EventEmitter {
+    [FLOWING] = false;
+    [PAUSED] = false;
+    [PIPES] = [];
+    [BUFFER] = [];
+    [OBJECTMODE];
+    [ENCODING];
+    [ASYNC];
+    [DECODER];
+    [EOF] = false;
+    [EMITTED_END] = false;
+    [EMITTING_END] = false;
+    [CLOSED] = false;
+    [EMITTED_ERROR] = null;
+    [BUFFERLENGTH] = 0;
+    [DESTROYED] = false;
+    [SIGNAL];
+    [ABORTED] = false;
+    [DATALISTENERS] = 0;
+    [DISCARDED] = false;
+    /**
+     * true if the stream can be written
+     */
+    writable = true;
+    /**
+     * true if the stream can be read
+     */
+    readable = true;
+    /**
+     * If `RType` is Buffer, then options do not need to be provided.
+     * Otherwise, an options object must be provided to specify either
+     * {@link Minipass.SharedOptions.objectMode} or
+     * {@link Minipass.SharedOptions.encoding}, as appropriate.
+     */
+    constructor(...args) {
+        const options = (args[0] ||
+            {});
+        super();
+        if (options.objectMode && typeof options.encoding === 'string') {
+            throw new TypeError('Encoding and objectMode may not be used together');
+        }
+        if (isObjectModeOptions(options)) {
+            this[OBJECTMODE] = true;
+            this[ENCODING] = null;
+        }
+        else if (isEncodingOptions(options)) {
+            this[ENCODING] = options.encoding;
+            this[OBJECTMODE] = false;
+        }
+        else {
+            this[OBJECTMODE] = false;
+            this[ENCODING] = null;
+        }
+        this[ASYNC] = !!options.async;
+        this[DECODER] = this[ENCODING]
+            ? new StringDecoder(this[ENCODING])
+            : null;
+        //@ts-ignore - private option for debugging and testing
+        if (options && options.debugExposeBuffer === true) {
+            Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] });
+        }
+        //@ts-ignore - private option for debugging and testing
+        if (options && options.debugExposePipes === true) {
+            Object.defineProperty(this, 'pipes', { get: () => this[PIPES] });
+        }
+        const { signal } = options;
+        if (signal) {
+            this[SIGNAL] = signal;
+            if (signal.aborted) {
+                this[ABORT]();
+            }
+            else {
+                signal.addEventListener('abort', () => this[ABORT]());
+            }
+        }
+    }
+    /**
+     * The amount of data stored in the buffer waiting to be read.
+     *
+     * For Buffer strings, this will be the total byte length.
+     * For string encoding streams, this will be the string character length,
+     * according to JavaScript's `string.length` logic.
+     * For objectMode streams, this is a count of the items waiting to be
+     * emitted.
+     */
+    get bufferLength() {
+        return this[BUFFERLENGTH];
+    }
+    /**
+     * The `BufferEncoding` currently in use, or `null`
+     */
+    get encoding() {
+        return this[ENCODING];
+    }
+    /**
+     * @deprecated - This is a read only property
+     */
+    set encoding(_enc) {
+        throw new Error('Encoding must be set at instantiation time');
+    }
+    /**
+     * @deprecated - Encoding may only be set at instantiation time
+     */
+    setEncoding(_enc) {
+        throw new Error('Encoding must be set at instantiation time');
+    }
+    /**
+     * True if this is an objectMode stream
+     */
+    get objectMode() {
+        return this[OBJECTMODE];
+    }
+    /**
+     * @deprecated - This is a read-only property
+     */
+    set objectMode(_om) {
+        throw new Error('objectMode must be set at instantiation time');
+    }
+    /**
+     * true if this is an async stream
+     */
+    get ['async']() {
+        return this[ASYNC];
+    }
+    /**
+     * Set to true to make this stream async.
+     *
+     * Once set, it cannot be unset, as this would potentially cause incorrect
+     * behavior.  Ie, a sync stream can be made async, but an async stream
+     * cannot be safely made sync.
+     */
+    set ['async'](a) {
+        this[ASYNC] = this[ASYNC] || !!a;
+    }
+    // drop everything and get out of the flow completely
+    [ABORT]() {
+        this[ABORTED] = true;
+        this.emit('abort', this[SIGNAL]?.reason);
+        this.destroy(this[SIGNAL]?.reason);
+    }
+    /**
+     * True if the stream has been aborted.
+     */
+    get aborted() {
+        return this[ABORTED];
+    }
+    /**
+     * No-op setter. Stream aborted status is set via the AbortSignal provided
+     * in the constructor options.
+     */
+    set aborted(_) { }
+    write(chunk, encoding, cb) {
+        if (this[ABORTED])
+            return false;
+        if (this[EOF])
+            throw new Error('write after end');
+        if (this[DESTROYED]) {
+            this.emit('error', Object.assign(new Error('Cannot call write after a stream was destroyed'), { code: 'ERR_STREAM_DESTROYED' }));
+            return true;
+        }
+        if (typeof encoding === 'function') {
+            cb = encoding;
+            encoding = 'utf8';
+        }
+        if (!encoding)
+            encoding = 'utf8';
+        const fn = this[ASYNC] ? defer : nodefer;
+        // convert array buffers and typed array views into buffers
+        // at some point in the future, we may want to do the opposite!
+        // leave strings and buffers as-is
+        // anything is only allowed if in object mode, so throw
+        if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {
+            if (isArrayBufferView(chunk)) {
+                //@ts-ignore - sinful unsafe type changing
+                chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);
+            }
+            else if (isArrayBufferLike(chunk)) {
+                //@ts-ignore - sinful unsafe type changing
+                chunk = Buffer.from(chunk);
+            }
+            else if (typeof chunk !== 'string') {
+                throw new Error('Non-contiguous data written to non-objectMode stream');
+            }
+        }
+        // handle object mode up front, since it's simpler
+        // this yields better performance, fewer checks later.
+        if (this[OBJECTMODE]) {
+            // maybe impossible?
+            /* c8 ignore start */
+            if (this[FLOWING] && this[BUFFERLENGTH] !== 0)
+                this[FLUSH](true);
+            /* c8 ignore stop */
+            if (this[FLOWING])
+                this.emit('data', chunk);
+            else
+                this[BUFFERPUSH](chunk);
+            if (this[BUFFERLENGTH] !== 0)
+                this.emit('readable');
+            if (cb)
+                fn(cb);
+            return this[FLOWING];
+        }
+        // at this point the chunk is a buffer or string
+        // don't buffer it up or send it to the decoder
+        if (!chunk.length) {
+            if (this[BUFFERLENGTH] !== 0)
+                this.emit('readable');
+            if (cb)
+                fn(cb);
+            return this[FLOWING];
+        }
+        // fast-path writing strings of same encoding to a stream with
+        // an empty buffer, skipping the buffer/decoder dance
+        if (typeof chunk === 'string' &&
+            // unless it is a string already ready for us to use
+            !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {
+            //@ts-ignore - sinful unsafe type change
+            chunk = Buffer.from(chunk, encoding);
+        }
+        if (Buffer.isBuffer(chunk) && this[ENCODING]) {
+            //@ts-ignore - sinful unsafe type change
+            chunk = this[DECODER].write(chunk);
+        }
+        // Note: flushing CAN potentially switch us into not-flowing mode
+        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)
+            fn(cb);
+        return this[FLOWING];
+    }
+    /**
+     * Low-level explicit read method.
+     *
+     * In objectMode, the argument is ignored, and one item is returned if
+     * available.
+     *
+     * `n` is the number of bytes (or in the case of encoding streams,
+     * characters) to consume. If `n` is not provided, then the entire buffer
+     * is returned, or `null` is returned if no data is available.
+     *
+     * If `n` is greater that the amount of data in the internal buffer,
+     * then `null` is returned.
+     */
+    read(n) {
+        if (this[DESTROYED])
+            return null;
+        this[DISCARDED] = false;
+        if (this[BUFFERLENGTH] === 0 ||
+            n === 0 ||
+            (n && n > this[BUFFERLENGTH])) {
+            this[MAYBE_EMIT_END]();
+            return null;
+        }
+        if (this[OBJECTMODE])
+            n = null;
+        if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {
+            // not object mode, so if we have an encoding, then RType is string
+            // otherwise, must be Buffer
+            this[BUFFER] = [
+                (this[ENCODING]
+                    ? this[BUFFER].join('')
+                    : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])),
+            ];
+        }
+        const ret = this[READ](n || null, this[BUFFER][0]);
+        this[MAYBE_EMIT_END]();
+        return ret;
+    }
+    [READ](n, chunk) {
+        if (this[OBJECTMODE])
+            this[BUFFERSHIFT]();
+        else {
+            const c = chunk;
+            if (n === c.length || n === null)
+                this[BUFFERSHIFT]();
+            else if (typeof c === 'string') {
+                this[BUFFER][0] = c.slice(n);
+                chunk = c.slice(0, n);
+                this[BUFFERLENGTH] -= n;
+            }
+            else {
+                this[BUFFER][0] = c.subarray(n);
+                chunk = c.subarray(0, n);
+                this[BUFFERLENGTH] -= n;
+            }
+        }
+        this.emit('data', chunk);
+        if (!this[BUFFER].length && !this[EOF])
+            this.emit('drain');
+        return chunk;
+    }
+    end(chunk, encoding, cb) {
+        if (typeof chunk === 'function') {
+            cb = chunk;
+            chunk = undefined;
+        }
+        if (typeof encoding === 'function') {
+            cb = encoding;
+            encoding = 'utf8';
+        }
+        if (chunk !== undefined)
+            this.write(chunk, encoding);
+        if (cb)
+            this.once('end', cb);
+        this[EOF] = true;
+        this.writable = false;
+        // if we haven't written anything, then go ahead and emit,
+        // even if we're not reading.
+        // we'll re-emit if a new 'end' listener is added anyway.
+        // This makes MP more suitable to write-only use cases.
+        if (this[FLOWING] || !this[PAUSED])
+            this[MAYBE_EMIT_END]();
+        return this;
+    }
+    // don't let the internal resume be overwritten
+    [RESUME]() {
+        if (this[DESTROYED])
+            return;
+        if (!this[DATALISTENERS] && !this[PIPES].length) {
+            this[DISCARDED] = true;
+        }
+        this[PAUSED] = false;
+        this[FLOWING] = true;
+        this.emit('resume');
+        if (this[BUFFER].length)
+            this[FLUSH]();
+        else if (this[EOF])
+            this[MAYBE_EMIT_END]();
+        else
+            this.emit('drain');
+    }
+    /**
+     * Resume the stream if it is currently in a paused state
+     *
+     * If called when there are no pipe destinations or `data` event listeners,
+     * this will place the stream in a "discarded" state, where all data will
+     * be thrown away. The discarded state is removed if a pipe destination or
+     * data handler is added, if pause() is called, or if any synchronous or
+     * asynchronous iteration is started.
+     */
+    resume() {
+        return this[RESUME]();
+    }
+    /**
+     * Pause the stream
+     */
+    pause() {
+        this[FLOWING] = false;
+        this[PAUSED] = true;
+        this[DISCARDED] = false;
+    }
+    /**
+     * true if the stream has been forcibly destroyed
+     */
+    get destroyed() {
+        return this[DESTROYED];
+    }
+    /**
+     * true if the stream is currently in a flowing state, meaning that
+     * any writes will be immediately emitted.
+     */
+    get flowing() {
+        return this[FLOWING];
+    }
+    /**
+     * true if the stream is currently in a paused state
+     */
+    get paused() {
+        return this[PAUSED];
+    }
+    [BUFFERPUSH](chunk) {
+        if (this[OBJECTMODE])
+            this[BUFFERLENGTH] += 1;
+        else
+            this[BUFFERLENGTH] += chunk.length;
+        this[BUFFER].push(chunk);
+    }
+    [BUFFERSHIFT]() {
+        if (this[OBJECTMODE])
+            this[BUFFERLENGTH] -= 1;
+        else
+            this[BUFFERLENGTH] -= this[BUFFER][0].length;
+        return this[BUFFER].shift();
+    }
+    [FLUSH](noDrain = false) {
+        do { } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&
+            this[BUFFER].length);
+        if (!noDrain && !this[BUFFER].length && !this[EOF])
+            this.emit('drain');
+    }
+    [FLUSHCHUNK](chunk) {
+        this.emit('data', chunk);
+        return this[FLOWING];
+    }
+    /**
+     * Pipe all data emitted by this stream into the destination provided.
+     *
+     * Triggers the flow of data.
+     */
+    pipe(dest, opts) {
+        if (this[DESTROYED])
+            return dest;
+        this[DISCARDED] = false;
+        const ended = this[EMITTED_END];
+        opts = opts || {};
+        if (dest === proc.stdout || dest === proc.stderr)
+            opts.end = false;
+        else
+            opts.end = opts.end !== false;
+        opts.proxyErrors = !!opts.proxyErrors;
+        // piping an ended stream ends immediately
+        if (ended) {
+            if (opts.end)
+                dest.end();
+        }
+        else {
+            // "as" here just ignores the WType, which pipes don't care about,
+            // since they're only consuming from us, and writing to the dest
+            this[PIPES].push(!opts.proxyErrors
+                ? new Pipe(this, dest, opts)
+                : new PipeProxyErrors(this, dest, opts));
+            if (this[ASYNC])
+                defer(() => this[RESUME]());
+            else
+                this[RESUME]();
+        }
+        return dest;
+    }
+    /**
+     * Fully unhook a piped destination stream.
+     *
+     * If the destination stream was the only consumer of this stream (ie,
+     * there are no other piped destinations or `'data'` event listeners)
+     * then the flow of data will stop until there is another consumer or
+     * {@link Minipass#resume} is explicitly called.
+     */
+    unpipe(dest) {
+        const p = this[PIPES].find(p => p.dest === dest);
+        if (p) {
+            if (this[PIPES].length === 1) {
+                if (this[FLOWING] && this[DATALISTENERS] === 0) {
+                    this[FLOWING] = false;
+                }
+                this[PIPES] = [];
+            }
+            else
+                this[PIPES].splice(this[PIPES].indexOf(p), 1);
+            p.unpipe();
+        }
+    }
+    /**
+     * Alias for {@link Minipass#on}
+     */
+    addListener(ev, handler) {
+        return this.on(ev, handler);
+    }
+    /**
+     * Mostly identical to `EventEmitter.on`, with the following
+     * behavior differences to prevent data loss and unnecessary hangs:
+     *
+     * - Adding a 'data' event handler will trigger the flow of data
+     *
+     * - Adding a 'readable' event handler when there is data waiting to be read
+     *   will cause 'readable' to be emitted immediately.
+     *
+     * - Adding an 'endish' event handler ('end', 'finish', etc.) which has
+     *   already passed will cause the event to be emitted immediately and all
+     *   handlers removed.
+     *
+     * - Adding an 'error' event handler after an error has been emitted will
+     *   cause the event to be re-emitted immediately with the error previously
+     *   raised.
+     */
+    on(ev, handler) {
+        const ret = super.on(ev, handler);
+        if (ev === 'data') {
+            this[DISCARDED] = false;
+            this[DATALISTENERS]++;
+            if (!this[PIPES].length && !this[FLOWING]) {
+                this[RESUME]();
+            }
+        }
+        else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {
+            super.emit('readable');
+        }
+        else if (isEndish(ev) && this[EMITTED_END]) {
+            super.emit(ev);
+            this.removeAllListeners(ev);
+        }
+        else if (ev === 'error' && this[EMITTED_ERROR]) {
+            const h = handler;
+            if (this[ASYNC])
+                defer(() => h.call(this, this[EMITTED_ERROR]));
+            else
+                h.call(this, this[EMITTED_ERROR]);
+        }
+        return ret;
+    }
+    /**
+     * Alias for {@link Minipass#off}
+     */
+    removeListener(ev, handler) {
+        return this.off(ev, handler);
+    }
+    /**
+     * Mostly identical to `EventEmitter.off`
+     *
+     * If a 'data' event handler is removed, and it was the last consumer
+     * (ie, there are no pipe destinations or other 'data' event listeners),
+     * then the flow of data will stop until there is another consumer or
+     * {@link Minipass#resume} is explicitly called.
+     */
+    off(ev, handler) {
+        const ret = super.off(ev, handler);
+        // if we previously had listeners, and now we don't, and we don't
+        // have any pipes, then stop the flow, unless it's been explicitly
+        // put in a discarded flowing state via stream.resume().
+        if (ev === 'data') {
+            this[DATALISTENERS] = this.listeners('data').length;
+            if (this[DATALISTENERS] === 0 &&
+                !this[DISCARDED] &&
+                !this[PIPES].length) {
+                this[FLOWING] = false;
+            }
+        }
+        return ret;
+    }
+    /**
+     * Mostly identical to `EventEmitter.removeAllListeners`
+     *
+     * If all 'data' event handlers are removed, and they were the last consumer
+     * (ie, there are no pipe destinations), then the flow of data will stop
+     * until there is another consumer or {@link Minipass#resume} is explicitly
+     * called.
+     */
+    removeAllListeners(ev) {
+        const ret = super.removeAllListeners(ev);
+        if (ev === 'data' || ev === undefined) {
+            this[DATALISTENERS] = 0;
+            if (!this[DISCARDED] && !this[PIPES].length) {
+                this[FLOWING] = false;
+            }
+        }
+        return ret;
+    }
+    /**
+     * true if the 'end' event has been emitted
+     */
+    get emittedEnd() {
+        return this[EMITTED_END];
+    }
+    [MAYBE_EMIT_END]() {
+        if (!this[EMITTING_END] &&
+            !this[EMITTED_END] &&
+            !this[DESTROYED] &&
+            this[BUFFER].length === 0 &&
+            this[EOF]) {
+            this[EMITTING_END] = true;
+            this.emit('end');
+            this.emit('prefinish');
+            this.emit('finish');
+            if (this[CLOSED])
+                this.emit('close');
+            this[EMITTING_END] = false;
+        }
+    }
+    /**
+     * Mostly identical to `EventEmitter.emit`, with the following
+     * behavior differences to prevent data loss and unnecessary hangs:
+     *
+     * If the stream has been destroyed, and the event is something other
+     * than 'close' or 'error', then `false` is returned and no handlers
+     * are called.
+     *
+     * If the event is 'end', and has already been emitted, then the event
+     * is ignored. If the stream is in a paused or non-flowing state, then
+     * the event will be deferred until data flow resumes. If the stream is
+     * async, then handlers will be called on the next tick rather than
+     * immediately.
+     *
+     * If the event is 'close', and 'end' has not yet been emitted, then
+     * the event will be deferred until after 'end' is emitted.
+     *
+     * If the event is 'error', and an AbortSignal was provided for the stream,
+     * and there are no listeners, then the event is ignored, matching the
+     * behavior of node core streams in the presense of an AbortSignal.
+     *
+     * If the event is 'finish' or 'prefinish', then all listeners will be
+     * removed after emitting the event, to prevent double-firing.
+     */
+    emit(ev, ...args) {
+        const data = args[0];
+        // error and close are only events allowed after calling destroy()
+        if (ev !== 'error' &&
+            ev !== 'close' &&
+            ev !== DESTROYED &&
+            this[DESTROYED]) {
+            return false;
+        }
+        else if (ev === 'data') {
+            return !this[OBJECTMODE] && !data
+                ? false
+                : this[ASYNC]
+                    ? (defer(() => this[EMITDATA](data)), true)
+                    : this[EMITDATA](data);
+        }
+        else if (ev === 'end') {
+            return this[EMITEND]();
+        }
+        else if (ev === 'close') {
+            this[CLOSED] = true;
+            // don't emit close before 'end' and 'finish'
+            if (!this[EMITTED_END] && !this[DESTROYED])
+                return false;
+            const ret = super.emit('close');
+            this.removeAllListeners('close');
+            return ret;
+        }
+        else if (ev === 'error') {
+            this[EMITTED_ERROR] = data;
+            super.emit(ERROR, data);
+            const ret = !this[SIGNAL] || this.listeners('error').length
+                ? super.emit('error', data)
+                : false;
+            this[MAYBE_EMIT_END]();
+            return ret;
+        }
+        else if (ev === 'resume') {
+            const ret = super.emit('resume');
+            this[MAYBE_EMIT_END]();
+            return ret;
+        }
+        else if (ev === 'finish' || ev === 'prefinish') {
+            const ret = super.emit(ev);
+            this.removeAllListeners(ev);
+            return ret;
+        }
+        // Some other unknown event
+        const ret = super.emit(ev, ...args);
+        this[MAYBE_EMIT_END]();
+        return ret;
+    }
+    [EMITDATA](data) {
+        for (const p of this[PIPES]) {
+            if (p.dest.write(data) === false)
+                this.pause();
+        }
+        const ret = this[DISCARDED] ? false : super.emit('data', data);
+        this[MAYBE_EMIT_END]();
+        return ret;
+    }
+    [EMITEND]() {
+        if (this[EMITTED_END])
+            return false;
+        this[EMITTED_END] = true;
+        this.readable = false;
+        return this[ASYNC]
+            ? (defer(() => this[EMITEND2]()), true)
+            : this[EMITEND2]();
+    }
+    [EMITEND2]() {
+        if (this[DECODER]) {
+            const data = this[DECODER].end();
+            if (data) {
+                for (const p of this[PIPES]) {
+                    p.dest.write(data);
+                }
+                if (!this[DISCARDED])
+                    super.emit('data', data);
+            }
+        }
+        for (const p of this[PIPES]) {
+            p.end();
+        }
+        const ret = super.emit('end');
+        this.removeAllListeners('end');
+        return ret;
+    }
+    /**
+     * Return a Promise that resolves to an array of all emitted data once
+     * the stream ends.
+     */
+    async collect() {
+        const buf = Object.assign([], {
+            dataLength: 0,
+        });
+        if (!this[OBJECTMODE])
+            buf.dataLength = 0;
+        // set the promise first, in case an error is raised
+        // by triggering the flow here.
+        const p = this.promise();
+        this.on('data', c => {
+            buf.push(c);
+            if (!this[OBJECTMODE])
+                buf.dataLength += c.length;
+        });
+        await p;
+        return buf;
+    }
+    /**
+     * Return a Promise that resolves to the concatenation of all emitted data
+     * once the stream ends.
+     *
+     * Not allowed on objectMode streams.
+     */
+    async concat() {
+        if (this[OBJECTMODE]) {
+            throw new Error('cannot concat in objectMode');
+        }
+        const buf = await this.collect();
+        return (this[ENCODING]
+            ? buf.join('')
+            : Buffer.concat(buf, buf.dataLength));
+    }
+    /**
+     * Return a void Promise that resolves once the stream ends.
+     */
+    async promise() {
+        return new Promise((resolve, reject) => {
+            this.on(DESTROYED, () => reject(new Error('stream destroyed')));
+            this.on('error', er => reject(er));
+            this.on('end', () => resolve());
+        });
+    }
+    /**
+     * Asynchronous `for await of` iteration.
+     *
+     * This will continue emitting all chunks until the stream terminates.
+     */
+    [Symbol.asyncIterator]() {
+        // set this up front, in case the consumer doesn't call next()
+        // right away.
+        this[DISCARDED] = false;
+        let stopped = false;
+        const stop = async () => {
+            this.pause();
+            stopped = true;
+            return { value: undefined, done: true };
+        };
+        const next = () => {
+            if (stopped)
+                return stop();
+            const res = this.read();
+            if (res !== null)
+                return Promise.resolve({ done: false, value: res });
+            if (this[EOF])
+                return stop();
+            let resolve;
+            let reject;
+            const onerr = (er) => {
+                this.off('data', ondata);
+                this.off('end', onend);
+                this.off(DESTROYED, ondestroy);
+                stop();
+                reject(er);
+            };
+            const ondata = (value) => {
+                this.off('error', onerr);
+                this.off('end', onend);
+                this.off(DESTROYED, ondestroy);
+                this.pause();
+                resolve({ value, done: !!this[EOF] });
+            };
+            const onend = () => {
+                this.off('error', onerr);
+                this.off('data', ondata);
+                this.off(DESTROYED, ondestroy);
+                stop();
+                resolve({ done: true, value: undefined });
+            };
+            const ondestroy = () => onerr(new Error('stream destroyed'));
+            return new Promise((res, rej) => {
+                reject = rej;
+                resolve = res;
+                this.once(DESTROYED, ondestroy);
+                this.once('error', onerr);
+                this.once('end', onend);
+                this.once('data', ondata);
+            });
+        };
+        return {
+            next,
+            throw: stop,
+            return: stop,
+            [Symbol.asyncIterator]() {
+                return this;
+            },
+        };
+    }
+    /**
+     * Synchronous `for of` iteration.
+     *
+     * The iteration will terminate when the internal buffer runs out, even
+     * if the stream has not yet terminated.
+     */
+    [Symbol.iterator]() {
+        // set this up front, in case the consumer doesn't call next()
+        // right away.
+        this[DISCARDED] = false;
+        let stopped = false;
+        const stop = () => {
+            this.pause();
+            this.off(ERROR, stop);
+            this.off(DESTROYED, stop);
+            this.off('end', stop);
+            stopped = true;
+            return { done: true, value: undefined };
+        };
+        const next = () => {
+            if (stopped)
+                return stop();
+            const value = this.read();
+            return value === null ? stop() : { done: false, value };
+        };
+        this.once('end', stop);
+        this.once(ERROR, stop);
+        this.once(DESTROYED, stop);
+        return {
+            next,
+            throw: stop,
+            return: stop,
+            [Symbol.iterator]() {
+                return this;
+            },
+        };
+    }
+    /**
+     * Destroy a stream, preventing it from being used for any further purpose.
+     *
+     * If the stream has a `close()` method, then it will be called on
+     * destruction.
+     *
+     * After destruction, any attempt to write data, read data, or emit most
+     * events will be ignored.
+     *
+     * If an error argument is provided, then it will be emitted in an
+     * 'error' event.
+     */
+    destroy(er) {
+        if (this[DESTROYED]) {
+            if (er)
+                this.emit('error', er);
+            else
+                this.emit(DESTROYED);
+            return this;
+        }
+        this[DESTROYED] = true;
+        this[DISCARDED] = true;
+        // throw away all buffered data, it's never coming out
+        this[BUFFER].length = 0;
+        this[BUFFERLENGTH] = 0;
+        const wc = this;
+        if (typeof wc.close === 'function' && !this[CLOSED])
+            wc.close();
+        if (er)
+            this.emit('error', er);
+        // if no error to emit, still reject pending promises
+        else
+            this.emit(DESTROYED);
+        return this;
+    }
+    /**
+     * Alias for {@link isStream}
+     *
+     * Former export location, maintained for backwards compatibility.
+     *
+     * @deprecated
+     */
+    static get isStream() {
+        return isStream;
+    }
+}
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/minipass/dist/esm/index.js.map b/node_modules/minipass/dist/esm/index.js.map
new file mode 100644
index 00000000..741425ae
--- /dev/null
+++ b/node_modules/minipass/dist/esm/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const proc =\n  typeof process === 'object' && process\n    ? process\n    : {\n        stdout: null,\n        stderr: null,\n      }\nimport { EventEmitter } from 'node:events'\nimport Stream from 'node:stream'\nimport { StringDecoder } from 'node:string_decoder'\n\n/**\n * Same as StringDecoder, but exposing the `lastNeed` flag on the type\n */\ntype SD = StringDecoder & { lastNeed: boolean }\n\nexport type { SD, Pipe, PipeProxyErrors }\n\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (\n  s: any\n): s is Minipass.Readable | Minipass.Writable =>\n  !!s &&\n  typeof s === 'object' &&\n  (s instanceof Minipass ||\n    s instanceof Stream ||\n    isReadable(s) ||\n    isWritable(s))\n\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Readable).pipe === 'function' &&\n  // node core Writable streams have a pipe() method, but it throws\n  (s as Minipass.Readable).pipe !== Stream.Writable.prototype.pipe\n\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s: any): s is Minipass.Readable =>\n  !!s &&\n  typeof s === 'object' &&\n  s instanceof EventEmitter &&\n  typeof (s as Minipass.Writable).write === 'function' &&\n  typeof (s as Minipass.Writable).end === 'function'\n\nconst EOF = Symbol('EOF')\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd')\nconst EMITTED_END = Symbol('emittedEnd')\nconst EMITTING_END = Symbol('emittingEnd')\nconst EMITTED_ERROR = Symbol('emittedError')\nconst CLOSED = Symbol('closed')\nconst READ = Symbol('read')\nconst FLUSH = Symbol('flush')\nconst FLUSHCHUNK = Symbol('flushChunk')\nconst ENCODING = Symbol('encoding')\nconst DECODER = Symbol('decoder')\nconst FLOWING = Symbol('flowing')\nconst PAUSED = Symbol('paused')\nconst RESUME = Symbol('resume')\nconst BUFFER = Symbol('buffer')\nconst PIPES = Symbol('pipes')\nconst BUFFERLENGTH = Symbol('bufferLength')\nconst BUFFERPUSH = Symbol('bufferPush')\nconst BUFFERSHIFT = Symbol('bufferShift')\nconst OBJECTMODE = Symbol('objectMode')\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed')\n// internal event when stream has an error\nconst ERROR = Symbol('error')\nconst EMITDATA = Symbol('emitData')\nconst EMITEND = Symbol('emitEnd')\nconst EMITEND2 = Symbol('emitEnd2')\nconst ASYNC = Symbol('async')\nconst ABORT = Symbol('abort')\nconst ABORTED = Symbol('aborted')\nconst SIGNAL = Symbol('signal')\nconst DATALISTENERS = Symbol('dataListeners')\nconst DISCARDED = Symbol('discarded')\n\nconst defer = (fn: (...a: any[]) => any) => Promise.resolve().then(fn)\nconst nodefer = (fn: (...a: any[]) => any) => fn()\n\n// events that mean 'the stream is over'\n// these are treated specially, and re-emitted\n// if they are listened for after emitting.\ntype EndishEvent = 'end' | 'finish' | 'prefinish'\nconst isEndish = (ev: any): ev is EndishEvent =>\n  ev === 'end' || ev === 'finish' || ev === 'prefinish'\n\nconst isArrayBufferLike = (b: any): b is ArrayBufferLike =>\n  b instanceof ArrayBuffer ||\n  (!!b &&\n    typeof b === 'object' &&\n    b.constructor &&\n    b.constructor.name === 'ArrayBuffer' &&\n    b.byteLength >= 0)\n\nconst isArrayBufferView = (b: any): b is ArrayBufferView =>\n  !Buffer.isBuffer(b) && ArrayBuffer.isView(b)\n\n/**\n * Options that may be passed to stream.pipe()\n */\nexport interface PipeOptions {\n  /**\n   * end the destination stream when the source stream ends\n   */\n  end?: boolean\n  /**\n   * proxy errors from the source stream to the destination stream\n   */\n  proxyErrors?: boolean\n}\n\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n  src: Minipass\n  dest: Minipass\n  opts: PipeOptions\n  ondrain: () => any\n  constructor(\n    src: Minipass,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    this.src = src\n    this.dest = dest as Minipass\n    this.opts = opts\n    this.ondrain = () => src[RESUME]()\n    this.dest.on('drain', this.ondrain)\n  }\n  unpipe() {\n    this.dest.removeListener('drain', this.ondrain)\n  }\n  // only here for the prototype\n  /* c8 ignore start */\n  proxyErrors(_er: any) {}\n  /* c8 ignore stop */\n  end() {\n    this.unpipe()\n    if (this.opts.end) this.dest.end()\n  }\n}\n\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n  unpipe() {\n    this.src.removeListener('error', this.proxyErrors)\n    super.unpipe()\n  }\n  constructor(\n    src: Minipass,\n    dest: Minipass.Writable,\n    opts: PipeOptions\n  ) {\n    super(src, dest, opts)\n    this.proxyErrors = er => dest.emit('error', er)\n    src.on('error', this.proxyErrors)\n  }\n}\n\nexport namespace Minipass {\n  /**\n   * Encoding used to create a stream that outputs strings rather than\n   * Buffer objects.\n   */\n  export type Encoding = BufferEncoding | 'buffer' | null\n\n  /**\n   * Any stream that Minipass can pipe into\n   */\n  export type Writable =\n    | Minipass\n    | NodeJS.WriteStream\n    | (NodeJS.WriteStream & { fd: number })\n    | (EventEmitter & {\n        end(): any\n        write(chunk: any, ...args: any[]): any\n      })\n\n  /**\n   * Any stream that can be read from\n   */\n  export type Readable =\n    | Minipass\n    | NodeJS.ReadStream\n    | (NodeJS.ReadStream & { fd: number })\n    | (EventEmitter & {\n        pause(): any\n        resume(): any\n        pipe(...destArgs: any[]): any\n      })\n\n  /**\n   * Utility type that can be iterated sync or async\n   */\n  export type DualIterable = Iterable & AsyncIterable\n\n  type EventArguments = Record\n\n  /**\n   * The listing of events that a Minipass class can emit.\n   * Extend this when extending the Minipass class, and pass as\n   * the third template argument.  The key is the name of the event,\n   * and the value is the argument list.\n   *\n   * Any undeclared events will still be allowed, but the handler will get\n   * arguments as `unknown[]`.\n   */\n  export interface Events\n    extends EventArguments {\n    readable: []\n    data: [chunk: RType]\n    error: [er: unknown]\n    abort: [reason: unknown]\n    drain: []\n    resume: []\n    end: []\n    finish: []\n    prefinish: []\n    close: []\n    [DESTROYED]: [er?: unknown]\n    [ERROR]: [er: unknown]\n  }\n\n  /**\n   * String or buffer-like data that can be joined and sliced\n   */\n  export type ContiguousData =\n    | Buffer\n    | ArrayBufferLike\n    | ArrayBufferView\n    | string\n  export type BufferOrString = Buffer | string\n\n  /**\n   * Options passed to the Minipass constructor.\n   */\n  export type SharedOptions = {\n    /**\n     * Defer all data emission and other events until the end of the\n     * current tick, similar to Node core streams\n     */\n    async?: boolean\n    /**\n     * A signal which will abort the stream\n     */\n    signal?: AbortSignal\n    /**\n     * Output string encoding. Set to `null` or `'buffer'` (or omit) to\n     * emit Buffer objects rather than strings.\n     *\n     * Conflicts with `objectMode`\n     */\n    encoding?: BufferEncoding | null | 'buffer'\n    /**\n     * Output data exactly as it was written, supporting non-buffer/string\n     * data (such as arbitrary objects, falsey values, etc.)\n     *\n     * Conflicts with `encoding`\n     */\n    objectMode?: boolean\n  }\n\n  /**\n   * Options for a string encoded output\n   */\n  export type EncodingOptions = SharedOptions & {\n    encoding: BufferEncoding\n    objectMode?: false\n  }\n\n  /**\n   * Options for contiguous data buffer output\n   */\n  export type BufferOptions = SharedOptions & {\n    encoding?: null | 'buffer'\n    objectMode?: false\n  }\n\n  /**\n   * Options for objectMode arbitrary output\n   */\n  export type ObjectModeOptions = SharedOptions & {\n    objectMode: true\n    encoding?: null\n  }\n\n  /**\n   * Utility type to determine allowed options based on read type\n   */\n  export type Options =\n    | ObjectModeOptions\n    | (T extends string\n        ? EncodingOptions\n        : T extends Buffer\n        ? BufferOptions\n        : SharedOptions)\n}\n\nconst isObjectModeOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.ObjectModeOptions => !!o.objectMode\n\nconst isEncodingOptions = (\n  o: Minipass.SharedOptions\n): o is Minipass.EncodingOptions =>\n  !o.objectMode && !!o.encoding && o.encoding !== 'buffer'\n\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass<\n    RType extends unknown = Buffer,\n    WType extends unknown = RType extends Minipass.BufferOrString\n      ? Minipass.ContiguousData\n      : RType,\n    Events extends Minipass.Events = Minipass.Events\n  >\n  extends EventEmitter\n  implements Minipass.DualIterable\n{\n  [FLOWING]: boolean = false;\n  [PAUSED]: boolean = false;\n  [PIPES]: Pipe[] = [];\n  [BUFFER]: RType[] = [];\n  [OBJECTMODE]: boolean;\n  [ENCODING]: BufferEncoding | null;\n  [ASYNC]: boolean;\n  [DECODER]: SD | null;\n  [EOF]: boolean = false;\n  [EMITTED_END]: boolean = false;\n  [EMITTING_END]: boolean = false;\n  [CLOSED]: boolean = false;\n  [EMITTED_ERROR]: unknown = null;\n  [BUFFERLENGTH]: number = 0;\n  [DESTROYED]: boolean = false;\n  [SIGNAL]?: AbortSignal;\n  [ABORTED]: boolean = false;\n  [DATALISTENERS]: number = 0;\n  [DISCARDED]: boolean = false\n\n  /**\n   * true if the stream can be written\n   */\n  writable: boolean = true\n  /**\n   * true if the stream can be read\n   */\n  readable: boolean = true\n\n  /**\n   * If `RType` is Buffer, then options do not need to be provided.\n   * Otherwise, an options object must be provided to specify either\n   * {@link Minipass.SharedOptions.objectMode} or\n   * {@link Minipass.SharedOptions.encoding}, as appropriate.\n   */\n  constructor(\n    ...args:\n      | [Minipass.ObjectModeOptions]\n      | (RType extends Buffer\n          ? [] | [Minipass.Options]\n          : [Minipass.Options])\n  ) {\n    const options: Minipass.Options = (args[0] ||\n      {}) as Minipass.Options\n    super()\n    if (options.objectMode && typeof options.encoding === 'string') {\n      throw new TypeError(\n        'Encoding and objectMode may not be used together'\n      )\n    }\n    if (isObjectModeOptions(options)) {\n      this[OBJECTMODE] = true\n      this[ENCODING] = null\n    } else if (isEncodingOptions(options)) {\n      this[ENCODING] = options.encoding\n      this[OBJECTMODE] = false\n    } else {\n      this[OBJECTMODE] = false\n      this[ENCODING] = null\n    }\n    this[ASYNC] = !!options.async\n    this[DECODER] = this[ENCODING]\n      ? (new StringDecoder(this[ENCODING]) as SD)\n      : null\n\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposeBuffer === true) {\n      Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] })\n    }\n    //@ts-ignore - private option for debugging and testing\n    if (options && options.debugExposePipes === true) {\n      Object.defineProperty(this, 'pipes', { get: () => this[PIPES] })\n    }\n\n    const { signal } = options\n    if (signal) {\n      this[SIGNAL] = signal\n      if (signal.aborted) {\n        this[ABORT]()\n      } else {\n        signal.addEventListener('abort', () => this[ABORT]())\n      }\n    }\n  }\n\n  /**\n   * The amount of data stored in the buffer waiting to be read.\n   *\n   * For Buffer strings, this will be the total byte length.\n   * For string encoding streams, this will be the string character length,\n   * according to JavaScript's `string.length` logic.\n   * For objectMode streams, this is a count of the items waiting to be\n   * emitted.\n   */\n  get bufferLength() {\n    return this[BUFFERLENGTH]\n  }\n\n  /**\n   * The `BufferEncoding` currently in use, or `null`\n   */\n  get encoding() {\n    return this[ENCODING]\n  }\n\n  /**\n   * @deprecated - This is a read only property\n   */\n  set encoding(_enc) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * @deprecated - Encoding may only be set at instantiation time\n   */\n  setEncoding(_enc: Minipass.Encoding) {\n    throw new Error('Encoding must be set at instantiation time')\n  }\n\n  /**\n   * True if this is an objectMode stream\n   */\n  get objectMode() {\n    return this[OBJECTMODE]\n  }\n\n  /**\n   * @deprecated - This is a read-only property\n   */\n  set objectMode(_om) {\n    throw new Error('objectMode must be set at instantiation time')\n  }\n\n  /**\n   * true if this is an async stream\n   */\n  get ['async'](): boolean {\n    return this[ASYNC]\n  }\n  /**\n   * Set to true to make this stream async.\n   *\n   * Once set, it cannot be unset, as this would potentially cause incorrect\n   * behavior.  Ie, a sync stream can be made async, but an async stream\n   * cannot be safely made sync.\n   */\n  set ['async'](a: boolean) {\n    this[ASYNC] = this[ASYNC] || !!a\n  }\n\n  // drop everything and get out of the flow completely\n  [ABORT]() {\n    this[ABORTED] = true\n    this.emit('abort', this[SIGNAL]?.reason)\n    this.destroy(this[SIGNAL]?.reason)\n  }\n\n  /**\n   * True if the stream has been aborted.\n   */\n  get aborted() {\n    return this[ABORTED]\n  }\n  /**\n   * No-op setter. Stream aborted status is set via the AbortSignal provided\n   * in the constructor options.\n   */\n  set aborted(_) {}\n\n  /**\n   * Write data into the stream\n   *\n   * If the chunk written is a string, and encoding is not specified, then\n   * `utf8` will be assumed. If the stream encoding matches the encoding of\n   * a written string, and the state of the string decoder allows it, then\n   * the string will be passed through to either the output or the internal\n   * buffer without any processing. Otherwise, it will be turned into a\n   * Buffer object for processing into the desired encoding.\n   *\n   * If provided, `cb` function is called immediately before return for\n   * sync streams, or on next tick for async streams, because for this\n   * base class, a chunk is considered \"processed\" once it is accepted\n   * and either emitted or buffered. That is, the callback does not indicate\n   * that the chunk has been eventually emitted, though of course child\n   * classes can override this function to do whatever processing is required\n   * and call `super.write(...)` only once processing is completed.\n   */\n  write(chunk: WType, cb?: () => void): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding,\n    cb?: () => void\n  ): boolean\n  write(\n    chunk: WType,\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): boolean {\n    if (this[ABORTED]) return false\n    if (this[EOF]) throw new Error('write after end')\n\n    if (this[DESTROYED]) {\n      this.emit(\n        'error',\n        Object.assign(\n          new Error('Cannot call write after a stream was destroyed'),\n          { code: 'ERR_STREAM_DESTROYED' }\n        )\n      )\n      return true\n    }\n\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n\n    if (!encoding) encoding = 'utf8'\n\n    const fn = this[ASYNC] ? defer : nodefer\n\n    // convert array buffers and typed array views into buffers\n    // at some point in the future, we may want to do the opposite!\n    // leave strings and buffers as-is\n    // anything is only allowed if in object mode, so throw\n    if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n      if (isArrayBufferView(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(\n          chunk.buffer,\n          chunk.byteOffset,\n          chunk.byteLength\n        )\n      } else if (isArrayBufferLike(chunk)) {\n        //@ts-ignore - sinful unsafe type changing\n        chunk = Buffer.from(chunk)\n      } else if (typeof chunk !== 'string') {\n        throw new Error(\n          'Non-contiguous data written to non-objectMode stream'\n        )\n      }\n    }\n\n    // handle object mode up front, since it's simpler\n    // this yields better performance, fewer checks later.\n    if (this[OBJECTMODE]) {\n      // maybe impossible?\n      /* c8 ignore start */\n      if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n      /* c8 ignore stop */\n\n      if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n      else this[BUFFERPUSH](chunk as unknown as RType)\n\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n      if (cb) fn(cb)\n\n      return this[FLOWING]\n    }\n\n    // at this point the chunk is a buffer or string\n    // don't buffer it up or send it to the decoder\n    if (!(chunk as Minipass.BufferOrString).length) {\n      if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n      if (cb) fn(cb)\n      return this[FLOWING]\n    }\n\n    // fast-path writing strings of same encoding to a stream with\n    // an empty buffer, skipping the buffer/decoder dance\n    if (\n      typeof chunk === 'string' &&\n      // unless it is a string already ready for us to use\n      !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)\n    ) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = Buffer.from(chunk, encoding)\n    }\n\n    if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n      //@ts-ignore - sinful unsafe type change\n      chunk = this[DECODER].write(chunk)\n    }\n\n    // Note: flushing CAN potentially switch us into not-flowing mode\n    if (this[FLOWING] && this[BUFFERLENGTH] !== 0) this[FLUSH](true)\n\n    if (this[FLOWING]) this.emit('data', chunk as unknown as RType)\n    else this[BUFFERPUSH](chunk as unknown as RType)\n\n    if (this[BUFFERLENGTH] !== 0) this.emit('readable')\n\n    if (cb) fn(cb)\n\n    return this[FLOWING]\n  }\n\n  /**\n   * Low-level explicit read method.\n   *\n   * In objectMode, the argument is ignored, and one item is returned if\n   * available.\n   *\n   * `n` is the number of bytes (or in the case of encoding streams,\n   * characters) to consume. If `n` is not provided, then the entire buffer\n   * is returned, or `null` is returned if no data is available.\n   *\n   * If `n` is greater that the amount of data in the internal buffer,\n   * then `null` is returned.\n   */\n  read(n?: number | null): RType | null {\n    if (this[DESTROYED]) return null\n    this[DISCARDED] = false\n\n    if (\n      this[BUFFERLENGTH] === 0 ||\n      n === 0 ||\n      (n && n > this[BUFFERLENGTH])\n    ) {\n      this[MAYBE_EMIT_END]()\n      return null\n    }\n\n    if (this[OBJECTMODE]) n = null\n\n    if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n      // not object mode, so if we have an encoding, then RType is string\n      // otherwise, must be Buffer\n      this[BUFFER] = [\n        (this[ENCODING]\n          ? this[BUFFER].join('')\n          : Buffer.concat(\n              this[BUFFER] as Buffer[],\n              this[BUFFERLENGTH]\n            )) as RType,\n      ]\n    }\n\n    const ret = this[READ](n || null, this[BUFFER][0] as RType)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [READ](n: number | null, chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERSHIFT]()\n    else {\n      const c = chunk as Minipass.BufferOrString\n      if (n === c.length || n === null) this[BUFFERSHIFT]()\n      else if (typeof c === 'string') {\n        this[BUFFER][0] = c.slice(n) as RType\n        chunk = c.slice(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      } else {\n        this[BUFFER][0] = c.subarray(n) as RType\n        chunk = c.subarray(0, n) as RType\n        this[BUFFERLENGTH] -= n\n      }\n    }\n\n    this.emit('data', chunk)\n\n    if (!this[BUFFER].length && !this[EOF]) this.emit('drain')\n\n    return chunk\n  }\n\n  /**\n   * End the stream, optionally providing a final write.\n   *\n   * See {@link Minipass#write} for argument descriptions\n   */\n  end(cb?: () => void): this\n  end(chunk: WType, cb?: () => void): this\n  end(chunk: WType, encoding?: Minipass.Encoding, cb?: () => void): this\n  end(\n    chunk?: WType | (() => void),\n    encoding?: Minipass.Encoding | (() => void),\n    cb?: () => void\n  ): this {\n    if (typeof chunk === 'function') {\n      cb = chunk as () => void\n      chunk = undefined\n    }\n    if (typeof encoding === 'function') {\n      cb = encoding\n      encoding = 'utf8'\n    }\n    if (chunk !== undefined) this.write(chunk, encoding)\n    if (cb) this.once('end', cb)\n    this[EOF] = true\n    this.writable = false\n\n    // if we haven't written anything, then go ahead and emit,\n    // even if we're not reading.\n    // we'll re-emit if a new 'end' listener is added anyway.\n    // This makes MP more suitable to write-only use cases.\n    if (this[FLOWING] || !this[PAUSED]) this[MAYBE_EMIT_END]()\n    return this\n  }\n\n  // don't let the internal resume be overwritten\n  [RESUME]() {\n    if (this[DESTROYED]) return\n\n    if (!this[DATALISTENERS] && !this[PIPES].length) {\n      this[DISCARDED] = true\n    }\n    this[PAUSED] = false\n    this[FLOWING] = true\n    this.emit('resume')\n    if (this[BUFFER].length) this[FLUSH]()\n    else if (this[EOF]) this[MAYBE_EMIT_END]()\n    else this.emit('drain')\n  }\n\n  /**\n   * Resume the stream if it is currently in a paused state\n   *\n   * If called when there are no pipe destinations or `data` event listeners,\n   * this will place the stream in a \"discarded\" state, where all data will\n   * be thrown away. The discarded state is removed if a pipe destination or\n   * data handler is added, if pause() is called, or if any synchronous or\n   * asynchronous iteration is started.\n   */\n  resume() {\n    return this[RESUME]()\n  }\n\n  /**\n   * Pause the stream\n   */\n  pause() {\n    this[FLOWING] = false\n    this[PAUSED] = true\n    this[DISCARDED] = false\n  }\n\n  /**\n   * true if the stream has been forcibly destroyed\n   */\n  get destroyed() {\n    return this[DESTROYED]\n  }\n\n  /**\n   * true if the stream is currently in a flowing state, meaning that\n   * any writes will be immediately emitted.\n   */\n  get flowing() {\n    return this[FLOWING]\n  }\n\n  /**\n   * true if the stream is currently in a paused state\n   */\n  get paused() {\n    return this[PAUSED]\n  }\n\n  [BUFFERPUSH](chunk: RType) {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] += 1\n    else this[BUFFERLENGTH] += (chunk as Minipass.BufferOrString).length\n    this[BUFFER].push(chunk)\n  }\n\n  [BUFFERSHIFT](): RType {\n    if (this[OBJECTMODE]) this[BUFFERLENGTH] -= 1\n    else\n      this[BUFFERLENGTH] -= (\n        this[BUFFER][0] as Minipass.BufferOrString\n      ).length\n    return this[BUFFER].shift() as RType\n  }\n\n  [FLUSH](noDrain: boolean = false) {\n    do {} while (\n      this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n      this[BUFFER].length\n    )\n\n    if (!noDrain && !this[BUFFER].length && !this[EOF]) this.emit('drain')\n  }\n\n  [FLUSHCHUNK](chunk: RType) {\n    this.emit('data', chunk)\n    return this[FLOWING]\n  }\n\n  /**\n   * Pipe all data emitted by this stream into the destination provided.\n   *\n   * Triggers the flow of data.\n   */\n  pipe(dest: W, opts?: PipeOptions): W {\n    if (this[DESTROYED]) return dest\n    this[DISCARDED] = false\n\n    const ended = this[EMITTED_END]\n    opts = opts || {}\n    if (dest === proc.stdout || dest === proc.stderr) opts.end = false\n    else opts.end = opts.end !== false\n    opts.proxyErrors = !!opts.proxyErrors\n\n    // piping an ended stream ends immediately\n    if (ended) {\n      if (opts.end) dest.end()\n    } else {\n      // \"as\" here just ignores the WType, which pipes don't care about,\n      // since they're only consuming from us, and writing to the dest\n      this[PIPES].push(\n        !opts.proxyErrors\n          ? new Pipe(this as Minipass, dest, opts)\n          : new PipeProxyErrors(this as Minipass, dest, opts)\n      )\n      if (this[ASYNC]) defer(() => this[RESUME]())\n      else this[RESUME]()\n    }\n\n    return dest\n  }\n\n  /**\n   * Fully unhook a piped destination stream.\n   *\n   * If the destination stream was the only consumer of this stream (ie,\n   * there are no other piped destinations or `'data'` event listeners)\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  unpipe(dest: W) {\n    const p = this[PIPES].find(p => p.dest === dest)\n    if (p) {\n      if (this[PIPES].length === 1) {\n        if (this[FLOWING] && this[DATALISTENERS] === 0) {\n          this[FLOWING] = false\n        }\n        this[PIPES] = []\n      } else this[PIPES].splice(this[PIPES].indexOf(p), 1)\n      p.unpipe()\n    }\n  }\n\n  /**\n   * Alias for {@link Minipass#on}\n   */\n  addListener(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    return this.on(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.on`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * - Adding a 'data' event handler will trigger the flow of data\n   *\n   * - Adding a 'readable' event handler when there is data waiting to be read\n   *   will cause 'readable' to be emitted immediately.\n   *\n   * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n   *   already passed will cause the event to be emitted immediately and all\n   *   handlers removed.\n   *\n   * - Adding an 'error' event handler after an error has been emitted will\n   *   cause the event to be re-emitted immediately with the error previously\n   *   raised.\n   */\n  on(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ): this {\n    const ret = super.on(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    if (ev === 'data') {\n      this[DISCARDED] = false\n      this[DATALISTENERS]++\n      if (!this[PIPES].length && !this[FLOWING]) {\n        this[RESUME]()\n      }\n    } else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n      super.emit('readable')\n    } else if (isEndish(ev) && this[EMITTED_END]) {\n      super.emit(ev)\n      this.removeAllListeners(ev)\n    } else if (ev === 'error' && this[EMITTED_ERROR]) {\n      const h = handler as (...a: Events['error']) => any\n      if (this[ASYNC]) defer(() => h.call(this, this[EMITTED_ERROR]))\n      else h.call(this, this[EMITTED_ERROR])\n    }\n    return ret\n  }\n\n  /**\n   * Alias for {@link Minipass#off}\n   */\n  removeListener(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    return this.off(ev, handler)\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.off`\n   *\n   * If a 'data' event handler is removed, and it was the last consumer\n   * (ie, there are no pipe destinations or other 'data' event listeners),\n   * then the flow of data will stop until there is another consumer or\n   * {@link Minipass#resume} is explicitly called.\n   */\n  off(\n    ev: Event,\n    handler: (...args: Events[Event]) => any\n  ) {\n    const ret = super.off(\n      ev as string | symbol,\n      handler as (...a: any[]) => any\n    )\n    // if we previously had listeners, and now we don't, and we don't\n    // have any pipes, then stop the flow, unless it's been explicitly\n    // put in a discarded flowing state via stream.resume().\n    if (ev === 'data') {\n      this[DATALISTENERS] = this.listeners('data').length\n      if (\n        this[DATALISTENERS] === 0 &&\n        !this[DISCARDED] &&\n        !this[PIPES].length\n      ) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.removeAllListeners`\n   *\n   * If all 'data' event handlers are removed, and they were the last consumer\n   * (ie, there are no pipe destinations), then the flow of data will stop\n   * until there is another consumer or {@link Minipass#resume} is explicitly\n   * called.\n   */\n  removeAllListeners(ev?: Event) {\n    const ret = super.removeAllListeners(ev as string | symbol | undefined)\n    if (ev === 'data' || ev === undefined) {\n      this[DATALISTENERS] = 0\n      if (!this[DISCARDED] && !this[PIPES].length) {\n        this[FLOWING] = false\n      }\n    }\n    return ret\n  }\n\n  /**\n   * true if the 'end' event has been emitted\n   */\n  get emittedEnd() {\n    return this[EMITTED_END]\n  }\n\n  [MAYBE_EMIT_END]() {\n    if (\n      !this[EMITTING_END] &&\n      !this[EMITTED_END] &&\n      !this[DESTROYED] &&\n      this[BUFFER].length === 0 &&\n      this[EOF]\n    ) {\n      this[EMITTING_END] = true\n      this.emit('end')\n      this.emit('prefinish')\n      this.emit('finish')\n      if (this[CLOSED]) this.emit('close')\n      this[EMITTING_END] = false\n    }\n  }\n\n  /**\n   * Mostly identical to `EventEmitter.emit`, with the following\n   * behavior differences to prevent data loss and unnecessary hangs:\n   *\n   * If the stream has been destroyed, and the event is something other\n   * than 'close' or 'error', then `false` is returned and no handlers\n   * are called.\n   *\n   * If the event is 'end', and has already been emitted, then the event\n   * is ignored. If the stream is in a paused or non-flowing state, then\n   * the event will be deferred until data flow resumes. If the stream is\n   * async, then handlers will be called on the next tick rather than\n   * immediately.\n   *\n   * If the event is 'close', and 'end' has not yet been emitted, then\n   * the event will be deferred until after 'end' is emitted.\n   *\n   * If the event is 'error', and an AbortSignal was provided for the stream,\n   * and there are no listeners, then the event is ignored, matching the\n   * behavior of node core streams in the presense of an AbortSignal.\n   *\n   * If the event is 'finish' or 'prefinish', then all listeners will be\n   * removed after emitting the event, to prevent double-firing.\n   */\n  emit(\n    ev: Event,\n    ...args: Events[Event]\n  ): boolean {\n    const data = args[0]\n    // error and close are only events allowed after calling destroy()\n    if (\n      ev !== 'error' &&\n      ev !== 'close' &&\n      ev !== DESTROYED &&\n      this[DESTROYED]\n    ) {\n      return false\n    } else if (ev === 'data') {\n      return !this[OBJECTMODE] && !data\n        ? false\n        : this[ASYNC]\n        ? (defer(() => this[EMITDATA](data as RType)), true)\n        : this[EMITDATA](data as RType)\n    } else if (ev === 'end') {\n      return this[EMITEND]()\n    } else if (ev === 'close') {\n      this[CLOSED] = true\n      // don't emit close before 'end' and 'finish'\n      if (!this[EMITTED_END] && !this[DESTROYED]) return false\n      const ret = super.emit('close')\n      this.removeAllListeners('close')\n      return ret\n    } else if (ev === 'error') {\n      this[EMITTED_ERROR] = data\n      super.emit(ERROR, data)\n      const ret =\n        !this[SIGNAL] || this.listeners('error').length\n          ? super.emit('error', data)\n          : false\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'resume') {\n      const ret = super.emit('resume')\n      this[MAYBE_EMIT_END]()\n      return ret\n    } else if (ev === 'finish' || ev === 'prefinish') {\n      const ret = super.emit(ev)\n      this.removeAllListeners(ev)\n      return ret\n    }\n\n    // Some other unknown event\n    const ret = super.emit(ev as string, ...args)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITDATA](data: RType) {\n    for (const p of this[PIPES]) {\n      if (p.dest.write(data as RType) === false) this.pause()\n    }\n    const ret = this[DISCARDED] ? false : super.emit('data', data)\n    this[MAYBE_EMIT_END]()\n    return ret\n  }\n\n  [EMITEND]() {\n    if (this[EMITTED_END]) return false\n\n    this[EMITTED_END] = true\n    this.readable = false\n    return this[ASYNC]\n      ? (defer(() => this[EMITEND2]()), true)\n      : this[EMITEND2]()\n  }\n\n  [EMITEND2]() {\n    if (this[DECODER]) {\n      const data = this[DECODER].end()\n      if (data) {\n        for (const p of this[PIPES]) {\n          p.dest.write(data as RType)\n        }\n        if (!this[DISCARDED]) super.emit('data', data)\n      }\n    }\n\n    for (const p of this[PIPES]) {\n      p.end()\n    }\n    const ret = super.emit('end')\n    this.removeAllListeners('end')\n    return ret\n  }\n\n  /**\n   * Return a Promise that resolves to an array of all emitted data once\n   * the stream ends.\n   */\n  async collect(): Promise {\n    const buf: RType[] & { dataLength: number } = Object.assign([], {\n      dataLength: 0,\n    })\n    if (!this[OBJECTMODE]) buf.dataLength = 0\n    // set the promise first, in case an error is raised\n    // by triggering the flow here.\n    const p = this.promise()\n    this.on('data', c => {\n      buf.push(c)\n      if (!this[OBJECTMODE])\n        buf.dataLength += (c as Minipass.BufferOrString).length\n    })\n    await p\n    return buf\n  }\n\n  /**\n   * Return a Promise that resolves to the concatenation of all emitted data\n   * once the stream ends.\n   *\n   * Not allowed on objectMode streams.\n   */\n  async concat(): Promise {\n    if (this[OBJECTMODE]) {\n      throw new Error('cannot concat in objectMode')\n    }\n    const buf = await this.collect()\n    return (\n      this[ENCODING]\n        ? buf.join('')\n        : Buffer.concat(buf as Buffer[], buf.dataLength)\n    ) as RType\n  }\n\n  /**\n   * Return a void Promise that resolves once the stream ends.\n   */\n  async promise(): Promise {\n    return new Promise((resolve, reject) => {\n      this.on(DESTROYED, () => reject(new Error('stream destroyed')))\n      this.on('error', er => reject(er))\n      this.on('end', () => resolve())\n    })\n  }\n\n  /**\n   * Asynchronous `for await of` iteration.\n   *\n   * This will continue emitting all chunks until the stream terminates.\n   */\n  [Symbol.asyncIterator](): AsyncGenerator {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = async (): Promise> => {\n      this.pause()\n      stopped = true\n      return { value: undefined, done: true }\n    }\n    const next = (): Promise> => {\n      if (stopped) return stop()\n      const res = this.read()\n      if (res !== null) return Promise.resolve({ done: false, value: res })\n\n      if (this[EOF]) return stop()\n\n      let resolve!: (res: IteratorResult) => void\n      let reject!: (er: unknown) => void\n      const onerr = (er: unknown) => {\n        this.off('data', ondata)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        reject(er)\n      }\n      const ondata = (value: RType) => {\n        this.off('error', onerr)\n        this.off('end', onend)\n        this.off(DESTROYED, ondestroy)\n        this.pause()\n        resolve({ value, done: !!this[EOF] })\n      }\n      const onend = () => {\n        this.off('error', onerr)\n        this.off('data', ondata)\n        this.off(DESTROYED, ondestroy)\n        stop()\n        resolve({ done: true, value: undefined })\n      }\n      const ondestroy = () => onerr(new Error('stream destroyed'))\n      return new Promise>((res, rej) => {\n        reject = rej\n        resolve = res\n        this.once(DESTROYED, ondestroy)\n        this.once('error', onerr)\n        this.once('end', onend)\n        this.once('data', ondata)\n      })\n    }\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.asyncIterator]() {\n        return this\n      },\n    }\n  }\n\n  /**\n   * Synchronous `for of` iteration.\n   *\n   * The iteration will terminate when the internal buffer runs out, even\n   * if the stream has not yet terminated.\n   */\n  [Symbol.iterator](): Generator {\n    // set this up front, in case the consumer doesn't call next()\n    // right away.\n    this[DISCARDED] = false\n    let stopped = false\n    const stop = (): IteratorReturnResult => {\n      this.pause()\n      this.off(ERROR, stop)\n      this.off(DESTROYED, stop)\n      this.off('end', stop)\n      stopped = true\n      return { done: true, value: undefined }\n    }\n\n    const next = (): IteratorResult => {\n      if (stopped) return stop()\n      const value = this.read()\n      return value === null ? stop() : { done: false, value }\n    }\n\n    this.once('end', stop)\n    this.once(ERROR, stop)\n    this.once(DESTROYED, stop)\n\n    return {\n      next,\n      throw: stop,\n      return: stop,\n      [Symbol.iterator]() {\n        return this\n      },\n    }\n  }\n\n  /**\n   * Destroy a stream, preventing it from being used for any further purpose.\n   *\n   * If the stream has a `close()` method, then it will be called on\n   * destruction.\n   *\n   * After destruction, any attempt to write data, read data, or emit most\n   * events will be ignored.\n   *\n   * If an error argument is provided, then it will be emitted in an\n   * 'error' event.\n   */\n  destroy(er?: unknown) {\n    if (this[DESTROYED]) {\n      if (er) this.emit('error', er)\n      else this.emit(DESTROYED)\n      return this\n    }\n\n    this[DESTROYED] = true\n    this[DISCARDED] = true\n\n    // throw away all buffered data, it's never coming out\n    this[BUFFER].length = 0\n    this[BUFFERLENGTH] = 0\n\n    const wc = this as Minipass & {\n      close?: () => void\n    }\n    if (typeof wc.close === 'function' && !this[CLOSED]) wc.close()\n\n    if (er) this.emit('error', er)\n    // if no error to emit, still reject pending promises\n    else this.emit(DESTROYED)\n\n    return this\n  }\n\n  /**\n   * Alias for {@link isStream}\n   *\n   * Former export location, maintained for backwards compatibility.\n   *\n   * @deprecated\n   */\n  static get isStream() {\n    return isStream\n  }\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/minipass/dist/esm/package.json b/node_modules/minipass/dist/esm/package.json
new file mode 100644
index 00000000..3dbc1ca5
--- /dev/null
+++ b/node_modules/minipass/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "module"
+}
diff --git a/node_modules/minipass/package.json b/node_modules/minipass/package.json
new file mode 100644
index 00000000..771969b0
--- /dev/null
+++ b/node_modules/minipass/package.json
@@ -0,0 +1,82 @@
+{
+  "name": "minipass",
+  "version": "7.1.2",
+  "description": "minimal implementation of a PassThrough stream",
+  "main": "./dist/commonjs/index.js",
+  "types": "./dist/commonjs/index.d.ts",
+  "type": "module",
+  "tshy": {
+    "selfLink": false,
+    "main": true,
+    "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"
+      }
+    }
+  },
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "preversion": "npm test",
+    "postversion": "npm publish",
+    "prepublishOnly": "git push origin --follow-tags",
+    "prepare": "tshy",
+    "pretest": "npm run prepare",
+    "presnap": "npm run prepare",
+    "test": "tap",
+    "snap": "tap",
+    "format": "prettier --write . --loglevel warn",
+    "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts"
+  },
+  "prettier": {
+    "semi": false,
+    "printWidth": 75,
+    "tabWidth": 2,
+    "useTabs": false,
+    "singleQuote": true,
+    "jsxSingleQuote": false,
+    "bracketSameLine": true,
+    "arrowParens": "avoid",
+    "endOfLine": "lf"
+  },
+  "devDependencies": {
+    "@types/end-of-stream": "^1.4.2",
+    "@types/node": "^20.1.2",
+    "end-of-stream": "^1.4.0",
+    "node-abort-controller": "^3.1.1",
+    "prettier": "^2.6.2",
+    "tap": "^19.0.0",
+    "through2": "^2.0.3",
+    "tshy": "^1.14.0",
+    "typedoc": "^0.25.1"
+  },
+  "repository": "https://github.com/isaacs/minipass",
+  "keywords": [
+    "passthrough",
+    "stream"
+  ],
+  "author": "Isaac Z. Schlueter  (http://blog.izs.me/)",
+  "license": "ISC",
+  "engines": {
+    "node": ">=16 || 14 >=14.17"
+  },
+  "tap": {
+    "typecheck": true,
+    "include": [
+      "test/*.ts"
+    ]
+  }
+}
diff --git a/node_modules/package-json-from-dist/LICENSE.md b/node_modules/package-json-from-dist/LICENSE.md
new file mode 100644
index 00000000..881248b6
--- /dev/null
+++ b/node_modules/package-json-from-dist/LICENSE.md
@@ -0,0 +1,63 @@
+All packages under `src/` are licensed according to the terms in
+their respective `LICENSE` or `LICENSE.md` files.
+
+The remainder of this project is licensed under the Blue Oak
+Model License, as follows:
+
+-----
+
+# Blue Oak Model License
+
+Version 1.0.0
+
+## Purpose
+
+This license gives everyone as much permission to work with
+this software as possible, while protecting contributors
+from liability.
+
+## Acceptance
+
+In order to receive this license, you must agree to its
+rules.  The rules of this license are both obligations
+under that agreement and conditions to your license.
+You must not do anything with this software that triggers
+a rule that you cannot or will not follow.
+
+## Copyright
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe that contributor's
+copyright in it.
+
+## Notices
+
+You must ensure that everyone who gets a copy of
+any part of this software from you, with or without
+changes, also gets the text of this license or a link to
+.
+
+## Excuse
+
+If anyone notifies you in writing that you have not
+complied with [Notices](#notices), you can keep your
+license by taking all practical steps to comply within 30
+days after the notice.  If you do not do so, your license
+ends immediately.
+
+## Patent
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe any patent claims
+they can license or become able to license.
+
+## Reliability
+
+No contributor can revoke this license.
+
+## No Liability
+
+***As far as the law allows, this software comes as is,
+without any warranty or condition, and no contributor
+will be liable to anyone for any damages related to this
+software or this license, under any kind of legal claim.***
diff --git a/node_modules/package-json-from-dist/README.md b/node_modules/package-json-from-dist/README.md
new file mode 100644
index 00000000..f2a18b07
--- /dev/null
+++ b/node_modules/package-json-from-dist/README.md
@@ -0,0 +1,95 @@
+# package-json-from-dist
+
+Sometimes you want to load the `package.json` into your
+TypeScript program, and it's tempting to just `import
+'../package.json'`, since that seems to work.
+
+However, this requires `tsc` to make an entire copy of your
+`package.json` file into the `dist` folder, which is a problem if
+you're using something like
+[tshy](https://github.com/isaacs/tshy), which uses the
+`package.json` file in dist for another purpose. Even when that
+does work, it's asking the module system to do a bunch of extra
+fs system calls, just to load a version number or something. (See
+[this issue](https://github.com/isaacs/tshy/issues/61).)
+
+This module helps by just finding the package.json file
+appropriately, and reading and parsing it in the most normal
+fashion.
+
+## Caveats
+
+This *only* works if your code builds into a target folder called
+`dist`, which is in the root of the package. It also requires
+that you do not have a folder named `node_modules` anywhere
+within your dev environment, or else it'll get the wrong answers
+there. (But, at least, that'll be in dev, so you're pretty likely
+to notice.)
+
+If you build to some other location, then you'll need a different
+approach. (Feel free to fork this module and make it your own, or
+just put the code right inline, there's not much of it.)
+
+## USAGE
+
+```js
+// src/index.ts
+import { findPackageJson, loadPackageJson } from 'package-json-from-dist'
+
+const pj = findPackageJson(import.meta.url)
+console.log(`package.json found at ${pj}`)
+
+const pkg = loadPackageJson(import.meta.url)
+console.log(`Hello from ${pkg.name}@${pkg.version}`)
+```
+
+If your module is not directly in the `./src` folder, then you need
+to specify the path that you would expect to find the
+`package.json` when it's _not_ built to the `dist` folder.
+
+```js
+// src/components/something.ts
+import { findPackageJson, loadPackageJson } from 'package-json-from-dist'
+
+const pj = findPackageJson(import.meta.url, '../../package.json')
+console.log(`package.json found at ${pj}`)
+
+const pkg = loadPackageJson(import.meta.url, '../../package.json')
+console.log(`Hello from ${pkg.name}@${pkg.version}`)
+```
+
+When running from CommmonJS, use `__filename` instead of
+`import.meta.url`.
+
+```js
+// src/index.cts
+import { findPackageJson, loadPackageJson } from 'package-json-from-dist'
+
+const pj = findPackageJson(__filename)
+console.log(`package.json found at ${pj}`)
+
+const pkg = loadPackageJson(__filename)
+console.log(`Hello from ${pkg.name}@${pkg.version}`)
+```
+
+Since [tshy](https://github.com/isaacs/tshy) builds _both_
+CommonJS and ESM by default, you may find that you need a
+CommonJS override and some `//@ts-ignore` magic to make it work.
+
+`src/pkg.ts`:
+
+```js
+import { findPackageJson, loadPackageJson } from 'package-json-from-dist'
+//@ts-ignore
+export const pkg = loadPackageJson(import.meta.url)
+//@ts-ignore
+export const pj = findPackageJson(import.meta.url)
+```
+
+`src/pkg-cjs.cts`:
+
+```js
+import { findPackageJson, loadPackageJson } from 'package-json-from-dist'
+export const pkg = loadPackageJson(__filename)
+export const pj = findPackageJson(__filename)
+```
diff --git a/node_modules/package-json-from-dist/dist/commonjs/index.d.ts b/node_modules/package-json-from-dist/dist/commonjs/index.d.ts
new file mode 100644
index 00000000..d486ffd2
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/commonjs/index.d.ts
@@ -0,0 +1,89 @@
+/**
+ * Find the package.json file, either from a TypeScript file somewhere not
+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
+ *
+ * Note: this *only* works if you build your code into `'./dist'`, and that the
+ * source path does not also contain `'dist'`! If you don't build into
+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
+ * not work properly!
+ *
+ * The default `pathFromSrc` option assumes that the calling code lives one
+ * folder below the root of the package. Otherwise, it must be specified.
+ *
+ * Example:
+ *
+ * ```ts
+ * // src/index.ts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(import.meta.url)
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ *
+ * If the caller is deeper within the project source, then you must provide
+ * the appropriate fallback path:
+ *
+ * ```ts
+ * // src/components/something.ts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(import.meta.url, '../../package.json')
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ *
+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
+ *
+ * ```ts
+ * // src/index.cts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(__filename)
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ */
+export declare const findPackageJson: (from: string | URL, pathFromSrc?: string) => string;
+/**
+ * Load the package.json file, either from a TypeScript file somewhere not
+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
+ *
+ * Note: this *only* works if you build your code into `'./dist'`, and that the
+ * source path does not also contain `'dist'`! If you don't build into
+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
+ * not work properly!
+ *
+ * The default `pathFromSrc` option assumes that the calling code lives one
+ * folder below the root of the package. Otherwise, it must be specified.
+ *
+ * Example:
+ *
+ * ```ts
+ * // src/index.ts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(import.meta.url)
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ *
+ * If the caller is deeper within the project source, then you must provide
+ * the appropriate fallback path:
+ *
+ * ```ts
+ * // src/components/something.ts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(import.meta.url, '../../package.json')
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ *
+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
+ *
+ * ```ts
+ * // src/index.cts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(__filename)
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ */
+export declare const loadPackageJson: (from: string | URL, pathFromSrc?: string) => any;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map b/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map
new file mode 100644
index 00000000..45fc7f35
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,eAAe,SACpB,MAAM,GAAG,GAAG,gBACL,MAAM,KAClB,MA0BF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,eAAe,SACpB,MAAM,GAAG,GAAG,gBACL,MAAM,QAEiD,CAAA"}
\ No newline at end of file
diff --git a/node_modules/package-json-from-dist/dist/commonjs/index.js b/node_modules/package-json-from-dist/dist/commonjs/index.js
new file mode 100644
index 00000000..5cff210d
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/commonjs/index.js
@@ -0,0 +1,124 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.loadPackageJson = exports.findPackageJson = void 0;
+const node_fs_1 = require("node:fs");
+const node_path_1 = require("node:path");
+const node_url_1 = require("node:url");
+const NM = `${node_path_1.sep}node_modules${node_path_1.sep}`;
+const DIST = `${node_path_1.sep}dist${node_path_1.sep}`;
+/**
+ * Find the package.json file, either from a TypeScript file somewhere not
+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
+ *
+ * Note: this *only* works if you build your code into `'./dist'`, and that the
+ * source path does not also contain `'dist'`! If you don't build into
+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
+ * not work properly!
+ *
+ * The default `pathFromSrc` option assumes that the calling code lives one
+ * folder below the root of the package. Otherwise, it must be specified.
+ *
+ * Example:
+ *
+ * ```ts
+ * // src/index.ts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(import.meta.url)
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ *
+ * If the caller is deeper within the project source, then you must provide
+ * the appropriate fallback path:
+ *
+ * ```ts
+ * // src/components/something.ts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(import.meta.url, '../../package.json')
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ *
+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
+ *
+ * ```ts
+ * // src/index.cts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(__filename)
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ */
+const findPackageJson = (from, pathFromSrc = '../package.json') => {
+    const f = typeof from === 'object' || from.startsWith('file://') ?
+        (0, node_url_1.fileURLToPath)(from)
+        : from;
+    const __dirname = (0, node_path_1.dirname)(f);
+    const nms = __dirname.lastIndexOf(NM);
+    if (nms !== -1) {
+        // inside of node_modules. find the dist directly under package name.
+        const nm = __dirname.substring(0, nms + NM.length);
+        const pkgDir = __dirname.substring(nms + NM.length);
+        const pkgName = pkgDir.startsWith('@') ?
+            pkgDir.split(node_path_1.sep).slice(0, 2).join(node_path_1.sep)
+            : String(pkgDir.split(node_path_1.sep)[0]);
+        return (0, node_path_1.resolve)(nm, pkgName, 'package.json');
+    }
+    else {
+        // see if we are in a dist folder.
+        const d = __dirname.lastIndexOf(DIST);
+        if (d !== -1) {
+            return (0, node_path_1.resolve)(__dirname.substring(0, d), 'package.json');
+        }
+        else {
+            return (0, node_path_1.resolve)(__dirname, pathFromSrc);
+        }
+    }
+};
+exports.findPackageJson = findPackageJson;
+/**
+ * Load the package.json file, either from a TypeScript file somewhere not
+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
+ *
+ * Note: this *only* works if you build your code into `'./dist'`, and that the
+ * source path does not also contain `'dist'`! If you don't build into
+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
+ * not work properly!
+ *
+ * The default `pathFromSrc` option assumes that the calling code lives one
+ * folder below the root of the package. Otherwise, it must be specified.
+ *
+ * Example:
+ *
+ * ```ts
+ * // src/index.ts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(import.meta.url)
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ *
+ * If the caller is deeper within the project source, then you must provide
+ * the appropriate fallback path:
+ *
+ * ```ts
+ * // src/components/something.ts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(import.meta.url, '../../package.json')
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ *
+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
+ *
+ * ```ts
+ * // src/index.cts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(__filename)
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ */
+const loadPackageJson = (from, pathFromSrc = '../package.json') => JSON.parse((0, node_fs_1.readFileSync)((0, exports.findPackageJson)(from, pathFromSrc), 'utf8'));
+exports.loadPackageJson = loadPackageJson;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/package-json-from-dist/dist/commonjs/index.js.map b/node_modules/package-json-from-dist/dist/commonjs/index.js.map
new file mode 100644
index 00000000..e3679e9c
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/commonjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAsC;AACtC,yCAAiD;AACjD,uCAAwC;AAExC,MAAM,EAAE,GAAG,GAAG,eAAG,eAAe,eAAG,EAAE,CAAA;AACrC,MAAM,IAAI,GAAG,GAAG,eAAG,OAAO,eAAG,EAAE,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACI,MAAM,eAAe,GAAG,CAC7B,IAAkB,EAClB,cAAsB,iBAAiB,EAC/B,EAAE;IACV,MAAM,CAAC,GACL,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,IAAA,wBAAa,EAAC,IAAI,CAAC;QACrB,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,SAAS,GAAG,IAAA,mBAAO,EAAC,CAAC,CAAC,CAAA;IAE5B,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACrC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,qEAAqE;QACrE,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;QACnD,MAAM,OAAO,GACX,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAG,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChC,OAAO,IAAA,mBAAO,EAAC,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IAC7C,CAAC;SAAM,CAAC;QACN,kCAAkC;QAClC,MAAM,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACb,OAAO,IAAA,mBAAO,EAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,IAAA,mBAAO,EAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AA7BY,QAAA,eAAe,mBA6B3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACI,MAAM,eAAe,GAAG,CAC7B,IAAkB,EAClB,cAAsB,iBAAiB,EACvC,EAAE,CACF,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,uBAAe,EAAC,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAJzD,QAAA,eAAe,mBAI0C","sourcesContent":["import { readFileSync } from 'node:fs'\nimport { dirname, resolve, sep } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst NM = `${sep}node_modules${sep}`\nconst DIST = `${sep}dist${sep}`\n\n/**\n * Find the package.json file, either from a TypeScript file somewhere not\n * in a 'dist' folder, or a built and/or installed 'dist' folder.\n *\n * Note: this *only* works if you build your code into `'./dist'`, and that the\n * source path does not also contain `'dist'`! If you don't build into\n * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will\n * not work properly!\n *\n * The default `pathFromSrc` option assumes that the calling code lives one\n * folder below the root of the package. Otherwise, it must be specified.\n *\n * Example:\n *\n * ```ts\n * // src/index.ts\n * import { findPackageJson } from 'package-json-from-dist'\n *\n * const pj = findPackageJson(import.meta.url)\n * console.log(`package.json found at ${pj}`)\n * ```\n *\n * If the caller is deeper within the project source, then you must provide\n * the appropriate fallback path:\n *\n * ```ts\n * // src/components/something.ts\n * import { findPackageJson } from 'package-json-from-dist'\n *\n * const pj = findPackageJson(import.meta.url, '../../package.json')\n * console.log(`package.json found at ${pj}`)\n * ```\n *\n * When running from CommmonJS, use `__filename` instead of `import.meta.url`\n *\n * ```ts\n * // src/index.cts\n * import { findPackageJson } from 'package-json-from-dist'\n *\n * const pj = findPackageJson(__filename)\n * console.log(`package.json found at ${pj}`)\n * ```\n */\nexport const findPackageJson = (\n  from: string | URL,\n  pathFromSrc: string = '../package.json',\n): string => {\n  const f =\n    typeof from === 'object' || from.startsWith('file://') ?\n      fileURLToPath(from)\n    : from\n  const __dirname = dirname(f)\n\n  const nms = __dirname.lastIndexOf(NM)\n  if (nms !== -1) {\n    // inside of node_modules. find the dist directly under package name.\n    const nm = __dirname.substring(0, nms + NM.length)\n    const pkgDir = __dirname.substring(nms + NM.length)\n    const pkgName =\n      pkgDir.startsWith('@') ?\n        pkgDir.split(sep).slice(0, 2).join(sep)\n      : String(pkgDir.split(sep)[0])\n    return resolve(nm, pkgName, 'package.json')\n  } else {\n    // see if we are in a dist folder.\n    const d = __dirname.lastIndexOf(DIST)\n    if (d !== -1) {\n      return resolve(__dirname.substring(0, d), 'package.json')\n    } else {\n      return resolve(__dirname, pathFromSrc)\n    }\n  }\n}\n\n/**\n * Load the package.json file, either from a TypeScript file somewhere not\n * in a 'dist' folder, or a built and/or installed 'dist' folder.\n *\n * Note: this *only* works if you build your code into `'./dist'`, and that the\n * source path does not also contain `'dist'`! If you don't build into\n * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will\n * not work properly!\n *\n * The default `pathFromSrc` option assumes that the calling code lives one\n * folder below the root of the package. Otherwise, it must be specified.\n *\n * Example:\n *\n * ```ts\n * // src/index.ts\n * import { loadPackageJson } from 'package-json-from-dist'\n *\n * const pj = loadPackageJson(import.meta.url)\n * console.log(`Hello from ${pj.name}@${pj.version}`)\n * ```\n *\n * If the caller is deeper within the project source, then you must provide\n * the appropriate fallback path:\n *\n * ```ts\n * // src/components/something.ts\n * import { loadPackageJson } from 'package-json-from-dist'\n *\n * const pj = loadPackageJson(import.meta.url, '../../package.json')\n * console.log(`Hello from ${pj.name}@${pj.version}`)\n * ```\n *\n * When running from CommmonJS, use `__filename` instead of `import.meta.url`\n *\n * ```ts\n * // src/index.cts\n * import { loadPackageJson } from 'package-json-from-dist'\n *\n * const pj = loadPackageJson(__filename)\n * console.log(`Hello from ${pj.name}@${pj.version}`)\n * ```\n */\nexport const loadPackageJson = (\n  from: string | URL,\n  pathFromSrc: string = '../package.json',\n) =>\n  JSON.parse(readFileSync(findPackageJson(from, pathFromSrc), 'utf8'))\n"]}
\ No newline at end of file
diff --git a/node_modules/package-json-from-dist/dist/commonjs/package.json b/node_modules/package-json-from-dist/dist/commonjs/package.json
new file mode 100644
index 00000000..5bbefffb
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
diff --git a/node_modules/package-json-from-dist/dist/esm/index.d.ts b/node_modules/package-json-from-dist/dist/esm/index.d.ts
new file mode 100644
index 00000000..d486ffd2
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/esm/index.d.ts
@@ -0,0 +1,89 @@
+/**
+ * Find the package.json file, either from a TypeScript file somewhere not
+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
+ *
+ * Note: this *only* works if you build your code into `'./dist'`, and that the
+ * source path does not also contain `'dist'`! If you don't build into
+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
+ * not work properly!
+ *
+ * The default `pathFromSrc` option assumes that the calling code lives one
+ * folder below the root of the package. Otherwise, it must be specified.
+ *
+ * Example:
+ *
+ * ```ts
+ * // src/index.ts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(import.meta.url)
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ *
+ * If the caller is deeper within the project source, then you must provide
+ * the appropriate fallback path:
+ *
+ * ```ts
+ * // src/components/something.ts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(import.meta.url, '../../package.json')
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ *
+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
+ *
+ * ```ts
+ * // src/index.cts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(__filename)
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ */
+export declare const findPackageJson: (from: string | URL, pathFromSrc?: string) => string;
+/**
+ * Load the package.json file, either from a TypeScript file somewhere not
+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
+ *
+ * Note: this *only* works if you build your code into `'./dist'`, and that the
+ * source path does not also contain `'dist'`! If you don't build into
+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
+ * not work properly!
+ *
+ * The default `pathFromSrc` option assumes that the calling code lives one
+ * folder below the root of the package. Otherwise, it must be specified.
+ *
+ * Example:
+ *
+ * ```ts
+ * // src/index.ts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(import.meta.url)
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ *
+ * If the caller is deeper within the project source, then you must provide
+ * the appropriate fallback path:
+ *
+ * ```ts
+ * // src/components/something.ts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(import.meta.url, '../../package.json')
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ *
+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
+ *
+ * ```ts
+ * // src/index.cts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(__filename)
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ */
+export declare const loadPackageJson: (from: string | URL, pathFromSrc?: string) => any;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/package-json-from-dist/dist/esm/index.d.ts.map b/node_modules/package-json-from-dist/dist/esm/index.d.ts.map
new file mode 100644
index 00000000..45fc7f35
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/esm/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,eAAe,SACpB,MAAM,GAAG,GAAG,gBACL,MAAM,KAClB,MA0BF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,eAAe,SACpB,MAAM,GAAG,GAAG,gBACL,MAAM,QAEiD,CAAA"}
\ No newline at end of file
diff --git a/node_modules/package-json-from-dist/dist/esm/index.js b/node_modules/package-json-from-dist/dist/esm/index.js
new file mode 100644
index 00000000..0627645f
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/esm/index.js
@@ -0,0 +1,119 @@
+import { readFileSync } from 'node:fs';
+import { dirname, resolve, sep } from 'node:path';
+import { fileURLToPath } from 'node:url';
+const NM = `${sep}node_modules${sep}`;
+const DIST = `${sep}dist${sep}`;
+/**
+ * Find the package.json file, either from a TypeScript file somewhere not
+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
+ *
+ * Note: this *only* works if you build your code into `'./dist'`, and that the
+ * source path does not also contain `'dist'`! If you don't build into
+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
+ * not work properly!
+ *
+ * The default `pathFromSrc` option assumes that the calling code lives one
+ * folder below the root of the package. Otherwise, it must be specified.
+ *
+ * Example:
+ *
+ * ```ts
+ * // src/index.ts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(import.meta.url)
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ *
+ * If the caller is deeper within the project source, then you must provide
+ * the appropriate fallback path:
+ *
+ * ```ts
+ * // src/components/something.ts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(import.meta.url, '../../package.json')
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ *
+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
+ *
+ * ```ts
+ * // src/index.cts
+ * import { findPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = findPackageJson(__filename)
+ * console.log(`package.json found at ${pj}`)
+ * ```
+ */
+export const findPackageJson = (from, pathFromSrc = '../package.json') => {
+    const f = typeof from === 'object' || from.startsWith('file://') ?
+        fileURLToPath(from)
+        : from;
+    const __dirname = dirname(f);
+    const nms = __dirname.lastIndexOf(NM);
+    if (nms !== -1) {
+        // inside of node_modules. find the dist directly under package name.
+        const nm = __dirname.substring(0, nms + NM.length);
+        const pkgDir = __dirname.substring(nms + NM.length);
+        const pkgName = pkgDir.startsWith('@') ?
+            pkgDir.split(sep).slice(0, 2).join(sep)
+            : String(pkgDir.split(sep)[0]);
+        return resolve(nm, pkgName, 'package.json');
+    }
+    else {
+        // see if we are in a dist folder.
+        const d = __dirname.lastIndexOf(DIST);
+        if (d !== -1) {
+            return resolve(__dirname.substring(0, d), 'package.json');
+        }
+        else {
+            return resolve(__dirname, pathFromSrc);
+        }
+    }
+};
+/**
+ * Load the package.json file, either from a TypeScript file somewhere not
+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
+ *
+ * Note: this *only* works if you build your code into `'./dist'`, and that the
+ * source path does not also contain `'dist'`! If you don't build into
+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
+ * not work properly!
+ *
+ * The default `pathFromSrc` option assumes that the calling code lives one
+ * folder below the root of the package. Otherwise, it must be specified.
+ *
+ * Example:
+ *
+ * ```ts
+ * // src/index.ts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(import.meta.url)
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ *
+ * If the caller is deeper within the project source, then you must provide
+ * the appropriate fallback path:
+ *
+ * ```ts
+ * // src/components/something.ts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(import.meta.url, '../../package.json')
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ *
+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
+ *
+ * ```ts
+ * // src/index.cts
+ * import { loadPackageJson } from 'package-json-from-dist'
+ *
+ * const pj = loadPackageJson(__filename)
+ * console.log(`Hello from ${pj.name}@${pj.version}`)
+ * ```
+ */
+export const loadPackageJson = (from, pathFromSrc = '../package.json') => JSON.parse(readFileSync(findPackageJson(from, pathFromSrc), 'utf8'));
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/package-json-from-dist/dist/esm/index.js.map b/node_modules/package-json-from-dist/dist/esm/index.js.map
new file mode 100644
index 00000000..16f353b7
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/esm/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,EAAE,GAAG,GAAG,GAAG,eAAe,GAAG,EAAE,CAAA;AACrC,MAAM,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,EAAE,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAkB,EAClB,cAAsB,iBAAiB,EAC/B,EAAE;IACV,MAAM,CAAC,GACL,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,aAAa,CAAC,IAAI,CAAC;QACrB,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAE5B,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACrC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,qEAAqE;QACrE,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;QACnD,MAAM,OAAO,GACX,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChC,OAAO,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;IAC7C,CAAC;SAAM,CAAC;QACN,kCAAkC;QAClC,MAAM,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACb,OAAO,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAkB,EAClB,cAAsB,iBAAiB,EACvC,EAAE,CACF,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA","sourcesContent":["import { readFileSync } from 'node:fs'\nimport { dirname, resolve, sep } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst NM = `${sep}node_modules${sep}`\nconst DIST = `${sep}dist${sep}`\n\n/**\n * Find the package.json file, either from a TypeScript file somewhere not\n * in a 'dist' folder, or a built and/or installed 'dist' folder.\n *\n * Note: this *only* works if you build your code into `'./dist'`, and that the\n * source path does not also contain `'dist'`! If you don't build into\n * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will\n * not work properly!\n *\n * The default `pathFromSrc` option assumes that the calling code lives one\n * folder below the root of the package. Otherwise, it must be specified.\n *\n * Example:\n *\n * ```ts\n * // src/index.ts\n * import { findPackageJson } from 'package-json-from-dist'\n *\n * const pj = findPackageJson(import.meta.url)\n * console.log(`package.json found at ${pj}`)\n * ```\n *\n * If the caller is deeper within the project source, then you must provide\n * the appropriate fallback path:\n *\n * ```ts\n * // src/components/something.ts\n * import { findPackageJson } from 'package-json-from-dist'\n *\n * const pj = findPackageJson(import.meta.url, '../../package.json')\n * console.log(`package.json found at ${pj}`)\n * ```\n *\n * When running from CommmonJS, use `__filename` instead of `import.meta.url`\n *\n * ```ts\n * // src/index.cts\n * import { findPackageJson } from 'package-json-from-dist'\n *\n * const pj = findPackageJson(__filename)\n * console.log(`package.json found at ${pj}`)\n * ```\n */\nexport const findPackageJson = (\n  from: string | URL,\n  pathFromSrc: string = '../package.json',\n): string => {\n  const f =\n    typeof from === 'object' || from.startsWith('file://') ?\n      fileURLToPath(from)\n    : from\n  const __dirname = dirname(f)\n\n  const nms = __dirname.lastIndexOf(NM)\n  if (nms !== -1) {\n    // inside of node_modules. find the dist directly under package name.\n    const nm = __dirname.substring(0, nms + NM.length)\n    const pkgDir = __dirname.substring(nms + NM.length)\n    const pkgName =\n      pkgDir.startsWith('@') ?\n        pkgDir.split(sep).slice(0, 2).join(sep)\n      : String(pkgDir.split(sep)[0])\n    return resolve(nm, pkgName, 'package.json')\n  } else {\n    // see if we are in a dist folder.\n    const d = __dirname.lastIndexOf(DIST)\n    if (d !== -1) {\n      return resolve(__dirname.substring(0, d), 'package.json')\n    } else {\n      return resolve(__dirname, pathFromSrc)\n    }\n  }\n}\n\n/**\n * Load the package.json file, either from a TypeScript file somewhere not\n * in a 'dist' folder, or a built and/or installed 'dist' folder.\n *\n * Note: this *only* works if you build your code into `'./dist'`, and that the\n * source path does not also contain `'dist'`! If you don't build into\n * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will\n * not work properly!\n *\n * The default `pathFromSrc` option assumes that the calling code lives one\n * folder below the root of the package. Otherwise, it must be specified.\n *\n * Example:\n *\n * ```ts\n * // src/index.ts\n * import { loadPackageJson } from 'package-json-from-dist'\n *\n * const pj = loadPackageJson(import.meta.url)\n * console.log(`Hello from ${pj.name}@${pj.version}`)\n * ```\n *\n * If the caller is deeper within the project source, then you must provide\n * the appropriate fallback path:\n *\n * ```ts\n * // src/components/something.ts\n * import { loadPackageJson } from 'package-json-from-dist'\n *\n * const pj = loadPackageJson(import.meta.url, '../../package.json')\n * console.log(`Hello from ${pj.name}@${pj.version}`)\n * ```\n *\n * When running from CommmonJS, use `__filename` instead of `import.meta.url`\n *\n * ```ts\n * // src/index.cts\n * import { loadPackageJson } from 'package-json-from-dist'\n *\n * const pj = loadPackageJson(__filename)\n * console.log(`Hello from ${pj.name}@${pj.version}`)\n * ```\n */\nexport const loadPackageJson = (\n  from: string | URL,\n  pathFromSrc: string = '../package.json',\n) =>\n  JSON.parse(readFileSync(findPackageJson(from, pathFromSrc), 'utf8'))\n"]}
\ No newline at end of file
diff --git a/node_modules/package-json-from-dist/dist/esm/package.json b/node_modules/package-json-from-dist/dist/esm/package.json
new file mode 100644
index 00000000..3dbc1ca5
--- /dev/null
+++ b/node_modules/package-json-from-dist/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "module"
+}
diff --git a/node_modules/package-json-from-dist/package.json b/node_modules/package-json-from-dist/package.json
new file mode 100644
index 00000000..2d5526e8
--- /dev/null
+++ b/node_modules/package-json-from-dist/package.json
@@ -0,0 +1,68 @@
+{
+  "name": "package-json-from-dist",
+  "version": "1.0.0",
+  "description": "Load the local package.json from either src or dist folder",
+  "main": "./dist/commonjs/index.js",
+  "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"
+      }
+    }
+  },
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "preversion": "npm test",
+    "postversion": "npm publish",
+    "prepublishOnly": "git push origin --follow-tags",
+    "prepare": "tshy",
+    "pretest": "npm run prepare",
+    "presnap": "npm run prepare",
+    "test": "tap",
+    "snap": "tap",
+    "format": "prettier --write . --loglevel warn --ignore-path ../../.prettierignore --cache",
+    "typedoc": "typedoc"
+  },
+  "author": "Isaac Z. Schlueter  (https://izs.me)",
+  "license": "BlueOak-1.0.0",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/isaacs/package-json-from-dist.git"
+  },
+  "devDependencies": {
+    "@types/node": "^20.12.12",
+    "prettier": "^3.2.5",
+    "tap": "^18.5.3",
+    "typedoc": "^0.24.8",
+    "typescript": "^5.1.6",
+    "tshy": "^1.14.0"
+  },
+  "prettier": {
+    "semi": false,
+    "printWidth": 70,
+    "tabWidth": 2,
+    "useTabs": false,
+    "singleQuote": true,
+    "jsxSingleQuote": false,
+    "bracketSameLine": true,
+    "arrowParens": "avoid",
+    "endOfLine": "lf",
+    "experimentalTernaries": true
+  },
+  "tshy": {
+    "exports": {
+      "./package.json": "./package.json",
+      ".": "./src/index.ts"
+    }
+  },
+  "types": "./dist/commonjs/index.d.ts",
+  "type": "module"
+}
diff --git a/node_modules/path-scurry/LICENSE.md b/node_modules/path-scurry/LICENSE.md
new file mode 100644
index 00000000..c5402b95
--- /dev/null
+++ b/node_modules/path-scurry/LICENSE.md
@@ -0,0 +1,55 @@
+# Blue Oak Model License
+
+Version 1.0.0
+
+## Purpose
+
+This license gives everyone as much permission to work with
+this software as possible, while protecting contributors
+from liability.
+
+## Acceptance
+
+In order to receive this license, you must agree to its
+rules.  The rules of this license are both obligations
+under that agreement and conditions to your license.
+You must not do anything with this software that triggers
+a rule that you cannot or will not follow.
+
+## Copyright
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe that contributor's
+copyright in it.
+
+## Notices
+
+You must ensure that everyone who gets a copy of
+any part of this software from you, with or without
+changes, also gets the text of this license or a link to
+.
+
+## Excuse
+
+If anyone notifies you in writing that you have not
+complied with [Notices](#notices), you can keep your
+license by taking all practical steps to comply within 30
+days after the notice.  If you do not do so, your license
+ends immediately.
+
+## Patent
+
+Each contributor licenses you to do everything with this
+software that would otherwise infringe any patent claims
+they can license or become able to license.
+
+## Reliability
+
+No contributor can revoke this license.
+
+## No Liability
+
+***As far as the law allows, this software comes as is,
+without any warranty or condition, and no contributor
+will be liable to anyone for any damages related to this
+software or this license, under any kind of legal claim.***
diff --git a/node_modules/path-scurry/README.md b/node_modules/path-scurry/README.md
new file mode 100644
index 00000000..b5cb495c
--- /dev/null
+++ b/node_modules/path-scurry/README.md
@@ -0,0 +1,636 @@
+# path-scurry
+
+Extremely high performant utility for building tools that read
+the file system, minimizing filesystem and path string munging
+operations to the greatest degree possible.
+
+## Ugh, yet another file traversal thing on npm?
+
+Yes. None of the existing ones gave me exactly what I wanted.
+
+## Well what is it you wanted?
+
+While working on [glob](http://npm.im/glob), I found that I
+needed a module to very efficiently manage the traversal over a
+folder tree, such that:
+
+1. No `readdir()` or `stat()` would ever be called on the same
+   file or directory more than one time.
+2. No `readdir()` calls would be made if we can be reasonably
+   sure that the path is not a directory. (Ie, a previous
+   `readdir()` or `stat()` covered the path, and
+   `ent.isDirectory()` is false.)
+3. `path.resolve()`, `dirname()`, `basename()`, and other
+   string-parsing/munging operations are be minimized. This means
+   it has to track "provisional" child nodes that may not exist
+   (and if we find that they _don't_ exist, store that
+   information as well, so we don't have to ever check again).
+4. The API is not limited to use as a stream/iterator/etc. There
+   are many cases where an API like node's `fs` is preferrable.
+5. It's more important to prevent excess syscalls than to be up
+   to date, but it should be smart enough to know what it
+   _doesn't_ know, and go get it seamlessly when requested.
+6. Do not blow up the JS heap allocation if operating on a
+   directory with a huge number of entries.
+7. Handle all the weird aspects of Windows paths, like UNC paths
+   and drive letters and wrongway slashes, so that the consumer
+   can return canonical platform-specific paths without having to
+   parse or join or do any error-prone string munging.
+
+## PERFORMANCE
+
+JavaScript people throw around the word "blazing" a lot. I hope
+that this module doesn't blaze anyone. But it does go very fast,
+in the cases it's optimized for, if used properly.
+
+PathScurry provides ample opportunities to get extremely good
+performance, as well as several options to trade performance for
+convenience.
+
+Benchmarks can be run by executing `npm run bench`.
+
+As is always the case, doing more means going slower, doing less
+means going faster, and there are trade offs between speed and
+memory usage.
+
+PathScurry makes heavy use of [LRUCache](http://npm.im/lru-cache)
+to efficiently cache whatever it can, and `Path` objects remain
+in the graph for the lifetime of the walker, so repeated calls
+with a single PathScurry object will be extremely fast. However,
+adding items to a cold cache means "doing more", so in those
+cases, we pay a price. Nothing is free, but every effort has been
+made to reduce costs wherever possible.
+
+Also, note that a "cache as long as possible" approach means that
+changes to the filesystem may not be reflected in the results of
+repeated PathScurry operations.
+
+For resolving string paths, `PathScurry` ranges from 5-50 times
+faster than `path.resolve` on repeated resolutions, but around
+100 to 1000 times _slower_ on the first resolution. If your
+program is spending a lot of time resolving the _same_ paths
+repeatedly (like, thousands or millions of times), then this can
+be beneficial. But both implementations are pretty fast, and
+speeding up an infrequent operation from 4µs to 400ns is not
+going to move the needle on your app's performance.
+
+For walking file system directory trees, a lot depends on how
+often a given PathScurry object will be used, and also on the
+walk method used.
+
+With default settings on a folder tree of 100,000 items,
+consisting of around a 10-to-1 ratio of normal files to
+directories, PathScurry performs comparably to
+[@nodelib/fs.walk](http://npm.im/@nodelib/fs.walk), which is the
+fastest and most reliable file system walker I could find. As far
+as I can tell, it's almost impossible to go much faster in a
+Node.js program, just based on how fast you can push syscalls out
+to the fs thread pool.
+
+On my machine, that is about 1000-1200 completed walks per second
+for async or stream walks, and around 500-600 walks per second
+synchronously.
+
+In the warm cache state, PathScurry's performance increases
+around 4x for async `for await` iteration, 10-15x faster for
+streams and synchronous `for of` iteration, and anywhere from 30x
+to 80x faster for the rest.
+
+```
+# walk 100,000 fs entries, 10/1 file/dir ratio
+# operations / ms
+ New PathScurry object  |  Reuse PathScurry object
+     stream:  1112.589  |  13974.917
+sync stream:   492.718  |  15028.343
+ async walk:  1095.648  |  32706.395
+  sync walk:   527.632  |  46129.772
+ async iter:  1288.821  |   5045.510
+  sync iter:   498.496  |  17920.746
+```
+
+A hand-rolled walk calling `entry.readdir()` and recursing
+through the entries can benefit even more from caching, with
+greater flexibility and without the overhead of streams or
+generators.
+
+The cold cache state is still limited by the costs of file system
+operations, but with a warm cache, the only bottleneck is CPU
+speed and VM optimizations. Of course, in that case, some care
+must be taken to ensure that you don't lose performance as a
+result of silly mistakes, like calling `readdir()` on entries
+that you know are not directories.
+
+```
+# manual recursive iteration functions
+      cold cache  |  warm cache
+async:  1164.901  |  17923.320
+   cb:  1101.127  |  40999.344
+zalgo:  1082.240  |  66689.936
+ sync:   526.935  |  87097.591
+```
+
+In this case, the speed improves by around 10-20x in the async
+case, 40x in the case of using `entry.readdirCB` with protections
+against synchronous callbacks, and 50-100x with callback
+deferrals disabled, and _several hundred times faster_ for
+synchronous iteration.
+
+If you can think of a case that is not covered in these
+benchmarks, or an implementation that performs significantly
+better than PathScurry, please [let me
+know](https://github.com/isaacs/path-scurry/issues).
+
+## USAGE
+
+```ts
+// hybrid module, load with either method
+import { PathScurry, Path } from 'path-scurry'
+// or:
+const { PathScurry, Path } = require('path-scurry')
+
+// very simple example, say we want to find and
+// delete all the .DS_Store files in a given path
+// note that the API is very similar to just a
+// naive walk with fs.readdir()
+import { unlink } from 'fs/promises'
+
+// easy way, iterate over the directory and do the thing
+const pw = new PathScurry(process.cwd())
+for await (const entry of pw) {
+  if (entry.isFile() && entry.name === '.DS_Store') {
+    unlink(entry.fullpath())
+  }
+}
+
+// here it is as a manual recursive method
+const walk = async (entry: Path) => {
+  const promises: Promise = []
+  // readdir doesn't throw on non-directories, it just doesn't
+  // return any entries, to save stack trace costs.
+  // Items are returned in arbitrary unsorted order
+  for (const child of await pw.readdir(entry)) {
+    // each child is a Path object
+    if (child.name === '.DS_Store' && child.isFile()) {
+      // could also do pw.resolve(entry, child.name),
+      // just like fs.readdir walking, but .fullpath is
+      // a *slightly* more efficient shorthand.
+      promises.push(unlink(child.fullpath()))
+    } else if (child.isDirectory()) {
+      promises.push(walk(child))
+    }
+  }
+  return Promise.all(promises)
+}
+
+walk(pw.cwd).then(() => {
+  console.log('all .DS_Store files removed')
+})
+
+const pw2 = new PathScurry('/a/b/c') // pw2.cwd is the Path for /a/b/c
+const relativeDir = pw2.cwd.resolve('../x') // Path entry for '/a/b/x'
+const relative2 = pw2.cwd.resolve('/a/b/d/../x') // same path, same entry
+assert.equal(relativeDir, relative2)
+```
+
+## API
+
+[Full TypeDoc API](https://isaacs.github.io/path-scurry)
+
+There are platform-specific classes exported, but for the most
+part, the default `PathScurry` and `Path` exports are what you
+most likely need, unless you are testing behavior for other
+platforms.
+
+Intended public API is documented here, but the full
+documentation does include internal types, which should not be
+accessed directly.
+
+### Interface `PathScurryOpts`
+
+The type of the `options` argument passed to the `PathScurry`
+constructor.
+
+- `nocase`: Boolean indicating that file names should be compared
+  case-insensitively. Defaults to `true` on darwin and win32
+  implementations, `false` elsewhere.
+
+  **Warning** Performing case-insensitive matching on a
+  case-sensitive filesystem will result in occasionally very
+  bizarre behavior. Performing case-sensitive matching on a
+  case-insensitive filesystem may negatively impact performance.
+
+- `childrenCacheSize`: Number of child entries to cache, in order
+  to speed up `resolve()` and `readdir()` calls. Defaults to
+  `16 * 1024` (ie, `16384`).
+
+  Setting it to a higher value will run the risk of JS heap
+  allocation errors on large directory trees. Setting it to `256`
+  or smaller will significantly reduce the construction time and
+  data consumption overhead, but with the downside of operations
+  being slower on large directory trees. Setting it to `0` will
+  mean that effectively no operations are cached, and this module
+  will be roughly the same speed as `fs` for file system
+  operations, and _much_ slower than `path.resolve()` for
+  repeated path resolution.
+
+- `fs` An object that will be used to override the default `fs`
+  methods. Any methods that are not overridden will use Node's
+  built-in implementations.
+
+  - lstatSync
+  - readdir (callback `withFileTypes` Dirent variant, used for
+    readdirCB and most walks)
+  - readdirSync
+  - readlinkSync
+  - realpathSync
+  - promises: Object containing the following async methods:
+    - lstat
+    - readdir (Dirent variant only)
+    - readlink
+    - realpath
+
+### Interface `WalkOptions`
+
+The options object that may be passed to all walk methods.
+
+- `withFileTypes`: Boolean, default true. Indicates that `Path`
+  objects should be returned. Set to `false` to get string paths
+  instead.
+- `follow`: Boolean, default false. Attempt to read directory
+  entries from symbolic links. Otherwise, only actual directories
+  are traversed. Regardless of this setting, a given target path
+  will only ever be walked once, meaning that a symbolic link to
+  a previously traversed directory will never be followed.
+
+  Setting this imposes a slight performance penalty, because
+  `readlink` must be called on all symbolic links encountered, in
+  order to avoid infinite cycles.
+
+- `filter`: Function `(entry: Path) => boolean`. If provided,
+  will prevent the inclusion of any entry for which it returns a
+  falsey value. This will not prevent directories from being
+  traversed if they do not pass the filter, though it will
+  prevent the directories themselves from being included in the
+  results. By default, if no filter is provided, then all entries
+  are included in the results.
+- `walkFilter`: Function `(entry: Path) => boolean`. If provided,
+  will prevent the traversal of any directory (or in the case of
+  `follow:true` symbolic links to directories) for which the
+  function returns false. This will not prevent the directories
+  themselves from being included in the result set. Use `filter`
+  for that.
+
+Note that TypeScript return types will only be inferred properly
+from static analysis if the `withFileTypes` option is omitted, or
+a constant `true` or `false` value.
+
+### Class `PathScurry`
+
+The main interface. Defaults to an appropriate class based on the
+current platform.
+
+Use `PathScurryWin32`, `PathScurryDarwin`, or `PathScurryPosix`
+if implementation-specific behavior is desired.
+
+All walk methods may be called with a `WalkOptions` argument to
+walk over the object's current working directory with the
+supplied options.
+
+#### `async pw.walk(entry?: string | Path | WalkOptions, opts?: WalkOptions)`
+
+Walk the directory tree according to the options provided,
+resolving to an array of all entries found.
+
+#### `pw.walkSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)`
+
+Walk the directory tree according to the options provided,
+returning an array of all entries found.
+
+#### `pw.iterate(entry?: string | Path | WalkOptions, opts?: WalkOptions)`
+
+Iterate over the directory asynchronously, for use with `for
+await of`. This is also the default async iterator method.
+
+#### `pw.iterateSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)`
+
+Iterate over the directory synchronously, for use with `for of`.
+This is also the default sync iterator method.
+
+#### `pw.stream(entry?: string | Path | WalkOptions, opts?: WalkOptions)`
+
+Return a [Minipass](http://npm.im/minipass) stream that emits
+each entry or path string in the walk. Results are made available
+asynchronously.
+
+#### `pw.streamSync(entry?: string | Path | WalkOptions, opts?: WalkOptions)`
+
+Return a [Minipass](http://npm.im/minipass) stream that emits
+each entry or path string in the walk. Results are made available
+synchronously, meaning that the walk will complete in a single
+tick if the stream is fully consumed.
+
+#### `pw.cwd`
+
+Path object representing the current working directory for the
+PathScurry.
+
+#### `pw.chdir(path: string)`
+
+Set the new effective current working directory for the scurry
+object, so that `path.relative()` and `path.relativePosix()`
+return values relative to the new cwd path.
+
+#### `pw.depth(path?: Path | string): number`
+
+Return the depth of the specified path (or the PathScurry cwd)
+within the directory tree.
+
+Root entries have a depth of `0`.
+
+#### `pw.resolve(...paths: string[])`
+
+Caching `path.resolve()`.
+
+Significantly faster than `path.resolve()` if called repeatedly
+with the same paths. Significantly slower otherwise, as it builds
+out the cached Path entries.
+
+To get a `Path` object resolved from the `PathScurry`, use
+`pw.cwd.resolve(path)`. Note that `Path.resolve` only takes a
+single string argument, not multiple.
+
+#### `pw.resolvePosix(...paths: string[])`
+
+Caching `path.resolve()`, but always using posix style paths.
+
+This is identical to `pw.resolve(...paths)` on posix systems (ie,
+everywhere except Windows).
+
+On Windows, it returns the full absolute UNC path using `/`
+separators. Ie, instead of `'C:\\foo\\bar`, it would return
+`//?/C:/foo/bar`.
+
+#### `pw.relative(path: string | Path): string`
+
+Return the relative path from the PathWalker cwd to the supplied
+path string or entry.
+
+If the nearest common ancestor is the root, then an absolute path
+is returned.
+
+#### `pw.relativePosix(path: string | Path): string`
+
+Return the relative path from the PathWalker cwd to the supplied
+path string or entry, using `/` path separators.
+
+If the nearest common ancestor is the root, then an absolute path
+is returned.
+
+On posix platforms (ie, all platforms except Windows), this is
+identical to `pw.relative(path)`.
+
+On Windows systems, it returns the resulting string as a
+`/`-delimited path. If an absolute path is returned (because the
+target does not share a common ancestor with `pw.cwd`), then a
+full absolute UNC path will be returned. Ie, instead of
+`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`.
+
+#### `pw.basename(path: string | Path): string`
+
+Return the basename of the provided string or Path.
+
+#### `pw.dirname(path: string | Path): string`
+
+Return the parent directory of the supplied string or Path.
+
+#### `async pw.readdir(dir = pw.cwd, opts = { withFileTypes: true })`
+
+Read the directory and resolve to an array of strings if
+`withFileTypes` is explicitly set to `false` or Path objects
+otherwise.
+
+Can be called as `pw.readdir({ withFileTypes: boolean })` as
+well.
+
+Returns `[]` if no entries are found, or if any error occurs.
+
+Note that TypeScript return types will only be inferred properly
+from static analysis if the `withFileTypes` option is omitted, or
+a constant `true` or `false` value.
+
+#### `pw.readdirSync(dir = pw.cwd, opts = { withFileTypes: true })`
+
+Synchronous `pw.readdir()`
+
+#### `async pw.readlink(link = pw.cwd, opts = { withFileTypes: false })`
+
+Call `fs.readlink` on the supplied string or Path object, and
+return the result.
+
+Can be called as `pw.readlink({ withFileTypes: boolean })` as
+well.
+
+Returns `undefined` if any error occurs (for example, if the
+argument is not a symbolic link), or a `Path` object if
+`withFileTypes` is explicitly set to `true`, or a string
+otherwise.
+
+Note that TypeScript return types will only be inferred properly
+from static analysis if the `withFileTypes` option is omitted, or
+a constant `true` or `false` value.
+
+#### `pw.readlinkSync(link = pw.cwd, opts = { withFileTypes: false })`
+
+Synchronous `pw.readlink()`
+
+#### `async pw.lstat(entry = pw.cwd)`
+
+Call `fs.lstat` on the supplied string or Path object, and fill
+in as much information as possible, returning the updated `Path`
+object.
+
+Returns `undefined` if the entry does not exist, or if any error
+is encountered.
+
+Note that some `Stats` data (such as `ino`, `dev`, and `mode`)
+will not be supplied. For those things, you'll need to call
+`fs.lstat` yourself.
+
+#### `pw.lstatSync(entry = pw.cwd)`
+
+Synchronous `pw.lstat()`
+
+#### `pw.realpath(entry = pw.cwd, opts = { withFileTypes: false })`
+
+Call `fs.realpath` on the supplied string or Path object, and
+return the realpath if available.
+
+Returns `undefined` if any error occurs.
+
+May be called as `pw.realpath({ withFileTypes: boolean })` to run
+on `pw.cwd`.
+
+#### `pw.realpathSync(entry = pw.cwd, opts = { withFileTypes: false })`
+
+Synchronous `pw.realpath()`
+
+### Class `Path` implements [fs.Dirent](https://nodejs.org/docs/latest/api/fs.html#class-fsdirent)
+
+Object representing a given path on the filesystem, which may or
+may not exist.
+
+Note that the actual class in use will be either `PathWin32` or
+`PathPosix`, depending on the implementation of `PathScurry` in
+use. They differ in the separators used to split and join path
+strings, and the handling of root paths.
+
+In `PathPosix` implementations, paths are split and joined using
+the `'/'` character, and `'/'` is the only root path ever in use.
+
+In `PathWin32` implementations, paths are split using either
+`'/'` or `'\\'` and joined using `'\\'`, and multiple roots may
+be in use based on the drives and UNC paths encountered. UNC
+paths such as `//?/C:/` that identify a drive letter, will be
+treated as an alias for the same root entry as their associated
+drive letter (in this case `'C:\\'`).
+
+#### `path.name`
+
+Name of this file system entry.
+
+**Important**: _always_ test the path name against any test
+string using the `isNamed` method, and not by directly comparing
+this string. Otherwise, unicode path strings that the system sees
+as identical will not be properly treated as the same path,
+leading to incorrect behavior and possible security issues.
+
+#### `path.isNamed(name: string): boolean`
+
+Return true if the path is a match for the given path name. This
+handles case sensitivity and unicode normalization.
+
+Note: even on case-sensitive systems, it is **not** safe to test
+the equality of the `.name` property to determine whether a given
+pathname matches, due to unicode normalization mismatches.
+
+Always use this method instead of testing the `path.name`
+property directly.
+
+#### `path.isCWD`
+
+Set to true if this `Path` object is the current working
+directory of the `PathScurry` collection that contains it.
+
+#### `path.getType()`
+
+Returns the type of the Path object, `'File'`, `'Directory'`,
+etc.
+
+#### `path.isType(t: type)`
+
+Returns true if `is{t}()` returns true.
+
+For example, `path.isType('Directory')` is equivalent to
+`path.isDirectory()`.
+
+#### `path.depth()`
+
+Return the depth of the Path entry within the directory tree.
+Root paths have a depth of `0`.
+
+#### `path.fullpath()`
+
+The fully resolved path to the entry.
+
+#### `path.fullpathPosix()`
+
+The fully resolved path to the entry, using `/` separators.
+
+On posix systems, this is identical to `path.fullpath()`. On
+windows, this will return a fully resolved absolute UNC path
+using `/` separators. Eg, instead of `'C:\\foo\\bar'`, it will
+return `'//?/C:/foo/bar'`.
+
+#### `path.isFile()`, `path.isDirectory()`, etc.
+
+Same as the identical `fs.Dirent.isX()` methods.
+
+#### `path.isUnknown()`
+
+Returns true if the path's type is unknown. Always returns true
+when the path is known to not exist.
+
+#### `path.resolve(p: string)`
+
+Return a `Path` object associated with the provided path string
+as resolved from the current Path object.
+
+#### `path.relative(): string`
+
+Return the relative path from the PathWalker cwd to the supplied
+path string or entry.
+
+If the nearest common ancestor is the root, then an absolute path
+is returned.
+
+#### `path.relativePosix(): string`
+
+Return the relative path from the PathWalker cwd to the supplied
+path string or entry, using `/` path separators.
+
+If the nearest common ancestor is the root, then an absolute path
+is returned.
+
+On posix platforms (ie, all platforms except Windows), this is
+identical to `pw.relative(path)`.
+
+On Windows systems, it returns the resulting string as a
+`/`-delimited path. If an absolute path is returned (because the
+target does not share a common ancestor with `pw.cwd`), then a
+full absolute UNC path will be returned. Ie, instead of
+`'C:\\foo\\bar`, it would return `//?/C:/foo/bar`.
+
+#### `async path.readdir()`
+
+Return an array of `Path` objects found by reading the associated
+path entry.
+
+If path is not a directory, or if any error occurs, returns `[]`,
+and marks all children as provisional and non-existent.
+
+#### `path.readdirSync()`
+
+Synchronous `path.readdir()`
+
+#### `async path.readlink()`
+
+Return the `Path` object referenced by the `path` as a symbolic
+link.
+
+If the `path` is not a symbolic link, or any error occurs,
+returns `undefined`.
+
+#### `path.readlinkSync()`
+
+Synchronous `path.readlink()`
+
+#### `async path.lstat()`
+
+Call `lstat` on the path object, and fill it in with details
+determined.
+
+If path does not exist, or any other error occurs, returns
+`undefined`, and marks the path as "unknown" type.
+
+#### `path.lstatSync()`
+
+Synchronous `path.lstat()`
+
+#### `async path.realpath()`
+
+Call `realpath` on the path, and return a Path object
+corresponding to the result, or `undefined` if any error occurs.
+
+#### `path.realpathSync()`
+
+Synchornous `path.realpath()`
diff --git a/node_modules/path-scurry/dist/commonjs/index.d.ts b/node_modules/path-scurry/dist/commonjs/index.d.ts
new file mode 100644
index 00000000..ef31b1b7
--- /dev/null
+++ b/node_modules/path-scurry/dist/commonjs/index.d.ts
@@ -0,0 +1,1115 @@
+import { LRUCache } from 'lru-cache';
+import { posix, win32 } from 'node:path';
+import { Minipass } from 'minipass';
+import type { Dirent, Stats } from 'node:fs';
+/**
+ * An object that will be used to override the default `fs`
+ * methods.  Any methods that are not overridden will use Node's
+ * built-in implementations.
+ *
+ * - lstatSync
+ * - readdir (callback `withFileTypes` Dirent variant, used for
+ *   readdirCB and most walks)
+ * - readdirSync
+ * - readlinkSync
+ * - realpathSync
+ * - promises: Object containing the following async methods:
+ *   - lstat
+ *   - readdir (Dirent variant only)
+ *   - readlink
+ *   - realpath
+ */
+export interface FSOption {
+    lstatSync?: (path: string) => Stats;
+    readdir?: (path: string, options: {
+        withFileTypes: true;
+    }, cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any) => void;
+    readdirSync?: (path: string, options: {
+        withFileTypes: true;
+    }) => Dirent[];
+    readlinkSync?: (path: string) => string;
+    realpathSync?: (path: string) => string;
+    promises?: {
+        lstat?: (path: string) => Promise;
+        readdir?: (path: string, options: {
+            withFileTypes: true;
+        }) => Promise;
+        readlink?: (path: string) => Promise;
+        realpath?: (path: string) => Promise;
+        [k: string]: any;
+    };
+    [k: string]: any;
+}
+interface FSValue {
+    lstatSync: (path: string) => Stats;
+    readdir: (path: string, options: {
+        withFileTypes: true;
+    }, cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any) => void;
+    readdirSync: (path: string, options: {
+        withFileTypes: true;
+    }) => Dirent[];
+    readlinkSync: (path: string) => string;
+    realpathSync: (path: string) => string;
+    promises: {
+        lstat: (path: string) => Promise;
+        readdir: (path: string, options: {
+            withFileTypes: true;
+        }) => Promise;
+        readlink: (path: string) => Promise;
+        realpath: (path: string) => Promise;
+        [k: string]: any;
+    };
+    [k: string]: any;
+}
+export type Type = 'Unknown' | 'FIFO' | 'CharacterDevice' | 'Directory' | 'BlockDevice' | 'File' | 'SymbolicLink' | 'Socket';
+/**
+ * Options that may be provided to the Path constructor
+ */
+export interface PathOpts {
+    fullpath?: string;
+    relative?: string;
+    relativePosix?: string;
+    parent?: PathBase;
+    /**
+     * See {@link FSOption}
+     */
+    fs?: FSOption;
+}
+/**
+ * An LRUCache for storing resolved path strings or Path objects.
+ * @internal
+ */
+export declare class ResolveCache extends LRUCache {
+    constructor();
+}
+/**
+ * an LRUCache for storing child entries.
+ * @internal
+ */
+export declare class ChildrenCache extends LRUCache {
+    constructor(maxSize?: number);
+}
+/**
+ * Array of Path objects, plus a marker indicating the first provisional entry
+ *
+ * @internal
+ */
+export type Children = PathBase[] & {
+    provisional: number;
+};
+declare const setAsCwd: unique symbol;
+/**
+ * Path objects are sort of like a super-powered
+ * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}
+ *
+ * Each one represents a single filesystem entry on disk, which may or may not
+ * exist. It includes methods for reading various types of information via
+ * lstat, readlink, and readdir, and caches all information to the greatest
+ * degree possible.
+ *
+ * Note that fs operations that would normally throw will instead return an
+ * "empty" value. This is in order to prevent excessive overhead from error
+ * stack traces.
+ */
+export declare abstract class PathBase implements Dirent {
+    #private;
+    /**
+     * the basename of this path
+     *
+     * **Important**: *always* test the path name against any test string
+     * usingthe {@link isNamed} method, and not by directly comparing this
+     * string. Otherwise, unicode path strings that the system sees as identical
+     * will not be properly treated as the same path, leading to incorrect
+     * behavior and possible security issues.
+     */
+    name: string;
+    /**
+     * the Path entry corresponding to the path root.
+     *
+     * @internal
+     */
+    root: PathBase;
+    /**
+     * All roots found within the current PathScurry family
+     *
+     * @internal
+     */
+    roots: {
+        [k: string]: PathBase;
+    };
+    /**
+     * a reference to the parent path, or undefined in the case of root entries
+     *
+     * @internal
+     */
+    parent?: PathBase;
+    /**
+     * boolean indicating whether paths are compared case-insensitively
+     * @internal
+     */
+    nocase: boolean;
+    /**
+     * boolean indicating that this path is the current working directory
+     * of the PathScurry collection that contains it.
+     */
+    isCWD: boolean;
+    /**
+     * the string or regexp used to split paths. On posix, it is `'/'`, and on
+     * windows it is a RegExp matching either `'/'` or `'\\'`
+     */
+    abstract splitSep: string | RegExp;
+    /**
+     * The path separator string to use when joining paths
+     */
+    abstract sep: string;
+    get dev(): number | undefined;
+    get mode(): number | undefined;
+    get nlink(): number | undefined;
+    get uid(): number | undefined;
+    get gid(): number | undefined;
+    get rdev(): number | undefined;
+    get blksize(): number | undefined;
+    get ino(): number | undefined;
+    get size(): number | undefined;
+    get blocks(): number | undefined;
+    get atimeMs(): number | undefined;
+    get mtimeMs(): number | undefined;
+    get ctimeMs(): number | undefined;
+    get birthtimeMs(): number | undefined;
+    get atime(): Date | undefined;
+    get mtime(): Date | undefined;
+    get ctime(): Date | undefined;
+    get birthtime(): Date | undefined;
+    /**
+     * This property is for compatibility with the Dirent class as of
+     * Node v20, where Dirent['parentPath'] refers to the path of the
+     * directory that was passed to readdir. For root entries, it's the path
+     * to the entry itself.
+     */
+    get parentPath(): string;
+    /**
+     * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,
+     * this property refers to the *parent* path, not the path object itself.
+     *
+     * @deprecated
+     */
+    get path(): string;
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name: string, type: number | undefined, root: PathBase | undefined, roots: {
+        [k: string]: PathBase;
+    }, nocase: boolean, children: ChildrenCache, opts: PathOpts);
+    /**
+     * Returns the depth of the Path object from its root.
+     *
+     * For example, a path at `/foo/bar` would have a depth of 2.
+     */
+    depth(): number;
+    /**
+     * @internal
+     */
+    abstract getRootString(path: string): string;
+    /**
+     * @internal
+     */
+    abstract getRoot(rootPath: string): PathBase;
+    /**
+     * @internal
+     */
+    abstract newChild(name: string, type?: number, opts?: PathOpts): PathBase;
+    /**
+     * @internal
+     */
+    childrenCache(): ChildrenCache;
+    /**
+     * Get the Path object referenced by the string path, resolved from this Path
+     */
+    resolve(path?: string): PathBase;
+    /**
+     * Returns the cached children Path objects, if still available.  If they
+     * have fallen out of the cache, then returns an empty array, and resets the
+     * READDIR_CALLED bit, so that future calls to readdir() will require an fs
+     * lookup.
+     *
+     * @internal
+     */
+    children(): Children;
+    /**
+     * Resolves a path portion and returns or creates the child Path.
+     *
+     * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is
+     * `'..'`.
+     *
+     * This should not be called directly.  If `pathPart` contains any path
+     * separators, it will lead to unsafe undefined behavior.
+     *
+     * Use `Path.resolve()` instead.
+     *
+     * @internal
+     */
+    child(pathPart: string, opts?: PathOpts): PathBase;
+    /**
+     * The relative path from the cwd. If it does not share an ancestor with
+     * the cwd, then this ends up being equivalent to the fullpath()
+     */
+    relative(): string;
+    /**
+     * The relative path from the cwd, using / as the path separator.
+     * If it does not share an ancestor with
+     * the cwd, then this ends up being equivalent to the fullpathPosix()
+     * On posix systems, this is identical to relative().
+     */
+    relativePosix(): string;
+    /**
+     * The fully resolved path string for this Path entry
+     */
+    fullpath(): string;
+    /**
+     * On platforms other than windows, this is identical to fullpath.
+     *
+     * On windows, this is overridden to return the forward-slash form of the
+     * full UNC path.
+     */
+    fullpathPosix(): string;
+    /**
+     * Is the Path of an unknown type?
+     *
+     * Note that we might know *something* about it if there has been a previous
+     * filesystem operation, for example that it does not exist, or is not a
+     * link, or whether it has child entries.
+     */
+    isUnknown(): boolean;
+    isType(type: Type): boolean;
+    getType(): Type;
+    /**
+     * Is the Path a regular file?
+     */
+    isFile(): boolean;
+    /**
+     * Is the Path a directory?
+     */
+    isDirectory(): boolean;
+    /**
+     * Is the path a character device?
+     */
+    isCharacterDevice(): boolean;
+    /**
+     * Is the path a block device?
+     */
+    isBlockDevice(): boolean;
+    /**
+     * Is the path a FIFO pipe?
+     */
+    isFIFO(): boolean;
+    /**
+     * Is the path a socket?
+     */
+    isSocket(): boolean;
+    /**
+     * Is the path a symbolic link?
+     */
+    isSymbolicLink(): boolean;
+    /**
+     * Return the entry if it has been subject of a successful lstat, or
+     * undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* simply
+     * mean that we haven't called lstat on it.
+     */
+    lstatCached(): PathBase | undefined;
+    /**
+     * Return the cached link target if the entry has been the subject of a
+     * successful readlink, or undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * readlink() has been called at some point.
+     */
+    readlinkCached(): PathBase | undefined;
+    /**
+     * Returns the cached realpath target if the entry has been the subject
+     * of a successful realpath, or undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * realpath() has been called at some point.
+     */
+    realpathCached(): PathBase | undefined;
+    /**
+     * Returns the cached child Path entries array if the entry has been the
+     * subject of a successful readdir(), or [] otherwise.
+     *
+     * Does not read the filesystem, so an empty array *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * readdir() has been called recently enough to still be valid.
+     */
+    readdirCached(): PathBase[];
+    /**
+     * Return true if it's worth trying to readlink.  Ie, we don't (yet) have
+     * any indication that readlink will definitely fail.
+     *
+     * Returns false if the path is known to not be a symlink, if a previous
+     * readlink failed, or if the entry does not exist.
+     */
+    canReadlink(): boolean;
+    /**
+     * Return true if readdir has previously been successfully called on this
+     * path, indicating that cachedReaddir() is likely valid.
+     */
+    calledReaddir(): boolean;
+    /**
+     * Returns true if the path is known to not exist. That is, a previous lstat
+     * or readdir failed to verify its existence when that would have been
+     * expected, or a parent entry was marked either enoent or enotdir.
+     */
+    isENOENT(): boolean;
+    /**
+     * Return true if the path is a match for the given path name.  This handles
+     * case sensitivity and unicode normalization.
+     *
+     * Note: even on case-sensitive systems, it is **not** safe to test the
+     * equality of the `.name` property to determine whether a given pathname
+     * matches, due to unicode normalization mismatches.
+     *
+     * Always use this method instead of testing the `path.name` property
+     * directly.
+     */
+    isNamed(n: string): boolean;
+    /**
+     * Return the Path object corresponding to the target of a symbolic link.
+     *
+     * If the Path is not a symbolic link, or if the readlink call fails for any
+     * reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     */
+    readlink(): Promise;
+    /**
+     * Synchronous {@link PathBase.readlink}
+     */
+    readlinkSync(): PathBase | undefined;
+    /**
+     * Call lstat() on this Path, and update all known information that can be
+     * determined.
+     *
+     * Note that unlike `fs.lstat()`, the returned value does not contain some
+     * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+     * information is required, you will need to call `fs.lstat` yourself.
+     *
+     * If the Path refers to a nonexistent file, or if the lstat call fails for
+     * any reason, `undefined` is returned.  Otherwise the updated Path object is
+     * returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    lstat(): Promise;
+    /**
+     * synchronous {@link PathBase.lstat}
+     */
+    lstatSync(): PathBase | undefined;
+    /**
+     * Standard node-style callback interface to get list of directory entries.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     *
+     * @param cb The callback called with (er, entries).  Note that the `er`
+     * param is somewhat extraneous, as all readdir() errors are handled and
+     * simply result in an empty set of entries being returned.
+     * @param allowZalgo Boolean indicating that immediately known results should
+     * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release
+     * zalgo at your peril, the dark pony lord is devious and unforgiving.
+     */
+    readdirCB(cb: (er: NodeJS.ErrnoException | null, entries: PathBase[]) => any, allowZalgo?: boolean): void;
+    /**
+     * Return an array of known child entries.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    readdir(): Promise;
+    /**
+     * synchronous {@link PathBase.readdir}
+     */
+    readdirSync(): PathBase[];
+    canReaddir(): boolean;
+    shouldWalk(dirs: Set, walkFilter?: (e: PathBase) => boolean): boolean;
+    /**
+     * Return the Path object corresponding to path as resolved
+     * by realpath(3).
+     *
+     * If the realpath call fails for any reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     * On success, returns a Path object.
+     */
+    realpath(): Promise;
+    /**
+     * Synchronous {@link realpath}
+     */
+    realpathSync(): PathBase | undefined;
+    /**
+     * Internal method to mark this Path object as the scurry cwd,
+     * called by {@link PathScurry#chdir}
+     *
+     * @internal
+     */
+    [setAsCwd](oldCwd: PathBase): void;
+}
+/**
+ * Path class used on win32 systems
+ *
+ * Uses `'\\'` as the path separator for returned paths, either `'\\'` or `'/'`
+ * as the path separator for parsing paths.
+ */
+export declare class PathWin32 extends PathBase {
+    /**
+     * Separator for generating path strings.
+     */
+    sep: '\\';
+    /**
+     * Separator for parsing path strings.
+     */
+    splitSep: RegExp;
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name: string, type: number | undefined, root: PathBase | undefined, roots: {
+        [k: string]: PathBase;
+    }, nocase: boolean, children: ChildrenCache, opts: PathOpts);
+    /**
+     * @internal
+     */
+    newChild(name: string, type?: number, opts?: PathOpts): PathWin32;
+    /**
+     * @internal
+     */
+    getRootString(path: string): string;
+    /**
+     * @internal
+     */
+    getRoot(rootPath: string): PathBase;
+    /**
+     * @internal
+     */
+    sameRoot(rootPath: string, compare?: string): boolean;
+}
+/**
+ * Path class used on all posix systems.
+ *
+ * Uses `'/'` as the path separator.
+ */
+export declare class PathPosix extends PathBase {
+    /**
+     * separator for parsing path strings
+     */
+    splitSep: '/';
+    /**
+     * separator for generating path strings
+     */
+    sep: '/';
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name: string, type: number | undefined, root: PathBase | undefined, roots: {
+        [k: string]: PathBase;
+    }, nocase: boolean, children: ChildrenCache, opts: PathOpts);
+    /**
+     * @internal
+     */
+    getRootString(path: string): string;
+    /**
+     * @internal
+     */
+    getRoot(_rootPath: string): PathBase;
+    /**
+     * @internal
+     */
+    newChild(name: string, type?: number, opts?: PathOpts): PathPosix;
+}
+/**
+ * Options that may be provided to the PathScurry constructor
+ */
+export interface PathScurryOpts {
+    /**
+     * perform case-insensitive path matching. Default based on platform
+     * subclass.
+     */
+    nocase?: boolean;
+    /**
+     * Number of Path entries to keep in the cache of Path child references.
+     *
+     * Setting this higher than 65536 will dramatically increase the data
+     * consumption and construction time overhead of each PathScurry.
+     *
+     * Setting this value to 256 or lower will significantly reduce the data
+     * consumption and construction time overhead, but may also reduce resolve()
+     * and readdir() performance on large filesystems.
+     *
+     * Default `16384`.
+     */
+    childrenCacheSize?: number;
+    /**
+     * An object that overrides the built-in functions from the fs and
+     * fs/promises modules.
+     *
+     * See {@link FSOption}
+     */
+    fs?: FSOption;
+}
+/**
+ * The base class for all PathScurry classes, providing the interface for path
+ * resolution and filesystem operations.
+ *
+ * Typically, you should *not* instantiate this class directly, but rather one
+ * of the platform-specific classes, or the exported {@link PathScurry} which
+ * defaults to the current platform.
+ */
+export declare abstract class PathScurryBase {
+    #private;
+    /**
+     * The root Path entry for the current working directory of this Scurry
+     */
+    root: PathBase;
+    /**
+     * The string path for the root of this Scurry's current working directory
+     */
+    rootPath: string;
+    /**
+     * A collection of all roots encountered, referenced by rootPath
+     */
+    roots: {
+        [k: string]: PathBase;
+    };
+    /**
+     * The Path entry corresponding to this PathScurry's current working directory.
+     */
+    cwd: PathBase;
+    /**
+     * Perform path comparisons case-insensitively.
+     *
+     * Defaults true on Darwin and Windows systems, false elsewhere.
+     */
+    nocase: boolean;
+    /**
+     * The path separator used for parsing paths
+     *
+     * `'/'` on Posix systems, either `'/'` or `'\\'` on Windows
+     */
+    abstract sep: string | RegExp;
+    /**
+     * This class should not be instantiated directly.
+     *
+     * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry
+     *
+     * @internal
+     */
+    constructor(cwd: (URL | string) | undefined, pathImpl: typeof win32 | typeof posix, sep: string | RegExp, { nocase, childrenCacheSize, fs, }?: PathScurryOpts);
+    /**
+     * Get the depth of a provided path, string, or the cwd
+     */
+    depth(path?: Path | string): number;
+    /**
+     * Parse the root portion of a path string
+     *
+     * @internal
+     */
+    abstract parseRootPath(dir: string): string;
+    /**
+     * create a new Path to use as root during construction.
+     *
+     * @internal
+     */
+    abstract newRoot(fs: FSValue): PathBase;
+    /**
+     * Determine whether a given path string is absolute
+     */
+    abstract isAbsolute(p: string): boolean;
+    /**
+     * Return the cache of child entries.  Exposed so subclasses can create
+     * child Path objects in a platform-specific way.
+     *
+     * @internal
+     */
+    childrenCache(): ChildrenCache;
+    /**
+     * Resolve one or more path strings to a resolved string
+     *
+     * Same interface as require('path').resolve.
+     *
+     * Much faster than path.resolve() when called multiple times for the same
+     * path, because the resolved Path objects are cached.  Much slower
+     * otherwise.
+     */
+    resolve(...paths: string[]): string;
+    /**
+     * Resolve one or more path strings to a resolved string, returning
+     * the posix path.  Identical to .resolve() on posix systems, but on
+     * windows will return a forward-slash separated UNC path.
+     *
+     * Same interface as require('path').resolve.
+     *
+     * Much faster than path.resolve() when called multiple times for the same
+     * path, because the resolved Path objects are cached.  Much slower
+     * otherwise.
+     */
+    resolvePosix(...paths: string[]): string;
+    /**
+     * find the relative path from the cwd to the supplied path string or entry
+     */
+    relative(entry?: PathBase | string): string;
+    /**
+     * find the relative path from the cwd to the supplied path string or
+     * entry, using / as the path delimiter, even on Windows.
+     */
+    relativePosix(entry?: PathBase | string): string;
+    /**
+     * Return the basename for the provided string or Path object
+     */
+    basename(entry?: PathBase | string): string;
+    /**
+     * Return the dirname for the provided string or Path object
+     */
+    dirname(entry?: PathBase | string): string;
+    /**
+     * Return an array of known child entries.
+     *
+     * First argument may be either a string, or a Path object.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     *
+     * Unlike `fs.readdir()`, the `withFileTypes` option defaults to `true`. Set
+     * `{ withFileTypes: false }` to return strings.
+     */
+    readdir(): Promise;
+    readdir(opts: {
+        withFileTypes: true;
+    }): Promise;
+    readdir(opts: {
+        withFileTypes: false;
+    }): Promise;
+    readdir(opts: {
+        withFileTypes: boolean;
+    }): Promise;
+    readdir(entry: PathBase | string): Promise;
+    readdir(entry: PathBase | string, opts: {
+        withFileTypes: true;
+    }): Promise;
+    readdir(entry: PathBase | string, opts: {
+        withFileTypes: false;
+    }): Promise;
+    readdir(entry: PathBase | string, opts: {
+        withFileTypes: boolean;
+    }): Promise;
+    /**
+     * synchronous {@link PathScurryBase.readdir}
+     */
+    readdirSync(): PathBase[];
+    readdirSync(opts: {
+        withFileTypes: true;
+    }): PathBase[];
+    readdirSync(opts: {
+        withFileTypes: false;
+    }): string[];
+    readdirSync(opts: {
+        withFileTypes: boolean;
+    }): PathBase[] | string[];
+    readdirSync(entry: PathBase | string): PathBase[];
+    readdirSync(entry: PathBase | string, opts: {
+        withFileTypes: true;
+    }): PathBase[];
+    readdirSync(entry: PathBase | string, opts: {
+        withFileTypes: false;
+    }): string[];
+    readdirSync(entry: PathBase | string, opts: {
+        withFileTypes: boolean;
+    }): PathBase[] | string[];
+    /**
+     * Call lstat() on the string or Path object, and update all known
+     * information that can be determined.
+     *
+     * Note that unlike `fs.lstat()`, the returned value does not contain some
+     * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+     * information is required, you will need to call `fs.lstat` yourself.
+     *
+     * If the Path refers to a nonexistent file, or if the lstat call fails for
+     * any reason, `undefined` is returned.  Otherwise the updated Path object is
+     * returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    lstat(entry?: string | PathBase): Promise;
+    /**
+     * synchronous {@link PathScurryBase.lstat}
+     */
+    lstatSync(entry?: string | PathBase): PathBase | undefined;
+    /**
+     * Return the Path object or string path corresponding to the target of a
+     * symbolic link.
+     *
+     * If the path is not a symbolic link, or if the readlink call fails for any
+     * reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     *
+     * `{withFileTypes}` option defaults to `false`.
+     *
+     * On success, returns a Path object if `withFileTypes` option is true,
+     * otherwise a string.
+     */
+    readlink(): Promise;
+    readlink(opt: {
+        withFileTypes: false;
+    }): Promise;
+    readlink(opt: {
+        withFileTypes: true;
+    }): Promise;
+    readlink(opt: {
+        withFileTypes: boolean;
+    }): Promise;
+    readlink(entry: string | PathBase, opt?: {
+        withFileTypes: false;
+    }): Promise;
+    readlink(entry: string | PathBase, opt: {
+        withFileTypes: true;
+    }): Promise;
+    readlink(entry: string | PathBase, opt: {
+        withFileTypes: boolean;
+    }): Promise;
+    /**
+     * synchronous {@link PathScurryBase.readlink}
+     */
+    readlinkSync(): string | undefined;
+    readlinkSync(opt: {
+        withFileTypes: false;
+    }): string | undefined;
+    readlinkSync(opt: {
+        withFileTypes: true;
+    }): PathBase | undefined;
+    readlinkSync(opt: {
+        withFileTypes: boolean;
+    }): PathBase | string | undefined;
+    readlinkSync(entry: string | PathBase, opt?: {
+        withFileTypes: false;
+    }): string | undefined;
+    readlinkSync(entry: string | PathBase, opt: {
+        withFileTypes: true;
+    }): PathBase | undefined;
+    readlinkSync(entry: string | PathBase, opt: {
+        withFileTypes: boolean;
+    }): string | PathBase | undefined;
+    /**
+     * Return the Path object or string path corresponding to path as resolved
+     * by realpath(3).
+     *
+     * If the realpath call fails for any reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     *
+     * `{withFileTypes}` option defaults to `false`.
+     *
+     * On success, returns a Path object if `withFileTypes` option is true,
+     * otherwise a string.
+     */
+    realpath(): Promise;
+    realpath(opt: {
+        withFileTypes: false;
+    }): Promise;
+    realpath(opt: {
+        withFileTypes: true;
+    }): Promise;
+    realpath(opt: {
+        withFileTypes: boolean;
+    }): Promise;
+    realpath(entry: string | PathBase, opt?: {
+        withFileTypes: false;
+    }): Promise;
+    realpath(entry: string | PathBase, opt: {
+        withFileTypes: true;
+    }): Promise;
+    realpath(entry: string | PathBase, opt: {
+        withFileTypes: boolean;
+    }): Promise;
+    realpathSync(): string | undefined;
+    realpathSync(opt: {
+        withFileTypes: false;
+    }): string | undefined;
+    realpathSync(opt: {
+        withFileTypes: true;
+    }): PathBase | undefined;
+    realpathSync(opt: {
+        withFileTypes: boolean;
+    }): PathBase | string | undefined;
+    realpathSync(entry: string | PathBase, opt?: {
+        withFileTypes: false;
+    }): string | undefined;
+    realpathSync(entry: string | PathBase, opt: {
+        withFileTypes: true;
+    }): PathBase | undefined;
+    realpathSync(entry: string | PathBase, opt: {
+        withFileTypes: boolean;
+    }): string | PathBase | undefined;
+    /**
+     * Asynchronously walk the directory tree, returning an array of
+     * all path strings or Path objects found.
+     *
+     * Note that this will be extremely memory-hungry on large filesystems.
+     * In such cases, it may be better to use the stream or async iterator
+     * walk implementation.
+     */
+    walk(): Promise;
+    walk(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Promise;
+    walk(opts: WalkOptionsWithFileTypesFalse): Promise;
+    walk(opts: WalkOptions): Promise;
+    walk(entry: string | PathBase): Promise;
+    walk(entry: string | PathBase, opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Promise;
+    walk(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): Promise;
+    walk(entry: string | PathBase, opts: WalkOptions): Promise;
+    /**
+     * Synchronously walk the directory tree, returning an array of
+     * all path strings or Path objects found.
+     *
+     * Note that this will be extremely memory-hungry on large filesystems.
+     * In such cases, it may be better to use the stream or async iterator
+     * walk implementation.
+     */
+    walkSync(): PathBase[];
+    walkSync(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): PathBase[];
+    walkSync(opts: WalkOptionsWithFileTypesFalse): string[];
+    walkSync(opts: WalkOptions): string[] | PathBase[];
+    walkSync(entry: string | PathBase): PathBase[];
+    walkSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue): PathBase[];
+    walkSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): string[];
+    walkSync(entry: string | PathBase, opts: WalkOptions): PathBase[] | string[];
+    /**
+     * Support for `for await`
+     *
+     * Alias for {@link PathScurryBase.iterate}
+     *
+     * Note: As of Node 19, this is very slow, compared to other methods of
+     * walking.  Consider using {@link PathScurryBase.stream} if memory overhead
+     * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
+     */
+    [Symbol.asyncIterator](): AsyncGenerator;
+    /**
+     * Async generator form of {@link PathScurryBase.walk}
+     *
+     * Note: As of Node 19, this is very slow, compared to other methods of
+     * walking, especially if most/all of the directory tree has been previously
+     * walked.  Consider using {@link PathScurryBase.stream} if memory overhead
+     * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
+     */
+    iterate(): AsyncGenerator;
+    iterate(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): AsyncGenerator;
+    iterate(opts: WalkOptionsWithFileTypesFalse): AsyncGenerator;
+    iterate(opts: WalkOptions): AsyncGenerator;
+    iterate(entry: string | PathBase): AsyncGenerator;
+    iterate(entry: string | PathBase, opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): AsyncGenerator;
+    iterate(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): AsyncGenerator;
+    iterate(entry: string | PathBase, opts: WalkOptions): AsyncGenerator;
+    /**
+     * Iterating over a PathScurry performs a synchronous walk.
+     *
+     * Alias for {@link PathScurryBase.iterateSync}
+     */
+    [Symbol.iterator](): Generator;
+    iterateSync(): Generator;
+    iterateSync(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Generator;
+    iterateSync(opts: WalkOptionsWithFileTypesFalse): Generator;
+    iterateSync(opts: WalkOptions): Generator;
+    iterateSync(entry: string | PathBase): Generator;
+    iterateSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Generator;
+    iterateSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): Generator;
+    iterateSync(entry: string | PathBase, opts: WalkOptions): Generator;
+    /**
+     * Stream form of {@link PathScurryBase.walk}
+     *
+     * Returns a Minipass stream that emits {@link PathBase} objects by default,
+     * or strings if `{ withFileTypes: false }` is set in the options.
+     */
+    stream(): Minipass;
+    stream(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Minipass;
+    stream(opts: WalkOptionsWithFileTypesFalse): Minipass;
+    stream(opts: WalkOptions): Minipass;
+    stream(entry: string | PathBase): Minipass;
+    stream(entry: string | PathBase, opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue): Minipass;
+    stream(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): Minipass;
+    stream(entry: string | PathBase, opts: WalkOptions): Minipass | Minipass;
+    /**
+     * Synchronous form of {@link PathScurryBase.stream}
+     *
+     * Returns a Minipass stream that emits {@link PathBase} objects by default,
+     * or strings if `{ withFileTypes: false }` is set in the options.
+     *
+     * Will complete the walk in a single tick if the stream is consumed fully.
+     * Otherwise, will pause as needed for stream backpressure.
+     */
+    streamSync(): Minipass;
+    streamSync(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Minipass;
+    streamSync(opts: WalkOptionsWithFileTypesFalse): Minipass;
+    streamSync(opts: WalkOptions): Minipass;
+    streamSync(entry: string | PathBase): Minipass;
+    streamSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue): Minipass;
+    streamSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): Minipass;
+    streamSync(entry: string | PathBase, opts: WalkOptions): Minipass | Minipass;
+    chdir(path?: string | Path): void;
+}
+/**
+ * Options provided to all walk methods.
+ */
+export interface WalkOptions {
+    /**
+     * Return results as {@link PathBase} objects rather than strings.
+     * When set to false, results are fully resolved paths, as returned by
+     * {@link PathBase.fullpath}.
+     * @default true
+     */
+    withFileTypes?: boolean;
+    /**
+     *  Attempt to read directory entries from symbolic links. Otherwise, only
+     *  actual directories are traversed. Regardless of this setting, a given
+     *  target path will only ever be walked once, meaning that a symbolic link
+     *  to a previously traversed directory will never be followed.
+     *
+     *  Setting this imposes a slight performance penalty, because `readlink`
+     *  must be called on all symbolic links encountered, in order to avoid
+     *  infinite cycles.
+     * @default false
+     */
+    follow?: boolean;
+    /**
+     * Only return entries where the provided function returns true.
+     *
+     * This will not prevent directories from being traversed, even if they do
+     * not pass the filter, though it will prevent directories themselves from
+     * being included in the result set.  See {@link walkFilter}
+     *
+     * Asynchronous functions are not supported here.
+     *
+     * By default, if no filter is provided, all entries and traversed
+     * directories are included.
+     */
+    filter?: (entry: PathBase) => boolean;
+    /**
+     * Only traverse directories (and in the case of {@link follow} being set to
+     * true, symbolic links to directories) if the provided function returns
+     * true.
+     *
+     * This will not prevent directories from being included in the result set,
+     * even if they do not pass the supplied filter function.  See {@link filter}
+     * to do that.
+     *
+     * Asynchronous functions are not supported here.
+     */
+    walkFilter?: (entry: PathBase) => boolean;
+}
+export type WalkOptionsWithFileTypesUnset = WalkOptions & {
+    withFileTypes?: undefined;
+};
+export type WalkOptionsWithFileTypesTrue = WalkOptions & {
+    withFileTypes: true;
+};
+export type WalkOptionsWithFileTypesFalse = WalkOptions & {
+    withFileTypes: false;
+};
+/**
+ * Windows implementation of {@link PathScurryBase}
+ *
+ * Defaults to case insensitve, uses `'\\'` to generate path strings.  Uses
+ * {@link PathWin32} for Path objects.
+ */
+export declare class PathScurryWin32 extends PathScurryBase {
+    /**
+     * separator for generating path strings
+     */
+    sep: '\\';
+    constructor(cwd?: URL | string, opts?: PathScurryOpts);
+    /**
+     * @internal
+     */
+    parseRootPath(dir: string): string;
+    /**
+     * @internal
+     */
+    newRoot(fs: FSValue): PathWin32;
+    /**
+     * Return true if the provided path string is an absolute path
+     */
+    isAbsolute(p: string): boolean;
+}
+/**
+ * {@link PathScurryBase} implementation for all posix systems other than Darwin.
+ *
+ * Defaults to case-sensitive matching, uses `'/'` to generate path strings.
+ *
+ * Uses {@link PathPosix} for Path objects.
+ */
+export declare class PathScurryPosix extends PathScurryBase {
+    /**
+     * separator for generating path strings
+     */
+    sep: '/';
+    constructor(cwd?: URL | string, opts?: PathScurryOpts);
+    /**
+     * @internal
+     */
+    parseRootPath(_dir: string): string;
+    /**
+     * @internal
+     */
+    newRoot(fs: FSValue): PathPosix;
+    /**
+     * Return true if the provided path string is an absolute path
+     */
+    isAbsolute(p: string): boolean;
+}
+/**
+ * {@link PathScurryBase} implementation for Darwin (macOS) systems.
+ *
+ * Defaults to case-insensitive matching, uses `'/'` for generating path
+ * strings.
+ *
+ * Uses {@link PathPosix} for Path objects.
+ */
+export declare class PathScurryDarwin extends PathScurryPosix {
+    constructor(cwd?: URL | string, opts?: PathScurryOpts);
+}
+/**
+ * Default {@link PathBase} implementation for the current platform.
+ *
+ * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.
+ */
+export declare const Path: typeof PathWin32 | typeof PathPosix;
+export type Path = PathBase | InstanceType;
+/**
+ * Default {@link PathScurryBase} implementation for the current platform.
+ *
+ * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on
+ * Darwin (macOS) systems, {@link PathScurryPosix} on all others.
+ */
+export declare const PathScurry: typeof PathScurryWin32 | typeof PathScurryDarwin | typeof PathScurryPosix;
+export type PathScurry = PathScurryBase | InstanceType;
+export {};
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/path-scurry/dist/commonjs/index.d.ts.map b/node_modules/path-scurry/dist/commonjs/index.d.ts.map
new file mode 100644
index 00000000..beb3fe5a
--- /dev/null
+++ b/node_modules/path-scurry/dist/commonjs/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/path-scurry/dist/commonjs/index.js b/node_modules/path-scurry/dist/commonjs/index.js
new file mode 100644
index 00000000..af3e7595
--- /dev/null
+++ b/node_modules/path-scurry/dist/commonjs/index.js
@@ -0,0 +1,2016 @@
+"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.PathScurry = exports.Path = exports.PathScurryDarwin = exports.PathScurryPosix = exports.PathScurryWin32 = exports.PathScurryBase = exports.PathPosix = exports.PathWin32 = exports.PathBase = exports.ChildrenCache = exports.ResolveCache = void 0;
+const lru_cache_1 = require("lru-cache");
+const node_path_1 = require("node:path");
+const node_url_1 = require("node:url");
+const fs_1 = require("fs");
+const actualFS = __importStar(require("node:fs"));
+const realpathSync = fs_1.realpathSync.native;
+// TODO: test perf of fs/promises realpath vs realpathCB,
+// since the promises one uses realpath.native
+const promises_1 = require("node:fs/promises");
+const minipass_1 = require("minipass");
+const defaultFS = {
+    lstatSync: fs_1.lstatSync,
+    readdir: fs_1.readdir,
+    readdirSync: fs_1.readdirSync,
+    readlinkSync: fs_1.readlinkSync,
+    realpathSync,
+    promises: {
+        lstat: promises_1.lstat,
+        readdir: promises_1.readdir,
+        readlink: promises_1.readlink,
+        realpath: promises_1.realpath,
+    },
+};
+// if they just gave us require('fs') then use our default
+const fsFromOption = (fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS ?
+    defaultFS
+    : {
+        ...defaultFS,
+        ...fsOption,
+        promises: {
+            ...defaultFS.promises,
+            ...(fsOption.promises || {}),
+        },
+    };
+// turn something like //?/c:/ into c:\
+const uncDriveRegexp = /^\\\\\?\\([a-z]:)\\?$/i;
+const uncToDrive = (rootPath) => rootPath.replace(/\//g, '\\').replace(uncDriveRegexp, '$1\\');
+// windows paths are separated by either / or \
+const eitherSep = /[\\\/]/;
+const UNKNOWN = 0; // may not even exist, for all we know
+const IFIFO = 0b0001;
+const IFCHR = 0b0010;
+const IFDIR = 0b0100;
+const IFBLK = 0b0110;
+const IFREG = 0b1000;
+const IFLNK = 0b1010;
+const IFSOCK = 0b1100;
+const IFMT = 0b1111;
+// mask to unset low 4 bits
+const IFMT_UNKNOWN = ~IFMT;
+// set after successfully calling readdir() and getting entries.
+const READDIR_CALLED = 0b0000_0001_0000;
+// set after a successful lstat()
+const LSTAT_CALLED = 0b0000_0010_0000;
+// set if an entry (or one of its parents) is definitely not a dir
+const ENOTDIR = 0b0000_0100_0000;
+// set if an entry (or one of its parents) does not exist
+// (can also be set on lstat errors like EACCES or ENAMETOOLONG)
+const ENOENT = 0b0000_1000_0000;
+// cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK
+// set if we fail to readlink
+const ENOREADLINK = 0b0001_0000_0000;
+// set if we know realpath() will fail
+const ENOREALPATH = 0b0010_0000_0000;
+const ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH;
+const TYPEMASK = 0b0011_1111_1111;
+const entToType = (s) => s.isFile() ? IFREG
+    : s.isDirectory() ? IFDIR
+        : s.isSymbolicLink() ? IFLNK
+            : s.isCharacterDevice() ? IFCHR
+                : s.isBlockDevice() ? IFBLK
+                    : s.isSocket() ? IFSOCK
+                        : s.isFIFO() ? IFIFO
+                            : UNKNOWN;
+// normalize unicode path names
+const normalizeCache = new Map();
+const normalize = (s) => {
+    const c = normalizeCache.get(s);
+    if (c)
+        return c;
+    const n = s.normalize('NFKD');
+    normalizeCache.set(s, n);
+    return n;
+};
+const normalizeNocaseCache = new Map();
+const normalizeNocase = (s) => {
+    const c = normalizeNocaseCache.get(s);
+    if (c)
+        return c;
+    const n = normalize(s.toLowerCase());
+    normalizeNocaseCache.set(s, n);
+    return n;
+};
+/**
+ * An LRUCache for storing resolved path strings or Path objects.
+ * @internal
+ */
+class ResolveCache extends lru_cache_1.LRUCache {
+    constructor() {
+        super({ max: 256 });
+    }
+}
+exports.ResolveCache = ResolveCache;
+// In order to prevent blowing out the js heap by allocating hundreds of
+// thousands of Path entries when walking extremely large trees, the "children"
+// in this tree are represented by storing an array of Path entries in an
+// LRUCache, indexed by the parent.  At any time, Path.children() may return an
+// empty array, indicating that it doesn't know about any of its children, and
+// thus has to rebuild that cache.  This is fine, it just means that we don't
+// benefit as much from having the cached entries, but huge directory walks
+// don't blow out the stack, and smaller ones are still as fast as possible.
+//
+//It does impose some complexity when building up the readdir data, because we
+//need to pass a reference to the children array that we started with.
+/**
+ * an LRUCache for storing child entries.
+ * @internal
+ */
+class ChildrenCache extends lru_cache_1.LRUCache {
+    constructor(maxSize = 16 * 1024) {
+        super({
+            maxSize,
+            // parent + children
+            sizeCalculation: a => a.length + 1,
+        });
+    }
+}
+exports.ChildrenCache = ChildrenCache;
+const setAsCwd = Symbol('PathScurry setAsCwd');
+/**
+ * Path objects are sort of like a super-powered
+ * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}
+ *
+ * Each one represents a single filesystem entry on disk, which may or may not
+ * exist. It includes methods for reading various types of information via
+ * lstat, readlink, and readdir, and caches all information to the greatest
+ * degree possible.
+ *
+ * Note that fs operations that would normally throw will instead return an
+ * "empty" value. This is in order to prevent excessive overhead from error
+ * stack traces.
+ */
+class PathBase {
+    /**
+     * the basename of this path
+     *
+     * **Important**: *always* test the path name against any test string
+     * usingthe {@link isNamed} method, and not by directly comparing this
+     * string. Otherwise, unicode path strings that the system sees as identical
+     * will not be properly treated as the same path, leading to incorrect
+     * behavior and possible security issues.
+     */
+    name;
+    /**
+     * the Path entry corresponding to the path root.
+     *
+     * @internal
+     */
+    root;
+    /**
+     * All roots found within the current PathScurry family
+     *
+     * @internal
+     */
+    roots;
+    /**
+     * a reference to the parent path, or undefined in the case of root entries
+     *
+     * @internal
+     */
+    parent;
+    /**
+     * boolean indicating whether paths are compared case-insensitively
+     * @internal
+     */
+    nocase;
+    /**
+     * boolean indicating that this path is the current working directory
+     * of the PathScurry collection that contains it.
+     */
+    isCWD = false;
+    // potential default fs override
+    #fs;
+    // Stats fields
+    #dev;
+    get dev() {
+        return this.#dev;
+    }
+    #mode;
+    get mode() {
+        return this.#mode;
+    }
+    #nlink;
+    get nlink() {
+        return this.#nlink;
+    }
+    #uid;
+    get uid() {
+        return this.#uid;
+    }
+    #gid;
+    get gid() {
+        return this.#gid;
+    }
+    #rdev;
+    get rdev() {
+        return this.#rdev;
+    }
+    #blksize;
+    get blksize() {
+        return this.#blksize;
+    }
+    #ino;
+    get ino() {
+        return this.#ino;
+    }
+    #size;
+    get size() {
+        return this.#size;
+    }
+    #blocks;
+    get blocks() {
+        return this.#blocks;
+    }
+    #atimeMs;
+    get atimeMs() {
+        return this.#atimeMs;
+    }
+    #mtimeMs;
+    get mtimeMs() {
+        return this.#mtimeMs;
+    }
+    #ctimeMs;
+    get ctimeMs() {
+        return this.#ctimeMs;
+    }
+    #birthtimeMs;
+    get birthtimeMs() {
+        return this.#birthtimeMs;
+    }
+    #atime;
+    get atime() {
+        return this.#atime;
+    }
+    #mtime;
+    get mtime() {
+        return this.#mtime;
+    }
+    #ctime;
+    get ctime() {
+        return this.#ctime;
+    }
+    #birthtime;
+    get birthtime() {
+        return this.#birthtime;
+    }
+    #matchName;
+    #depth;
+    #fullpath;
+    #fullpathPosix;
+    #relative;
+    #relativePosix;
+    #type;
+    #children;
+    #linkTarget;
+    #realpath;
+    /**
+     * This property is for compatibility with the Dirent class as of
+     * Node v20, where Dirent['parentPath'] refers to the path of the
+     * directory that was passed to readdir. For root entries, it's the path
+     * to the entry itself.
+     */
+    get parentPath() {
+        return (this.parent || this).fullpath();
+    }
+    /**
+     * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,
+     * this property refers to the *parent* path, not the path object itself.
+     *
+     * @deprecated
+     */
+    get path() {
+        return this.parentPath;
+    }
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        this.name = name;
+        this.#matchName = nocase ? normalizeNocase(name) : normalize(name);
+        this.#type = type & TYPEMASK;
+        this.nocase = nocase;
+        this.roots = roots;
+        this.root = root || this;
+        this.#children = children;
+        this.#fullpath = opts.fullpath;
+        this.#relative = opts.relative;
+        this.#relativePosix = opts.relativePosix;
+        this.parent = opts.parent;
+        if (this.parent) {
+            this.#fs = this.parent.#fs;
+        }
+        else {
+            this.#fs = fsFromOption(opts.fs);
+        }
+    }
+    /**
+     * Returns the depth of the Path object from its root.
+     *
+     * For example, a path at `/foo/bar` would have a depth of 2.
+     */
+    depth() {
+        if (this.#depth !== undefined)
+            return this.#depth;
+        if (!this.parent)
+            return (this.#depth = 0);
+        return (this.#depth = this.parent.depth() + 1);
+    }
+    /**
+     * @internal
+     */
+    childrenCache() {
+        return this.#children;
+    }
+    /**
+     * Get the Path object referenced by the string path, resolved from this Path
+     */
+    resolve(path) {
+        if (!path) {
+            return this;
+        }
+        const rootPath = this.getRootString(path);
+        const dir = path.substring(rootPath.length);
+        const dirParts = dir.split(this.splitSep);
+        const result = rootPath ?
+            this.getRoot(rootPath).#resolveParts(dirParts)
+            : this.#resolveParts(dirParts);
+        return result;
+    }
+    #resolveParts(dirParts) {
+        let p = this;
+        for (const part of dirParts) {
+            p = p.child(part);
+        }
+        return p;
+    }
+    /**
+     * Returns the cached children Path objects, if still available.  If they
+     * have fallen out of the cache, then returns an empty array, and resets the
+     * READDIR_CALLED bit, so that future calls to readdir() will require an fs
+     * lookup.
+     *
+     * @internal
+     */
+    children() {
+        const cached = this.#children.get(this);
+        if (cached) {
+            return cached;
+        }
+        const children = Object.assign([], { provisional: 0 });
+        this.#children.set(this, children);
+        this.#type &= ~READDIR_CALLED;
+        return children;
+    }
+    /**
+     * Resolves a path portion and returns or creates the child Path.
+     *
+     * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is
+     * `'..'`.
+     *
+     * This should not be called directly.  If `pathPart` contains any path
+     * separators, it will lead to unsafe undefined behavior.
+     *
+     * Use `Path.resolve()` instead.
+     *
+     * @internal
+     */
+    child(pathPart, opts) {
+        if (pathPart === '' || pathPart === '.') {
+            return this;
+        }
+        if (pathPart === '..') {
+            return this.parent || this;
+        }
+        // find the child
+        const children = this.children();
+        const name = this.nocase ? normalizeNocase(pathPart) : normalize(pathPart);
+        for (const p of children) {
+            if (p.#matchName === name) {
+                return p;
+            }
+        }
+        // didn't find it, create provisional child, since it might not
+        // actually exist.  If we know the parent isn't a dir, then
+        // in fact it CAN'T exist.
+        const s = this.parent ? this.sep : '';
+        const fullpath = this.#fullpath ? this.#fullpath + s + pathPart : undefined;
+        const pchild = this.newChild(pathPart, UNKNOWN, {
+            ...opts,
+            parent: this,
+            fullpath,
+        });
+        if (!this.canReaddir()) {
+            pchild.#type |= ENOENT;
+        }
+        // don't have to update provisional, because if we have real children,
+        // then provisional is set to children.length, otherwise a lower number
+        children.push(pchild);
+        return pchild;
+    }
+    /**
+     * The relative path from the cwd. If it does not share an ancestor with
+     * the cwd, then this ends up being equivalent to the fullpath()
+     */
+    relative() {
+        if (this.isCWD)
+            return '';
+        if (this.#relative !== undefined) {
+            return this.#relative;
+        }
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+            return (this.#relative = this.name);
+        }
+        const pv = p.relative();
+        return pv + (!pv || !p.parent ? '' : this.sep) + name;
+    }
+    /**
+     * The relative path from the cwd, using / as the path separator.
+     * If it does not share an ancestor with
+     * the cwd, then this ends up being equivalent to the fullpathPosix()
+     * On posix systems, this is identical to relative().
+     */
+    relativePosix() {
+        if (this.sep === '/')
+            return this.relative();
+        if (this.isCWD)
+            return '';
+        if (this.#relativePosix !== undefined)
+            return this.#relativePosix;
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+            return (this.#relativePosix = this.fullpathPosix());
+        }
+        const pv = p.relativePosix();
+        return pv + (!pv || !p.parent ? '' : '/') + name;
+    }
+    /**
+     * The fully resolved path string for this Path entry
+     */
+    fullpath() {
+        if (this.#fullpath !== undefined) {
+            return this.#fullpath;
+        }
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+            return (this.#fullpath = this.name);
+        }
+        const pv = p.fullpath();
+        const fp = pv + (!p.parent ? '' : this.sep) + name;
+        return (this.#fullpath = fp);
+    }
+    /**
+     * On platforms other than windows, this is identical to fullpath.
+     *
+     * On windows, this is overridden to return the forward-slash form of the
+     * full UNC path.
+     */
+    fullpathPosix() {
+        if (this.#fullpathPosix !== undefined)
+            return this.#fullpathPosix;
+        if (this.sep === '/')
+            return (this.#fullpathPosix = this.fullpath());
+        if (!this.parent) {
+            const p = this.fullpath().replace(/\\/g, '/');
+            if (/^[a-z]:\//i.test(p)) {
+                return (this.#fullpathPosix = `//?/${p}`);
+            }
+            else {
+                return (this.#fullpathPosix = p);
+            }
+        }
+        const p = this.parent;
+        const pfpp = p.fullpathPosix();
+        const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name;
+        return (this.#fullpathPosix = fpp);
+    }
+    /**
+     * Is the Path of an unknown type?
+     *
+     * Note that we might know *something* about it if there has been a previous
+     * filesystem operation, for example that it does not exist, or is not a
+     * link, or whether it has child entries.
+     */
+    isUnknown() {
+        return (this.#type & IFMT) === UNKNOWN;
+    }
+    isType(type) {
+        return this[`is${type}`]();
+    }
+    getType() {
+        return (this.isUnknown() ? 'Unknown'
+            : this.isDirectory() ? 'Directory'
+                : this.isFile() ? 'File'
+                    : this.isSymbolicLink() ? 'SymbolicLink'
+                        : this.isFIFO() ? 'FIFO'
+                            : this.isCharacterDevice() ? 'CharacterDevice'
+                                : this.isBlockDevice() ? 'BlockDevice'
+                                    : /* c8 ignore start */ this.isSocket() ? 'Socket'
+                                        : 'Unknown');
+        /* c8 ignore stop */
+    }
+    /**
+     * Is the Path a regular file?
+     */
+    isFile() {
+        return (this.#type & IFMT) === IFREG;
+    }
+    /**
+     * Is the Path a directory?
+     */
+    isDirectory() {
+        return (this.#type & IFMT) === IFDIR;
+    }
+    /**
+     * Is the path a character device?
+     */
+    isCharacterDevice() {
+        return (this.#type & IFMT) === IFCHR;
+    }
+    /**
+     * Is the path a block device?
+     */
+    isBlockDevice() {
+        return (this.#type & IFMT) === IFBLK;
+    }
+    /**
+     * Is the path a FIFO pipe?
+     */
+    isFIFO() {
+        return (this.#type & IFMT) === IFIFO;
+    }
+    /**
+     * Is the path a socket?
+     */
+    isSocket() {
+        return (this.#type & IFMT) === IFSOCK;
+    }
+    /**
+     * Is the path a symbolic link?
+     */
+    isSymbolicLink() {
+        return (this.#type & IFLNK) === IFLNK;
+    }
+    /**
+     * Return the entry if it has been subject of a successful lstat, or
+     * undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* simply
+     * mean that we haven't called lstat on it.
+     */
+    lstatCached() {
+        return this.#type & LSTAT_CALLED ? this : undefined;
+    }
+    /**
+     * Return the cached link target if the entry has been the subject of a
+     * successful readlink, or undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * readlink() has been called at some point.
+     */
+    readlinkCached() {
+        return this.#linkTarget;
+    }
+    /**
+     * Returns the cached realpath target if the entry has been the subject
+     * of a successful realpath, or undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * realpath() has been called at some point.
+     */
+    realpathCached() {
+        return this.#realpath;
+    }
+    /**
+     * Returns the cached child Path entries array if the entry has been the
+     * subject of a successful readdir(), or [] otherwise.
+     *
+     * Does not read the filesystem, so an empty array *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * readdir() has been called recently enough to still be valid.
+     */
+    readdirCached() {
+        const children = this.children();
+        return children.slice(0, children.provisional);
+    }
+    /**
+     * Return true if it's worth trying to readlink.  Ie, we don't (yet) have
+     * any indication that readlink will definitely fail.
+     *
+     * Returns false if the path is known to not be a symlink, if a previous
+     * readlink failed, or if the entry does not exist.
+     */
+    canReadlink() {
+        if (this.#linkTarget)
+            return true;
+        if (!this.parent)
+            return false;
+        // cases where it cannot possibly succeed
+        const ifmt = this.#type & IFMT;
+        return !((ifmt !== UNKNOWN && ifmt !== IFLNK) ||
+            this.#type & ENOREADLINK ||
+            this.#type & ENOENT);
+    }
+    /**
+     * Return true if readdir has previously been successfully called on this
+     * path, indicating that cachedReaddir() is likely valid.
+     */
+    calledReaddir() {
+        return !!(this.#type & READDIR_CALLED);
+    }
+    /**
+     * Returns true if the path is known to not exist. That is, a previous lstat
+     * or readdir failed to verify its existence when that would have been
+     * expected, or a parent entry was marked either enoent or enotdir.
+     */
+    isENOENT() {
+        return !!(this.#type & ENOENT);
+    }
+    /**
+     * Return true if the path is a match for the given path name.  This handles
+     * case sensitivity and unicode normalization.
+     *
+     * Note: even on case-sensitive systems, it is **not** safe to test the
+     * equality of the `.name` property to determine whether a given pathname
+     * matches, due to unicode normalization mismatches.
+     *
+     * Always use this method instead of testing the `path.name` property
+     * directly.
+     */
+    isNamed(n) {
+        return !this.nocase ?
+            this.#matchName === normalize(n)
+            : this.#matchName === normalizeNocase(n);
+    }
+    /**
+     * Return the Path object corresponding to the target of a symbolic link.
+     *
+     * If the Path is not a symbolic link, or if the readlink call fails for any
+     * reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     */
+    async readlink() {
+        const target = this.#linkTarget;
+        if (target) {
+            return target;
+        }
+        if (!this.canReadlink()) {
+            return undefined;
+        }
+        /* c8 ignore start */
+        // already covered by the canReadlink test, here for ts grumples
+        if (!this.parent) {
+            return undefined;
+        }
+        /* c8 ignore stop */
+        try {
+            const read = await this.#fs.promises.readlink(this.fullpath());
+            const linkTarget = (await this.parent.realpath())?.resolve(read);
+            if (linkTarget) {
+                return (this.#linkTarget = linkTarget);
+            }
+        }
+        catch (er) {
+            this.#readlinkFail(er.code);
+            return undefined;
+        }
+    }
+    /**
+     * Synchronous {@link PathBase.readlink}
+     */
+    readlinkSync() {
+        const target = this.#linkTarget;
+        if (target) {
+            return target;
+        }
+        if (!this.canReadlink()) {
+            return undefined;
+        }
+        /* c8 ignore start */
+        // already covered by the canReadlink test, here for ts grumples
+        if (!this.parent) {
+            return undefined;
+        }
+        /* c8 ignore stop */
+        try {
+            const read = this.#fs.readlinkSync(this.fullpath());
+            const linkTarget = this.parent.realpathSync()?.resolve(read);
+            if (linkTarget) {
+                return (this.#linkTarget = linkTarget);
+            }
+        }
+        catch (er) {
+            this.#readlinkFail(er.code);
+            return undefined;
+        }
+    }
+    #readdirSuccess(children) {
+        // succeeded, mark readdir called bit
+        this.#type |= READDIR_CALLED;
+        // mark all remaining provisional children as ENOENT
+        for (let p = children.provisional; p < children.length; p++) {
+            const c = children[p];
+            if (c)
+                c.#markENOENT();
+        }
+    }
+    #markENOENT() {
+        // mark as UNKNOWN and ENOENT
+        if (this.#type & ENOENT)
+            return;
+        this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN;
+        this.#markChildrenENOENT();
+    }
+    #markChildrenENOENT() {
+        // all children are provisional and do not exist
+        const children = this.children();
+        children.provisional = 0;
+        for (const p of children) {
+            p.#markENOENT();
+        }
+    }
+    #markENOREALPATH() {
+        this.#type |= ENOREALPATH;
+        this.#markENOTDIR();
+    }
+    // save the information when we know the entry is not a dir
+    #markENOTDIR() {
+        // entry is not a directory, so any children can't exist.
+        // this *should* be impossible, since any children created
+        // after it's been marked ENOTDIR should be marked ENOENT,
+        // so it won't even get to this point.
+        /* c8 ignore start */
+        if (this.#type & ENOTDIR)
+            return;
+        /* c8 ignore stop */
+        let t = this.#type;
+        // this could happen if we stat a dir, then delete it,
+        // then try to read it or one of its children.
+        if ((t & IFMT) === IFDIR)
+            t &= IFMT_UNKNOWN;
+        this.#type = t | ENOTDIR;
+        this.#markChildrenENOENT();
+    }
+    #readdirFail(code = '') {
+        // markENOTDIR and markENOENT also set provisional=0
+        if (code === 'ENOTDIR' || code === 'EPERM') {
+            this.#markENOTDIR();
+        }
+        else if (code === 'ENOENT') {
+            this.#markENOENT();
+        }
+        else {
+            this.children().provisional = 0;
+        }
+    }
+    #lstatFail(code = '') {
+        // Windows just raises ENOENT in this case, disable for win CI
+        /* c8 ignore start */
+        if (code === 'ENOTDIR') {
+            // already know it has a parent by this point
+            const p = this.parent;
+            p.#markENOTDIR();
+        }
+        else if (code === 'ENOENT') {
+            /* c8 ignore stop */
+            this.#markENOENT();
+        }
+    }
+    #readlinkFail(code = '') {
+        let ter = this.#type;
+        ter |= ENOREADLINK;
+        if (code === 'ENOENT')
+            ter |= ENOENT;
+        // windows gets a weird error when you try to readlink a file
+        if (code === 'EINVAL' || code === 'UNKNOWN') {
+            // exists, but not a symlink, we don't know WHAT it is, so remove
+            // all IFMT bits.
+            ter &= IFMT_UNKNOWN;
+        }
+        this.#type = ter;
+        // windows just gets ENOENT in this case.  We do cover the case,
+        // just disabled because it's impossible on Windows CI
+        /* c8 ignore start */
+        if (code === 'ENOTDIR' && this.parent) {
+            this.parent.#markENOTDIR();
+        }
+        /* c8 ignore stop */
+    }
+    #readdirAddChild(e, c) {
+        return (this.#readdirMaybePromoteChild(e, c) ||
+            this.#readdirAddNewChild(e, c));
+    }
+    #readdirAddNewChild(e, c) {
+        // alloc new entry at head, so it's never provisional
+        const type = entToType(e);
+        const child = this.newChild(e.name, type, { parent: this });
+        const ifmt = child.#type & IFMT;
+        if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {
+            child.#type |= ENOTDIR;
+        }
+        c.unshift(child);
+        c.provisional++;
+        return child;
+    }
+    #readdirMaybePromoteChild(e, c) {
+        for (let p = c.provisional; p < c.length; p++) {
+            const pchild = c[p];
+            const name = this.nocase ? normalizeNocase(e.name) : normalize(e.name);
+            if (name !== pchild.#matchName) {
+                continue;
+            }
+            return this.#readdirPromoteChild(e, pchild, p, c);
+        }
+    }
+    #readdirPromoteChild(e, p, index, c) {
+        const v = p.name;
+        // retain any other flags, but set ifmt from dirent
+        p.#type = (p.#type & IFMT_UNKNOWN) | entToType(e);
+        // case sensitivity fixing when we learn the true name.
+        if (v !== e.name)
+            p.name = e.name;
+        // just advance provisional index (potentially off the list),
+        // otherwise we have to splice/pop it out and re-insert at head
+        if (index !== c.provisional) {
+            if (index === c.length - 1)
+                c.pop();
+            else
+                c.splice(index, 1);
+            c.unshift(p);
+        }
+        c.provisional++;
+        return p;
+    }
+    /**
+     * Call lstat() on this Path, and update all known information that can be
+     * determined.
+     *
+     * Note that unlike `fs.lstat()`, the returned value does not contain some
+     * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+     * information is required, you will need to call `fs.lstat` yourself.
+     *
+     * If the Path refers to a nonexistent file, or if the lstat call fails for
+     * any reason, `undefined` is returned.  Otherwise the updated Path object is
+     * returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    async lstat() {
+        if ((this.#type & ENOENT) === 0) {
+            try {
+                this.#applyStat(await this.#fs.promises.lstat(this.fullpath()));
+                return this;
+            }
+            catch (er) {
+                this.#lstatFail(er.code);
+            }
+        }
+    }
+    /**
+     * synchronous {@link PathBase.lstat}
+     */
+    lstatSync() {
+        if ((this.#type & ENOENT) === 0) {
+            try {
+                this.#applyStat(this.#fs.lstatSync(this.fullpath()));
+                return this;
+            }
+            catch (er) {
+                this.#lstatFail(er.code);
+            }
+        }
+    }
+    #applyStat(st) {
+        const { atime, atimeMs, birthtime, birthtimeMs, blksize, blocks, ctime, ctimeMs, dev, gid, ino, mode, mtime, mtimeMs, nlink, rdev, size, uid, } = st;
+        this.#atime = atime;
+        this.#atimeMs = atimeMs;
+        this.#birthtime = birthtime;
+        this.#birthtimeMs = birthtimeMs;
+        this.#blksize = blksize;
+        this.#blocks = blocks;
+        this.#ctime = ctime;
+        this.#ctimeMs = ctimeMs;
+        this.#dev = dev;
+        this.#gid = gid;
+        this.#ino = ino;
+        this.#mode = mode;
+        this.#mtime = mtime;
+        this.#mtimeMs = mtimeMs;
+        this.#nlink = nlink;
+        this.#rdev = rdev;
+        this.#size = size;
+        this.#uid = uid;
+        const ifmt = entToType(st);
+        // retain any other flags, but set the ifmt
+        this.#type = (this.#type & IFMT_UNKNOWN) | ifmt | LSTAT_CALLED;
+        if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {
+            this.#type |= ENOTDIR;
+        }
+    }
+    #onReaddirCB = [];
+    #readdirCBInFlight = false;
+    #callOnReaddirCB(children) {
+        this.#readdirCBInFlight = false;
+        const cbs = this.#onReaddirCB.slice();
+        this.#onReaddirCB.length = 0;
+        cbs.forEach(cb => cb(null, children));
+    }
+    /**
+     * Standard node-style callback interface to get list of directory entries.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     *
+     * @param cb The callback called with (er, entries).  Note that the `er`
+     * param is somewhat extraneous, as all readdir() errors are handled and
+     * simply result in an empty set of entries being returned.
+     * @param allowZalgo Boolean indicating that immediately known results should
+     * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release
+     * zalgo at your peril, the dark pony lord is devious and unforgiving.
+     */
+    readdirCB(cb, allowZalgo = false) {
+        if (!this.canReaddir()) {
+            if (allowZalgo)
+                cb(null, []);
+            else
+                queueMicrotask(() => cb(null, []));
+            return;
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+            const c = children.slice(0, children.provisional);
+            if (allowZalgo)
+                cb(null, c);
+            else
+                queueMicrotask(() => cb(null, c));
+            return;
+        }
+        // don't have to worry about zalgo at this point.
+        this.#onReaddirCB.push(cb);
+        if (this.#readdirCBInFlight) {
+            return;
+        }
+        this.#readdirCBInFlight = true;
+        // else read the directory, fill up children
+        // de-provisionalize any provisional children.
+        const fullpath = this.fullpath();
+        this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {
+            if (er) {
+                this.#readdirFail(er.code);
+                children.provisional = 0;
+            }
+            else {
+                // if we didn't get an error, we always get entries.
+                //@ts-ignore
+                for (const e of entries) {
+                    this.#readdirAddChild(e, children);
+                }
+                this.#readdirSuccess(children);
+            }
+            this.#callOnReaddirCB(children.slice(0, children.provisional));
+            return;
+        });
+    }
+    #asyncReaddirInFlight;
+    /**
+     * Return an array of known child entries.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    async readdir() {
+        if (!this.canReaddir()) {
+            return [];
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+            return children.slice(0, children.provisional);
+        }
+        // else read the directory, fill up children
+        // de-provisionalize any provisional children.
+        const fullpath = this.fullpath();
+        if (this.#asyncReaddirInFlight) {
+            await this.#asyncReaddirInFlight;
+        }
+        else {
+            /* c8 ignore start */
+            let resolve = () => { };
+            /* c8 ignore stop */
+            this.#asyncReaddirInFlight = new Promise(res => (resolve = res));
+            try {
+                for (const e of await this.#fs.promises.readdir(fullpath, {
+                    withFileTypes: true,
+                })) {
+                    this.#readdirAddChild(e, children);
+                }
+                this.#readdirSuccess(children);
+            }
+            catch (er) {
+                this.#readdirFail(er.code);
+                children.provisional = 0;
+            }
+            this.#asyncReaddirInFlight = undefined;
+            resolve();
+        }
+        return children.slice(0, children.provisional);
+    }
+    /**
+     * synchronous {@link PathBase.readdir}
+     */
+    readdirSync() {
+        if (!this.canReaddir()) {
+            return [];
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+            return children.slice(0, children.provisional);
+        }
+        // else read the directory, fill up children
+        // de-provisionalize any provisional children.
+        const fullpath = this.fullpath();
+        try {
+            for (const e of this.#fs.readdirSync(fullpath, {
+                withFileTypes: true,
+            })) {
+                this.#readdirAddChild(e, children);
+            }
+            this.#readdirSuccess(children);
+        }
+        catch (er) {
+            this.#readdirFail(er.code);
+            children.provisional = 0;
+        }
+        return children.slice(0, children.provisional);
+    }
+    canReaddir() {
+        if (this.#type & ENOCHILD)
+            return false;
+        const ifmt = IFMT & this.#type;
+        // we always set ENOTDIR when setting IFMT, so should be impossible
+        /* c8 ignore start */
+        if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {
+            return false;
+        }
+        /* c8 ignore stop */
+        return true;
+    }
+    shouldWalk(dirs, walkFilter) {
+        return ((this.#type & IFDIR) === IFDIR &&
+            !(this.#type & ENOCHILD) &&
+            !dirs.has(this) &&
+            (!walkFilter || walkFilter(this)));
+    }
+    /**
+     * Return the Path object corresponding to path as resolved
+     * by realpath(3).
+     *
+     * If the realpath call fails for any reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     * On success, returns a Path object.
+     */
+    async realpath() {
+        if (this.#realpath)
+            return this.#realpath;
+        if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
+            return undefined;
+        try {
+            const rp = await this.#fs.promises.realpath(this.fullpath());
+            return (this.#realpath = this.resolve(rp));
+        }
+        catch (_) {
+            this.#markENOREALPATH();
+        }
+    }
+    /**
+     * Synchronous {@link realpath}
+     */
+    realpathSync() {
+        if (this.#realpath)
+            return this.#realpath;
+        if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
+            return undefined;
+        try {
+            const rp = this.#fs.realpathSync(this.fullpath());
+            return (this.#realpath = this.resolve(rp));
+        }
+        catch (_) {
+            this.#markENOREALPATH();
+        }
+    }
+    /**
+     * Internal method to mark this Path object as the scurry cwd,
+     * called by {@link PathScurry#chdir}
+     *
+     * @internal
+     */
+    [setAsCwd](oldCwd) {
+        if (oldCwd === this)
+            return;
+        oldCwd.isCWD = false;
+        this.isCWD = true;
+        const changed = new Set([]);
+        let rp = [];
+        let p = this;
+        while (p && p.parent) {
+            changed.add(p);
+            p.#relative = rp.join(this.sep);
+            p.#relativePosix = rp.join('/');
+            p = p.parent;
+            rp.push('..');
+        }
+        // now un-memoize parents of old cwd
+        p = oldCwd;
+        while (p && p.parent && !changed.has(p)) {
+            p.#relative = undefined;
+            p.#relativePosix = undefined;
+            p = p.parent;
+        }
+    }
+}
+exports.PathBase = PathBase;
+/**
+ * Path class used on win32 systems
+ *
+ * Uses `'\\'` as the path separator for returned paths, either `'\\'` or `'/'`
+ * as the path separator for parsing paths.
+ */
+class PathWin32 extends PathBase {
+    /**
+     * Separator for generating path strings.
+     */
+    sep = '\\';
+    /**
+     * Separator for parsing path strings.
+     */
+    splitSep = eitherSep;
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        super(name, type, root, roots, nocase, children, opts);
+    }
+    /**
+     * @internal
+     */
+    newChild(name, type = UNKNOWN, opts = {}) {
+        return new PathWin32(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
+    }
+    /**
+     * @internal
+     */
+    getRootString(path) {
+        return node_path_1.win32.parse(path).root;
+    }
+    /**
+     * @internal
+     */
+    getRoot(rootPath) {
+        rootPath = uncToDrive(rootPath.toUpperCase());
+        if (rootPath === this.root.name) {
+            return this.root;
+        }
+        // ok, not that one, check if it matches another we know about
+        for (const [compare, root] of Object.entries(this.roots)) {
+            if (this.sameRoot(rootPath, compare)) {
+                return (this.roots[rootPath] = root);
+            }
+        }
+        // otherwise, have to create a new one.
+        return (this.roots[rootPath] = new PathScurryWin32(rootPath, this).root);
+    }
+    /**
+     * @internal
+     */
+    sameRoot(rootPath, compare = this.root.name) {
+        // windows can (rarely) have case-sensitive filesystem, but
+        // UNC and drive letters are always case-insensitive, and canonically
+        // represented uppercase.
+        rootPath = rootPath
+            .toUpperCase()
+            .replace(/\//g, '\\')
+            .replace(uncDriveRegexp, '$1\\');
+        return rootPath === compare;
+    }
+}
+exports.PathWin32 = PathWin32;
+/**
+ * Path class used on all posix systems.
+ *
+ * Uses `'/'` as the path separator.
+ */
+class PathPosix extends PathBase {
+    /**
+     * separator for parsing path strings
+     */
+    splitSep = '/';
+    /**
+     * separator for generating path strings
+     */
+    sep = '/';
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        super(name, type, root, roots, nocase, children, opts);
+    }
+    /**
+     * @internal
+     */
+    getRootString(path) {
+        return path.startsWith('/') ? '/' : '';
+    }
+    /**
+     * @internal
+     */
+    getRoot(_rootPath) {
+        return this.root;
+    }
+    /**
+     * @internal
+     */
+    newChild(name, type = UNKNOWN, opts = {}) {
+        return new PathPosix(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
+    }
+}
+exports.PathPosix = PathPosix;
+/**
+ * The base class for all PathScurry classes, providing the interface for path
+ * resolution and filesystem operations.
+ *
+ * Typically, you should *not* instantiate this class directly, but rather one
+ * of the platform-specific classes, or the exported {@link PathScurry} which
+ * defaults to the current platform.
+ */
+class PathScurryBase {
+    /**
+     * The root Path entry for the current working directory of this Scurry
+     */
+    root;
+    /**
+     * The string path for the root of this Scurry's current working directory
+     */
+    rootPath;
+    /**
+     * A collection of all roots encountered, referenced by rootPath
+     */
+    roots;
+    /**
+     * The Path entry corresponding to this PathScurry's current working directory.
+     */
+    cwd;
+    #resolveCache;
+    #resolvePosixCache;
+    #children;
+    /**
+     * Perform path comparisons case-insensitively.
+     *
+     * Defaults true on Darwin and Windows systems, false elsewhere.
+     */
+    nocase;
+    #fs;
+    /**
+     * This class should not be instantiated directly.
+     *
+     * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry
+     *
+     * @internal
+     */
+    constructor(cwd = process.cwd(), pathImpl, sep, { nocase, childrenCacheSize = 16 * 1024, fs = defaultFS, } = {}) {
+        this.#fs = fsFromOption(fs);
+        if (cwd instanceof URL || cwd.startsWith('file://')) {
+            cwd = (0, node_url_1.fileURLToPath)(cwd);
+        }
+        // resolve and split root, and then add to the store.
+        // this is the only time we call path.resolve()
+        const cwdPath = pathImpl.resolve(cwd);
+        this.roots = Object.create(null);
+        this.rootPath = this.parseRootPath(cwdPath);
+        this.#resolveCache = new ResolveCache();
+        this.#resolvePosixCache = new ResolveCache();
+        this.#children = new ChildrenCache(childrenCacheSize);
+        const split = cwdPath.substring(this.rootPath.length).split(sep);
+        // resolve('/') leaves '', splits to [''], we don't want that.
+        if (split.length === 1 && !split[0]) {
+            split.pop();
+        }
+        /* c8 ignore start */
+        if (nocase === undefined) {
+            throw new TypeError('must provide nocase setting to PathScurryBase ctor');
+        }
+        /* c8 ignore stop */
+        this.nocase = nocase;
+        this.root = this.newRoot(this.#fs);
+        this.roots[this.rootPath] = this.root;
+        let prev = this.root;
+        let len = split.length - 1;
+        const joinSep = pathImpl.sep;
+        let abs = this.rootPath;
+        let sawFirst = false;
+        for (const part of split) {
+            const l = len--;
+            prev = prev.child(part, {
+                relative: new Array(l).fill('..').join(joinSep),
+                relativePosix: new Array(l).fill('..').join('/'),
+                fullpath: (abs += (sawFirst ? '' : joinSep) + part),
+            });
+            sawFirst = true;
+        }
+        this.cwd = prev;
+    }
+    /**
+     * Get the depth of a provided path, string, or the cwd
+     */
+    depth(path = this.cwd) {
+        if (typeof path === 'string') {
+            path = this.cwd.resolve(path);
+        }
+        return path.depth();
+    }
+    /**
+     * Return the cache of child entries.  Exposed so subclasses can create
+     * child Path objects in a platform-specific way.
+     *
+     * @internal
+     */
+    childrenCache() {
+        return this.#children;
+    }
+    /**
+     * Resolve one or more path strings to a resolved string
+     *
+     * Same interface as require('path').resolve.
+     *
+     * Much faster than path.resolve() when called multiple times for the same
+     * path, because the resolved Path objects are cached.  Much slower
+     * otherwise.
+     */
+    resolve(...paths) {
+        // first figure out the minimum number of paths we have to test
+        // we always start at cwd, but any absolutes will bump the start
+        let r = '';
+        for (let i = paths.length - 1; i >= 0; i--) {
+            const p = paths[i];
+            if (!p || p === '.')
+                continue;
+            r = r ? `${p}/${r}` : p;
+            if (this.isAbsolute(p)) {
+                break;
+            }
+        }
+        const cached = this.#resolveCache.get(r);
+        if (cached !== undefined) {
+            return cached;
+        }
+        const result = this.cwd.resolve(r).fullpath();
+        this.#resolveCache.set(r, result);
+        return result;
+    }
+    /**
+     * Resolve one or more path strings to a resolved string, returning
+     * the posix path.  Identical to .resolve() on posix systems, but on
+     * windows will return a forward-slash separated UNC path.
+     *
+     * Same interface as require('path').resolve.
+     *
+     * Much faster than path.resolve() when called multiple times for the same
+     * path, because the resolved Path objects are cached.  Much slower
+     * otherwise.
+     */
+    resolvePosix(...paths) {
+        // first figure out the minimum number of paths we have to test
+        // we always start at cwd, but any absolutes will bump the start
+        let r = '';
+        for (let i = paths.length - 1; i >= 0; i--) {
+            const p = paths[i];
+            if (!p || p === '.')
+                continue;
+            r = r ? `${p}/${r}` : p;
+            if (this.isAbsolute(p)) {
+                break;
+            }
+        }
+        const cached = this.#resolvePosixCache.get(r);
+        if (cached !== undefined) {
+            return cached;
+        }
+        const result = this.cwd.resolve(r).fullpathPosix();
+        this.#resolvePosixCache.set(r, result);
+        return result;
+    }
+    /**
+     * find the relative path from the cwd to the supplied path string or entry
+     */
+    relative(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.relative();
+    }
+    /**
+     * find the relative path from the cwd to the supplied path string or
+     * entry, using / as the path delimiter, even on Windows.
+     */
+    relativePosix(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.relativePosix();
+    }
+    /**
+     * Return the basename for the provided string or Path object
+     */
+    basename(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.name;
+    }
+    /**
+     * Return the dirname for the provided string or Path object
+     */
+    dirname(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return (entry.parent || entry).fullpath();
+    }
+    async readdir(entry = this.cwd, opts = {
+        withFileTypes: true,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes } = opts;
+        if (!entry.canReaddir()) {
+            return [];
+        }
+        else {
+            const p = await entry.readdir();
+            return withFileTypes ? p : p.map(e => e.name);
+        }
+    }
+    readdirSync(entry = this.cwd, opts = {
+        withFileTypes: true,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true } = opts;
+        if (!entry.canReaddir()) {
+            return [];
+        }
+        else if (withFileTypes) {
+            return entry.readdirSync();
+        }
+        else {
+            return entry.readdirSync().map(e => e.name);
+        }
+    }
+    /**
+     * Call lstat() on the string or Path object, and update all known
+     * information that can be determined.
+     *
+     * Note that unlike `fs.lstat()`, the returned value does not contain some
+     * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+     * information is required, you will need to call `fs.lstat` yourself.
+     *
+     * If the Path refers to a nonexistent file, or if the lstat call fails for
+     * any reason, `undefined` is returned.  Otherwise the updated Path object is
+     * returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    async lstat(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.lstat();
+    }
+    /**
+     * synchronous {@link PathScurryBase.lstat}
+     */
+    lstatSync(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.lstatSync();
+    }
+    async readlink(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            withFileTypes = entry.withFileTypes;
+            entry = this.cwd;
+        }
+        const e = await entry.readlink();
+        return withFileTypes ? e : e?.fullpath();
+    }
+    readlinkSync(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            withFileTypes = entry.withFileTypes;
+            entry = this.cwd;
+        }
+        const e = entry.readlinkSync();
+        return withFileTypes ? e : e?.fullpath();
+    }
+    async realpath(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            withFileTypes = entry.withFileTypes;
+            entry = this.cwd;
+        }
+        const e = await entry.realpath();
+        return withFileTypes ? e : e?.fullpath();
+    }
+    realpathSync(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            withFileTypes = entry.withFileTypes;
+            entry = this.cwd;
+        }
+        const e = entry.realpathSync();
+        return withFileTypes ? e : e?.fullpath();
+    }
+    async walk(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        const results = [];
+        if (!filter || filter(entry)) {
+            results.push(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = new Set();
+        const walk = (dir, cb) => {
+            dirs.add(dir);
+            dir.readdirCB((er, entries) => {
+                /* c8 ignore start */
+                if (er) {
+                    return cb(er);
+                }
+                /* c8 ignore stop */
+                let len = entries.length;
+                if (!len)
+                    return cb();
+                const next = () => {
+                    if (--len === 0) {
+                        cb();
+                    }
+                };
+                for (const e of entries) {
+                    if (!filter || filter(e)) {
+                        results.push(withFileTypes ? e : e.fullpath());
+                    }
+                    if (follow && e.isSymbolicLink()) {
+                        e.realpath()
+                            .then(r => (r?.isUnknown() ? r.lstat() : r))
+                            .then(r => r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next());
+                    }
+                    else {
+                        if (e.shouldWalk(dirs, walkFilter)) {
+                            walk(e, next);
+                        }
+                        else {
+                            next();
+                        }
+                    }
+                }
+            }, true); // zalgooooooo
+        };
+        const start = entry;
+        return new Promise((res, rej) => {
+            walk(start, er => {
+                /* c8 ignore start */
+                if (er)
+                    return rej(er);
+                /* c8 ignore stop */
+                res(results);
+            });
+        });
+    }
+    walkSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        const results = [];
+        if (!filter || filter(entry)) {
+            results.push(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = new Set([entry]);
+        for (const dir of dirs) {
+            const entries = dir.readdirSync();
+            for (const e of entries) {
+                if (!filter || filter(e)) {
+                    results.push(withFileTypes ? e : e.fullpath());
+                }
+                let r = e;
+                if (e.isSymbolicLink()) {
+                    if (!(follow && (r = e.realpathSync())))
+                        continue;
+                    if (r.isUnknown())
+                        r.lstatSync();
+                }
+                if (r.shouldWalk(dirs, walkFilter)) {
+                    dirs.add(r);
+                }
+            }
+        }
+        return results;
+    }
+    /**
+     * Support for `for await`
+     *
+     * Alias for {@link PathScurryBase.iterate}
+     *
+     * Note: As of Node 19, this is very slow, compared to other methods of
+     * walking.  Consider using {@link PathScurryBase.stream} if memory overhead
+     * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
+     */
+    [Symbol.asyncIterator]() {
+        return this.iterate();
+    }
+    iterate(entry = this.cwd, options = {}) {
+        // iterating async over the stream is significantly more performant,
+        // especially in the warm-cache scenario, because it buffers up directory
+        // entries in the background instead of waiting for a yield for each one.
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            options = entry;
+            entry = this.cwd;
+        }
+        return this.stream(entry, options)[Symbol.asyncIterator]();
+    }
+    /**
+     * Iterating over a PathScurry performs a synchronous walk.
+     *
+     * Alias for {@link PathScurryBase.iterateSync}
+     */
+    [Symbol.iterator]() {
+        return this.iterateSync();
+    }
+    *iterateSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        if (!filter || filter(entry)) {
+            yield withFileTypes ? entry : entry.fullpath();
+        }
+        const dirs = new Set([entry]);
+        for (const dir of dirs) {
+            const entries = dir.readdirSync();
+            for (const e of entries) {
+                if (!filter || filter(e)) {
+                    yield withFileTypes ? e : e.fullpath();
+                }
+                let r = e;
+                if (e.isSymbolicLink()) {
+                    if (!(follow && (r = e.realpathSync())))
+                        continue;
+                    if (r.isUnknown())
+                        r.lstatSync();
+                }
+                if (r.shouldWalk(dirs, walkFilter)) {
+                    dirs.add(r);
+                }
+            }
+        }
+    }
+    stream(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        const results = new minipass_1.Minipass({ objectMode: true });
+        if (!filter || filter(entry)) {
+            results.write(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = new Set();
+        const queue = [entry];
+        let processing = 0;
+        const process = () => {
+            let paused = false;
+            while (!paused) {
+                const dir = queue.shift();
+                if (!dir) {
+                    if (processing === 0)
+                        results.end();
+                    return;
+                }
+                processing++;
+                dirs.add(dir);
+                const onReaddir = (er, entries, didRealpaths = false) => {
+                    /* c8 ignore start */
+                    if (er)
+                        return results.emit('error', er);
+                    /* c8 ignore stop */
+                    if (follow && !didRealpaths) {
+                        const promises = [];
+                        for (const e of entries) {
+                            if (e.isSymbolicLink()) {
+                                promises.push(e
+                                    .realpath()
+                                    .then((r) => r?.isUnknown() ? r.lstat() : r));
+                            }
+                        }
+                        if (promises.length) {
+                            Promise.all(promises).then(() => onReaddir(null, entries, true));
+                            return;
+                        }
+                    }
+                    for (const e of entries) {
+                        if (e && (!filter || filter(e))) {
+                            if (!results.write(withFileTypes ? e : e.fullpath())) {
+                                paused = true;
+                            }
+                        }
+                    }
+                    processing--;
+                    for (const e of entries) {
+                        const r = e.realpathCached() || e;
+                        if (r.shouldWalk(dirs, walkFilter)) {
+                            queue.push(r);
+                        }
+                    }
+                    if (paused && !results.flowing) {
+                        results.once('drain', process);
+                    }
+                    else if (!sync) {
+                        process();
+                    }
+                };
+                // zalgo containment
+                let sync = true;
+                dir.readdirCB(onReaddir, true);
+                sync = false;
+            }
+        };
+        process();
+        return results;
+    }
+    streamSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        const results = new minipass_1.Minipass({ objectMode: true });
+        const dirs = new Set();
+        if (!filter || filter(entry)) {
+            results.write(withFileTypes ? entry : entry.fullpath());
+        }
+        const queue = [entry];
+        let processing = 0;
+        const process = () => {
+            let paused = false;
+            while (!paused) {
+                const dir = queue.shift();
+                if (!dir) {
+                    if (processing === 0)
+                        results.end();
+                    return;
+                }
+                processing++;
+                dirs.add(dir);
+                const entries = dir.readdirSync();
+                for (const e of entries) {
+                    if (!filter || filter(e)) {
+                        if (!results.write(withFileTypes ? e : e.fullpath())) {
+                            paused = true;
+                        }
+                    }
+                }
+                processing--;
+                for (const e of entries) {
+                    let r = e;
+                    if (e.isSymbolicLink()) {
+                        if (!(follow && (r = e.realpathSync())))
+                            continue;
+                        if (r.isUnknown())
+                            r.lstatSync();
+                    }
+                    if (r.shouldWalk(dirs, walkFilter)) {
+                        queue.push(r);
+                    }
+                }
+            }
+            if (paused && !results.flowing)
+                results.once('drain', process);
+        };
+        process();
+        return results;
+    }
+    chdir(path = this.cwd) {
+        const oldCwd = this.cwd;
+        this.cwd = typeof path === 'string' ? this.cwd.resolve(path) : path;
+        this.cwd[setAsCwd](oldCwd);
+    }
+}
+exports.PathScurryBase = PathScurryBase;
+/**
+ * Windows implementation of {@link PathScurryBase}
+ *
+ * Defaults to case insensitve, uses `'\\'` to generate path strings.  Uses
+ * {@link PathWin32} for Path objects.
+ */
+class PathScurryWin32 extends PathScurryBase {
+    /**
+     * separator for generating path strings
+     */
+    sep = '\\';
+    constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = true } = opts;
+        super(cwd, node_path_1.win32, '\\', { ...opts, nocase });
+        this.nocase = nocase;
+        for (let p = this.cwd; p; p = p.parent) {
+            p.nocase = this.nocase;
+        }
+    }
+    /**
+     * @internal
+     */
+    parseRootPath(dir) {
+        // if the path starts with a single separator, it's not a UNC, and we'll
+        // just get separator as the root, and driveFromUNC will return \
+        // In that case, mount \ on the root from the cwd.
+        return node_path_1.win32.parse(dir).root.toUpperCase();
+    }
+    /**
+     * @internal
+     */
+    newRoot(fs) {
+        return new PathWin32(this.rootPath, IFDIR, undefined, this.roots, this.nocase, this.childrenCache(), { fs });
+    }
+    /**
+     * Return true if the provided path string is an absolute path
+     */
+    isAbsolute(p) {
+        return (p.startsWith('/') || p.startsWith('\\') || /^[a-z]:(\/|\\)/i.test(p));
+    }
+}
+exports.PathScurryWin32 = PathScurryWin32;
+/**
+ * {@link PathScurryBase} implementation for all posix systems other than Darwin.
+ *
+ * Defaults to case-sensitive matching, uses `'/'` to generate path strings.
+ *
+ * Uses {@link PathPosix} for Path objects.
+ */
+class PathScurryPosix extends PathScurryBase {
+    /**
+     * separator for generating path strings
+     */
+    sep = '/';
+    constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = false } = opts;
+        super(cwd, node_path_1.posix, '/', { ...opts, nocase });
+        this.nocase = nocase;
+    }
+    /**
+     * @internal
+     */
+    parseRootPath(_dir) {
+        return '/';
+    }
+    /**
+     * @internal
+     */
+    newRoot(fs) {
+        return new PathPosix(this.rootPath, IFDIR, undefined, this.roots, this.nocase, this.childrenCache(), { fs });
+    }
+    /**
+     * Return true if the provided path string is an absolute path
+     */
+    isAbsolute(p) {
+        return p.startsWith('/');
+    }
+}
+exports.PathScurryPosix = PathScurryPosix;
+/**
+ * {@link PathScurryBase} implementation for Darwin (macOS) systems.
+ *
+ * Defaults to case-insensitive matching, uses `'/'` for generating path
+ * strings.
+ *
+ * Uses {@link PathPosix} for Path objects.
+ */
+class PathScurryDarwin extends PathScurryPosix {
+    constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = true } = opts;
+        super(cwd, { ...opts, nocase });
+    }
+}
+exports.PathScurryDarwin = PathScurryDarwin;
+/**
+ * Default {@link PathBase} implementation for the current platform.
+ *
+ * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.
+ */
+exports.Path = process.platform === 'win32' ? PathWin32 : PathPosix;
+/**
+ * Default {@link PathScurryBase} implementation for the current platform.
+ *
+ * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on
+ * Darwin (macOS) systems, {@link PathScurryPosix} on all others.
+ */
+exports.PathScurry = process.platform === 'win32' ? PathScurryWin32
+    : process.platform === 'darwin' ? PathScurryDarwin
+        : PathScurryPosix;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/path-scurry/dist/commonjs/index.js.map b/node_modules/path-scurry/dist/commonjs/index.js.map
new file mode 100644
index 00000000..f66feb36
--- /dev/null
+++ b/node_modules/path-scurry/dist/commonjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { LRUCache } from 'lru-cache'\nimport { posix, win32 } from 'node:path'\n\nimport { fileURLToPath } from 'node:url'\n\nimport {\n  lstatSync,\n  readdir as readdirCB,\n  readdirSync,\n  readlinkSync,\n  realpathSync as rps,\n} from 'fs'\nimport * as actualFS from 'node:fs'\n\nconst realpathSync = rps.native\n// TODO: test perf of fs/promises realpath vs realpathCB,\n// since the promises one uses realpath.native\n\nimport { lstat, readdir, readlink, realpath } from 'node:fs/promises'\n\nimport { Minipass } from 'minipass'\nimport type { Dirent, Stats } from 'node:fs'\n\n/**\n * An object that will be used to override the default `fs`\n * methods.  Any methods that are not overridden will use Node's\n * built-in implementations.\n *\n * - lstatSync\n * - readdir (callback `withFileTypes` Dirent variant, used for\n *   readdirCB and most walks)\n * - readdirSync\n * - readlinkSync\n * - realpathSync\n * - promises: Object containing the following async methods:\n *   - lstat\n *   - readdir (Dirent variant only)\n *   - readlink\n *   - realpath\n */\nexport interface FSOption {\n  lstatSync?: (path: string) => Stats\n  readdir?: (\n    path: string,\n    options: { withFileTypes: true },\n    cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any,\n  ) => void\n  readdirSync?: (\n    path: string,\n    options: { withFileTypes: true },\n  ) => Dirent[]\n  readlinkSync?: (path: string) => string\n  realpathSync?: (path: string) => string\n  promises?: {\n    lstat?: (path: string) => Promise\n    readdir?: (\n      path: string,\n      options: { withFileTypes: true },\n    ) => Promise\n    readlink?: (path: string) => Promise\n    realpath?: (path: string) => Promise\n    [k: string]: any\n  }\n  [k: string]: any\n}\n\ninterface FSValue {\n  lstatSync: (path: string) => Stats\n  readdir: (\n    path: string,\n    options: { withFileTypes: true },\n    cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any,\n  ) => void\n  readdirSync: (path: string, options: { withFileTypes: true }) => Dirent[]\n  readlinkSync: (path: string) => string\n  realpathSync: (path: string) => string\n  promises: {\n    lstat: (path: string) => Promise\n    readdir: (\n      path: string,\n      options: { withFileTypes: true },\n    ) => Promise\n    readlink: (path: string) => Promise\n    realpath: (path: string) => Promise\n    [k: string]: any\n  }\n  [k: string]: any\n}\n\nconst defaultFS: FSValue = {\n  lstatSync,\n  readdir: readdirCB,\n  readdirSync,\n  readlinkSync,\n  realpathSync,\n  promises: {\n    lstat,\n    readdir,\n    readlink,\n    realpath,\n  },\n}\n\n// if they just gave us require('fs') then use our default\nconst fsFromOption = (fsOption?: FSOption): FSValue =>\n  !fsOption || fsOption === defaultFS || fsOption === actualFS ?\n    defaultFS\n  : {\n      ...defaultFS,\n      ...fsOption,\n      promises: {\n        ...defaultFS.promises,\n        ...(fsOption.promises || {}),\n      },\n    }\n\n// turn something like //?/c:/ into c:\\\nconst uncDriveRegexp = /^\\\\\\\\\\?\\\\([a-z]:)\\\\?$/i\nconst uncToDrive = (rootPath: string): string =>\n  rootPath.replace(/\\//g, '\\\\').replace(uncDriveRegexp, '$1\\\\')\n\n// windows paths are separated by either / or \\\nconst eitherSep = /[\\\\\\/]/\n\nconst UNKNOWN = 0 // may not even exist, for all we know\nconst IFIFO = 0b0001\nconst IFCHR = 0b0010\nconst IFDIR = 0b0100\nconst IFBLK = 0b0110\nconst IFREG = 0b1000\nconst IFLNK = 0b1010\nconst IFSOCK = 0b1100\nconst IFMT = 0b1111\n\nexport type Type =\n  | 'Unknown'\n  | 'FIFO'\n  | 'CharacterDevice'\n  | 'Directory'\n  | 'BlockDevice'\n  | 'File'\n  | 'SymbolicLink'\n  | 'Socket'\n\n// mask to unset low 4 bits\nconst IFMT_UNKNOWN = ~IFMT\n\n// set after successfully calling readdir() and getting entries.\nconst READDIR_CALLED = 0b0000_0001_0000\n// set after a successful lstat()\nconst LSTAT_CALLED = 0b0000_0010_0000\n// set if an entry (or one of its parents) is definitely not a dir\nconst ENOTDIR = 0b0000_0100_0000\n// set if an entry (or one of its parents) does not exist\n// (can also be set on lstat errors like EACCES or ENAMETOOLONG)\nconst ENOENT = 0b0000_1000_0000\n// cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK\n// set if we fail to readlink\nconst ENOREADLINK = 0b0001_0000_0000\n// set if we know realpath() will fail\nconst ENOREALPATH = 0b0010_0000_0000\n\nconst ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH\nconst TYPEMASK = 0b0011_1111_1111\n\nconst entToType = (s: Dirent | Stats) =>\n  s.isFile() ? IFREG\n  : s.isDirectory() ? IFDIR\n  : s.isSymbolicLink() ? IFLNK\n  : s.isCharacterDevice() ? IFCHR\n  : s.isBlockDevice() ? IFBLK\n  : s.isSocket() ? IFSOCK\n  : s.isFIFO() ? IFIFO\n  : UNKNOWN\n\n// normalize unicode path names\nconst normalizeCache = new Map()\nconst normalize = (s: string) => {\n  const c = normalizeCache.get(s)\n  if (c) return c\n  const n = s.normalize('NFKD')\n  normalizeCache.set(s, n)\n  return n\n}\n\nconst normalizeNocaseCache = new Map()\nconst normalizeNocase = (s: string) => {\n  const c = normalizeNocaseCache.get(s)\n  if (c) return c\n  const n = normalize(s.toLowerCase())\n  normalizeNocaseCache.set(s, n)\n  return n\n}\n\n/**\n * Options that may be provided to the Path constructor\n */\nexport interface PathOpts {\n  fullpath?: string\n  relative?: string\n  relativePosix?: string\n  parent?: PathBase\n  /**\n   * See {@link FSOption}\n   */\n  fs?: FSOption\n}\n\n/**\n * An LRUCache for storing resolved path strings or Path objects.\n * @internal\n */\nexport class ResolveCache extends LRUCache {\n  constructor() {\n    super({ max: 256 })\n  }\n}\n\n// In order to prevent blowing out the js heap by allocating hundreds of\n// thousands of Path entries when walking extremely large trees, the \"children\"\n// in this tree are represented by storing an array of Path entries in an\n// LRUCache, indexed by the parent.  At any time, Path.children() may return an\n// empty array, indicating that it doesn't know about any of its children, and\n// thus has to rebuild that cache.  This is fine, it just means that we don't\n// benefit as much from having the cached entries, but huge directory walks\n// don't blow out the stack, and smaller ones are still as fast as possible.\n//\n//It does impose some complexity when building up the readdir data, because we\n//need to pass a reference to the children array that we started with.\n\n/**\n * an LRUCache for storing child entries.\n * @internal\n */\nexport class ChildrenCache extends LRUCache {\n  constructor(maxSize: number = 16 * 1024) {\n    super({\n      maxSize,\n      // parent + children\n      sizeCalculation: a => a.length + 1,\n    })\n  }\n}\n\n/**\n * Array of Path objects, plus a marker indicating the first provisional entry\n *\n * @internal\n */\nexport type Children = PathBase[] & { provisional: number }\n\nconst setAsCwd = Symbol('PathScurry setAsCwd')\n\n/**\n * Path objects are sort of like a super-powered\n * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}\n *\n * Each one represents a single filesystem entry on disk, which may or may not\n * exist. It includes methods for reading various types of information via\n * lstat, readlink, and readdir, and caches all information to the greatest\n * degree possible.\n *\n * Note that fs operations that would normally throw will instead return an\n * \"empty\" value. This is in order to prevent excessive overhead from error\n * stack traces.\n */\nexport abstract class PathBase implements Dirent {\n  /**\n   * the basename of this path\n   *\n   * **Important**: *always* test the path name against any test string\n   * usingthe {@link isNamed} method, and not by directly comparing this\n   * string. Otherwise, unicode path strings that the system sees as identical\n   * will not be properly treated as the same path, leading to incorrect\n   * behavior and possible security issues.\n   */\n  name: string\n  /**\n   * the Path entry corresponding to the path root.\n   *\n   * @internal\n   */\n  root: PathBase\n  /**\n   * All roots found within the current PathScurry family\n   *\n   * @internal\n   */\n  roots: { [k: string]: PathBase }\n  /**\n   * a reference to the parent path, or undefined in the case of root entries\n   *\n   * @internal\n   */\n  parent?: PathBase\n  /**\n   * boolean indicating whether paths are compared case-insensitively\n   * @internal\n   */\n  nocase: boolean\n\n  /**\n   * boolean indicating that this path is the current working directory\n   * of the PathScurry collection that contains it.\n   */\n  isCWD: boolean = false\n\n  /**\n   * the string or regexp used to split paths. On posix, it is `'/'`, and on\n   * windows it is a RegExp matching either `'/'` or `'\\\\'`\n   */\n  abstract splitSep: string | RegExp\n  /**\n   * The path separator string to use when joining paths\n   */\n  abstract sep: string\n\n  // potential default fs override\n  #fs: FSValue\n\n  // Stats fields\n  #dev?: number\n  get dev() {\n    return this.#dev\n  }\n  #mode?: number\n  get mode() {\n    return this.#mode\n  }\n  #nlink?: number\n  get nlink() {\n    return this.#nlink\n  }\n  #uid?: number\n  get uid() {\n    return this.#uid\n  }\n  #gid?: number\n  get gid() {\n    return this.#gid\n  }\n  #rdev?: number\n  get rdev() {\n    return this.#rdev\n  }\n  #blksize?: number\n  get blksize() {\n    return this.#blksize\n  }\n  #ino?: number\n  get ino() {\n    return this.#ino\n  }\n  #size?: number\n  get size() {\n    return this.#size\n  }\n  #blocks?: number\n  get blocks() {\n    return this.#blocks\n  }\n  #atimeMs?: number\n  get atimeMs() {\n    return this.#atimeMs\n  }\n  #mtimeMs?: number\n  get mtimeMs() {\n    return this.#mtimeMs\n  }\n  #ctimeMs?: number\n  get ctimeMs() {\n    return this.#ctimeMs\n  }\n  #birthtimeMs?: number\n  get birthtimeMs() {\n    return this.#birthtimeMs\n  }\n  #atime?: Date\n  get atime() {\n    return this.#atime\n  }\n  #mtime?: Date\n  get mtime() {\n    return this.#mtime\n  }\n  #ctime?: Date\n  get ctime() {\n    return this.#ctime\n  }\n  #birthtime?: Date\n  get birthtime() {\n    return this.#birthtime\n  }\n\n  #matchName: string\n  #depth?: number\n  #fullpath?: string\n  #fullpathPosix?: string\n  #relative?: string\n  #relativePosix?: string\n  #type: number\n  #children: ChildrenCache\n  #linkTarget?: PathBase\n  #realpath?: PathBase\n\n  /**\n   * This property is for compatibility with the Dirent class as of\n   * Node v20, where Dirent['parentPath'] refers to the path of the\n   * directory that was passed to readdir. For root entries, it's the path\n   * to the entry itself.\n   */\n  get parentPath(): string {\n    return (this.parent || this).fullpath()\n  }\n\n  /**\n   * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,\n   * this property refers to the *parent* path, not the path object itself.\n   *\n   * @deprecated\n   */\n  get path(): string {\n    return this.parentPath\n  }\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    this.name = name\n    this.#matchName = nocase ? normalizeNocase(name) : normalize(name)\n    this.#type = type & TYPEMASK\n    this.nocase = nocase\n    this.roots = roots\n    this.root = root || this\n    this.#children = children\n    this.#fullpath = opts.fullpath\n    this.#relative = opts.relative\n    this.#relativePosix = opts.relativePosix\n    this.parent = opts.parent\n    if (this.parent) {\n      this.#fs = this.parent.#fs\n    } else {\n      this.#fs = fsFromOption(opts.fs)\n    }\n  }\n\n  /**\n   * Returns the depth of the Path object from its root.\n   *\n   * For example, a path at `/foo/bar` would have a depth of 2.\n   */\n  depth(): number {\n    if (this.#depth !== undefined) return this.#depth\n    if (!this.parent) return (this.#depth = 0)\n    return (this.#depth = this.parent.depth() + 1)\n  }\n\n  /**\n   * @internal\n   */\n  abstract getRootString(path: string): string\n  /**\n   * @internal\n   */\n  abstract getRoot(rootPath: string): PathBase\n  /**\n   * @internal\n   */\n  abstract newChild(name: string, type?: number, opts?: PathOpts): PathBase\n\n  /**\n   * @internal\n   */\n  childrenCache() {\n    return this.#children\n  }\n\n  /**\n   * Get the Path object referenced by the string path, resolved from this Path\n   */\n  resolve(path?: string): PathBase {\n    if (!path) {\n      return this\n    }\n    const rootPath = this.getRootString(path)\n    const dir = path.substring(rootPath.length)\n    const dirParts = dir.split(this.splitSep)\n    const result: PathBase =\n      rootPath ?\n        this.getRoot(rootPath).#resolveParts(dirParts)\n      : this.#resolveParts(dirParts)\n    return result\n  }\n\n  #resolveParts(dirParts: string[]) {\n    let p: PathBase = this\n    for (const part of dirParts) {\n      p = p.child(part)\n    }\n    return p\n  }\n\n  /**\n   * Returns the cached children Path objects, if still available.  If they\n   * have fallen out of the cache, then returns an empty array, and resets the\n   * READDIR_CALLED bit, so that future calls to readdir() will require an fs\n   * lookup.\n   *\n   * @internal\n   */\n  children(): Children {\n    const cached = this.#children.get(this)\n    if (cached) {\n      return cached\n    }\n    const children: Children = Object.assign([], { provisional: 0 })\n    this.#children.set(this, children)\n    this.#type &= ~READDIR_CALLED\n    return children\n  }\n\n  /**\n   * Resolves a path portion and returns or creates the child Path.\n   *\n   * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is\n   * `'..'`.\n   *\n   * This should not be called directly.  If `pathPart` contains any path\n   * separators, it will lead to unsafe undefined behavior.\n   *\n   * Use `Path.resolve()` instead.\n   *\n   * @internal\n   */\n  child(pathPart: string, opts?: PathOpts): PathBase {\n    if (pathPart === '' || pathPart === '.') {\n      return this\n    }\n    if (pathPart === '..') {\n      return this.parent || this\n    }\n\n    // find the child\n    const children = this.children()\n    const name =\n      this.nocase ? normalizeNocase(pathPart) : normalize(pathPart)\n    for (const p of children) {\n      if (p.#matchName === name) {\n        return p\n      }\n    }\n\n    // didn't find it, create provisional child, since it might not\n    // actually exist.  If we know the parent isn't a dir, then\n    // in fact it CAN'T exist.\n    const s = this.parent ? this.sep : ''\n    const fullpath =\n      this.#fullpath ? this.#fullpath + s + pathPart : undefined\n    const pchild = this.newChild(pathPart, UNKNOWN, {\n      ...opts,\n      parent: this,\n      fullpath,\n    })\n\n    if (!this.canReaddir()) {\n      pchild.#type |= ENOENT\n    }\n\n    // don't have to update provisional, because if we have real children,\n    // then provisional is set to children.length, otherwise a lower number\n    children.push(pchild)\n    return pchild\n  }\n\n  /**\n   * The relative path from the cwd. If it does not share an ancestor with\n   * the cwd, then this ends up being equivalent to the fullpath()\n   */\n  relative(): string {\n    if (this.isCWD) return ''\n    if (this.#relative !== undefined) {\n      return this.#relative\n    }\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#relative = this.name)\n    }\n    const pv = p.relative()\n    return pv + (!pv || !p.parent ? '' : this.sep) + name\n  }\n\n  /**\n   * The relative path from the cwd, using / as the path separator.\n   * If it does not share an ancestor with\n   * the cwd, then this ends up being equivalent to the fullpathPosix()\n   * On posix systems, this is identical to relative().\n   */\n  relativePosix(): string {\n    if (this.sep === '/') return this.relative()\n    if (this.isCWD) return ''\n    if (this.#relativePosix !== undefined) return this.#relativePosix\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#relativePosix = this.fullpathPosix())\n    }\n    const pv = p.relativePosix()\n    return pv + (!pv || !p.parent ? '' : '/') + name\n  }\n\n  /**\n   * The fully resolved path string for this Path entry\n   */\n  fullpath(): string {\n    if (this.#fullpath !== undefined) {\n      return this.#fullpath\n    }\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#fullpath = this.name)\n    }\n    const pv = p.fullpath()\n    const fp = pv + (!p.parent ? '' : this.sep) + name\n    return (this.#fullpath = fp)\n  }\n\n  /**\n   * On platforms other than windows, this is identical to fullpath.\n   *\n   * On windows, this is overridden to return the forward-slash form of the\n   * full UNC path.\n   */\n  fullpathPosix(): string {\n    if (this.#fullpathPosix !== undefined) return this.#fullpathPosix\n    if (this.sep === '/') return (this.#fullpathPosix = this.fullpath())\n    if (!this.parent) {\n      const p = this.fullpath().replace(/\\\\/g, '/')\n      if (/^[a-z]:\\//i.test(p)) {\n        return (this.#fullpathPosix = `//?/${p}`)\n      } else {\n        return (this.#fullpathPosix = p)\n      }\n    }\n    const p = this.parent\n    const pfpp = p.fullpathPosix()\n    const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name\n    return (this.#fullpathPosix = fpp)\n  }\n\n  /**\n   * Is the Path of an unknown type?\n   *\n   * Note that we might know *something* about it if there has been a previous\n   * filesystem operation, for example that it does not exist, or is not a\n   * link, or whether it has child entries.\n   */\n  isUnknown(): boolean {\n    return (this.#type & IFMT) === UNKNOWN\n  }\n\n  isType(type: Type): boolean {\n    return this[`is${type}`]()\n  }\n\n  getType(): Type {\n    return (\n      this.isUnknown() ? 'Unknown'\n      : this.isDirectory() ? 'Directory'\n      : this.isFile() ? 'File'\n      : this.isSymbolicLink() ? 'SymbolicLink'\n      : this.isFIFO() ? 'FIFO'\n      : this.isCharacterDevice() ? 'CharacterDevice'\n      : this.isBlockDevice() ? 'BlockDevice'\n      : /* c8 ignore start */ this.isSocket() ? 'Socket'\n      : 'Unknown'\n    )\n    /* c8 ignore stop */\n  }\n\n  /**\n   * Is the Path a regular file?\n   */\n  isFile(): boolean {\n    return (this.#type & IFMT) === IFREG\n  }\n\n  /**\n   * Is the Path a directory?\n   */\n  isDirectory(): boolean {\n    return (this.#type & IFMT) === IFDIR\n  }\n\n  /**\n   * Is the path a character device?\n   */\n  isCharacterDevice(): boolean {\n    return (this.#type & IFMT) === IFCHR\n  }\n\n  /**\n   * Is the path a block device?\n   */\n  isBlockDevice(): boolean {\n    return (this.#type & IFMT) === IFBLK\n  }\n\n  /**\n   * Is the path a FIFO pipe?\n   */\n  isFIFO(): boolean {\n    return (this.#type & IFMT) === IFIFO\n  }\n\n  /**\n   * Is the path a socket?\n   */\n  isSocket(): boolean {\n    return (this.#type & IFMT) === IFSOCK\n  }\n\n  /**\n   * Is the path a symbolic link?\n   */\n  isSymbolicLink(): boolean {\n    return (this.#type & IFLNK) === IFLNK\n  }\n\n  /**\n   * Return the entry if it has been subject of a successful lstat, or\n   * undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* simply\n   * mean that we haven't called lstat on it.\n   */\n  lstatCached(): PathBase | undefined {\n    return this.#type & LSTAT_CALLED ? this : undefined\n  }\n\n  /**\n   * Return the cached link target if the entry has been the subject of a\n   * successful readlink, or undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * readlink() has been called at some point.\n   */\n  readlinkCached(): PathBase | undefined {\n    return this.#linkTarget\n  }\n\n  /**\n   * Returns the cached realpath target if the entry has been the subject\n   * of a successful realpath, or undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * realpath() has been called at some point.\n   */\n  realpathCached(): PathBase | undefined {\n    return this.#realpath\n  }\n\n  /**\n   * Returns the cached child Path entries array if the entry has been the\n   * subject of a successful readdir(), or [] otherwise.\n   *\n   * Does not read the filesystem, so an empty array *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * readdir() has been called recently enough to still be valid.\n   */\n  readdirCached(): PathBase[] {\n    const children = this.children()\n    return children.slice(0, children.provisional)\n  }\n\n  /**\n   * Return true if it's worth trying to readlink.  Ie, we don't (yet) have\n   * any indication that readlink will definitely fail.\n   *\n   * Returns false if the path is known to not be a symlink, if a previous\n   * readlink failed, or if the entry does not exist.\n   */\n  canReadlink(): boolean {\n    if (this.#linkTarget) return true\n    if (!this.parent) return false\n    // cases where it cannot possibly succeed\n    const ifmt = this.#type & IFMT\n    return !(\n      (ifmt !== UNKNOWN && ifmt !== IFLNK) ||\n      this.#type & ENOREADLINK ||\n      this.#type & ENOENT\n    )\n  }\n\n  /**\n   * Return true if readdir has previously been successfully called on this\n   * path, indicating that cachedReaddir() is likely valid.\n   */\n  calledReaddir(): boolean {\n    return !!(this.#type & READDIR_CALLED)\n  }\n\n  /**\n   * Returns true if the path is known to not exist. That is, a previous lstat\n   * or readdir failed to verify its existence when that would have been\n   * expected, or a parent entry was marked either enoent or enotdir.\n   */\n  isENOENT(): boolean {\n    return !!(this.#type & ENOENT)\n  }\n\n  /**\n   * Return true if the path is a match for the given path name.  This handles\n   * case sensitivity and unicode normalization.\n   *\n   * Note: even on case-sensitive systems, it is **not** safe to test the\n   * equality of the `.name` property to determine whether a given pathname\n   * matches, due to unicode normalization mismatches.\n   *\n   * Always use this method instead of testing the `path.name` property\n   * directly.\n   */\n  isNamed(n: string): boolean {\n    return !this.nocase ?\n        this.#matchName === normalize(n)\n      : this.#matchName === normalizeNocase(n)\n  }\n\n  /**\n   * Return the Path object corresponding to the target of a symbolic link.\n   *\n   * If the Path is not a symbolic link, or if the readlink call fails for any\n   * reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   */\n  async readlink(): Promise {\n    const target = this.#linkTarget\n    if (target) {\n      return target\n    }\n    if (!this.canReadlink()) {\n      return undefined\n    }\n    /* c8 ignore start */\n    // already covered by the canReadlink test, here for ts grumples\n    if (!this.parent) {\n      return undefined\n    }\n    /* c8 ignore stop */\n    try {\n      const read = await this.#fs.promises.readlink(this.fullpath())\n      const linkTarget = (await this.parent.realpath())?.resolve(read)\n      if (linkTarget) {\n        return (this.#linkTarget = linkTarget)\n      }\n    } catch (er) {\n      this.#readlinkFail((er as NodeJS.ErrnoException).code)\n      return undefined\n    }\n  }\n\n  /**\n   * Synchronous {@link PathBase.readlink}\n   */\n  readlinkSync(): PathBase | undefined {\n    const target = this.#linkTarget\n    if (target) {\n      return target\n    }\n    if (!this.canReadlink()) {\n      return undefined\n    }\n    /* c8 ignore start */\n    // already covered by the canReadlink test, here for ts grumples\n    if (!this.parent) {\n      return undefined\n    }\n    /* c8 ignore stop */\n    try {\n      const read = this.#fs.readlinkSync(this.fullpath())\n      const linkTarget = this.parent.realpathSync()?.resolve(read)\n      if (linkTarget) {\n        return (this.#linkTarget = linkTarget)\n      }\n    } catch (er) {\n      this.#readlinkFail((er as NodeJS.ErrnoException).code)\n      return undefined\n    }\n  }\n\n  #readdirSuccess(children: Children) {\n    // succeeded, mark readdir called bit\n    this.#type |= READDIR_CALLED\n    // mark all remaining provisional children as ENOENT\n    for (let p = children.provisional; p < children.length; p++) {\n      const c = children[p]\n      if (c) c.#markENOENT()\n    }\n  }\n\n  #markENOENT() {\n    // mark as UNKNOWN and ENOENT\n    if (this.#type & ENOENT) return\n    this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN\n    this.#markChildrenENOENT()\n  }\n\n  #markChildrenENOENT() {\n    // all children are provisional and do not exist\n    const children = this.children()\n    children.provisional = 0\n    for (const p of children) {\n      p.#markENOENT()\n    }\n  }\n\n  #markENOREALPATH() {\n    this.#type |= ENOREALPATH\n    this.#markENOTDIR()\n  }\n\n  // save the information when we know the entry is not a dir\n  #markENOTDIR() {\n    // entry is not a directory, so any children can't exist.\n    // this *should* be impossible, since any children created\n    // after it's been marked ENOTDIR should be marked ENOENT,\n    // so it won't even get to this point.\n    /* c8 ignore start */\n    if (this.#type & ENOTDIR) return\n    /* c8 ignore stop */\n    let t = this.#type\n    // this could happen if we stat a dir, then delete it,\n    // then try to read it or one of its children.\n    if ((t & IFMT) === IFDIR) t &= IFMT_UNKNOWN\n    this.#type = t | ENOTDIR\n    this.#markChildrenENOENT()\n  }\n\n  #readdirFail(code: string = '') {\n    // markENOTDIR and markENOENT also set provisional=0\n    if (code === 'ENOTDIR' || code === 'EPERM') {\n      this.#markENOTDIR()\n    } else if (code === 'ENOENT') {\n      this.#markENOENT()\n    } else {\n      this.children().provisional = 0\n    }\n  }\n\n  #lstatFail(code: string = '') {\n    // Windows just raises ENOENT in this case, disable for win CI\n    /* c8 ignore start */\n    if (code === 'ENOTDIR') {\n      // already know it has a parent by this point\n      const p = this.parent as PathBase\n      p.#markENOTDIR()\n    } else if (code === 'ENOENT') {\n      /* c8 ignore stop */\n      this.#markENOENT()\n    }\n  }\n\n  #readlinkFail(code: string = '') {\n    let ter = this.#type\n    ter |= ENOREADLINK\n    if (code === 'ENOENT') ter |= ENOENT\n    // windows gets a weird error when you try to readlink a file\n    if (code === 'EINVAL' || code === 'UNKNOWN') {\n      // exists, but not a symlink, we don't know WHAT it is, so remove\n      // all IFMT bits.\n      ter &= IFMT_UNKNOWN\n    }\n    this.#type = ter\n    // windows just gets ENOENT in this case.  We do cover the case,\n    // just disabled because it's impossible on Windows CI\n    /* c8 ignore start */\n    if (code === 'ENOTDIR' && this.parent) {\n      this.parent.#markENOTDIR()\n    }\n    /* c8 ignore stop */\n  }\n\n  #readdirAddChild(e: Dirent, c: Children) {\n    return (\n      this.#readdirMaybePromoteChild(e, c) ||\n      this.#readdirAddNewChild(e, c)\n    )\n  }\n\n  #readdirAddNewChild(e: Dirent, c: Children): PathBase {\n    // alloc new entry at head, so it's never provisional\n    const type = entToType(e)\n    const child = this.newChild(e.name, type, { parent: this })\n    const ifmt = child.#type & IFMT\n    if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {\n      child.#type |= ENOTDIR\n    }\n    c.unshift(child)\n    c.provisional++\n    return child\n  }\n\n  #readdirMaybePromoteChild(e: Dirent, c: Children): PathBase | undefined {\n    for (let p = c.provisional; p < c.length; p++) {\n      const pchild = c[p]\n      const name =\n        this.nocase ? normalizeNocase(e.name) : normalize(e.name)\n      if (name !== pchild!.#matchName) {\n        continue\n      }\n\n      return this.#readdirPromoteChild(e, pchild!, p, c)\n    }\n  }\n\n  #readdirPromoteChild(\n    e: Dirent,\n    p: PathBase,\n    index: number,\n    c: Children,\n  ): PathBase {\n    const v = p.name\n    // retain any other flags, but set ifmt from dirent\n    p.#type = (p.#type & IFMT_UNKNOWN) | entToType(e)\n    // case sensitivity fixing when we learn the true name.\n    if (v !== e.name) p.name = e.name\n\n    // just advance provisional index (potentially off the list),\n    // otherwise we have to splice/pop it out and re-insert at head\n    if (index !== c.provisional) {\n      if (index === c.length - 1) c.pop()\n      else c.splice(index, 1)\n      c.unshift(p)\n    }\n    c.provisional++\n    return p\n  }\n\n  /**\n   * Call lstat() on this Path, and update all known information that can be\n   * determined.\n   *\n   * Note that unlike `fs.lstat()`, the returned value does not contain some\n   * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that\n   * information is required, you will need to call `fs.lstat` yourself.\n   *\n   * If the Path refers to a nonexistent file, or if the lstat call fails for\n   * any reason, `undefined` is returned.  Otherwise the updated Path object is\n   * returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async lstat(): Promise {\n    if ((this.#type & ENOENT) === 0) {\n      try {\n        this.#applyStat(await this.#fs.promises.lstat(this.fullpath()))\n        return this\n      } catch (er) {\n        this.#lstatFail((er as NodeJS.ErrnoException).code)\n      }\n    }\n  }\n\n  /**\n   * synchronous {@link PathBase.lstat}\n   */\n  lstatSync(): PathBase | undefined {\n    if ((this.#type & ENOENT) === 0) {\n      try {\n        this.#applyStat(this.#fs.lstatSync(this.fullpath()))\n        return this\n      } catch (er) {\n        this.#lstatFail((er as NodeJS.ErrnoException).code)\n      }\n    }\n  }\n\n  #applyStat(st: Stats) {\n    const {\n      atime,\n      atimeMs,\n      birthtime,\n      birthtimeMs,\n      blksize,\n      blocks,\n      ctime,\n      ctimeMs,\n      dev,\n      gid,\n      ino,\n      mode,\n      mtime,\n      mtimeMs,\n      nlink,\n      rdev,\n      size,\n      uid,\n    } = st\n    this.#atime = atime\n    this.#atimeMs = atimeMs\n    this.#birthtime = birthtime\n    this.#birthtimeMs = birthtimeMs\n    this.#blksize = blksize\n    this.#blocks = blocks\n    this.#ctime = ctime\n    this.#ctimeMs = ctimeMs\n    this.#dev = dev\n    this.#gid = gid\n    this.#ino = ino\n    this.#mode = mode\n    this.#mtime = mtime\n    this.#mtimeMs = mtimeMs\n    this.#nlink = nlink\n    this.#rdev = rdev\n    this.#size = size\n    this.#uid = uid\n    const ifmt = entToType(st)\n    // retain any other flags, but set the ifmt\n    this.#type = (this.#type & IFMT_UNKNOWN) | ifmt | LSTAT_CALLED\n    if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {\n      this.#type |= ENOTDIR\n    }\n  }\n\n  #onReaddirCB: ((\n    er: NodeJS.ErrnoException | null,\n    entries: Path[],\n  ) => any)[] = []\n  #readdirCBInFlight: boolean = false\n  #callOnReaddirCB(children: Path[]) {\n    this.#readdirCBInFlight = false\n    const cbs = this.#onReaddirCB.slice()\n    this.#onReaddirCB.length = 0\n    cbs.forEach(cb => cb(null, children))\n  }\n\n  /**\n   * Standard node-style callback interface to get list of directory entries.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   *\n   * @param cb The callback called with (er, entries).  Note that the `er`\n   * param is somewhat extraneous, as all readdir() errors are handled and\n   * simply result in an empty set of entries being returned.\n   * @param allowZalgo Boolean indicating that immediately known results should\n   * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release\n   * zalgo at your peril, the dark pony lord is devious and unforgiving.\n   */\n  readdirCB(\n    cb: (er: NodeJS.ErrnoException | null, entries: PathBase[]) => any,\n    allowZalgo: boolean = false,\n  ): void {\n    if (!this.canReaddir()) {\n      if (allowZalgo) cb(null, [])\n      else queueMicrotask(() => cb(null, []))\n      return\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      const c = children.slice(0, children.provisional)\n      if (allowZalgo) cb(null, c)\n      else queueMicrotask(() => cb(null, c))\n      return\n    }\n\n    // don't have to worry about zalgo at this point.\n    this.#onReaddirCB.push(cb)\n    if (this.#readdirCBInFlight) {\n      return\n    }\n    this.#readdirCBInFlight = true\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {\n      if (er) {\n        this.#readdirFail((er as NodeJS.ErrnoException).code)\n        children.provisional = 0\n      } else {\n        // if we didn't get an error, we always get entries.\n        //@ts-ignore\n        for (const e of entries) {\n          this.#readdirAddChild(e, children)\n        }\n        this.#readdirSuccess(children)\n      }\n      this.#callOnReaddirCB(children.slice(0, children.provisional))\n      return\n    })\n  }\n\n  #asyncReaddirInFlight?: Promise\n\n  /**\n   * Return an array of known child entries.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async readdir(): Promise {\n    if (!this.canReaddir()) {\n      return []\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      return children.slice(0, children.provisional)\n    }\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    if (this.#asyncReaddirInFlight) {\n      await this.#asyncReaddirInFlight\n    } else {\n      /* c8 ignore start */\n      let resolve: () => void = () => {}\n      /* c8 ignore stop */\n      this.#asyncReaddirInFlight = new Promise(\n        res => (resolve = res),\n      )\n      try {\n        for (const e of await this.#fs.promises.readdir(fullpath, {\n          withFileTypes: true,\n        })) {\n          this.#readdirAddChild(e, children)\n        }\n        this.#readdirSuccess(children)\n      } catch (er) {\n        this.#readdirFail((er as NodeJS.ErrnoException).code)\n        children.provisional = 0\n      }\n      this.#asyncReaddirInFlight = undefined\n      resolve()\n    }\n    return children.slice(0, children.provisional)\n  }\n\n  /**\n   * synchronous {@link PathBase.readdir}\n   */\n  readdirSync(): PathBase[] {\n    if (!this.canReaddir()) {\n      return []\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      return children.slice(0, children.provisional)\n    }\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    try {\n      for (const e of this.#fs.readdirSync(fullpath, {\n        withFileTypes: true,\n      })) {\n        this.#readdirAddChild(e, children)\n      }\n      this.#readdirSuccess(children)\n    } catch (er) {\n      this.#readdirFail((er as NodeJS.ErrnoException).code)\n      children.provisional = 0\n    }\n    return children.slice(0, children.provisional)\n  }\n\n  canReaddir() {\n    if (this.#type & ENOCHILD) return false\n    const ifmt = IFMT & this.#type\n    // we always set ENOTDIR when setting IFMT, so should be impossible\n    /* c8 ignore start */\n    if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {\n      return false\n    }\n    /* c8 ignore stop */\n    return true\n  }\n\n  shouldWalk(\n    dirs: Set,\n    walkFilter?: (e: PathBase) => boolean,\n  ): boolean {\n    return (\n      (this.#type & IFDIR) === IFDIR &&\n      !(this.#type & ENOCHILD) &&\n      !dirs.has(this) &&\n      (!walkFilter || walkFilter(this))\n    )\n  }\n\n  /**\n   * Return the Path object corresponding to path as resolved\n   * by realpath(3).\n   *\n   * If the realpath call fails for any reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   * On success, returns a Path object.\n   */\n  async realpath(): Promise {\n    if (this.#realpath) return this.#realpath\n    if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) return undefined\n    try {\n      const rp = await this.#fs.promises.realpath(this.fullpath())\n      return (this.#realpath = this.resolve(rp))\n    } catch (_) {\n      this.#markENOREALPATH()\n    }\n  }\n\n  /**\n   * Synchronous {@link realpath}\n   */\n  realpathSync(): PathBase | undefined {\n    if (this.#realpath) return this.#realpath\n    if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) return undefined\n    try {\n      const rp = this.#fs.realpathSync(this.fullpath())\n      return (this.#realpath = this.resolve(rp))\n    } catch (_) {\n      this.#markENOREALPATH()\n    }\n  }\n\n  /**\n   * Internal method to mark this Path object as the scurry cwd,\n   * called by {@link PathScurry#chdir}\n   *\n   * @internal\n   */\n  [setAsCwd](oldCwd: PathBase): void {\n    if (oldCwd === this) return\n    oldCwd.isCWD = false\n    this.isCWD = true\n\n    const changed = new Set([])\n    let rp = []\n    let p: PathBase = this\n    while (p && p.parent) {\n      changed.add(p)\n      p.#relative = rp.join(this.sep)\n      p.#relativePosix = rp.join('/')\n      p = p.parent\n      rp.push('..')\n    }\n    // now un-memoize parents of old cwd\n    p = oldCwd\n    while (p && p.parent && !changed.has(p)) {\n      p.#relative = undefined\n      p.#relativePosix = undefined\n      p = p.parent\n    }\n  }\n}\n\n/**\n * Path class used on win32 systems\n *\n * Uses `'\\\\'` as the path separator for returned paths, either `'\\\\'` or `'/'`\n * as the path separator for parsing paths.\n */\nexport class PathWin32 extends PathBase {\n  /**\n   * Separator for generating path strings.\n   */\n  sep: '\\\\' = '\\\\'\n  /**\n   * Separator for parsing path strings.\n   */\n  splitSep: RegExp = eitherSep\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    super(name, type, root, roots, nocase, children, opts)\n  }\n\n  /**\n   * @internal\n   */\n  newChild(name: string, type: number = UNKNOWN, opts: PathOpts = {}) {\n    return new PathWin32(\n      name,\n      type,\n      this.root,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      opts,\n    )\n  }\n\n  /**\n   * @internal\n   */\n  getRootString(path: string): string {\n    return win32.parse(path).root\n  }\n\n  /**\n   * @internal\n   */\n  getRoot(rootPath: string): PathBase {\n    rootPath = uncToDrive(rootPath.toUpperCase())\n    if (rootPath === this.root.name) {\n      return this.root\n    }\n    // ok, not that one, check if it matches another we know about\n    for (const [compare, root] of Object.entries(this.roots)) {\n      if (this.sameRoot(rootPath, compare)) {\n        return (this.roots[rootPath] = root)\n      }\n    }\n    // otherwise, have to create a new one.\n    return (this.roots[rootPath] = new PathScurryWin32(\n      rootPath,\n      this,\n    ).root)\n  }\n\n  /**\n   * @internal\n   */\n  sameRoot(rootPath: string, compare: string = this.root.name): boolean {\n    // windows can (rarely) have case-sensitive filesystem, but\n    // UNC and drive letters are always case-insensitive, and canonically\n    // represented uppercase.\n    rootPath = rootPath\n      .toUpperCase()\n      .replace(/\\//g, '\\\\')\n      .replace(uncDriveRegexp, '$1\\\\')\n    return rootPath === compare\n  }\n}\n\n/**\n * Path class used on all posix systems.\n *\n * Uses `'/'` as the path separator.\n */\nexport class PathPosix extends PathBase {\n  /**\n   * separator for parsing path strings\n   */\n  splitSep: '/' = '/'\n  /**\n   * separator for generating path strings\n   */\n  sep: '/' = '/'\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    super(name, type, root, roots, nocase, children, opts)\n  }\n\n  /**\n   * @internal\n   */\n  getRootString(path: string): string {\n    return path.startsWith('/') ? '/' : ''\n  }\n\n  /**\n   * @internal\n   */\n  getRoot(_rootPath: string): PathBase {\n    return this.root\n  }\n\n  /**\n   * @internal\n   */\n  newChild(name: string, type: number = UNKNOWN, opts: PathOpts = {}) {\n    return new PathPosix(\n      name,\n      type,\n      this.root,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      opts,\n    )\n  }\n}\n\n/**\n * Options that may be provided to the PathScurry constructor\n */\nexport interface PathScurryOpts {\n  /**\n   * perform case-insensitive path matching. Default based on platform\n   * subclass.\n   */\n  nocase?: boolean\n  /**\n   * Number of Path entries to keep in the cache of Path child references.\n   *\n   * Setting this higher than 65536 will dramatically increase the data\n   * consumption and construction time overhead of each PathScurry.\n   *\n   * Setting this value to 256 or lower will significantly reduce the data\n   * consumption and construction time overhead, but may also reduce resolve()\n   * and readdir() performance on large filesystems.\n   *\n   * Default `16384`.\n   */\n  childrenCacheSize?: number\n  /**\n   * An object that overrides the built-in functions from the fs and\n   * fs/promises modules.\n   *\n   * See {@link FSOption}\n   */\n  fs?: FSOption\n}\n\n/**\n * The base class for all PathScurry classes, providing the interface for path\n * resolution and filesystem operations.\n *\n * Typically, you should *not* instantiate this class directly, but rather one\n * of the platform-specific classes, or the exported {@link PathScurry} which\n * defaults to the current platform.\n */\nexport abstract class PathScurryBase {\n  /**\n   * The root Path entry for the current working directory of this Scurry\n   */\n  root: PathBase\n  /**\n   * The string path for the root of this Scurry's current working directory\n   */\n  rootPath: string\n  /**\n   * A collection of all roots encountered, referenced by rootPath\n   */\n  roots: { [k: string]: PathBase }\n  /**\n   * The Path entry corresponding to this PathScurry's current working directory.\n   */\n  cwd: PathBase\n  #resolveCache: ResolveCache\n  #resolvePosixCache: ResolveCache\n  #children: ChildrenCache\n  /**\n   * Perform path comparisons case-insensitively.\n   *\n   * Defaults true on Darwin and Windows systems, false elsewhere.\n   */\n  nocase: boolean\n\n  /**\n   * The path separator used for parsing paths\n   *\n   * `'/'` on Posix systems, either `'/'` or `'\\\\'` on Windows\n   */\n  abstract sep: string | RegExp\n\n  #fs: FSValue\n\n  /**\n   * This class should not be instantiated directly.\n   *\n   * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry\n   *\n   * @internal\n   */\n  constructor(\n    cwd: URL | string = process.cwd(),\n    pathImpl: typeof win32 | typeof posix,\n    sep: string | RegExp,\n    {\n      nocase,\n      childrenCacheSize = 16 * 1024,\n      fs = defaultFS,\n    }: PathScurryOpts = {},\n  ) {\n    this.#fs = fsFromOption(fs)\n    if (cwd instanceof URL || cwd.startsWith('file://')) {\n      cwd = fileURLToPath(cwd)\n    }\n    // resolve and split root, and then add to the store.\n    // this is the only time we call path.resolve()\n    const cwdPath = pathImpl.resolve(cwd)\n    this.roots = Object.create(null)\n    this.rootPath = this.parseRootPath(cwdPath)\n    this.#resolveCache = new ResolveCache()\n    this.#resolvePosixCache = new ResolveCache()\n    this.#children = new ChildrenCache(childrenCacheSize)\n\n    const split = cwdPath.substring(this.rootPath.length).split(sep)\n    // resolve('/') leaves '', splits to [''], we don't want that.\n    if (split.length === 1 && !split[0]) {\n      split.pop()\n    }\n    /* c8 ignore start */\n    if (nocase === undefined) {\n      throw new TypeError(\n        'must provide nocase setting to PathScurryBase ctor',\n      )\n    }\n    /* c8 ignore stop */\n    this.nocase = nocase\n    this.root = this.newRoot(this.#fs)\n    this.roots[this.rootPath] = this.root\n    let prev: PathBase = this.root\n    let len = split.length - 1\n    const joinSep = pathImpl.sep\n    let abs = this.rootPath\n    let sawFirst = false\n    for (const part of split) {\n      const l = len--\n      prev = prev.child(part, {\n        relative: new Array(l).fill('..').join(joinSep),\n        relativePosix: new Array(l).fill('..').join('/'),\n        fullpath: (abs += (sawFirst ? '' : joinSep) + part),\n      })\n      sawFirst = true\n    }\n    this.cwd = prev\n  }\n\n  /**\n   * Get the depth of a provided path, string, or the cwd\n   */\n  depth(path: Path | string = this.cwd): number {\n    if (typeof path === 'string') {\n      path = this.cwd.resolve(path)\n    }\n    return path.depth()\n  }\n\n  /**\n   * Parse the root portion of a path string\n   *\n   * @internal\n   */\n  abstract parseRootPath(dir: string): string\n  /**\n   * create a new Path to use as root during construction.\n   *\n   * @internal\n   */\n  abstract newRoot(fs: FSValue): PathBase\n  /**\n   * Determine whether a given path string is absolute\n   */\n  abstract isAbsolute(p: string): boolean\n\n  /**\n   * Return the cache of child entries.  Exposed so subclasses can create\n   * child Path objects in a platform-specific way.\n   *\n   * @internal\n   */\n  childrenCache() {\n    return this.#children\n  }\n\n  /**\n   * Resolve one or more path strings to a resolved string\n   *\n   * Same interface as require('path').resolve.\n   *\n   * Much faster than path.resolve() when called multiple times for the same\n   * path, because the resolved Path objects are cached.  Much slower\n   * otherwise.\n   */\n  resolve(...paths: string[]): string {\n    // first figure out the minimum number of paths we have to test\n    // we always start at cwd, but any absolutes will bump the start\n    let r = ''\n    for (let i = paths.length - 1; i >= 0; i--) {\n      const p = paths[i]\n      if (!p || p === '.') continue\n      r = r ? `${p}/${r}` : p\n      if (this.isAbsolute(p)) {\n        break\n      }\n    }\n    const cached = this.#resolveCache.get(r)\n    if (cached !== undefined) {\n      return cached\n    }\n    const result = this.cwd.resolve(r).fullpath()\n    this.#resolveCache.set(r, result)\n    return result\n  }\n\n  /**\n   * Resolve one or more path strings to a resolved string, returning\n   * the posix path.  Identical to .resolve() on posix systems, but on\n   * windows will return a forward-slash separated UNC path.\n   *\n   * Same interface as require('path').resolve.\n   *\n   * Much faster than path.resolve() when called multiple times for the same\n   * path, because the resolved Path objects are cached.  Much slower\n   * otherwise.\n   */\n  resolvePosix(...paths: string[]): string {\n    // first figure out the minimum number of paths we have to test\n    // we always start at cwd, but any absolutes will bump the start\n    let r = ''\n    for (let i = paths.length - 1; i >= 0; i--) {\n      const p = paths[i]\n      if (!p || p === '.') continue\n      r = r ? `${p}/${r}` : p\n      if (this.isAbsolute(p)) {\n        break\n      }\n    }\n    const cached = this.#resolvePosixCache.get(r)\n    if (cached !== undefined) {\n      return cached\n    }\n    const result = this.cwd.resolve(r).fullpathPosix()\n    this.#resolvePosixCache.set(r, result)\n    return result\n  }\n\n  /**\n   * find the relative path from the cwd to the supplied path string or entry\n   */\n  relative(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.relative()\n  }\n\n  /**\n   * find the relative path from the cwd to the supplied path string or\n   * entry, using / as the path delimiter, even on Windows.\n   */\n  relativePosix(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.relativePosix()\n  }\n\n  /**\n   * Return the basename for the provided string or Path object\n   */\n  basename(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.name\n  }\n\n  /**\n   * Return the dirname for the provided string or Path object\n   */\n  dirname(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return (entry.parent || entry).fullpath()\n  }\n\n  /**\n   * Return an array of known child entries.\n   *\n   * First argument may be either a string, or a Path object.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   *\n   * Unlike `fs.readdir()`, the `withFileTypes` option defaults to `true`. Set\n   * `{ withFileTypes: false }` to return strings.\n   */\n\n  readdir(): Promise\n  readdir(opts: { withFileTypes: true }): Promise\n  readdir(opts: { withFileTypes: false }): Promise\n  readdir(opts: { withFileTypes: boolean }): Promise\n  readdir(entry: PathBase | string): Promise\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: true },\n  ): Promise\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: false },\n  ): Promise\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: boolean },\n  ): Promise\n  async readdir(\n    entry: PathBase | string | { withFileTypes: boolean } = this.cwd,\n    opts: { withFileTypes: boolean } = {\n      withFileTypes: true,\n    },\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const { withFileTypes } = opts\n    if (!entry.canReaddir()) {\n      return []\n    } else {\n      const p = await entry.readdir()\n      return withFileTypes ? p : p.map(e => e.name)\n    }\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.readdir}\n   */\n  readdirSync(): PathBase[]\n  readdirSync(opts: { withFileTypes: true }): PathBase[]\n  readdirSync(opts: { withFileTypes: false }): string[]\n  readdirSync(opts: { withFileTypes: boolean }): PathBase[] | string[]\n  readdirSync(entry: PathBase | string): PathBase[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: true },\n  ): PathBase[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: false },\n  ): string[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: boolean },\n  ): PathBase[] | string[]\n  readdirSync(\n    entry: PathBase | string | { withFileTypes: boolean } = this.cwd,\n    opts: { withFileTypes: boolean } = {\n      withFileTypes: true,\n    },\n  ): PathBase[] | string[] {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const { withFileTypes = true } = opts\n    if (!entry.canReaddir()) {\n      return []\n    } else if (withFileTypes) {\n      return entry.readdirSync()\n    } else {\n      return entry.readdirSync().map(e => e.name)\n    }\n  }\n\n  /**\n   * Call lstat() on the string or Path object, and update all known\n   * information that can be determined.\n   *\n   * Note that unlike `fs.lstat()`, the returned value does not contain some\n   * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that\n   * information is required, you will need to call `fs.lstat` yourself.\n   *\n   * If the Path refers to a nonexistent file, or if the lstat call fails for\n   * any reason, `undefined` is returned.  Otherwise the updated Path object is\n   * returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async lstat(\n    entry: string | PathBase = this.cwd,\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.lstat()\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.lstat}\n   */\n  lstatSync(entry: string | PathBase = this.cwd): PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.lstatSync()\n  }\n\n  /**\n   * Return the Path object or string path corresponding to the target of a\n   * symbolic link.\n   *\n   * If the path is not a symbolic link, or if the readlink call fails for any\n   * reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   *\n   * `{withFileTypes}` option defaults to `false`.\n   *\n   * On success, returns a Path object if `withFileTypes` option is true,\n   * otherwise a string.\n   */\n  readlink(): Promise\n  readlink(opt: { withFileTypes: false }): Promise\n  readlink(opt: { withFileTypes: true }): Promise\n  readlink(opt: {\n    withFileTypes: boolean\n  }): Promise\n  readlink(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): Promise\n  readlink(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): Promise\n  readlink(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): Promise\n  async readlink(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = await entry.readlink()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.readlink}\n   */\n  readlinkSync(): string | undefined\n  readlinkSync(opt: { withFileTypes: false }): string | undefined\n  readlinkSync(opt: { withFileTypes: true }): PathBase | undefined\n  readlinkSync(opt: {\n    withFileTypes: boolean\n  }): PathBase | string | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): string | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): PathBase | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): string | PathBase | undefined\n  readlinkSync(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): string | PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = entry.readlinkSync()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * Return the Path object or string path corresponding to path as resolved\n   * by realpath(3).\n   *\n   * If the realpath call fails for any reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   *\n   * `{withFileTypes}` option defaults to `false`.\n   *\n   * On success, returns a Path object if `withFileTypes` option is true,\n   * otherwise a string.\n   */\n  realpath(): Promise\n  realpath(opt: { withFileTypes: false }): Promise\n  realpath(opt: { withFileTypes: true }): Promise\n  realpath(opt: {\n    withFileTypes: boolean\n  }): Promise\n  realpath(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): Promise\n  realpath(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): Promise\n  realpath(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): Promise\n  async realpath(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = await entry.realpath()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  realpathSync(): string | undefined\n  realpathSync(opt: { withFileTypes: false }): string | undefined\n  realpathSync(opt: { withFileTypes: true }): PathBase | undefined\n  realpathSync(opt: {\n    withFileTypes: boolean\n  }): PathBase | string | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): string | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): PathBase | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): string | PathBase | undefined\n  realpathSync(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): string | PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = entry.realpathSync()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * Asynchronously walk the directory tree, returning an array of\n   * all path strings or Path objects found.\n   *\n   * Note that this will be extremely memory-hungry on large filesystems.\n   * In such cases, it may be better to use the stream or async iterator\n   * walk implementation.\n   */\n  walk(): Promise\n  walk(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Promise\n  walk(opts: WalkOptionsWithFileTypesFalse): Promise\n  walk(opts: WalkOptions): Promise\n  walk(entry: string | PathBase): Promise\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Promise\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Promise\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Promise\n  async walk(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results: (string | PathBase)[] = []\n    if (!filter || filter(entry)) {\n      results.push(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set()\n    const walk = (\n      dir: PathBase,\n      cb: (er?: NodeJS.ErrnoException) => void,\n    ) => {\n      dirs.add(dir)\n      dir.readdirCB((er, entries) => {\n        /* c8 ignore start */\n        if (er) {\n          return cb(er)\n        }\n        /* c8 ignore stop */\n        let len = entries.length\n        if (!len) return cb()\n        const next = () => {\n          if (--len === 0) {\n            cb()\n          }\n        }\n        for (const e of entries) {\n          if (!filter || filter(e)) {\n            results.push(withFileTypes ? e : e.fullpath())\n          }\n          if (follow && e.isSymbolicLink()) {\n            e.realpath()\n              .then(r => (r?.isUnknown() ? r.lstat() : r))\n              .then(r =>\n                r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next(),\n              )\n          } else {\n            if (e.shouldWalk(dirs, walkFilter)) {\n              walk(e, next)\n            } else {\n              next()\n            }\n          }\n        }\n      }, true) // zalgooooooo\n    }\n\n    const start = entry\n    return new Promise((res, rej) => {\n      walk(start, er => {\n        /* c8 ignore start */\n        if (er) return rej(er)\n        /* c8 ignore stop */\n        res(results as PathBase[] | string[])\n      })\n    })\n  }\n\n  /**\n   * Synchronously walk the directory tree, returning an array of\n   * all path strings or Path objects found.\n   *\n   * Note that this will be extremely memory-hungry on large filesystems.\n   * In such cases, it may be better to use the stream or async iterator\n   * walk implementation.\n   */\n  walkSync(): PathBase[]\n  walkSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): PathBase[]\n  walkSync(opts: WalkOptionsWithFileTypesFalse): string[]\n  walkSync(opts: WalkOptions): string[] | PathBase[]\n  walkSync(entry: string | PathBase): PathBase[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): PathBase[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): string[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): PathBase[] | string[]\n  walkSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): PathBase[] | string[] {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results: (string | PathBase)[] = []\n    if (!filter || filter(entry)) {\n      results.push(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set([entry])\n    for (const dir of dirs) {\n      const entries = dir.readdirSync()\n      for (const e of entries) {\n        if (!filter || filter(e)) {\n          results.push(withFileTypes ? e : e.fullpath())\n        }\n        let r: PathBase | undefined = e\n        if (e.isSymbolicLink()) {\n          if (!(follow && (r = e.realpathSync()))) continue\n          if (r.isUnknown()) r.lstatSync()\n        }\n        if (r.shouldWalk(dirs, walkFilter)) {\n          dirs.add(r)\n        }\n      }\n    }\n    return results as string[] | PathBase[]\n  }\n\n  /**\n   * Support for `for await`\n   *\n   * Alias for {@link PathScurryBase.iterate}\n   *\n   * Note: As of Node 19, this is very slow, compared to other methods of\n   * walking.  Consider using {@link PathScurryBase.stream} if memory overhead\n   * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n   */\n  [Symbol.asyncIterator]() {\n    return this.iterate()\n  }\n\n  /**\n   * Async generator form of {@link PathScurryBase.walk}\n   *\n   * Note: As of Node 19, this is very slow, compared to other methods of\n   * walking, especially if most/all of the directory tree has been previously\n   * walked.  Consider using {@link PathScurryBase.stream} if memory overhead\n   * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n   */\n  iterate(): AsyncGenerator\n  iterate(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): AsyncGenerator\n  iterate(\n    opts: WalkOptionsWithFileTypesFalse,\n  ): AsyncGenerator\n  iterate(opts: WalkOptions): AsyncGenerator\n  iterate(entry: string | PathBase): AsyncGenerator\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): AsyncGenerator\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): AsyncGenerator\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): AsyncGenerator\n  iterate(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    options: WalkOptions = {},\n  ): AsyncGenerator {\n    // iterating async over the stream is significantly more performant,\n    // especially in the warm-cache scenario, because it buffers up directory\n    // entries in the background instead of waiting for a yield for each one.\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      options = entry\n      entry = this.cwd\n    }\n    return this.stream(entry, options)[Symbol.asyncIterator]()\n  }\n\n  /**\n   * Iterating over a PathScurry performs a synchronous walk.\n   *\n   * Alias for {@link PathScurryBase.iterateSync}\n   */\n  [Symbol.iterator]() {\n    return this.iterateSync()\n  }\n\n  iterateSync(): Generator\n  iterateSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Generator\n  iterateSync(\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Generator\n  iterateSync(opts: WalkOptions): Generator\n  iterateSync(entry: string | PathBase): Generator\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Generator\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Generator\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Generator\n  *iterateSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Generator {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    if (!filter || filter(entry)) {\n      yield withFileTypes ? entry : entry.fullpath()\n    }\n    const dirs = new Set([entry])\n    for (const dir of dirs) {\n      const entries = dir.readdirSync()\n      for (const e of entries) {\n        if (!filter || filter(e)) {\n          yield withFileTypes ? e : e.fullpath()\n        }\n        let r: PathBase | undefined = e\n        if (e.isSymbolicLink()) {\n          if (!(follow && (r = e.realpathSync()))) continue\n          if (r.isUnknown()) r.lstatSync()\n        }\n        if (r.shouldWalk(dirs, walkFilter)) {\n          dirs.add(r)\n        }\n      }\n    }\n  }\n\n  /**\n   * Stream form of {@link PathScurryBase.walk}\n   *\n   * Returns a Minipass stream that emits {@link PathBase} objects by default,\n   * or strings if `{ withFileTypes: false }` is set in the options.\n   */\n  stream(): Minipass\n  stream(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Minipass\n  stream(opts: WalkOptionsWithFileTypesFalse): Minipass\n  stream(opts: WalkOptions): Minipass\n  stream(entry: string | PathBase): Minipass\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): Minipass\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Minipass\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Minipass | Minipass\n  stream(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Minipass | Minipass {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results = new Minipass({ objectMode: true })\n    if (!filter || filter(entry)) {\n      results.write(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set()\n    const queue: PathBase[] = [entry]\n    let processing = 0\n    const process = () => {\n      let paused = false\n      while (!paused) {\n        const dir = queue.shift()\n        if (!dir) {\n          if (processing === 0) results.end()\n          return\n        }\n\n        processing++\n        dirs.add(dir)\n\n        const onReaddir = (\n          er: null | NodeJS.ErrnoException,\n          entries: PathBase[],\n          didRealpaths: boolean = false,\n        ) => {\n          /* c8 ignore start */\n          if (er) return results.emit('error', er)\n          /* c8 ignore stop */\n          if (follow && !didRealpaths) {\n            const promises: Promise[] = []\n            for (const e of entries) {\n              if (e.isSymbolicLink()) {\n                promises.push(\n                  e\n                    .realpath()\n                    .then((r: PathBase | undefined) =>\n                      r?.isUnknown() ? r.lstat() : r,\n                    ),\n                )\n              }\n            }\n            if (promises.length) {\n              Promise.all(promises).then(() =>\n                onReaddir(null, entries, true),\n              )\n              return\n            }\n          }\n\n          for (const e of entries) {\n            if (e && (!filter || filter(e))) {\n              if (!results.write(withFileTypes ? e : e.fullpath())) {\n                paused = true\n              }\n            }\n          }\n\n          processing--\n          for (const e of entries) {\n            const r = e.realpathCached() || e\n            if (r.shouldWalk(dirs, walkFilter)) {\n              queue.push(r)\n            }\n          }\n          if (paused && !results.flowing) {\n            results.once('drain', process)\n          } else if (!sync) {\n            process()\n          }\n        }\n\n        // zalgo containment\n        let sync = true\n        dir.readdirCB(onReaddir, true)\n        sync = false\n      }\n    }\n    process()\n    return results as Minipass | Minipass\n  }\n\n  /**\n   * Synchronous form of {@link PathScurryBase.stream}\n   *\n   * Returns a Minipass stream that emits {@link PathBase} objects by default,\n   * or strings if `{ withFileTypes: false }` is set in the options.\n   *\n   * Will complete the walk in a single tick if the stream is consumed fully.\n   * Otherwise, will pause as needed for stream backpressure.\n   */\n  streamSync(): Minipass\n  streamSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Minipass\n  streamSync(opts: WalkOptionsWithFileTypesFalse): Minipass\n  streamSync(opts: WalkOptions): Minipass\n  streamSync(entry: string | PathBase): Minipass\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): Minipass\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Minipass\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Minipass | Minipass\n  streamSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Minipass | Minipass {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results = new Minipass({ objectMode: true })\n    const dirs = new Set()\n    if (!filter || filter(entry)) {\n      results.write(withFileTypes ? entry : entry.fullpath())\n    }\n    const queue: PathBase[] = [entry]\n    let processing = 0\n    const process = () => {\n      let paused = false\n      while (!paused) {\n        const dir = queue.shift()\n        if (!dir) {\n          if (processing === 0) results.end()\n          return\n        }\n        processing++\n        dirs.add(dir)\n\n        const entries = dir.readdirSync()\n        for (const e of entries) {\n          if (!filter || filter(e)) {\n            if (!results.write(withFileTypes ? e : e.fullpath())) {\n              paused = true\n            }\n          }\n        }\n        processing--\n        for (const e of entries) {\n          let r: PathBase | undefined = e\n          if (e.isSymbolicLink()) {\n            if (!(follow && (r = e.realpathSync()))) continue\n            if (r.isUnknown()) r.lstatSync()\n          }\n          if (r.shouldWalk(dirs, walkFilter)) {\n            queue.push(r)\n          }\n        }\n      }\n      if (paused && !results.flowing) results.once('drain', process)\n    }\n    process()\n    return results as Minipass | Minipass\n  }\n\n  chdir(path: string | Path = this.cwd) {\n    const oldCwd = this.cwd\n    this.cwd = typeof path === 'string' ? this.cwd.resolve(path) : path\n    this.cwd[setAsCwd](oldCwd)\n  }\n}\n\n/**\n * Options provided to all walk methods.\n */\nexport interface WalkOptions {\n  /**\n   * Return results as {@link PathBase} objects rather than strings.\n   * When set to false, results are fully resolved paths, as returned by\n   * {@link PathBase.fullpath}.\n   * @default true\n   */\n  withFileTypes?: boolean\n\n  /**\n   *  Attempt to read directory entries from symbolic links. Otherwise, only\n   *  actual directories are traversed. Regardless of this setting, a given\n   *  target path will only ever be walked once, meaning that a symbolic link\n   *  to a previously traversed directory will never be followed.\n   *\n   *  Setting this imposes a slight performance penalty, because `readlink`\n   *  must be called on all symbolic links encountered, in order to avoid\n   *  infinite cycles.\n   * @default false\n   */\n  follow?: boolean\n\n  /**\n   * Only return entries where the provided function returns true.\n   *\n   * This will not prevent directories from being traversed, even if they do\n   * not pass the filter, though it will prevent directories themselves from\n   * being included in the result set.  See {@link walkFilter}\n   *\n   * Asynchronous functions are not supported here.\n   *\n   * By default, if no filter is provided, all entries and traversed\n   * directories are included.\n   */\n  filter?: (entry: PathBase) => boolean\n\n  /**\n   * Only traverse directories (and in the case of {@link follow} being set to\n   * true, symbolic links to directories) if the provided function returns\n   * true.\n   *\n   * This will not prevent directories from being included in the result set,\n   * even if they do not pass the supplied filter function.  See {@link filter}\n   * to do that.\n   *\n   * Asynchronous functions are not supported here.\n   */\n  walkFilter?: (entry: PathBase) => boolean\n}\n\nexport type WalkOptionsWithFileTypesUnset = WalkOptions & {\n  withFileTypes?: undefined\n}\nexport type WalkOptionsWithFileTypesTrue = WalkOptions & {\n  withFileTypes: true\n}\nexport type WalkOptionsWithFileTypesFalse = WalkOptions & {\n  withFileTypes: false\n}\n\n/**\n * Windows implementation of {@link PathScurryBase}\n *\n * Defaults to case insensitve, uses `'\\\\'` to generate path strings.  Uses\n * {@link PathWin32} for Path objects.\n */\nexport class PathScurryWin32 extends PathScurryBase {\n  /**\n   * separator for generating path strings\n   */\n  sep: '\\\\' = '\\\\'\n\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = true } = opts\n    super(cwd, win32, '\\\\', { ...opts, nocase })\n    this.nocase = nocase\n    for (let p: PathBase | undefined = this.cwd; p; p = p.parent) {\n      p.nocase = this.nocase\n    }\n  }\n\n  /**\n   * @internal\n   */\n  parseRootPath(dir: string): string {\n    // if the path starts with a single separator, it's not a UNC, and we'll\n    // just get separator as the root, and driveFromUNC will return \\\n    // In that case, mount \\ on the root from the cwd.\n    return win32.parse(dir).root.toUpperCase()\n  }\n\n  /**\n   * @internal\n   */\n  newRoot(fs: FSValue) {\n    return new PathWin32(\n      this.rootPath,\n      IFDIR,\n      undefined,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      { fs },\n    )\n  }\n\n  /**\n   * Return true if the provided path string is an absolute path\n   */\n  isAbsolute(p: string): boolean {\n    return (\n      p.startsWith('/') || p.startsWith('\\\\') || /^[a-z]:(\\/|\\\\)/i.test(p)\n    )\n  }\n}\n\n/**\n * {@link PathScurryBase} implementation for all posix systems other than Darwin.\n *\n * Defaults to case-sensitive matching, uses `'/'` to generate path strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryPosix extends PathScurryBase {\n  /**\n   * separator for generating path strings\n   */\n  sep: '/' = '/'\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = false } = opts\n    super(cwd, posix, '/', { ...opts, nocase })\n    this.nocase = nocase\n  }\n\n  /**\n   * @internal\n   */\n  parseRootPath(_dir: string): string {\n    return '/'\n  }\n\n  /**\n   * @internal\n   */\n  newRoot(fs: FSValue) {\n    return new PathPosix(\n      this.rootPath,\n      IFDIR,\n      undefined,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      { fs },\n    )\n  }\n\n  /**\n   * Return true if the provided path string is an absolute path\n   */\n  isAbsolute(p: string): boolean {\n    return p.startsWith('/')\n  }\n}\n\n/**\n * {@link PathScurryBase} implementation for Darwin (macOS) systems.\n *\n * Defaults to case-insensitive matching, uses `'/'` for generating path\n * strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryDarwin extends PathScurryPosix {\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = true } = opts\n    super(cwd, { ...opts, nocase })\n  }\n}\n\n/**\n * Default {@link PathBase} implementation for the current platform.\n *\n * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.\n */\nexport const Path = process.platform === 'win32' ? PathWin32 : PathPosix\nexport type Path = PathBase | InstanceType\n\n/**\n * Default {@link PathScurryBase} implementation for the current platform.\n *\n * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on\n * Darwin (macOS) systems, {@link PathScurryPosix} on all others.\n */\nexport const PathScurry:\n  | typeof PathScurryWin32\n  | typeof PathScurryDarwin\n  | typeof PathScurryPosix =\n  process.platform === 'win32' ? PathScurryWin32\n  : process.platform === 'darwin' ? PathScurryDarwin\n  : PathScurryPosix\nexport type PathScurry = PathScurryBase | InstanceType\n"]}
\ No newline at end of file
diff --git a/node_modules/path-scurry/dist/commonjs/package.json b/node_modules/path-scurry/dist/commonjs/package.json
new file mode 100644
index 00000000..5bbefffb
--- /dev/null
+++ b/node_modules/path-scurry/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
diff --git a/node_modules/path-scurry/dist/esm/index.d.ts b/node_modules/path-scurry/dist/esm/index.d.ts
new file mode 100644
index 00000000..ef31b1b7
--- /dev/null
+++ b/node_modules/path-scurry/dist/esm/index.d.ts
@@ -0,0 +1,1115 @@
+import { LRUCache } from 'lru-cache';
+import { posix, win32 } from 'node:path';
+import { Minipass } from 'minipass';
+import type { Dirent, Stats } from 'node:fs';
+/**
+ * An object that will be used to override the default `fs`
+ * methods.  Any methods that are not overridden will use Node's
+ * built-in implementations.
+ *
+ * - lstatSync
+ * - readdir (callback `withFileTypes` Dirent variant, used for
+ *   readdirCB and most walks)
+ * - readdirSync
+ * - readlinkSync
+ * - realpathSync
+ * - promises: Object containing the following async methods:
+ *   - lstat
+ *   - readdir (Dirent variant only)
+ *   - readlink
+ *   - realpath
+ */
+export interface FSOption {
+    lstatSync?: (path: string) => Stats;
+    readdir?: (path: string, options: {
+        withFileTypes: true;
+    }, cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any) => void;
+    readdirSync?: (path: string, options: {
+        withFileTypes: true;
+    }) => Dirent[];
+    readlinkSync?: (path: string) => string;
+    realpathSync?: (path: string) => string;
+    promises?: {
+        lstat?: (path: string) => Promise;
+        readdir?: (path: string, options: {
+            withFileTypes: true;
+        }) => Promise;
+        readlink?: (path: string) => Promise;
+        realpath?: (path: string) => Promise;
+        [k: string]: any;
+    };
+    [k: string]: any;
+}
+interface FSValue {
+    lstatSync: (path: string) => Stats;
+    readdir: (path: string, options: {
+        withFileTypes: true;
+    }, cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any) => void;
+    readdirSync: (path: string, options: {
+        withFileTypes: true;
+    }) => Dirent[];
+    readlinkSync: (path: string) => string;
+    realpathSync: (path: string) => string;
+    promises: {
+        lstat: (path: string) => Promise;
+        readdir: (path: string, options: {
+            withFileTypes: true;
+        }) => Promise;
+        readlink: (path: string) => Promise;
+        realpath: (path: string) => Promise;
+        [k: string]: any;
+    };
+    [k: string]: any;
+}
+export type Type = 'Unknown' | 'FIFO' | 'CharacterDevice' | 'Directory' | 'BlockDevice' | 'File' | 'SymbolicLink' | 'Socket';
+/**
+ * Options that may be provided to the Path constructor
+ */
+export interface PathOpts {
+    fullpath?: string;
+    relative?: string;
+    relativePosix?: string;
+    parent?: PathBase;
+    /**
+     * See {@link FSOption}
+     */
+    fs?: FSOption;
+}
+/**
+ * An LRUCache for storing resolved path strings or Path objects.
+ * @internal
+ */
+export declare class ResolveCache extends LRUCache {
+    constructor();
+}
+/**
+ * an LRUCache for storing child entries.
+ * @internal
+ */
+export declare class ChildrenCache extends LRUCache {
+    constructor(maxSize?: number);
+}
+/**
+ * Array of Path objects, plus a marker indicating the first provisional entry
+ *
+ * @internal
+ */
+export type Children = PathBase[] & {
+    provisional: number;
+};
+declare const setAsCwd: unique symbol;
+/**
+ * Path objects are sort of like a super-powered
+ * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}
+ *
+ * Each one represents a single filesystem entry on disk, which may or may not
+ * exist. It includes methods for reading various types of information via
+ * lstat, readlink, and readdir, and caches all information to the greatest
+ * degree possible.
+ *
+ * Note that fs operations that would normally throw will instead return an
+ * "empty" value. This is in order to prevent excessive overhead from error
+ * stack traces.
+ */
+export declare abstract class PathBase implements Dirent {
+    #private;
+    /**
+     * the basename of this path
+     *
+     * **Important**: *always* test the path name against any test string
+     * usingthe {@link isNamed} method, and not by directly comparing this
+     * string. Otherwise, unicode path strings that the system sees as identical
+     * will not be properly treated as the same path, leading to incorrect
+     * behavior and possible security issues.
+     */
+    name: string;
+    /**
+     * the Path entry corresponding to the path root.
+     *
+     * @internal
+     */
+    root: PathBase;
+    /**
+     * All roots found within the current PathScurry family
+     *
+     * @internal
+     */
+    roots: {
+        [k: string]: PathBase;
+    };
+    /**
+     * a reference to the parent path, or undefined in the case of root entries
+     *
+     * @internal
+     */
+    parent?: PathBase;
+    /**
+     * boolean indicating whether paths are compared case-insensitively
+     * @internal
+     */
+    nocase: boolean;
+    /**
+     * boolean indicating that this path is the current working directory
+     * of the PathScurry collection that contains it.
+     */
+    isCWD: boolean;
+    /**
+     * the string or regexp used to split paths. On posix, it is `'/'`, and on
+     * windows it is a RegExp matching either `'/'` or `'\\'`
+     */
+    abstract splitSep: string | RegExp;
+    /**
+     * The path separator string to use when joining paths
+     */
+    abstract sep: string;
+    get dev(): number | undefined;
+    get mode(): number | undefined;
+    get nlink(): number | undefined;
+    get uid(): number | undefined;
+    get gid(): number | undefined;
+    get rdev(): number | undefined;
+    get blksize(): number | undefined;
+    get ino(): number | undefined;
+    get size(): number | undefined;
+    get blocks(): number | undefined;
+    get atimeMs(): number | undefined;
+    get mtimeMs(): number | undefined;
+    get ctimeMs(): number | undefined;
+    get birthtimeMs(): number | undefined;
+    get atime(): Date | undefined;
+    get mtime(): Date | undefined;
+    get ctime(): Date | undefined;
+    get birthtime(): Date | undefined;
+    /**
+     * This property is for compatibility with the Dirent class as of
+     * Node v20, where Dirent['parentPath'] refers to the path of the
+     * directory that was passed to readdir. For root entries, it's the path
+     * to the entry itself.
+     */
+    get parentPath(): string;
+    /**
+     * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,
+     * this property refers to the *parent* path, not the path object itself.
+     *
+     * @deprecated
+     */
+    get path(): string;
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name: string, type: number | undefined, root: PathBase | undefined, roots: {
+        [k: string]: PathBase;
+    }, nocase: boolean, children: ChildrenCache, opts: PathOpts);
+    /**
+     * Returns the depth of the Path object from its root.
+     *
+     * For example, a path at `/foo/bar` would have a depth of 2.
+     */
+    depth(): number;
+    /**
+     * @internal
+     */
+    abstract getRootString(path: string): string;
+    /**
+     * @internal
+     */
+    abstract getRoot(rootPath: string): PathBase;
+    /**
+     * @internal
+     */
+    abstract newChild(name: string, type?: number, opts?: PathOpts): PathBase;
+    /**
+     * @internal
+     */
+    childrenCache(): ChildrenCache;
+    /**
+     * Get the Path object referenced by the string path, resolved from this Path
+     */
+    resolve(path?: string): PathBase;
+    /**
+     * Returns the cached children Path objects, if still available.  If they
+     * have fallen out of the cache, then returns an empty array, and resets the
+     * READDIR_CALLED bit, so that future calls to readdir() will require an fs
+     * lookup.
+     *
+     * @internal
+     */
+    children(): Children;
+    /**
+     * Resolves a path portion and returns or creates the child Path.
+     *
+     * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is
+     * `'..'`.
+     *
+     * This should not be called directly.  If `pathPart` contains any path
+     * separators, it will lead to unsafe undefined behavior.
+     *
+     * Use `Path.resolve()` instead.
+     *
+     * @internal
+     */
+    child(pathPart: string, opts?: PathOpts): PathBase;
+    /**
+     * The relative path from the cwd. If it does not share an ancestor with
+     * the cwd, then this ends up being equivalent to the fullpath()
+     */
+    relative(): string;
+    /**
+     * The relative path from the cwd, using / as the path separator.
+     * If it does not share an ancestor with
+     * the cwd, then this ends up being equivalent to the fullpathPosix()
+     * On posix systems, this is identical to relative().
+     */
+    relativePosix(): string;
+    /**
+     * The fully resolved path string for this Path entry
+     */
+    fullpath(): string;
+    /**
+     * On platforms other than windows, this is identical to fullpath.
+     *
+     * On windows, this is overridden to return the forward-slash form of the
+     * full UNC path.
+     */
+    fullpathPosix(): string;
+    /**
+     * Is the Path of an unknown type?
+     *
+     * Note that we might know *something* about it if there has been a previous
+     * filesystem operation, for example that it does not exist, or is not a
+     * link, or whether it has child entries.
+     */
+    isUnknown(): boolean;
+    isType(type: Type): boolean;
+    getType(): Type;
+    /**
+     * Is the Path a regular file?
+     */
+    isFile(): boolean;
+    /**
+     * Is the Path a directory?
+     */
+    isDirectory(): boolean;
+    /**
+     * Is the path a character device?
+     */
+    isCharacterDevice(): boolean;
+    /**
+     * Is the path a block device?
+     */
+    isBlockDevice(): boolean;
+    /**
+     * Is the path a FIFO pipe?
+     */
+    isFIFO(): boolean;
+    /**
+     * Is the path a socket?
+     */
+    isSocket(): boolean;
+    /**
+     * Is the path a symbolic link?
+     */
+    isSymbolicLink(): boolean;
+    /**
+     * Return the entry if it has been subject of a successful lstat, or
+     * undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* simply
+     * mean that we haven't called lstat on it.
+     */
+    lstatCached(): PathBase | undefined;
+    /**
+     * Return the cached link target if the entry has been the subject of a
+     * successful readlink, or undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * readlink() has been called at some point.
+     */
+    readlinkCached(): PathBase | undefined;
+    /**
+     * Returns the cached realpath target if the entry has been the subject
+     * of a successful realpath, or undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * realpath() has been called at some point.
+     */
+    realpathCached(): PathBase | undefined;
+    /**
+     * Returns the cached child Path entries array if the entry has been the
+     * subject of a successful readdir(), or [] otherwise.
+     *
+     * Does not read the filesystem, so an empty array *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * readdir() has been called recently enough to still be valid.
+     */
+    readdirCached(): PathBase[];
+    /**
+     * Return true if it's worth trying to readlink.  Ie, we don't (yet) have
+     * any indication that readlink will definitely fail.
+     *
+     * Returns false if the path is known to not be a symlink, if a previous
+     * readlink failed, or if the entry does not exist.
+     */
+    canReadlink(): boolean;
+    /**
+     * Return true if readdir has previously been successfully called on this
+     * path, indicating that cachedReaddir() is likely valid.
+     */
+    calledReaddir(): boolean;
+    /**
+     * Returns true if the path is known to not exist. That is, a previous lstat
+     * or readdir failed to verify its existence when that would have been
+     * expected, or a parent entry was marked either enoent or enotdir.
+     */
+    isENOENT(): boolean;
+    /**
+     * Return true if the path is a match for the given path name.  This handles
+     * case sensitivity and unicode normalization.
+     *
+     * Note: even on case-sensitive systems, it is **not** safe to test the
+     * equality of the `.name` property to determine whether a given pathname
+     * matches, due to unicode normalization mismatches.
+     *
+     * Always use this method instead of testing the `path.name` property
+     * directly.
+     */
+    isNamed(n: string): boolean;
+    /**
+     * Return the Path object corresponding to the target of a symbolic link.
+     *
+     * If the Path is not a symbolic link, or if the readlink call fails for any
+     * reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     */
+    readlink(): Promise;
+    /**
+     * Synchronous {@link PathBase.readlink}
+     */
+    readlinkSync(): PathBase | undefined;
+    /**
+     * Call lstat() on this Path, and update all known information that can be
+     * determined.
+     *
+     * Note that unlike `fs.lstat()`, the returned value does not contain some
+     * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+     * information is required, you will need to call `fs.lstat` yourself.
+     *
+     * If the Path refers to a nonexistent file, or if the lstat call fails for
+     * any reason, `undefined` is returned.  Otherwise the updated Path object is
+     * returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    lstat(): Promise;
+    /**
+     * synchronous {@link PathBase.lstat}
+     */
+    lstatSync(): PathBase | undefined;
+    /**
+     * Standard node-style callback interface to get list of directory entries.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     *
+     * @param cb The callback called with (er, entries).  Note that the `er`
+     * param is somewhat extraneous, as all readdir() errors are handled and
+     * simply result in an empty set of entries being returned.
+     * @param allowZalgo Boolean indicating that immediately known results should
+     * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release
+     * zalgo at your peril, the dark pony lord is devious and unforgiving.
+     */
+    readdirCB(cb: (er: NodeJS.ErrnoException | null, entries: PathBase[]) => any, allowZalgo?: boolean): void;
+    /**
+     * Return an array of known child entries.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    readdir(): Promise;
+    /**
+     * synchronous {@link PathBase.readdir}
+     */
+    readdirSync(): PathBase[];
+    canReaddir(): boolean;
+    shouldWalk(dirs: Set, walkFilter?: (e: PathBase) => boolean): boolean;
+    /**
+     * Return the Path object corresponding to path as resolved
+     * by realpath(3).
+     *
+     * If the realpath call fails for any reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     * On success, returns a Path object.
+     */
+    realpath(): Promise;
+    /**
+     * Synchronous {@link realpath}
+     */
+    realpathSync(): PathBase | undefined;
+    /**
+     * Internal method to mark this Path object as the scurry cwd,
+     * called by {@link PathScurry#chdir}
+     *
+     * @internal
+     */
+    [setAsCwd](oldCwd: PathBase): void;
+}
+/**
+ * Path class used on win32 systems
+ *
+ * Uses `'\\'` as the path separator for returned paths, either `'\\'` or `'/'`
+ * as the path separator for parsing paths.
+ */
+export declare class PathWin32 extends PathBase {
+    /**
+     * Separator for generating path strings.
+     */
+    sep: '\\';
+    /**
+     * Separator for parsing path strings.
+     */
+    splitSep: RegExp;
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name: string, type: number | undefined, root: PathBase | undefined, roots: {
+        [k: string]: PathBase;
+    }, nocase: boolean, children: ChildrenCache, opts: PathOpts);
+    /**
+     * @internal
+     */
+    newChild(name: string, type?: number, opts?: PathOpts): PathWin32;
+    /**
+     * @internal
+     */
+    getRootString(path: string): string;
+    /**
+     * @internal
+     */
+    getRoot(rootPath: string): PathBase;
+    /**
+     * @internal
+     */
+    sameRoot(rootPath: string, compare?: string): boolean;
+}
+/**
+ * Path class used on all posix systems.
+ *
+ * Uses `'/'` as the path separator.
+ */
+export declare class PathPosix extends PathBase {
+    /**
+     * separator for parsing path strings
+     */
+    splitSep: '/';
+    /**
+     * separator for generating path strings
+     */
+    sep: '/';
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name: string, type: number | undefined, root: PathBase | undefined, roots: {
+        [k: string]: PathBase;
+    }, nocase: boolean, children: ChildrenCache, opts: PathOpts);
+    /**
+     * @internal
+     */
+    getRootString(path: string): string;
+    /**
+     * @internal
+     */
+    getRoot(_rootPath: string): PathBase;
+    /**
+     * @internal
+     */
+    newChild(name: string, type?: number, opts?: PathOpts): PathPosix;
+}
+/**
+ * Options that may be provided to the PathScurry constructor
+ */
+export interface PathScurryOpts {
+    /**
+     * perform case-insensitive path matching. Default based on platform
+     * subclass.
+     */
+    nocase?: boolean;
+    /**
+     * Number of Path entries to keep in the cache of Path child references.
+     *
+     * Setting this higher than 65536 will dramatically increase the data
+     * consumption and construction time overhead of each PathScurry.
+     *
+     * Setting this value to 256 or lower will significantly reduce the data
+     * consumption and construction time overhead, but may also reduce resolve()
+     * and readdir() performance on large filesystems.
+     *
+     * Default `16384`.
+     */
+    childrenCacheSize?: number;
+    /**
+     * An object that overrides the built-in functions from the fs and
+     * fs/promises modules.
+     *
+     * See {@link FSOption}
+     */
+    fs?: FSOption;
+}
+/**
+ * The base class for all PathScurry classes, providing the interface for path
+ * resolution and filesystem operations.
+ *
+ * Typically, you should *not* instantiate this class directly, but rather one
+ * of the platform-specific classes, or the exported {@link PathScurry} which
+ * defaults to the current platform.
+ */
+export declare abstract class PathScurryBase {
+    #private;
+    /**
+     * The root Path entry for the current working directory of this Scurry
+     */
+    root: PathBase;
+    /**
+     * The string path for the root of this Scurry's current working directory
+     */
+    rootPath: string;
+    /**
+     * A collection of all roots encountered, referenced by rootPath
+     */
+    roots: {
+        [k: string]: PathBase;
+    };
+    /**
+     * The Path entry corresponding to this PathScurry's current working directory.
+     */
+    cwd: PathBase;
+    /**
+     * Perform path comparisons case-insensitively.
+     *
+     * Defaults true on Darwin and Windows systems, false elsewhere.
+     */
+    nocase: boolean;
+    /**
+     * The path separator used for parsing paths
+     *
+     * `'/'` on Posix systems, either `'/'` or `'\\'` on Windows
+     */
+    abstract sep: string | RegExp;
+    /**
+     * This class should not be instantiated directly.
+     *
+     * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry
+     *
+     * @internal
+     */
+    constructor(cwd: (URL | string) | undefined, pathImpl: typeof win32 | typeof posix, sep: string | RegExp, { nocase, childrenCacheSize, fs, }?: PathScurryOpts);
+    /**
+     * Get the depth of a provided path, string, or the cwd
+     */
+    depth(path?: Path | string): number;
+    /**
+     * Parse the root portion of a path string
+     *
+     * @internal
+     */
+    abstract parseRootPath(dir: string): string;
+    /**
+     * create a new Path to use as root during construction.
+     *
+     * @internal
+     */
+    abstract newRoot(fs: FSValue): PathBase;
+    /**
+     * Determine whether a given path string is absolute
+     */
+    abstract isAbsolute(p: string): boolean;
+    /**
+     * Return the cache of child entries.  Exposed so subclasses can create
+     * child Path objects in a platform-specific way.
+     *
+     * @internal
+     */
+    childrenCache(): ChildrenCache;
+    /**
+     * Resolve one or more path strings to a resolved string
+     *
+     * Same interface as require('path').resolve.
+     *
+     * Much faster than path.resolve() when called multiple times for the same
+     * path, because the resolved Path objects are cached.  Much slower
+     * otherwise.
+     */
+    resolve(...paths: string[]): string;
+    /**
+     * Resolve one or more path strings to a resolved string, returning
+     * the posix path.  Identical to .resolve() on posix systems, but on
+     * windows will return a forward-slash separated UNC path.
+     *
+     * Same interface as require('path').resolve.
+     *
+     * Much faster than path.resolve() when called multiple times for the same
+     * path, because the resolved Path objects are cached.  Much slower
+     * otherwise.
+     */
+    resolvePosix(...paths: string[]): string;
+    /**
+     * find the relative path from the cwd to the supplied path string or entry
+     */
+    relative(entry?: PathBase | string): string;
+    /**
+     * find the relative path from the cwd to the supplied path string or
+     * entry, using / as the path delimiter, even on Windows.
+     */
+    relativePosix(entry?: PathBase | string): string;
+    /**
+     * Return the basename for the provided string or Path object
+     */
+    basename(entry?: PathBase | string): string;
+    /**
+     * Return the dirname for the provided string or Path object
+     */
+    dirname(entry?: PathBase | string): string;
+    /**
+     * Return an array of known child entries.
+     *
+     * First argument may be either a string, or a Path object.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     *
+     * Unlike `fs.readdir()`, the `withFileTypes` option defaults to `true`. Set
+     * `{ withFileTypes: false }` to return strings.
+     */
+    readdir(): Promise;
+    readdir(opts: {
+        withFileTypes: true;
+    }): Promise;
+    readdir(opts: {
+        withFileTypes: false;
+    }): Promise;
+    readdir(opts: {
+        withFileTypes: boolean;
+    }): Promise;
+    readdir(entry: PathBase | string): Promise;
+    readdir(entry: PathBase | string, opts: {
+        withFileTypes: true;
+    }): Promise;
+    readdir(entry: PathBase | string, opts: {
+        withFileTypes: false;
+    }): Promise;
+    readdir(entry: PathBase | string, opts: {
+        withFileTypes: boolean;
+    }): Promise;
+    /**
+     * synchronous {@link PathScurryBase.readdir}
+     */
+    readdirSync(): PathBase[];
+    readdirSync(opts: {
+        withFileTypes: true;
+    }): PathBase[];
+    readdirSync(opts: {
+        withFileTypes: false;
+    }): string[];
+    readdirSync(opts: {
+        withFileTypes: boolean;
+    }): PathBase[] | string[];
+    readdirSync(entry: PathBase | string): PathBase[];
+    readdirSync(entry: PathBase | string, opts: {
+        withFileTypes: true;
+    }): PathBase[];
+    readdirSync(entry: PathBase | string, opts: {
+        withFileTypes: false;
+    }): string[];
+    readdirSync(entry: PathBase | string, opts: {
+        withFileTypes: boolean;
+    }): PathBase[] | string[];
+    /**
+     * Call lstat() on the string or Path object, and update all known
+     * information that can be determined.
+     *
+     * Note that unlike `fs.lstat()`, the returned value does not contain some
+     * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+     * information is required, you will need to call `fs.lstat` yourself.
+     *
+     * If the Path refers to a nonexistent file, or if the lstat call fails for
+     * any reason, `undefined` is returned.  Otherwise the updated Path object is
+     * returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    lstat(entry?: string | PathBase): Promise;
+    /**
+     * synchronous {@link PathScurryBase.lstat}
+     */
+    lstatSync(entry?: string | PathBase): PathBase | undefined;
+    /**
+     * Return the Path object or string path corresponding to the target of a
+     * symbolic link.
+     *
+     * If the path is not a symbolic link, or if the readlink call fails for any
+     * reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     *
+     * `{withFileTypes}` option defaults to `false`.
+     *
+     * On success, returns a Path object if `withFileTypes` option is true,
+     * otherwise a string.
+     */
+    readlink(): Promise;
+    readlink(opt: {
+        withFileTypes: false;
+    }): Promise;
+    readlink(opt: {
+        withFileTypes: true;
+    }): Promise;
+    readlink(opt: {
+        withFileTypes: boolean;
+    }): Promise;
+    readlink(entry: string | PathBase, opt?: {
+        withFileTypes: false;
+    }): Promise;
+    readlink(entry: string | PathBase, opt: {
+        withFileTypes: true;
+    }): Promise;
+    readlink(entry: string | PathBase, opt: {
+        withFileTypes: boolean;
+    }): Promise;
+    /**
+     * synchronous {@link PathScurryBase.readlink}
+     */
+    readlinkSync(): string | undefined;
+    readlinkSync(opt: {
+        withFileTypes: false;
+    }): string | undefined;
+    readlinkSync(opt: {
+        withFileTypes: true;
+    }): PathBase | undefined;
+    readlinkSync(opt: {
+        withFileTypes: boolean;
+    }): PathBase | string | undefined;
+    readlinkSync(entry: string | PathBase, opt?: {
+        withFileTypes: false;
+    }): string | undefined;
+    readlinkSync(entry: string | PathBase, opt: {
+        withFileTypes: true;
+    }): PathBase | undefined;
+    readlinkSync(entry: string | PathBase, opt: {
+        withFileTypes: boolean;
+    }): string | PathBase | undefined;
+    /**
+     * Return the Path object or string path corresponding to path as resolved
+     * by realpath(3).
+     *
+     * If the realpath call fails for any reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     *
+     * `{withFileTypes}` option defaults to `false`.
+     *
+     * On success, returns a Path object if `withFileTypes` option is true,
+     * otherwise a string.
+     */
+    realpath(): Promise;
+    realpath(opt: {
+        withFileTypes: false;
+    }): Promise;
+    realpath(opt: {
+        withFileTypes: true;
+    }): Promise;
+    realpath(opt: {
+        withFileTypes: boolean;
+    }): Promise;
+    realpath(entry: string | PathBase, opt?: {
+        withFileTypes: false;
+    }): Promise;
+    realpath(entry: string | PathBase, opt: {
+        withFileTypes: true;
+    }): Promise;
+    realpath(entry: string | PathBase, opt: {
+        withFileTypes: boolean;
+    }): Promise;
+    realpathSync(): string | undefined;
+    realpathSync(opt: {
+        withFileTypes: false;
+    }): string | undefined;
+    realpathSync(opt: {
+        withFileTypes: true;
+    }): PathBase | undefined;
+    realpathSync(opt: {
+        withFileTypes: boolean;
+    }): PathBase | string | undefined;
+    realpathSync(entry: string | PathBase, opt?: {
+        withFileTypes: false;
+    }): string | undefined;
+    realpathSync(entry: string | PathBase, opt: {
+        withFileTypes: true;
+    }): PathBase | undefined;
+    realpathSync(entry: string | PathBase, opt: {
+        withFileTypes: boolean;
+    }): string | PathBase | undefined;
+    /**
+     * Asynchronously walk the directory tree, returning an array of
+     * all path strings or Path objects found.
+     *
+     * Note that this will be extremely memory-hungry on large filesystems.
+     * In such cases, it may be better to use the stream or async iterator
+     * walk implementation.
+     */
+    walk(): Promise;
+    walk(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Promise;
+    walk(opts: WalkOptionsWithFileTypesFalse): Promise;
+    walk(opts: WalkOptions): Promise;
+    walk(entry: string | PathBase): Promise;
+    walk(entry: string | PathBase, opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Promise;
+    walk(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): Promise;
+    walk(entry: string | PathBase, opts: WalkOptions): Promise;
+    /**
+     * Synchronously walk the directory tree, returning an array of
+     * all path strings or Path objects found.
+     *
+     * Note that this will be extremely memory-hungry on large filesystems.
+     * In such cases, it may be better to use the stream or async iterator
+     * walk implementation.
+     */
+    walkSync(): PathBase[];
+    walkSync(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): PathBase[];
+    walkSync(opts: WalkOptionsWithFileTypesFalse): string[];
+    walkSync(opts: WalkOptions): string[] | PathBase[];
+    walkSync(entry: string | PathBase): PathBase[];
+    walkSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue): PathBase[];
+    walkSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): string[];
+    walkSync(entry: string | PathBase, opts: WalkOptions): PathBase[] | string[];
+    /**
+     * Support for `for await`
+     *
+     * Alias for {@link PathScurryBase.iterate}
+     *
+     * Note: As of Node 19, this is very slow, compared to other methods of
+     * walking.  Consider using {@link PathScurryBase.stream} if memory overhead
+     * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
+     */
+    [Symbol.asyncIterator](): AsyncGenerator;
+    /**
+     * Async generator form of {@link PathScurryBase.walk}
+     *
+     * Note: As of Node 19, this is very slow, compared to other methods of
+     * walking, especially if most/all of the directory tree has been previously
+     * walked.  Consider using {@link PathScurryBase.stream} if memory overhead
+     * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
+     */
+    iterate(): AsyncGenerator;
+    iterate(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): AsyncGenerator;
+    iterate(opts: WalkOptionsWithFileTypesFalse): AsyncGenerator;
+    iterate(opts: WalkOptions): AsyncGenerator;
+    iterate(entry: string | PathBase): AsyncGenerator;
+    iterate(entry: string | PathBase, opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): AsyncGenerator;
+    iterate(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): AsyncGenerator;
+    iterate(entry: string | PathBase, opts: WalkOptions): AsyncGenerator;
+    /**
+     * Iterating over a PathScurry performs a synchronous walk.
+     *
+     * Alias for {@link PathScurryBase.iterateSync}
+     */
+    [Symbol.iterator](): Generator;
+    iterateSync(): Generator;
+    iterateSync(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Generator;
+    iterateSync(opts: WalkOptionsWithFileTypesFalse): Generator;
+    iterateSync(opts: WalkOptions): Generator;
+    iterateSync(entry: string | PathBase): Generator;
+    iterateSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Generator;
+    iterateSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): Generator;
+    iterateSync(entry: string | PathBase, opts: WalkOptions): Generator;
+    /**
+     * Stream form of {@link PathScurryBase.walk}
+     *
+     * Returns a Minipass stream that emits {@link PathBase} objects by default,
+     * or strings if `{ withFileTypes: false }` is set in the options.
+     */
+    stream(): Minipass;
+    stream(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Minipass;
+    stream(opts: WalkOptionsWithFileTypesFalse): Minipass;
+    stream(opts: WalkOptions): Minipass;
+    stream(entry: string | PathBase): Minipass;
+    stream(entry: string | PathBase, opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue): Minipass;
+    stream(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): Minipass;
+    stream(entry: string | PathBase, opts: WalkOptions): Minipass | Minipass;
+    /**
+     * Synchronous form of {@link PathScurryBase.stream}
+     *
+     * Returns a Minipass stream that emits {@link PathBase} objects by default,
+     * or strings if `{ withFileTypes: false }` is set in the options.
+     *
+     * Will complete the walk in a single tick if the stream is consumed fully.
+     * Otherwise, will pause as needed for stream backpressure.
+     */
+    streamSync(): Minipass;
+    streamSync(opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset): Minipass;
+    streamSync(opts: WalkOptionsWithFileTypesFalse): Minipass;
+    streamSync(opts: WalkOptions): Minipass;
+    streamSync(entry: string | PathBase): Minipass;
+    streamSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue): Minipass;
+    streamSync(entry: string | PathBase, opts: WalkOptionsWithFileTypesFalse): Minipass;
+    streamSync(entry: string | PathBase, opts: WalkOptions): Minipass | Minipass;
+    chdir(path?: string | Path): void;
+}
+/**
+ * Options provided to all walk methods.
+ */
+export interface WalkOptions {
+    /**
+     * Return results as {@link PathBase} objects rather than strings.
+     * When set to false, results are fully resolved paths, as returned by
+     * {@link PathBase.fullpath}.
+     * @default true
+     */
+    withFileTypes?: boolean;
+    /**
+     *  Attempt to read directory entries from symbolic links. Otherwise, only
+     *  actual directories are traversed. Regardless of this setting, a given
+     *  target path will only ever be walked once, meaning that a symbolic link
+     *  to a previously traversed directory will never be followed.
+     *
+     *  Setting this imposes a slight performance penalty, because `readlink`
+     *  must be called on all symbolic links encountered, in order to avoid
+     *  infinite cycles.
+     * @default false
+     */
+    follow?: boolean;
+    /**
+     * Only return entries where the provided function returns true.
+     *
+     * This will not prevent directories from being traversed, even if they do
+     * not pass the filter, though it will prevent directories themselves from
+     * being included in the result set.  See {@link walkFilter}
+     *
+     * Asynchronous functions are not supported here.
+     *
+     * By default, if no filter is provided, all entries and traversed
+     * directories are included.
+     */
+    filter?: (entry: PathBase) => boolean;
+    /**
+     * Only traverse directories (and in the case of {@link follow} being set to
+     * true, symbolic links to directories) if the provided function returns
+     * true.
+     *
+     * This will not prevent directories from being included in the result set,
+     * even if they do not pass the supplied filter function.  See {@link filter}
+     * to do that.
+     *
+     * Asynchronous functions are not supported here.
+     */
+    walkFilter?: (entry: PathBase) => boolean;
+}
+export type WalkOptionsWithFileTypesUnset = WalkOptions & {
+    withFileTypes?: undefined;
+};
+export type WalkOptionsWithFileTypesTrue = WalkOptions & {
+    withFileTypes: true;
+};
+export type WalkOptionsWithFileTypesFalse = WalkOptions & {
+    withFileTypes: false;
+};
+/**
+ * Windows implementation of {@link PathScurryBase}
+ *
+ * Defaults to case insensitve, uses `'\\'` to generate path strings.  Uses
+ * {@link PathWin32} for Path objects.
+ */
+export declare class PathScurryWin32 extends PathScurryBase {
+    /**
+     * separator for generating path strings
+     */
+    sep: '\\';
+    constructor(cwd?: URL | string, opts?: PathScurryOpts);
+    /**
+     * @internal
+     */
+    parseRootPath(dir: string): string;
+    /**
+     * @internal
+     */
+    newRoot(fs: FSValue): PathWin32;
+    /**
+     * Return true if the provided path string is an absolute path
+     */
+    isAbsolute(p: string): boolean;
+}
+/**
+ * {@link PathScurryBase} implementation for all posix systems other than Darwin.
+ *
+ * Defaults to case-sensitive matching, uses `'/'` to generate path strings.
+ *
+ * Uses {@link PathPosix} for Path objects.
+ */
+export declare class PathScurryPosix extends PathScurryBase {
+    /**
+     * separator for generating path strings
+     */
+    sep: '/';
+    constructor(cwd?: URL | string, opts?: PathScurryOpts);
+    /**
+     * @internal
+     */
+    parseRootPath(_dir: string): string;
+    /**
+     * @internal
+     */
+    newRoot(fs: FSValue): PathPosix;
+    /**
+     * Return true if the provided path string is an absolute path
+     */
+    isAbsolute(p: string): boolean;
+}
+/**
+ * {@link PathScurryBase} implementation for Darwin (macOS) systems.
+ *
+ * Defaults to case-insensitive matching, uses `'/'` for generating path
+ * strings.
+ *
+ * Uses {@link PathPosix} for Path objects.
+ */
+export declare class PathScurryDarwin extends PathScurryPosix {
+    constructor(cwd?: URL | string, opts?: PathScurryOpts);
+}
+/**
+ * Default {@link PathBase} implementation for the current platform.
+ *
+ * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.
+ */
+export declare const Path: typeof PathWin32 | typeof PathPosix;
+export type Path = PathBase | InstanceType;
+/**
+ * Default {@link PathScurryBase} implementation for the current platform.
+ *
+ * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on
+ * Darwin (macOS) systems, {@link PathScurryPosix} on all others.
+ */
+export declare const PathScurry: typeof PathScurryWin32 | typeof PathScurryDarwin | typeof PathScurryPosix;
+export type PathScurry = PathScurryBase | InstanceType;
+export {};
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/path-scurry/dist/esm/index.d.ts.map b/node_modules/path-scurry/dist/esm/index.d.ts.map
new file mode 100644
index 00000000..beb3fe5a
--- /dev/null
+++ b/node_modules/path-scurry/dist/esm/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/path-scurry/dist/esm/index.js b/node_modules/path-scurry/dist/esm/index.js
new file mode 100644
index 00000000..42be74c3
--- /dev/null
+++ b/node_modules/path-scurry/dist/esm/index.js
@@ -0,0 +1,1981 @@
+import { LRUCache } from 'lru-cache';
+import { posix, win32 } from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { lstatSync, readdir as readdirCB, readdirSync, readlinkSync, realpathSync as rps, } from 'fs';
+import * as actualFS from 'node:fs';
+const realpathSync = rps.native;
+// TODO: test perf of fs/promises realpath vs realpathCB,
+// since the promises one uses realpath.native
+import { lstat, readdir, readlink, realpath } from 'node:fs/promises';
+import { Minipass } from 'minipass';
+const defaultFS = {
+    lstatSync,
+    readdir: readdirCB,
+    readdirSync,
+    readlinkSync,
+    realpathSync,
+    promises: {
+        lstat,
+        readdir,
+        readlink,
+        realpath,
+    },
+};
+// if they just gave us require('fs') then use our default
+const fsFromOption = (fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS ?
+    defaultFS
+    : {
+        ...defaultFS,
+        ...fsOption,
+        promises: {
+            ...defaultFS.promises,
+            ...(fsOption.promises || {}),
+        },
+    };
+// turn something like //?/c:/ into c:\
+const uncDriveRegexp = /^\\\\\?\\([a-z]:)\\?$/i;
+const uncToDrive = (rootPath) => rootPath.replace(/\//g, '\\').replace(uncDriveRegexp, '$1\\');
+// windows paths are separated by either / or \
+const eitherSep = /[\\\/]/;
+const UNKNOWN = 0; // may not even exist, for all we know
+const IFIFO = 0b0001;
+const IFCHR = 0b0010;
+const IFDIR = 0b0100;
+const IFBLK = 0b0110;
+const IFREG = 0b1000;
+const IFLNK = 0b1010;
+const IFSOCK = 0b1100;
+const IFMT = 0b1111;
+// mask to unset low 4 bits
+const IFMT_UNKNOWN = ~IFMT;
+// set after successfully calling readdir() and getting entries.
+const READDIR_CALLED = 0b0000_0001_0000;
+// set after a successful lstat()
+const LSTAT_CALLED = 0b0000_0010_0000;
+// set if an entry (or one of its parents) is definitely not a dir
+const ENOTDIR = 0b0000_0100_0000;
+// set if an entry (or one of its parents) does not exist
+// (can also be set on lstat errors like EACCES or ENAMETOOLONG)
+const ENOENT = 0b0000_1000_0000;
+// cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK
+// set if we fail to readlink
+const ENOREADLINK = 0b0001_0000_0000;
+// set if we know realpath() will fail
+const ENOREALPATH = 0b0010_0000_0000;
+const ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH;
+const TYPEMASK = 0b0011_1111_1111;
+const entToType = (s) => s.isFile() ? IFREG
+    : s.isDirectory() ? IFDIR
+        : s.isSymbolicLink() ? IFLNK
+            : s.isCharacterDevice() ? IFCHR
+                : s.isBlockDevice() ? IFBLK
+                    : s.isSocket() ? IFSOCK
+                        : s.isFIFO() ? IFIFO
+                            : UNKNOWN;
+// normalize unicode path names
+const normalizeCache = new Map();
+const normalize = (s) => {
+    const c = normalizeCache.get(s);
+    if (c)
+        return c;
+    const n = s.normalize('NFKD');
+    normalizeCache.set(s, n);
+    return n;
+};
+const normalizeNocaseCache = new Map();
+const normalizeNocase = (s) => {
+    const c = normalizeNocaseCache.get(s);
+    if (c)
+        return c;
+    const n = normalize(s.toLowerCase());
+    normalizeNocaseCache.set(s, n);
+    return n;
+};
+/**
+ * An LRUCache for storing resolved path strings or Path objects.
+ * @internal
+ */
+export class ResolveCache extends LRUCache {
+    constructor() {
+        super({ max: 256 });
+    }
+}
+// In order to prevent blowing out the js heap by allocating hundreds of
+// thousands of Path entries when walking extremely large trees, the "children"
+// in this tree are represented by storing an array of Path entries in an
+// LRUCache, indexed by the parent.  At any time, Path.children() may return an
+// empty array, indicating that it doesn't know about any of its children, and
+// thus has to rebuild that cache.  This is fine, it just means that we don't
+// benefit as much from having the cached entries, but huge directory walks
+// don't blow out the stack, and smaller ones are still as fast as possible.
+//
+//It does impose some complexity when building up the readdir data, because we
+//need to pass a reference to the children array that we started with.
+/**
+ * an LRUCache for storing child entries.
+ * @internal
+ */
+export class ChildrenCache extends LRUCache {
+    constructor(maxSize = 16 * 1024) {
+        super({
+            maxSize,
+            // parent + children
+            sizeCalculation: a => a.length + 1,
+        });
+    }
+}
+const setAsCwd = Symbol('PathScurry setAsCwd');
+/**
+ * Path objects are sort of like a super-powered
+ * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}
+ *
+ * Each one represents a single filesystem entry on disk, which may or may not
+ * exist. It includes methods for reading various types of information via
+ * lstat, readlink, and readdir, and caches all information to the greatest
+ * degree possible.
+ *
+ * Note that fs operations that would normally throw will instead return an
+ * "empty" value. This is in order to prevent excessive overhead from error
+ * stack traces.
+ */
+export class PathBase {
+    /**
+     * the basename of this path
+     *
+     * **Important**: *always* test the path name against any test string
+     * usingthe {@link isNamed} method, and not by directly comparing this
+     * string. Otherwise, unicode path strings that the system sees as identical
+     * will not be properly treated as the same path, leading to incorrect
+     * behavior and possible security issues.
+     */
+    name;
+    /**
+     * the Path entry corresponding to the path root.
+     *
+     * @internal
+     */
+    root;
+    /**
+     * All roots found within the current PathScurry family
+     *
+     * @internal
+     */
+    roots;
+    /**
+     * a reference to the parent path, or undefined in the case of root entries
+     *
+     * @internal
+     */
+    parent;
+    /**
+     * boolean indicating whether paths are compared case-insensitively
+     * @internal
+     */
+    nocase;
+    /**
+     * boolean indicating that this path is the current working directory
+     * of the PathScurry collection that contains it.
+     */
+    isCWD = false;
+    // potential default fs override
+    #fs;
+    // Stats fields
+    #dev;
+    get dev() {
+        return this.#dev;
+    }
+    #mode;
+    get mode() {
+        return this.#mode;
+    }
+    #nlink;
+    get nlink() {
+        return this.#nlink;
+    }
+    #uid;
+    get uid() {
+        return this.#uid;
+    }
+    #gid;
+    get gid() {
+        return this.#gid;
+    }
+    #rdev;
+    get rdev() {
+        return this.#rdev;
+    }
+    #blksize;
+    get blksize() {
+        return this.#blksize;
+    }
+    #ino;
+    get ino() {
+        return this.#ino;
+    }
+    #size;
+    get size() {
+        return this.#size;
+    }
+    #blocks;
+    get blocks() {
+        return this.#blocks;
+    }
+    #atimeMs;
+    get atimeMs() {
+        return this.#atimeMs;
+    }
+    #mtimeMs;
+    get mtimeMs() {
+        return this.#mtimeMs;
+    }
+    #ctimeMs;
+    get ctimeMs() {
+        return this.#ctimeMs;
+    }
+    #birthtimeMs;
+    get birthtimeMs() {
+        return this.#birthtimeMs;
+    }
+    #atime;
+    get atime() {
+        return this.#atime;
+    }
+    #mtime;
+    get mtime() {
+        return this.#mtime;
+    }
+    #ctime;
+    get ctime() {
+        return this.#ctime;
+    }
+    #birthtime;
+    get birthtime() {
+        return this.#birthtime;
+    }
+    #matchName;
+    #depth;
+    #fullpath;
+    #fullpathPosix;
+    #relative;
+    #relativePosix;
+    #type;
+    #children;
+    #linkTarget;
+    #realpath;
+    /**
+     * This property is for compatibility with the Dirent class as of
+     * Node v20, where Dirent['parentPath'] refers to the path of the
+     * directory that was passed to readdir. For root entries, it's the path
+     * to the entry itself.
+     */
+    get parentPath() {
+        return (this.parent || this).fullpath();
+    }
+    /**
+     * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,
+     * this property refers to the *parent* path, not the path object itself.
+     *
+     * @deprecated
+     */
+    get path() {
+        return this.parentPath;
+    }
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        this.name = name;
+        this.#matchName = nocase ? normalizeNocase(name) : normalize(name);
+        this.#type = type & TYPEMASK;
+        this.nocase = nocase;
+        this.roots = roots;
+        this.root = root || this;
+        this.#children = children;
+        this.#fullpath = opts.fullpath;
+        this.#relative = opts.relative;
+        this.#relativePosix = opts.relativePosix;
+        this.parent = opts.parent;
+        if (this.parent) {
+            this.#fs = this.parent.#fs;
+        }
+        else {
+            this.#fs = fsFromOption(opts.fs);
+        }
+    }
+    /**
+     * Returns the depth of the Path object from its root.
+     *
+     * For example, a path at `/foo/bar` would have a depth of 2.
+     */
+    depth() {
+        if (this.#depth !== undefined)
+            return this.#depth;
+        if (!this.parent)
+            return (this.#depth = 0);
+        return (this.#depth = this.parent.depth() + 1);
+    }
+    /**
+     * @internal
+     */
+    childrenCache() {
+        return this.#children;
+    }
+    /**
+     * Get the Path object referenced by the string path, resolved from this Path
+     */
+    resolve(path) {
+        if (!path) {
+            return this;
+        }
+        const rootPath = this.getRootString(path);
+        const dir = path.substring(rootPath.length);
+        const dirParts = dir.split(this.splitSep);
+        const result = rootPath ?
+            this.getRoot(rootPath).#resolveParts(dirParts)
+            : this.#resolveParts(dirParts);
+        return result;
+    }
+    #resolveParts(dirParts) {
+        let p = this;
+        for (const part of dirParts) {
+            p = p.child(part);
+        }
+        return p;
+    }
+    /**
+     * Returns the cached children Path objects, if still available.  If they
+     * have fallen out of the cache, then returns an empty array, and resets the
+     * READDIR_CALLED bit, so that future calls to readdir() will require an fs
+     * lookup.
+     *
+     * @internal
+     */
+    children() {
+        const cached = this.#children.get(this);
+        if (cached) {
+            return cached;
+        }
+        const children = Object.assign([], { provisional: 0 });
+        this.#children.set(this, children);
+        this.#type &= ~READDIR_CALLED;
+        return children;
+    }
+    /**
+     * Resolves a path portion and returns or creates the child Path.
+     *
+     * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is
+     * `'..'`.
+     *
+     * This should not be called directly.  If `pathPart` contains any path
+     * separators, it will lead to unsafe undefined behavior.
+     *
+     * Use `Path.resolve()` instead.
+     *
+     * @internal
+     */
+    child(pathPart, opts) {
+        if (pathPart === '' || pathPart === '.') {
+            return this;
+        }
+        if (pathPart === '..') {
+            return this.parent || this;
+        }
+        // find the child
+        const children = this.children();
+        const name = this.nocase ? normalizeNocase(pathPart) : normalize(pathPart);
+        for (const p of children) {
+            if (p.#matchName === name) {
+                return p;
+            }
+        }
+        // didn't find it, create provisional child, since it might not
+        // actually exist.  If we know the parent isn't a dir, then
+        // in fact it CAN'T exist.
+        const s = this.parent ? this.sep : '';
+        const fullpath = this.#fullpath ? this.#fullpath + s + pathPart : undefined;
+        const pchild = this.newChild(pathPart, UNKNOWN, {
+            ...opts,
+            parent: this,
+            fullpath,
+        });
+        if (!this.canReaddir()) {
+            pchild.#type |= ENOENT;
+        }
+        // don't have to update provisional, because if we have real children,
+        // then provisional is set to children.length, otherwise a lower number
+        children.push(pchild);
+        return pchild;
+    }
+    /**
+     * The relative path from the cwd. If it does not share an ancestor with
+     * the cwd, then this ends up being equivalent to the fullpath()
+     */
+    relative() {
+        if (this.isCWD)
+            return '';
+        if (this.#relative !== undefined) {
+            return this.#relative;
+        }
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+            return (this.#relative = this.name);
+        }
+        const pv = p.relative();
+        return pv + (!pv || !p.parent ? '' : this.sep) + name;
+    }
+    /**
+     * The relative path from the cwd, using / as the path separator.
+     * If it does not share an ancestor with
+     * the cwd, then this ends up being equivalent to the fullpathPosix()
+     * On posix systems, this is identical to relative().
+     */
+    relativePosix() {
+        if (this.sep === '/')
+            return this.relative();
+        if (this.isCWD)
+            return '';
+        if (this.#relativePosix !== undefined)
+            return this.#relativePosix;
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+            return (this.#relativePosix = this.fullpathPosix());
+        }
+        const pv = p.relativePosix();
+        return pv + (!pv || !p.parent ? '' : '/') + name;
+    }
+    /**
+     * The fully resolved path string for this Path entry
+     */
+    fullpath() {
+        if (this.#fullpath !== undefined) {
+            return this.#fullpath;
+        }
+        const name = this.name;
+        const p = this.parent;
+        if (!p) {
+            return (this.#fullpath = this.name);
+        }
+        const pv = p.fullpath();
+        const fp = pv + (!p.parent ? '' : this.sep) + name;
+        return (this.#fullpath = fp);
+    }
+    /**
+     * On platforms other than windows, this is identical to fullpath.
+     *
+     * On windows, this is overridden to return the forward-slash form of the
+     * full UNC path.
+     */
+    fullpathPosix() {
+        if (this.#fullpathPosix !== undefined)
+            return this.#fullpathPosix;
+        if (this.sep === '/')
+            return (this.#fullpathPosix = this.fullpath());
+        if (!this.parent) {
+            const p = this.fullpath().replace(/\\/g, '/');
+            if (/^[a-z]:\//i.test(p)) {
+                return (this.#fullpathPosix = `//?/${p}`);
+            }
+            else {
+                return (this.#fullpathPosix = p);
+            }
+        }
+        const p = this.parent;
+        const pfpp = p.fullpathPosix();
+        const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name;
+        return (this.#fullpathPosix = fpp);
+    }
+    /**
+     * Is the Path of an unknown type?
+     *
+     * Note that we might know *something* about it if there has been a previous
+     * filesystem operation, for example that it does not exist, or is not a
+     * link, or whether it has child entries.
+     */
+    isUnknown() {
+        return (this.#type & IFMT) === UNKNOWN;
+    }
+    isType(type) {
+        return this[`is${type}`]();
+    }
+    getType() {
+        return (this.isUnknown() ? 'Unknown'
+            : this.isDirectory() ? 'Directory'
+                : this.isFile() ? 'File'
+                    : this.isSymbolicLink() ? 'SymbolicLink'
+                        : this.isFIFO() ? 'FIFO'
+                            : this.isCharacterDevice() ? 'CharacterDevice'
+                                : this.isBlockDevice() ? 'BlockDevice'
+                                    : /* c8 ignore start */ this.isSocket() ? 'Socket'
+                                        : 'Unknown');
+        /* c8 ignore stop */
+    }
+    /**
+     * Is the Path a regular file?
+     */
+    isFile() {
+        return (this.#type & IFMT) === IFREG;
+    }
+    /**
+     * Is the Path a directory?
+     */
+    isDirectory() {
+        return (this.#type & IFMT) === IFDIR;
+    }
+    /**
+     * Is the path a character device?
+     */
+    isCharacterDevice() {
+        return (this.#type & IFMT) === IFCHR;
+    }
+    /**
+     * Is the path a block device?
+     */
+    isBlockDevice() {
+        return (this.#type & IFMT) === IFBLK;
+    }
+    /**
+     * Is the path a FIFO pipe?
+     */
+    isFIFO() {
+        return (this.#type & IFMT) === IFIFO;
+    }
+    /**
+     * Is the path a socket?
+     */
+    isSocket() {
+        return (this.#type & IFMT) === IFSOCK;
+    }
+    /**
+     * Is the path a symbolic link?
+     */
+    isSymbolicLink() {
+        return (this.#type & IFLNK) === IFLNK;
+    }
+    /**
+     * Return the entry if it has been subject of a successful lstat, or
+     * undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* simply
+     * mean that we haven't called lstat on it.
+     */
+    lstatCached() {
+        return this.#type & LSTAT_CALLED ? this : undefined;
+    }
+    /**
+     * Return the cached link target if the entry has been the subject of a
+     * successful readlink, or undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * readlink() has been called at some point.
+     */
+    readlinkCached() {
+        return this.#linkTarget;
+    }
+    /**
+     * Returns the cached realpath target if the entry has been the subject
+     * of a successful realpath, or undefined otherwise.
+     *
+     * Does not read the filesystem, so an undefined result *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * realpath() has been called at some point.
+     */
+    realpathCached() {
+        return this.#realpath;
+    }
+    /**
+     * Returns the cached child Path entries array if the entry has been the
+     * subject of a successful readdir(), or [] otherwise.
+     *
+     * Does not read the filesystem, so an empty array *could* just mean we
+     * don't have any cached data. Only use it if you are very sure that a
+     * readdir() has been called recently enough to still be valid.
+     */
+    readdirCached() {
+        const children = this.children();
+        return children.slice(0, children.provisional);
+    }
+    /**
+     * Return true if it's worth trying to readlink.  Ie, we don't (yet) have
+     * any indication that readlink will definitely fail.
+     *
+     * Returns false if the path is known to not be a symlink, if a previous
+     * readlink failed, or if the entry does not exist.
+     */
+    canReadlink() {
+        if (this.#linkTarget)
+            return true;
+        if (!this.parent)
+            return false;
+        // cases where it cannot possibly succeed
+        const ifmt = this.#type & IFMT;
+        return !((ifmt !== UNKNOWN && ifmt !== IFLNK) ||
+            this.#type & ENOREADLINK ||
+            this.#type & ENOENT);
+    }
+    /**
+     * Return true if readdir has previously been successfully called on this
+     * path, indicating that cachedReaddir() is likely valid.
+     */
+    calledReaddir() {
+        return !!(this.#type & READDIR_CALLED);
+    }
+    /**
+     * Returns true if the path is known to not exist. That is, a previous lstat
+     * or readdir failed to verify its existence when that would have been
+     * expected, or a parent entry was marked either enoent or enotdir.
+     */
+    isENOENT() {
+        return !!(this.#type & ENOENT);
+    }
+    /**
+     * Return true if the path is a match for the given path name.  This handles
+     * case sensitivity and unicode normalization.
+     *
+     * Note: even on case-sensitive systems, it is **not** safe to test the
+     * equality of the `.name` property to determine whether a given pathname
+     * matches, due to unicode normalization mismatches.
+     *
+     * Always use this method instead of testing the `path.name` property
+     * directly.
+     */
+    isNamed(n) {
+        return !this.nocase ?
+            this.#matchName === normalize(n)
+            : this.#matchName === normalizeNocase(n);
+    }
+    /**
+     * Return the Path object corresponding to the target of a symbolic link.
+     *
+     * If the Path is not a symbolic link, or if the readlink call fails for any
+     * reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     */
+    async readlink() {
+        const target = this.#linkTarget;
+        if (target) {
+            return target;
+        }
+        if (!this.canReadlink()) {
+            return undefined;
+        }
+        /* c8 ignore start */
+        // already covered by the canReadlink test, here for ts grumples
+        if (!this.parent) {
+            return undefined;
+        }
+        /* c8 ignore stop */
+        try {
+            const read = await this.#fs.promises.readlink(this.fullpath());
+            const linkTarget = (await this.parent.realpath())?.resolve(read);
+            if (linkTarget) {
+                return (this.#linkTarget = linkTarget);
+            }
+        }
+        catch (er) {
+            this.#readlinkFail(er.code);
+            return undefined;
+        }
+    }
+    /**
+     * Synchronous {@link PathBase.readlink}
+     */
+    readlinkSync() {
+        const target = this.#linkTarget;
+        if (target) {
+            return target;
+        }
+        if (!this.canReadlink()) {
+            return undefined;
+        }
+        /* c8 ignore start */
+        // already covered by the canReadlink test, here for ts grumples
+        if (!this.parent) {
+            return undefined;
+        }
+        /* c8 ignore stop */
+        try {
+            const read = this.#fs.readlinkSync(this.fullpath());
+            const linkTarget = this.parent.realpathSync()?.resolve(read);
+            if (linkTarget) {
+                return (this.#linkTarget = linkTarget);
+            }
+        }
+        catch (er) {
+            this.#readlinkFail(er.code);
+            return undefined;
+        }
+    }
+    #readdirSuccess(children) {
+        // succeeded, mark readdir called bit
+        this.#type |= READDIR_CALLED;
+        // mark all remaining provisional children as ENOENT
+        for (let p = children.provisional; p < children.length; p++) {
+            const c = children[p];
+            if (c)
+                c.#markENOENT();
+        }
+    }
+    #markENOENT() {
+        // mark as UNKNOWN and ENOENT
+        if (this.#type & ENOENT)
+            return;
+        this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN;
+        this.#markChildrenENOENT();
+    }
+    #markChildrenENOENT() {
+        // all children are provisional and do not exist
+        const children = this.children();
+        children.provisional = 0;
+        for (const p of children) {
+            p.#markENOENT();
+        }
+    }
+    #markENOREALPATH() {
+        this.#type |= ENOREALPATH;
+        this.#markENOTDIR();
+    }
+    // save the information when we know the entry is not a dir
+    #markENOTDIR() {
+        // entry is not a directory, so any children can't exist.
+        // this *should* be impossible, since any children created
+        // after it's been marked ENOTDIR should be marked ENOENT,
+        // so it won't even get to this point.
+        /* c8 ignore start */
+        if (this.#type & ENOTDIR)
+            return;
+        /* c8 ignore stop */
+        let t = this.#type;
+        // this could happen if we stat a dir, then delete it,
+        // then try to read it or one of its children.
+        if ((t & IFMT) === IFDIR)
+            t &= IFMT_UNKNOWN;
+        this.#type = t | ENOTDIR;
+        this.#markChildrenENOENT();
+    }
+    #readdirFail(code = '') {
+        // markENOTDIR and markENOENT also set provisional=0
+        if (code === 'ENOTDIR' || code === 'EPERM') {
+            this.#markENOTDIR();
+        }
+        else if (code === 'ENOENT') {
+            this.#markENOENT();
+        }
+        else {
+            this.children().provisional = 0;
+        }
+    }
+    #lstatFail(code = '') {
+        // Windows just raises ENOENT in this case, disable for win CI
+        /* c8 ignore start */
+        if (code === 'ENOTDIR') {
+            // already know it has a parent by this point
+            const p = this.parent;
+            p.#markENOTDIR();
+        }
+        else if (code === 'ENOENT') {
+            /* c8 ignore stop */
+            this.#markENOENT();
+        }
+    }
+    #readlinkFail(code = '') {
+        let ter = this.#type;
+        ter |= ENOREADLINK;
+        if (code === 'ENOENT')
+            ter |= ENOENT;
+        // windows gets a weird error when you try to readlink a file
+        if (code === 'EINVAL' || code === 'UNKNOWN') {
+            // exists, but not a symlink, we don't know WHAT it is, so remove
+            // all IFMT bits.
+            ter &= IFMT_UNKNOWN;
+        }
+        this.#type = ter;
+        // windows just gets ENOENT in this case.  We do cover the case,
+        // just disabled because it's impossible on Windows CI
+        /* c8 ignore start */
+        if (code === 'ENOTDIR' && this.parent) {
+            this.parent.#markENOTDIR();
+        }
+        /* c8 ignore stop */
+    }
+    #readdirAddChild(e, c) {
+        return (this.#readdirMaybePromoteChild(e, c) ||
+            this.#readdirAddNewChild(e, c));
+    }
+    #readdirAddNewChild(e, c) {
+        // alloc new entry at head, so it's never provisional
+        const type = entToType(e);
+        const child = this.newChild(e.name, type, { parent: this });
+        const ifmt = child.#type & IFMT;
+        if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {
+            child.#type |= ENOTDIR;
+        }
+        c.unshift(child);
+        c.provisional++;
+        return child;
+    }
+    #readdirMaybePromoteChild(e, c) {
+        for (let p = c.provisional; p < c.length; p++) {
+            const pchild = c[p];
+            const name = this.nocase ? normalizeNocase(e.name) : normalize(e.name);
+            if (name !== pchild.#matchName) {
+                continue;
+            }
+            return this.#readdirPromoteChild(e, pchild, p, c);
+        }
+    }
+    #readdirPromoteChild(e, p, index, c) {
+        const v = p.name;
+        // retain any other flags, but set ifmt from dirent
+        p.#type = (p.#type & IFMT_UNKNOWN) | entToType(e);
+        // case sensitivity fixing when we learn the true name.
+        if (v !== e.name)
+            p.name = e.name;
+        // just advance provisional index (potentially off the list),
+        // otherwise we have to splice/pop it out and re-insert at head
+        if (index !== c.provisional) {
+            if (index === c.length - 1)
+                c.pop();
+            else
+                c.splice(index, 1);
+            c.unshift(p);
+        }
+        c.provisional++;
+        return p;
+    }
+    /**
+     * Call lstat() on this Path, and update all known information that can be
+     * determined.
+     *
+     * Note that unlike `fs.lstat()`, the returned value does not contain some
+     * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+     * information is required, you will need to call `fs.lstat` yourself.
+     *
+     * If the Path refers to a nonexistent file, or if the lstat call fails for
+     * any reason, `undefined` is returned.  Otherwise the updated Path object is
+     * returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    async lstat() {
+        if ((this.#type & ENOENT) === 0) {
+            try {
+                this.#applyStat(await this.#fs.promises.lstat(this.fullpath()));
+                return this;
+            }
+            catch (er) {
+                this.#lstatFail(er.code);
+            }
+        }
+    }
+    /**
+     * synchronous {@link PathBase.lstat}
+     */
+    lstatSync() {
+        if ((this.#type & ENOENT) === 0) {
+            try {
+                this.#applyStat(this.#fs.lstatSync(this.fullpath()));
+                return this;
+            }
+            catch (er) {
+                this.#lstatFail(er.code);
+            }
+        }
+    }
+    #applyStat(st) {
+        const { atime, atimeMs, birthtime, birthtimeMs, blksize, blocks, ctime, ctimeMs, dev, gid, ino, mode, mtime, mtimeMs, nlink, rdev, size, uid, } = st;
+        this.#atime = atime;
+        this.#atimeMs = atimeMs;
+        this.#birthtime = birthtime;
+        this.#birthtimeMs = birthtimeMs;
+        this.#blksize = blksize;
+        this.#blocks = blocks;
+        this.#ctime = ctime;
+        this.#ctimeMs = ctimeMs;
+        this.#dev = dev;
+        this.#gid = gid;
+        this.#ino = ino;
+        this.#mode = mode;
+        this.#mtime = mtime;
+        this.#mtimeMs = mtimeMs;
+        this.#nlink = nlink;
+        this.#rdev = rdev;
+        this.#size = size;
+        this.#uid = uid;
+        const ifmt = entToType(st);
+        // retain any other flags, but set the ifmt
+        this.#type = (this.#type & IFMT_UNKNOWN) | ifmt | LSTAT_CALLED;
+        if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {
+            this.#type |= ENOTDIR;
+        }
+    }
+    #onReaddirCB = [];
+    #readdirCBInFlight = false;
+    #callOnReaddirCB(children) {
+        this.#readdirCBInFlight = false;
+        const cbs = this.#onReaddirCB.slice();
+        this.#onReaddirCB.length = 0;
+        cbs.forEach(cb => cb(null, children));
+    }
+    /**
+     * Standard node-style callback interface to get list of directory entries.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     *
+     * @param cb The callback called with (er, entries).  Note that the `er`
+     * param is somewhat extraneous, as all readdir() errors are handled and
+     * simply result in an empty set of entries being returned.
+     * @param allowZalgo Boolean indicating that immediately known results should
+     * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release
+     * zalgo at your peril, the dark pony lord is devious and unforgiving.
+     */
+    readdirCB(cb, allowZalgo = false) {
+        if (!this.canReaddir()) {
+            if (allowZalgo)
+                cb(null, []);
+            else
+                queueMicrotask(() => cb(null, []));
+            return;
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+            const c = children.slice(0, children.provisional);
+            if (allowZalgo)
+                cb(null, c);
+            else
+                queueMicrotask(() => cb(null, c));
+            return;
+        }
+        // don't have to worry about zalgo at this point.
+        this.#onReaddirCB.push(cb);
+        if (this.#readdirCBInFlight) {
+            return;
+        }
+        this.#readdirCBInFlight = true;
+        // else read the directory, fill up children
+        // de-provisionalize any provisional children.
+        const fullpath = this.fullpath();
+        this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {
+            if (er) {
+                this.#readdirFail(er.code);
+                children.provisional = 0;
+            }
+            else {
+                // if we didn't get an error, we always get entries.
+                //@ts-ignore
+                for (const e of entries) {
+                    this.#readdirAddChild(e, children);
+                }
+                this.#readdirSuccess(children);
+            }
+            this.#callOnReaddirCB(children.slice(0, children.provisional));
+            return;
+        });
+    }
+    #asyncReaddirInFlight;
+    /**
+     * Return an array of known child entries.
+     *
+     * If the Path cannot or does not contain any children, then an empty array
+     * is returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    async readdir() {
+        if (!this.canReaddir()) {
+            return [];
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+            return children.slice(0, children.provisional);
+        }
+        // else read the directory, fill up children
+        // de-provisionalize any provisional children.
+        const fullpath = this.fullpath();
+        if (this.#asyncReaddirInFlight) {
+            await this.#asyncReaddirInFlight;
+        }
+        else {
+            /* c8 ignore start */
+            let resolve = () => { };
+            /* c8 ignore stop */
+            this.#asyncReaddirInFlight = new Promise(res => (resolve = res));
+            try {
+                for (const e of await this.#fs.promises.readdir(fullpath, {
+                    withFileTypes: true,
+                })) {
+                    this.#readdirAddChild(e, children);
+                }
+                this.#readdirSuccess(children);
+            }
+            catch (er) {
+                this.#readdirFail(er.code);
+                children.provisional = 0;
+            }
+            this.#asyncReaddirInFlight = undefined;
+            resolve();
+        }
+        return children.slice(0, children.provisional);
+    }
+    /**
+     * synchronous {@link PathBase.readdir}
+     */
+    readdirSync() {
+        if (!this.canReaddir()) {
+            return [];
+        }
+        const children = this.children();
+        if (this.calledReaddir()) {
+            return children.slice(0, children.provisional);
+        }
+        // else read the directory, fill up children
+        // de-provisionalize any provisional children.
+        const fullpath = this.fullpath();
+        try {
+            for (const e of this.#fs.readdirSync(fullpath, {
+                withFileTypes: true,
+            })) {
+                this.#readdirAddChild(e, children);
+            }
+            this.#readdirSuccess(children);
+        }
+        catch (er) {
+            this.#readdirFail(er.code);
+            children.provisional = 0;
+        }
+        return children.slice(0, children.provisional);
+    }
+    canReaddir() {
+        if (this.#type & ENOCHILD)
+            return false;
+        const ifmt = IFMT & this.#type;
+        // we always set ENOTDIR when setting IFMT, so should be impossible
+        /* c8 ignore start */
+        if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {
+            return false;
+        }
+        /* c8 ignore stop */
+        return true;
+    }
+    shouldWalk(dirs, walkFilter) {
+        return ((this.#type & IFDIR) === IFDIR &&
+            !(this.#type & ENOCHILD) &&
+            !dirs.has(this) &&
+            (!walkFilter || walkFilter(this)));
+    }
+    /**
+     * Return the Path object corresponding to path as resolved
+     * by realpath(3).
+     *
+     * If the realpath call fails for any reason, `undefined` is returned.
+     *
+     * Result is cached, and thus may be outdated if the filesystem is mutated.
+     * On success, returns a Path object.
+     */
+    async realpath() {
+        if (this.#realpath)
+            return this.#realpath;
+        if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
+            return undefined;
+        try {
+            const rp = await this.#fs.promises.realpath(this.fullpath());
+            return (this.#realpath = this.resolve(rp));
+        }
+        catch (_) {
+            this.#markENOREALPATH();
+        }
+    }
+    /**
+     * Synchronous {@link realpath}
+     */
+    realpathSync() {
+        if (this.#realpath)
+            return this.#realpath;
+        if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type)
+            return undefined;
+        try {
+            const rp = this.#fs.realpathSync(this.fullpath());
+            return (this.#realpath = this.resolve(rp));
+        }
+        catch (_) {
+            this.#markENOREALPATH();
+        }
+    }
+    /**
+     * Internal method to mark this Path object as the scurry cwd,
+     * called by {@link PathScurry#chdir}
+     *
+     * @internal
+     */
+    [setAsCwd](oldCwd) {
+        if (oldCwd === this)
+            return;
+        oldCwd.isCWD = false;
+        this.isCWD = true;
+        const changed = new Set([]);
+        let rp = [];
+        let p = this;
+        while (p && p.parent) {
+            changed.add(p);
+            p.#relative = rp.join(this.sep);
+            p.#relativePosix = rp.join('/');
+            p = p.parent;
+            rp.push('..');
+        }
+        // now un-memoize parents of old cwd
+        p = oldCwd;
+        while (p && p.parent && !changed.has(p)) {
+            p.#relative = undefined;
+            p.#relativePosix = undefined;
+            p = p.parent;
+        }
+    }
+}
+/**
+ * Path class used on win32 systems
+ *
+ * Uses `'\\'` as the path separator for returned paths, either `'\\'` or `'/'`
+ * as the path separator for parsing paths.
+ */
+export class PathWin32 extends PathBase {
+    /**
+     * Separator for generating path strings.
+     */
+    sep = '\\';
+    /**
+     * Separator for parsing path strings.
+     */
+    splitSep = eitherSep;
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        super(name, type, root, roots, nocase, children, opts);
+    }
+    /**
+     * @internal
+     */
+    newChild(name, type = UNKNOWN, opts = {}) {
+        return new PathWin32(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
+    }
+    /**
+     * @internal
+     */
+    getRootString(path) {
+        return win32.parse(path).root;
+    }
+    /**
+     * @internal
+     */
+    getRoot(rootPath) {
+        rootPath = uncToDrive(rootPath.toUpperCase());
+        if (rootPath === this.root.name) {
+            return this.root;
+        }
+        // ok, not that one, check if it matches another we know about
+        for (const [compare, root] of Object.entries(this.roots)) {
+            if (this.sameRoot(rootPath, compare)) {
+                return (this.roots[rootPath] = root);
+            }
+        }
+        // otherwise, have to create a new one.
+        return (this.roots[rootPath] = new PathScurryWin32(rootPath, this).root);
+    }
+    /**
+     * @internal
+     */
+    sameRoot(rootPath, compare = this.root.name) {
+        // windows can (rarely) have case-sensitive filesystem, but
+        // UNC and drive letters are always case-insensitive, and canonically
+        // represented uppercase.
+        rootPath = rootPath
+            .toUpperCase()
+            .replace(/\//g, '\\')
+            .replace(uncDriveRegexp, '$1\\');
+        return rootPath === compare;
+    }
+}
+/**
+ * Path class used on all posix systems.
+ *
+ * Uses `'/'` as the path separator.
+ */
+export class PathPosix extends PathBase {
+    /**
+     * separator for parsing path strings
+     */
+    splitSep = '/';
+    /**
+     * separator for generating path strings
+     */
+    sep = '/';
+    /**
+     * Do not create new Path objects directly.  They should always be accessed
+     * via the PathScurry class or other methods on the Path class.
+     *
+     * @internal
+     */
+    constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) {
+        super(name, type, root, roots, nocase, children, opts);
+    }
+    /**
+     * @internal
+     */
+    getRootString(path) {
+        return path.startsWith('/') ? '/' : '';
+    }
+    /**
+     * @internal
+     */
+    getRoot(_rootPath) {
+        return this.root;
+    }
+    /**
+     * @internal
+     */
+    newChild(name, type = UNKNOWN, opts = {}) {
+        return new PathPosix(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts);
+    }
+}
+/**
+ * The base class for all PathScurry classes, providing the interface for path
+ * resolution and filesystem operations.
+ *
+ * Typically, you should *not* instantiate this class directly, but rather one
+ * of the platform-specific classes, or the exported {@link PathScurry} which
+ * defaults to the current platform.
+ */
+export class PathScurryBase {
+    /**
+     * The root Path entry for the current working directory of this Scurry
+     */
+    root;
+    /**
+     * The string path for the root of this Scurry's current working directory
+     */
+    rootPath;
+    /**
+     * A collection of all roots encountered, referenced by rootPath
+     */
+    roots;
+    /**
+     * The Path entry corresponding to this PathScurry's current working directory.
+     */
+    cwd;
+    #resolveCache;
+    #resolvePosixCache;
+    #children;
+    /**
+     * Perform path comparisons case-insensitively.
+     *
+     * Defaults true on Darwin and Windows systems, false elsewhere.
+     */
+    nocase;
+    #fs;
+    /**
+     * This class should not be instantiated directly.
+     *
+     * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry
+     *
+     * @internal
+     */
+    constructor(cwd = process.cwd(), pathImpl, sep, { nocase, childrenCacheSize = 16 * 1024, fs = defaultFS, } = {}) {
+        this.#fs = fsFromOption(fs);
+        if (cwd instanceof URL || cwd.startsWith('file://')) {
+            cwd = fileURLToPath(cwd);
+        }
+        // resolve and split root, and then add to the store.
+        // this is the only time we call path.resolve()
+        const cwdPath = pathImpl.resolve(cwd);
+        this.roots = Object.create(null);
+        this.rootPath = this.parseRootPath(cwdPath);
+        this.#resolveCache = new ResolveCache();
+        this.#resolvePosixCache = new ResolveCache();
+        this.#children = new ChildrenCache(childrenCacheSize);
+        const split = cwdPath.substring(this.rootPath.length).split(sep);
+        // resolve('/') leaves '', splits to [''], we don't want that.
+        if (split.length === 1 && !split[0]) {
+            split.pop();
+        }
+        /* c8 ignore start */
+        if (nocase === undefined) {
+            throw new TypeError('must provide nocase setting to PathScurryBase ctor');
+        }
+        /* c8 ignore stop */
+        this.nocase = nocase;
+        this.root = this.newRoot(this.#fs);
+        this.roots[this.rootPath] = this.root;
+        let prev = this.root;
+        let len = split.length - 1;
+        const joinSep = pathImpl.sep;
+        let abs = this.rootPath;
+        let sawFirst = false;
+        for (const part of split) {
+            const l = len--;
+            prev = prev.child(part, {
+                relative: new Array(l).fill('..').join(joinSep),
+                relativePosix: new Array(l).fill('..').join('/'),
+                fullpath: (abs += (sawFirst ? '' : joinSep) + part),
+            });
+            sawFirst = true;
+        }
+        this.cwd = prev;
+    }
+    /**
+     * Get the depth of a provided path, string, or the cwd
+     */
+    depth(path = this.cwd) {
+        if (typeof path === 'string') {
+            path = this.cwd.resolve(path);
+        }
+        return path.depth();
+    }
+    /**
+     * Return the cache of child entries.  Exposed so subclasses can create
+     * child Path objects in a platform-specific way.
+     *
+     * @internal
+     */
+    childrenCache() {
+        return this.#children;
+    }
+    /**
+     * Resolve one or more path strings to a resolved string
+     *
+     * Same interface as require('path').resolve.
+     *
+     * Much faster than path.resolve() when called multiple times for the same
+     * path, because the resolved Path objects are cached.  Much slower
+     * otherwise.
+     */
+    resolve(...paths) {
+        // first figure out the minimum number of paths we have to test
+        // we always start at cwd, but any absolutes will bump the start
+        let r = '';
+        for (let i = paths.length - 1; i >= 0; i--) {
+            const p = paths[i];
+            if (!p || p === '.')
+                continue;
+            r = r ? `${p}/${r}` : p;
+            if (this.isAbsolute(p)) {
+                break;
+            }
+        }
+        const cached = this.#resolveCache.get(r);
+        if (cached !== undefined) {
+            return cached;
+        }
+        const result = this.cwd.resolve(r).fullpath();
+        this.#resolveCache.set(r, result);
+        return result;
+    }
+    /**
+     * Resolve one or more path strings to a resolved string, returning
+     * the posix path.  Identical to .resolve() on posix systems, but on
+     * windows will return a forward-slash separated UNC path.
+     *
+     * Same interface as require('path').resolve.
+     *
+     * Much faster than path.resolve() when called multiple times for the same
+     * path, because the resolved Path objects are cached.  Much slower
+     * otherwise.
+     */
+    resolvePosix(...paths) {
+        // first figure out the minimum number of paths we have to test
+        // we always start at cwd, but any absolutes will bump the start
+        let r = '';
+        for (let i = paths.length - 1; i >= 0; i--) {
+            const p = paths[i];
+            if (!p || p === '.')
+                continue;
+            r = r ? `${p}/${r}` : p;
+            if (this.isAbsolute(p)) {
+                break;
+            }
+        }
+        const cached = this.#resolvePosixCache.get(r);
+        if (cached !== undefined) {
+            return cached;
+        }
+        const result = this.cwd.resolve(r).fullpathPosix();
+        this.#resolvePosixCache.set(r, result);
+        return result;
+    }
+    /**
+     * find the relative path from the cwd to the supplied path string or entry
+     */
+    relative(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.relative();
+    }
+    /**
+     * find the relative path from the cwd to the supplied path string or
+     * entry, using / as the path delimiter, even on Windows.
+     */
+    relativePosix(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.relativePosix();
+    }
+    /**
+     * Return the basename for the provided string or Path object
+     */
+    basename(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.name;
+    }
+    /**
+     * Return the dirname for the provided string or Path object
+     */
+    dirname(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return (entry.parent || entry).fullpath();
+    }
+    async readdir(entry = this.cwd, opts = {
+        withFileTypes: true,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes } = opts;
+        if (!entry.canReaddir()) {
+            return [];
+        }
+        else {
+            const p = await entry.readdir();
+            return withFileTypes ? p : p.map(e => e.name);
+        }
+    }
+    readdirSync(entry = this.cwd, opts = {
+        withFileTypes: true,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true } = opts;
+        if (!entry.canReaddir()) {
+            return [];
+        }
+        else if (withFileTypes) {
+            return entry.readdirSync();
+        }
+        else {
+            return entry.readdirSync().map(e => e.name);
+        }
+    }
+    /**
+     * Call lstat() on the string or Path object, and update all known
+     * information that can be determined.
+     *
+     * Note that unlike `fs.lstat()`, the returned value does not contain some
+     * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that
+     * information is required, you will need to call `fs.lstat` yourself.
+     *
+     * If the Path refers to a nonexistent file, or if the lstat call fails for
+     * any reason, `undefined` is returned.  Otherwise the updated Path object is
+     * returned.
+     *
+     * Results are cached, and thus may be out of date if the filesystem is
+     * mutated.
+     */
+    async lstat(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.lstat();
+    }
+    /**
+     * synchronous {@link PathScurryBase.lstat}
+     */
+    lstatSync(entry = this.cwd) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        return entry.lstatSync();
+    }
+    async readlink(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            withFileTypes = entry.withFileTypes;
+            entry = this.cwd;
+        }
+        const e = await entry.readlink();
+        return withFileTypes ? e : e?.fullpath();
+    }
+    readlinkSync(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            withFileTypes = entry.withFileTypes;
+            entry = this.cwd;
+        }
+        const e = entry.readlinkSync();
+        return withFileTypes ? e : e?.fullpath();
+    }
+    async realpath(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            withFileTypes = entry.withFileTypes;
+            entry = this.cwd;
+        }
+        const e = await entry.realpath();
+        return withFileTypes ? e : e?.fullpath();
+    }
+    realpathSync(entry = this.cwd, { withFileTypes } = {
+        withFileTypes: false,
+    }) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            withFileTypes = entry.withFileTypes;
+            entry = this.cwd;
+        }
+        const e = entry.realpathSync();
+        return withFileTypes ? e : e?.fullpath();
+    }
+    async walk(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        const results = [];
+        if (!filter || filter(entry)) {
+            results.push(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = new Set();
+        const walk = (dir, cb) => {
+            dirs.add(dir);
+            dir.readdirCB((er, entries) => {
+                /* c8 ignore start */
+                if (er) {
+                    return cb(er);
+                }
+                /* c8 ignore stop */
+                let len = entries.length;
+                if (!len)
+                    return cb();
+                const next = () => {
+                    if (--len === 0) {
+                        cb();
+                    }
+                };
+                for (const e of entries) {
+                    if (!filter || filter(e)) {
+                        results.push(withFileTypes ? e : e.fullpath());
+                    }
+                    if (follow && e.isSymbolicLink()) {
+                        e.realpath()
+                            .then(r => (r?.isUnknown() ? r.lstat() : r))
+                            .then(r => r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next());
+                    }
+                    else {
+                        if (e.shouldWalk(dirs, walkFilter)) {
+                            walk(e, next);
+                        }
+                        else {
+                            next();
+                        }
+                    }
+                }
+            }, true); // zalgooooooo
+        };
+        const start = entry;
+        return new Promise((res, rej) => {
+            walk(start, er => {
+                /* c8 ignore start */
+                if (er)
+                    return rej(er);
+                /* c8 ignore stop */
+                res(results);
+            });
+        });
+    }
+    walkSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        const results = [];
+        if (!filter || filter(entry)) {
+            results.push(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = new Set([entry]);
+        for (const dir of dirs) {
+            const entries = dir.readdirSync();
+            for (const e of entries) {
+                if (!filter || filter(e)) {
+                    results.push(withFileTypes ? e : e.fullpath());
+                }
+                let r = e;
+                if (e.isSymbolicLink()) {
+                    if (!(follow && (r = e.realpathSync())))
+                        continue;
+                    if (r.isUnknown())
+                        r.lstatSync();
+                }
+                if (r.shouldWalk(dirs, walkFilter)) {
+                    dirs.add(r);
+                }
+            }
+        }
+        return results;
+    }
+    /**
+     * Support for `for await`
+     *
+     * Alias for {@link PathScurryBase.iterate}
+     *
+     * Note: As of Node 19, this is very slow, compared to other methods of
+     * walking.  Consider using {@link PathScurryBase.stream} if memory overhead
+     * and backpressure are concerns, or {@link PathScurryBase.walk} if not.
+     */
+    [Symbol.asyncIterator]() {
+        return this.iterate();
+    }
+    iterate(entry = this.cwd, options = {}) {
+        // iterating async over the stream is significantly more performant,
+        // especially in the warm-cache scenario, because it buffers up directory
+        // entries in the background instead of waiting for a yield for each one.
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            options = entry;
+            entry = this.cwd;
+        }
+        return this.stream(entry, options)[Symbol.asyncIterator]();
+    }
+    /**
+     * Iterating over a PathScurry performs a synchronous walk.
+     *
+     * Alias for {@link PathScurryBase.iterateSync}
+     */
+    [Symbol.iterator]() {
+        return this.iterateSync();
+    }
+    *iterateSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        if (!filter || filter(entry)) {
+            yield withFileTypes ? entry : entry.fullpath();
+        }
+        const dirs = new Set([entry]);
+        for (const dir of dirs) {
+            const entries = dir.readdirSync();
+            for (const e of entries) {
+                if (!filter || filter(e)) {
+                    yield withFileTypes ? e : e.fullpath();
+                }
+                let r = e;
+                if (e.isSymbolicLink()) {
+                    if (!(follow && (r = e.realpathSync())))
+                        continue;
+                    if (r.isUnknown())
+                        r.lstatSync();
+                }
+                if (r.shouldWalk(dirs, walkFilter)) {
+                    dirs.add(r);
+                }
+            }
+        }
+    }
+    stream(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        const results = new Minipass({ objectMode: true });
+        if (!filter || filter(entry)) {
+            results.write(withFileTypes ? entry : entry.fullpath());
+        }
+        const dirs = new Set();
+        const queue = [entry];
+        let processing = 0;
+        const process = () => {
+            let paused = false;
+            while (!paused) {
+                const dir = queue.shift();
+                if (!dir) {
+                    if (processing === 0)
+                        results.end();
+                    return;
+                }
+                processing++;
+                dirs.add(dir);
+                const onReaddir = (er, entries, didRealpaths = false) => {
+                    /* c8 ignore start */
+                    if (er)
+                        return results.emit('error', er);
+                    /* c8 ignore stop */
+                    if (follow && !didRealpaths) {
+                        const promises = [];
+                        for (const e of entries) {
+                            if (e.isSymbolicLink()) {
+                                promises.push(e
+                                    .realpath()
+                                    .then((r) => r?.isUnknown() ? r.lstat() : r));
+                            }
+                        }
+                        if (promises.length) {
+                            Promise.all(promises).then(() => onReaddir(null, entries, true));
+                            return;
+                        }
+                    }
+                    for (const e of entries) {
+                        if (e && (!filter || filter(e))) {
+                            if (!results.write(withFileTypes ? e : e.fullpath())) {
+                                paused = true;
+                            }
+                        }
+                    }
+                    processing--;
+                    for (const e of entries) {
+                        const r = e.realpathCached() || e;
+                        if (r.shouldWalk(dirs, walkFilter)) {
+                            queue.push(r);
+                        }
+                    }
+                    if (paused && !results.flowing) {
+                        results.once('drain', process);
+                    }
+                    else if (!sync) {
+                        process();
+                    }
+                };
+                // zalgo containment
+                let sync = true;
+                dir.readdirCB(onReaddir, true);
+                sync = false;
+            }
+        };
+        process();
+        return results;
+    }
+    streamSync(entry = this.cwd, opts = {}) {
+        if (typeof entry === 'string') {
+            entry = this.cwd.resolve(entry);
+        }
+        else if (!(entry instanceof PathBase)) {
+            opts = entry;
+            entry = this.cwd;
+        }
+        const { withFileTypes = true, follow = false, filter, walkFilter, } = opts;
+        const results = new Minipass({ objectMode: true });
+        const dirs = new Set();
+        if (!filter || filter(entry)) {
+            results.write(withFileTypes ? entry : entry.fullpath());
+        }
+        const queue = [entry];
+        let processing = 0;
+        const process = () => {
+            let paused = false;
+            while (!paused) {
+                const dir = queue.shift();
+                if (!dir) {
+                    if (processing === 0)
+                        results.end();
+                    return;
+                }
+                processing++;
+                dirs.add(dir);
+                const entries = dir.readdirSync();
+                for (const e of entries) {
+                    if (!filter || filter(e)) {
+                        if (!results.write(withFileTypes ? e : e.fullpath())) {
+                            paused = true;
+                        }
+                    }
+                }
+                processing--;
+                for (const e of entries) {
+                    let r = e;
+                    if (e.isSymbolicLink()) {
+                        if (!(follow && (r = e.realpathSync())))
+                            continue;
+                        if (r.isUnknown())
+                            r.lstatSync();
+                    }
+                    if (r.shouldWalk(dirs, walkFilter)) {
+                        queue.push(r);
+                    }
+                }
+            }
+            if (paused && !results.flowing)
+                results.once('drain', process);
+        };
+        process();
+        return results;
+    }
+    chdir(path = this.cwd) {
+        const oldCwd = this.cwd;
+        this.cwd = typeof path === 'string' ? this.cwd.resolve(path) : path;
+        this.cwd[setAsCwd](oldCwd);
+    }
+}
+/**
+ * Windows implementation of {@link PathScurryBase}
+ *
+ * Defaults to case insensitve, uses `'\\'` to generate path strings.  Uses
+ * {@link PathWin32} for Path objects.
+ */
+export class PathScurryWin32 extends PathScurryBase {
+    /**
+     * separator for generating path strings
+     */
+    sep = '\\';
+    constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = true } = opts;
+        super(cwd, win32, '\\', { ...opts, nocase });
+        this.nocase = nocase;
+        for (let p = this.cwd; p; p = p.parent) {
+            p.nocase = this.nocase;
+        }
+    }
+    /**
+     * @internal
+     */
+    parseRootPath(dir) {
+        // if the path starts with a single separator, it's not a UNC, and we'll
+        // just get separator as the root, and driveFromUNC will return \
+        // In that case, mount \ on the root from the cwd.
+        return win32.parse(dir).root.toUpperCase();
+    }
+    /**
+     * @internal
+     */
+    newRoot(fs) {
+        return new PathWin32(this.rootPath, IFDIR, undefined, this.roots, this.nocase, this.childrenCache(), { fs });
+    }
+    /**
+     * Return true if the provided path string is an absolute path
+     */
+    isAbsolute(p) {
+        return (p.startsWith('/') || p.startsWith('\\') || /^[a-z]:(\/|\\)/i.test(p));
+    }
+}
+/**
+ * {@link PathScurryBase} implementation for all posix systems other than Darwin.
+ *
+ * Defaults to case-sensitive matching, uses `'/'` to generate path strings.
+ *
+ * Uses {@link PathPosix} for Path objects.
+ */
+export class PathScurryPosix extends PathScurryBase {
+    /**
+     * separator for generating path strings
+     */
+    sep = '/';
+    constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = false } = opts;
+        super(cwd, posix, '/', { ...opts, nocase });
+        this.nocase = nocase;
+    }
+    /**
+     * @internal
+     */
+    parseRootPath(_dir) {
+        return '/';
+    }
+    /**
+     * @internal
+     */
+    newRoot(fs) {
+        return new PathPosix(this.rootPath, IFDIR, undefined, this.roots, this.nocase, this.childrenCache(), { fs });
+    }
+    /**
+     * Return true if the provided path string is an absolute path
+     */
+    isAbsolute(p) {
+        return p.startsWith('/');
+    }
+}
+/**
+ * {@link PathScurryBase} implementation for Darwin (macOS) systems.
+ *
+ * Defaults to case-insensitive matching, uses `'/'` for generating path
+ * strings.
+ *
+ * Uses {@link PathPosix} for Path objects.
+ */
+export class PathScurryDarwin extends PathScurryPosix {
+    constructor(cwd = process.cwd(), opts = {}) {
+        const { nocase = true } = opts;
+        super(cwd, { ...opts, nocase });
+    }
+}
+/**
+ * Default {@link PathBase} implementation for the current platform.
+ *
+ * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.
+ */
+export const Path = process.platform === 'win32' ? PathWin32 : PathPosix;
+/**
+ * Default {@link PathScurryBase} implementation for the current platform.
+ *
+ * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on
+ * Darwin (macOS) systems, {@link PathScurryPosix} on all others.
+ */
+export const PathScurry = process.platform === 'win32' ? PathScurryWin32
+    : process.platform === 'darwin' ? PathScurryDarwin
+        : PathScurryPosix;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/path-scurry/dist/esm/index.js.map b/node_modules/path-scurry/dist/esm/index.js.map
new file mode 100644
index 00000000..e4d112ce
--- /dev/null
+++ b/node_modules/path-scurry/dist/esm/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { LRUCache } from 'lru-cache'\nimport { posix, win32 } from 'node:path'\n\nimport { fileURLToPath } from 'node:url'\n\nimport {\n  lstatSync,\n  readdir as readdirCB,\n  readdirSync,\n  readlinkSync,\n  realpathSync as rps,\n} from 'fs'\nimport * as actualFS from 'node:fs'\n\nconst realpathSync = rps.native\n// TODO: test perf of fs/promises realpath vs realpathCB,\n// since the promises one uses realpath.native\n\nimport { lstat, readdir, readlink, realpath } from 'node:fs/promises'\n\nimport { Minipass } from 'minipass'\nimport type { Dirent, Stats } from 'node:fs'\n\n/**\n * An object that will be used to override the default `fs`\n * methods.  Any methods that are not overridden will use Node's\n * built-in implementations.\n *\n * - lstatSync\n * - readdir (callback `withFileTypes` Dirent variant, used for\n *   readdirCB and most walks)\n * - readdirSync\n * - readlinkSync\n * - realpathSync\n * - promises: Object containing the following async methods:\n *   - lstat\n *   - readdir (Dirent variant only)\n *   - readlink\n *   - realpath\n */\nexport interface FSOption {\n  lstatSync?: (path: string) => Stats\n  readdir?: (\n    path: string,\n    options: { withFileTypes: true },\n    cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any,\n  ) => void\n  readdirSync?: (\n    path: string,\n    options: { withFileTypes: true },\n  ) => Dirent[]\n  readlinkSync?: (path: string) => string\n  realpathSync?: (path: string) => string\n  promises?: {\n    lstat?: (path: string) => Promise\n    readdir?: (\n      path: string,\n      options: { withFileTypes: true },\n    ) => Promise\n    readlink?: (path: string) => Promise\n    realpath?: (path: string) => Promise\n    [k: string]: any\n  }\n  [k: string]: any\n}\n\ninterface FSValue {\n  lstatSync: (path: string) => Stats\n  readdir: (\n    path: string,\n    options: { withFileTypes: true },\n    cb: (er: NodeJS.ErrnoException | null, entries?: Dirent[]) => any,\n  ) => void\n  readdirSync: (path: string, options: { withFileTypes: true }) => Dirent[]\n  readlinkSync: (path: string) => string\n  realpathSync: (path: string) => string\n  promises: {\n    lstat: (path: string) => Promise\n    readdir: (\n      path: string,\n      options: { withFileTypes: true },\n    ) => Promise\n    readlink: (path: string) => Promise\n    realpath: (path: string) => Promise\n    [k: string]: any\n  }\n  [k: string]: any\n}\n\nconst defaultFS: FSValue = {\n  lstatSync,\n  readdir: readdirCB,\n  readdirSync,\n  readlinkSync,\n  realpathSync,\n  promises: {\n    lstat,\n    readdir,\n    readlink,\n    realpath,\n  },\n}\n\n// if they just gave us require('fs') then use our default\nconst fsFromOption = (fsOption?: FSOption): FSValue =>\n  !fsOption || fsOption === defaultFS || fsOption === actualFS ?\n    defaultFS\n  : {\n      ...defaultFS,\n      ...fsOption,\n      promises: {\n        ...defaultFS.promises,\n        ...(fsOption.promises || {}),\n      },\n    }\n\n// turn something like //?/c:/ into c:\\\nconst uncDriveRegexp = /^\\\\\\\\\\?\\\\([a-z]:)\\\\?$/i\nconst uncToDrive = (rootPath: string): string =>\n  rootPath.replace(/\\//g, '\\\\').replace(uncDriveRegexp, '$1\\\\')\n\n// windows paths are separated by either / or \\\nconst eitherSep = /[\\\\\\/]/\n\nconst UNKNOWN = 0 // may not even exist, for all we know\nconst IFIFO = 0b0001\nconst IFCHR = 0b0010\nconst IFDIR = 0b0100\nconst IFBLK = 0b0110\nconst IFREG = 0b1000\nconst IFLNK = 0b1010\nconst IFSOCK = 0b1100\nconst IFMT = 0b1111\n\nexport type Type =\n  | 'Unknown'\n  | 'FIFO'\n  | 'CharacterDevice'\n  | 'Directory'\n  | 'BlockDevice'\n  | 'File'\n  | 'SymbolicLink'\n  | 'Socket'\n\n// mask to unset low 4 bits\nconst IFMT_UNKNOWN = ~IFMT\n\n// set after successfully calling readdir() and getting entries.\nconst READDIR_CALLED = 0b0000_0001_0000\n// set after a successful lstat()\nconst LSTAT_CALLED = 0b0000_0010_0000\n// set if an entry (or one of its parents) is definitely not a dir\nconst ENOTDIR = 0b0000_0100_0000\n// set if an entry (or one of its parents) does not exist\n// (can also be set on lstat errors like EACCES or ENAMETOOLONG)\nconst ENOENT = 0b0000_1000_0000\n// cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK\n// set if we fail to readlink\nconst ENOREADLINK = 0b0001_0000_0000\n// set if we know realpath() will fail\nconst ENOREALPATH = 0b0010_0000_0000\n\nconst ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH\nconst TYPEMASK = 0b0011_1111_1111\n\nconst entToType = (s: Dirent | Stats) =>\n  s.isFile() ? IFREG\n  : s.isDirectory() ? IFDIR\n  : s.isSymbolicLink() ? IFLNK\n  : s.isCharacterDevice() ? IFCHR\n  : s.isBlockDevice() ? IFBLK\n  : s.isSocket() ? IFSOCK\n  : s.isFIFO() ? IFIFO\n  : UNKNOWN\n\n// normalize unicode path names\nconst normalizeCache = new Map()\nconst normalize = (s: string) => {\n  const c = normalizeCache.get(s)\n  if (c) return c\n  const n = s.normalize('NFKD')\n  normalizeCache.set(s, n)\n  return n\n}\n\nconst normalizeNocaseCache = new Map()\nconst normalizeNocase = (s: string) => {\n  const c = normalizeNocaseCache.get(s)\n  if (c) return c\n  const n = normalize(s.toLowerCase())\n  normalizeNocaseCache.set(s, n)\n  return n\n}\n\n/**\n * Options that may be provided to the Path constructor\n */\nexport interface PathOpts {\n  fullpath?: string\n  relative?: string\n  relativePosix?: string\n  parent?: PathBase\n  /**\n   * See {@link FSOption}\n   */\n  fs?: FSOption\n}\n\n/**\n * An LRUCache for storing resolved path strings or Path objects.\n * @internal\n */\nexport class ResolveCache extends LRUCache {\n  constructor() {\n    super({ max: 256 })\n  }\n}\n\n// In order to prevent blowing out the js heap by allocating hundreds of\n// thousands of Path entries when walking extremely large trees, the \"children\"\n// in this tree are represented by storing an array of Path entries in an\n// LRUCache, indexed by the parent.  At any time, Path.children() may return an\n// empty array, indicating that it doesn't know about any of its children, and\n// thus has to rebuild that cache.  This is fine, it just means that we don't\n// benefit as much from having the cached entries, but huge directory walks\n// don't blow out the stack, and smaller ones are still as fast as possible.\n//\n//It does impose some complexity when building up the readdir data, because we\n//need to pass a reference to the children array that we started with.\n\n/**\n * an LRUCache for storing child entries.\n * @internal\n */\nexport class ChildrenCache extends LRUCache {\n  constructor(maxSize: number = 16 * 1024) {\n    super({\n      maxSize,\n      // parent + children\n      sizeCalculation: a => a.length + 1,\n    })\n  }\n}\n\n/**\n * Array of Path objects, plus a marker indicating the first provisional entry\n *\n * @internal\n */\nexport type Children = PathBase[] & { provisional: number }\n\nconst setAsCwd = Symbol('PathScurry setAsCwd')\n\n/**\n * Path objects are sort of like a super-powered\n * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent}\n *\n * Each one represents a single filesystem entry on disk, which may or may not\n * exist. It includes methods for reading various types of information via\n * lstat, readlink, and readdir, and caches all information to the greatest\n * degree possible.\n *\n * Note that fs operations that would normally throw will instead return an\n * \"empty\" value. This is in order to prevent excessive overhead from error\n * stack traces.\n */\nexport abstract class PathBase implements Dirent {\n  /**\n   * the basename of this path\n   *\n   * **Important**: *always* test the path name against any test string\n   * usingthe {@link isNamed} method, and not by directly comparing this\n   * string. Otherwise, unicode path strings that the system sees as identical\n   * will not be properly treated as the same path, leading to incorrect\n   * behavior and possible security issues.\n   */\n  name: string\n  /**\n   * the Path entry corresponding to the path root.\n   *\n   * @internal\n   */\n  root: PathBase\n  /**\n   * All roots found within the current PathScurry family\n   *\n   * @internal\n   */\n  roots: { [k: string]: PathBase }\n  /**\n   * a reference to the parent path, or undefined in the case of root entries\n   *\n   * @internal\n   */\n  parent?: PathBase\n  /**\n   * boolean indicating whether paths are compared case-insensitively\n   * @internal\n   */\n  nocase: boolean\n\n  /**\n   * boolean indicating that this path is the current working directory\n   * of the PathScurry collection that contains it.\n   */\n  isCWD: boolean = false\n\n  /**\n   * the string or regexp used to split paths. On posix, it is `'/'`, and on\n   * windows it is a RegExp matching either `'/'` or `'\\\\'`\n   */\n  abstract splitSep: string | RegExp\n  /**\n   * The path separator string to use when joining paths\n   */\n  abstract sep: string\n\n  // potential default fs override\n  #fs: FSValue\n\n  // Stats fields\n  #dev?: number\n  get dev() {\n    return this.#dev\n  }\n  #mode?: number\n  get mode() {\n    return this.#mode\n  }\n  #nlink?: number\n  get nlink() {\n    return this.#nlink\n  }\n  #uid?: number\n  get uid() {\n    return this.#uid\n  }\n  #gid?: number\n  get gid() {\n    return this.#gid\n  }\n  #rdev?: number\n  get rdev() {\n    return this.#rdev\n  }\n  #blksize?: number\n  get blksize() {\n    return this.#blksize\n  }\n  #ino?: number\n  get ino() {\n    return this.#ino\n  }\n  #size?: number\n  get size() {\n    return this.#size\n  }\n  #blocks?: number\n  get blocks() {\n    return this.#blocks\n  }\n  #atimeMs?: number\n  get atimeMs() {\n    return this.#atimeMs\n  }\n  #mtimeMs?: number\n  get mtimeMs() {\n    return this.#mtimeMs\n  }\n  #ctimeMs?: number\n  get ctimeMs() {\n    return this.#ctimeMs\n  }\n  #birthtimeMs?: number\n  get birthtimeMs() {\n    return this.#birthtimeMs\n  }\n  #atime?: Date\n  get atime() {\n    return this.#atime\n  }\n  #mtime?: Date\n  get mtime() {\n    return this.#mtime\n  }\n  #ctime?: Date\n  get ctime() {\n    return this.#ctime\n  }\n  #birthtime?: Date\n  get birthtime() {\n    return this.#birthtime\n  }\n\n  #matchName: string\n  #depth?: number\n  #fullpath?: string\n  #fullpathPosix?: string\n  #relative?: string\n  #relativePosix?: string\n  #type: number\n  #children: ChildrenCache\n  #linkTarget?: PathBase\n  #realpath?: PathBase\n\n  /**\n   * This property is for compatibility with the Dirent class as of\n   * Node v20, where Dirent['parentPath'] refers to the path of the\n   * directory that was passed to readdir. For root entries, it's the path\n   * to the entry itself.\n   */\n  get parentPath(): string {\n    return (this.parent || this).fullpath()\n  }\n\n  /**\n   * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively,\n   * this property refers to the *parent* path, not the path object itself.\n   *\n   * @deprecated\n   */\n  get path(): string {\n    return this.parentPath\n  }\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    this.name = name\n    this.#matchName = nocase ? normalizeNocase(name) : normalize(name)\n    this.#type = type & TYPEMASK\n    this.nocase = nocase\n    this.roots = roots\n    this.root = root || this\n    this.#children = children\n    this.#fullpath = opts.fullpath\n    this.#relative = opts.relative\n    this.#relativePosix = opts.relativePosix\n    this.parent = opts.parent\n    if (this.parent) {\n      this.#fs = this.parent.#fs\n    } else {\n      this.#fs = fsFromOption(opts.fs)\n    }\n  }\n\n  /**\n   * Returns the depth of the Path object from its root.\n   *\n   * For example, a path at `/foo/bar` would have a depth of 2.\n   */\n  depth(): number {\n    if (this.#depth !== undefined) return this.#depth\n    if (!this.parent) return (this.#depth = 0)\n    return (this.#depth = this.parent.depth() + 1)\n  }\n\n  /**\n   * @internal\n   */\n  abstract getRootString(path: string): string\n  /**\n   * @internal\n   */\n  abstract getRoot(rootPath: string): PathBase\n  /**\n   * @internal\n   */\n  abstract newChild(name: string, type?: number, opts?: PathOpts): PathBase\n\n  /**\n   * @internal\n   */\n  childrenCache() {\n    return this.#children\n  }\n\n  /**\n   * Get the Path object referenced by the string path, resolved from this Path\n   */\n  resolve(path?: string): PathBase {\n    if (!path) {\n      return this\n    }\n    const rootPath = this.getRootString(path)\n    const dir = path.substring(rootPath.length)\n    const dirParts = dir.split(this.splitSep)\n    const result: PathBase =\n      rootPath ?\n        this.getRoot(rootPath).#resolveParts(dirParts)\n      : this.#resolveParts(dirParts)\n    return result\n  }\n\n  #resolveParts(dirParts: string[]) {\n    let p: PathBase = this\n    for (const part of dirParts) {\n      p = p.child(part)\n    }\n    return p\n  }\n\n  /**\n   * Returns the cached children Path objects, if still available.  If they\n   * have fallen out of the cache, then returns an empty array, and resets the\n   * READDIR_CALLED bit, so that future calls to readdir() will require an fs\n   * lookup.\n   *\n   * @internal\n   */\n  children(): Children {\n    const cached = this.#children.get(this)\n    if (cached) {\n      return cached\n    }\n    const children: Children = Object.assign([], { provisional: 0 })\n    this.#children.set(this, children)\n    this.#type &= ~READDIR_CALLED\n    return children\n  }\n\n  /**\n   * Resolves a path portion and returns or creates the child Path.\n   *\n   * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is\n   * `'..'`.\n   *\n   * This should not be called directly.  If `pathPart` contains any path\n   * separators, it will lead to unsafe undefined behavior.\n   *\n   * Use `Path.resolve()` instead.\n   *\n   * @internal\n   */\n  child(pathPart: string, opts?: PathOpts): PathBase {\n    if (pathPart === '' || pathPart === '.') {\n      return this\n    }\n    if (pathPart === '..') {\n      return this.parent || this\n    }\n\n    // find the child\n    const children = this.children()\n    const name =\n      this.nocase ? normalizeNocase(pathPart) : normalize(pathPart)\n    for (const p of children) {\n      if (p.#matchName === name) {\n        return p\n      }\n    }\n\n    // didn't find it, create provisional child, since it might not\n    // actually exist.  If we know the parent isn't a dir, then\n    // in fact it CAN'T exist.\n    const s = this.parent ? this.sep : ''\n    const fullpath =\n      this.#fullpath ? this.#fullpath + s + pathPart : undefined\n    const pchild = this.newChild(pathPart, UNKNOWN, {\n      ...opts,\n      parent: this,\n      fullpath,\n    })\n\n    if (!this.canReaddir()) {\n      pchild.#type |= ENOENT\n    }\n\n    // don't have to update provisional, because if we have real children,\n    // then provisional is set to children.length, otherwise a lower number\n    children.push(pchild)\n    return pchild\n  }\n\n  /**\n   * The relative path from the cwd. If it does not share an ancestor with\n   * the cwd, then this ends up being equivalent to the fullpath()\n   */\n  relative(): string {\n    if (this.isCWD) return ''\n    if (this.#relative !== undefined) {\n      return this.#relative\n    }\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#relative = this.name)\n    }\n    const pv = p.relative()\n    return pv + (!pv || !p.parent ? '' : this.sep) + name\n  }\n\n  /**\n   * The relative path from the cwd, using / as the path separator.\n   * If it does not share an ancestor with\n   * the cwd, then this ends up being equivalent to the fullpathPosix()\n   * On posix systems, this is identical to relative().\n   */\n  relativePosix(): string {\n    if (this.sep === '/') return this.relative()\n    if (this.isCWD) return ''\n    if (this.#relativePosix !== undefined) return this.#relativePosix\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#relativePosix = this.fullpathPosix())\n    }\n    const pv = p.relativePosix()\n    return pv + (!pv || !p.parent ? '' : '/') + name\n  }\n\n  /**\n   * The fully resolved path string for this Path entry\n   */\n  fullpath(): string {\n    if (this.#fullpath !== undefined) {\n      return this.#fullpath\n    }\n    const name = this.name\n    const p = this.parent\n    if (!p) {\n      return (this.#fullpath = this.name)\n    }\n    const pv = p.fullpath()\n    const fp = pv + (!p.parent ? '' : this.sep) + name\n    return (this.#fullpath = fp)\n  }\n\n  /**\n   * On platforms other than windows, this is identical to fullpath.\n   *\n   * On windows, this is overridden to return the forward-slash form of the\n   * full UNC path.\n   */\n  fullpathPosix(): string {\n    if (this.#fullpathPosix !== undefined) return this.#fullpathPosix\n    if (this.sep === '/') return (this.#fullpathPosix = this.fullpath())\n    if (!this.parent) {\n      const p = this.fullpath().replace(/\\\\/g, '/')\n      if (/^[a-z]:\\//i.test(p)) {\n        return (this.#fullpathPosix = `//?/${p}`)\n      } else {\n        return (this.#fullpathPosix = p)\n      }\n    }\n    const p = this.parent\n    const pfpp = p.fullpathPosix()\n    const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name\n    return (this.#fullpathPosix = fpp)\n  }\n\n  /**\n   * Is the Path of an unknown type?\n   *\n   * Note that we might know *something* about it if there has been a previous\n   * filesystem operation, for example that it does not exist, or is not a\n   * link, or whether it has child entries.\n   */\n  isUnknown(): boolean {\n    return (this.#type & IFMT) === UNKNOWN\n  }\n\n  isType(type: Type): boolean {\n    return this[`is${type}`]()\n  }\n\n  getType(): Type {\n    return (\n      this.isUnknown() ? 'Unknown'\n      : this.isDirectory() ? 'Directory'\n      : this.isFile() ? 'File'\n      : this.isSymbolicLink() ? 'SymbolicLink'\n      : this.isFIFO() ? 'FIFO'\n      : this.isCharacterDevice() ? 'CharacterDevice'\n      : this.isBlockDevice() ? 'BlockDevice'\n      : /* c8 ignore start */ this.isSocket() ? 'Socket'\n      : 'Unknown'\n    )\n    /* c8 ignore stop */\n  }\n\n  /**\n   * Is the Path a regular file?\n   */\n  isFile(): boolean {\n    return (this.#type & IFMT) === IFREG\n  }\n\n  /**\n   * Is the Path a directory?\n   */\n  isDirectory(): boolean {\n    return (this.#type & IFMT) === IFDIR\n  }\n\n  /**\n   * Is the path a character device?\n   */\n  isCharacterDevice(): boolean {\n    return (this.#type & IFMT) === IFCHR\n  }\n\n  /**\n   * Is the path a block device?\n   */\n  isBlockDevice(): boolean {\n    return (this.#type & IFMT) === IFBLK\n  }\n\n  /**\n   * Is the path a FIFO pipe?\n   */\n  isFIFO(): boolean {\n    return (this.#type & IFMT) === IFIFO\n  }\n\n  /**\n   * Is the path a socket?\n   */\n  isSocket(): boolean {\n    return (this.#type & IFMT) === IFSOCK\n  }\n\n  /**\n   * Is the path a symbolic link?\n   */\n  isSymbolicLink(): boolean {\n    return (this.#type & IFLNK) === IFLNK\n  }\n\n  /**\n   * Return the entry if it has been subject of a successful lstat, or\n   * undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* simply\n   * mean that we haven't called lstat on it.\n   */\n  lstatCached(): PathBase | undefined {\n    return this.#type & LSTAT_CALLED ? this : undefined\n  }\n\n  /**\n   * Return the cached link target if the entry has been the subject of a\n   * successful readlink, or undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * readlink() has been called at some point.\n   */\n  readlinkCached(): PathBase | undefined {\n    return this.#linkTarget\n  }\n\n  /**\n   * Returns the cached realpath target if the entry has been the subject\n   * of a successful realpath, or undefined otherwise.\n   *\n   * Does not read the filesystem, so an undefined result *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * realpath() has been called at some point.\n   */\n  realpathCached(): PathBase | undefined {\n    return this.#realpath\n  }\n\n  /**\n   * Returns the cached child Path entries array if the entry has been the\n   * subject of a successful readdir(), or [] otherwise.\n   *\n   * Does not read the filesystem, so an empty array *could* just mean we\n   * don't have any cached data. Only use it if you are very sure that a\n   * readdir() has been called recently enough to still be valid.\n   */\n  readdirCached(): PathBase[] {\n    const children = this.children()\n    return children.slice(0, children.provisional)\n  }\n\n  /**\n   * Return true if it's worth trying to readlink.  Ie, we don't (yet) have\n   * any indication that readlink will definitely fail.\n   *\n   * Returns false if the path is known to not be a symlink, if a previous\n   * readlink failed, or if the entry does not exist.\n   */\n  canReadlink(): boolean {\n    if (this.#linkTarget) return true\n    if (!this.parent) return false\n    // cases where it cannot possibly succeed\n    const ifmt = this.#type & IFMT\n    return !(\n      (ifmt !== UNKNOWN && ifmt !== IFLNK) ||\n      this.#type & ENOREADLINK ||\n      this.#type & ENOENT\n    )\n  }\n\n  /**\n   * Return true if readdir has previously been successfully called on this\n   * path, indicating that cachedReaddir() is likely valid.\n   */\n  calledReaddir(): boolean {\n    return !!(this.#type & READDIR_CALLED)\n  }\n\n  /**\n   * Returns true if the path is known to not exist. That is, a previous lstat\n   * or readdir failed to verify its existence when that would have been\n   * expected, or a parent entry was marked either enoent or enotdir.\n   */\n  isENOENT(): boolean {\n    return !!(this.#type & ENOENT)\n  }\n\n  /**\n   * Return true if the path is a match for the given path name.  This handles\n   * case sensitivity and unicode normalization.\n   *\n   * Note: even on case-sensitive systems, it is **not** safe to test the\n   * equality of the `.name` property to determine whether a given pathname\n   * matches, due to unicode normalization mismatches.\n   *\n   * Always use this method instead of testing the `path.name` property\n   * directly.\n   */\n  isNamed(n: string): boolean {\n    return !this.nocase ?\n        this.#matchName === normalize(n)\n      : this.#matchName === normalizeNocase(n)\n  }\n\n  /**\n   * Return the Path object corresponding to the target of a symbolic link.\n   *\n   * If the Path is not a symbolic link, or if the readlink call fails for any\n   * reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   */\n  async readlink(): Promise {\n    const target = this.#linkTarget\n    if (target) {\n      return target\n    }\n    if (!this.canReadlink()) {\n      return undefined\n    }\n    /* c8 ignore start */\n    // already covered by the canReadlink test, here for ts grumples\n    if (!this.parent) {\n      return undefined\n    }\n    /* c8 ignore stop */\n    try {\n      const read = await this.#fs.promises.readlink(this.fullpath())\n      const linkTarget = (await this.parent.realpath())?.resolve(read)\n      if (linkTarget) {\n        return (this.#linkTarget = linkTarget)\n      }\n    } catch (er) {\n      this.#readlinkFail((er as NodeJS.ErrnoException).code)\n      return undefined\n    }\n  }\n\n  /**\n   * Synchronous {@link PathBase.readlink}\n   */\n  readlinkSync(): PathBase | undefined {\n    const target = this.#linkTarget\n    if (target) {\n      return target\n    }\n    if (!this.canReadlink()) {\n      return undefined\n    }\n    /* c8 ignore start */\n    // already covered by the canReadlink test, here for ts grumples\n    if (!this.parent) {\n      return undefined\n    }\n    /* c8 ignore stop */\n    try {\n      const read = this.#fs.readlinkSync(this.fullpath())\n      const linkTarget = this.parent.realpathSync()?.resolve(read)\n      if (linkTarget) {\n        return (this.#linkTarget = linkTarget)\n      }\n    } catch (er) {\n      this.#readlinkFail((er as NodeJS.ErrnoException).code)\n      return undefined\n    }\n  }\n\n  #readdirSuccess(children: Children) {\n    // succeeded, mark readdir called bit\n    this.#type |= READDIR_CALLED\n    // mark all remaining provisional children as ENOENT\n    for (let p = children.provisional; p < children.length; p++) {\n      const c = children[p]\n      if (c) c.#markENOENT()\n    }\n  }\n\n  #markENOENT() {\n    // mark as UNKNOWN and ENOENT\n    if (this.#type & ENOENT) return\n    this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN\n    this.#markChildrenENOENT()\n  }\n\n  #markChildrenENOENT() {\n    // all children are provisional and do not exist\n    const children = this.children()\n    children.provisional = 0\n    for (const p of children) {\n      p.#markENOENT()\n    }\n  }\n\n  #markENOREALPATH() {\n    this.#type |= ENOREALPATH\n    this.#markENOTDIR()\n  }\n\n  // save the information when we know the entry is not a dir\n  #markENOTDIR() {\n    // entry is not a directory, so any children can't exist.\n    // this *should* be impossible, since any children created\n    // after it's been marked ENOTDIR should be marked ENOENT,\n    // so it won't even get to this point.\n    /* c8 ignore start */\n    if (this.#type & ENOTDIR) return\n    /* c8 ignore stop */\n    let t = this.#type\n    // this could happen if we stat a dir, then delete it,\n    // then try to read it or one of its children.\n    if ((t & IFMT) === IFDIR) t &= IFMT_UNKNOWN\n    this.#type = t | ENOTDIR\n    this.#markChildrenENOENT()\n  }\n\n  #readdirFail(code: string = '') {\n    // markENOTDIR and markENOENT also set provisional=0\n    if (code === 'ENOTDIR' || code === 'EPERM') {\n      this.#markENOTDIR()\n    } else if (code === 'ENOENT') {\n      this.#markENOENT()\n    } else {\n      this.children().provisional = 0\n    }\n  }\n\n  #lstatFail(code: string = '') {\n    // Windows just raises ENOENT in this case, disable for win CI\n    /* c8 ignore start */\n    if (code === 'ENOTDIR') {\n      // already know it has a parent by this point\n      const p = this.parent as PathBase\n      p.#markENOTDIR()\n    } else if (code === 'ENOENT') {\n      /* c8 ignore stop */\n      this.#markENOENT()\n    }\n  }\n\n  #readlinkFail(code: string = '') {\n    let ter = this.#type\n    ter |= ENOREADLINK\n    if (code === 'ENOENT') ter |= ENOENT\n    // windows gets a weird error when you try to readlink a file\n    if (code === 'EINVAL' || code === 'UNKNOWN') {\n      // exists, but not a symlink, we don't know WHAT it is, so remove\n      // all IFMT bits.\n      ter &= IFMT_UNKNOWN\n    }\n    this.#type = ter\n    // windows just gets ENOENT in this case.  We do cover the case,\n    // just disabled because it's impossible on Windows CI\n    /* c8 ignore start */\n    if (code === 'ENOTDIR' && this.parent) {\n      this.parent.#markENOTDIR()\n    }\n    /* c8 ignore stop */\n  }\n\n  #readdirAddChild(e: Dirent, c: Children) {\n    return (\n      this.#readdirMaybePromoteChild(e, c) ||\n      this.#readdirAddNewChild(e, c)\n    )\n  }\n\n  #readdirAddNewChild(e: Dirent, c: Children): PathBase {\n    // alloc new entry at head, so it's never provisional\n    const type = entToType(e)\n    const child = this.newChild(e.name, type, { parent: this })\n    const ifmt = child.#type & IFMT\n    if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) {\n      child.#type |= ENOTDIR\n    }\n    c.unshift(child)\n    c.provisional++\n    return child\n  }\n\n  #readdirMaybePromoteChild(e: Dirent, c: Children): PathBase | undefined {\n    for (let p = c.provisional; p < c.length; p++) {\n      const pchild = c[p]\n      const name =\n        this.nocase ? normalizeNocase(e.name) : normalize(e.name)\n      if (name !== pchild!.#matchName) {\n        continue\n      }\n\n      return this.#readdirPromoteChild(e, pchild!, p, c)\n    }\n  }\n\n  #readdirPromoteChild(\n    e: Dirent,\n    p: PathBase,\n    index: number,\n    c: Children,\n  ): PathBase {\n    const v = p.name\n    // retain any other flags, but set ifmt from dirent\n    p.#type = (p.#type & IFMT_UNKNOWN) | entToType(e)\n    // case sensitivity fixing when we learn the true name.\n    if (v !== e.name) p.name = e.name\n\n    // just advance provisional index (potentially off the list),\n    // otherwise we have to splice/pop it out and re-insert at head\n    if (index !== c.provisional) {\n      if (index === c.length - 1) c.pop()\n      else c.splice(index, 1)\n      c.unshift(p)\n    }\n    c.provisional++\n    return p\n  }\n\n  /**\n   * Call lstat() on this Path, and update all known information that can be\n   * determined.\n   *\n   * Note that unlike `fs.lstat()`, the returned value does not contain some\n   * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that\n   * information is required, you will need to call `fs.lstat` yourself.\n   *\n   * If the Path refers to a nonexistent file, or if the lstat call fails for\n   * any reason, `undefined` is returned.  Otherwise the updated Path object is\n   * returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async lstat(): Promise {\n    if ((this.#type & ENOENT) === 0) {\n      try {\n        this.#applyStat(await this.#fs.promises.lstat(this.fullpath()))\n        return this\n      } catch (er) {\n        this.#lstatFail((er as NodeJS.ErrnoException).code)\n      }\n    }\n  }\n\n  /**\n   * synchronous {@link PathBase.lstat}\n   */\n  lstatSync(): PathBase | undefined {\n    if ((this.#type & ENOENT) === 0) {\n      try {\n        this.#applyStat(this.#fs.lstatSync(this.fullpath()))\n        return this\n      } catch (er) {\n        this.#lstatFail((er as NodeJS.ErrnoException).code)\n      }\n    }\n  }\n\n  #applyStat(st: Stats) {\n    const {\n      atime,\n      atimeMs,\n      birthtime,\n      birthtimeMs,\n      blksize,\n      blocks,\n      ctime,\n      ctimeMs,\n      dev,\n      gid,\n      ino,\n      mode,\n      mtime,\n      mtimeMs,\n      nlink,\n      rdev,\n      size,\n      uid,\n    } = st\n    this.#atime = atime\n    this.#atimeMs = atimeMs\n    this.#birthtime = birthtime\n    this.#birthtimeMs = birthtimeMs\n    this.#blksize = blksize\n    this.#blocks = blocks\n    this.#ctime = ctime\n    this.#ctimeMs = ctimeMs\n    this.#dev = dev\n    this.#gid = gid\n    this.#ino = ino\n    this.#mode = mode\n    this.#mtime = mtime\n    this.#mtimeMs = mtimeMs\n    this.#nlink = nlink\n    this.#rdev = rdev\n    this.#size = size\n    this.#uid = uid\n    const ifmt = entToType(st)\n    // retain any other flags, but set the ifmt\n    this.#type = (this.#type & IFMT_UNKNOWN) | ifmt | LSTAT_CALLED\n    if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) {\n      this.#type |= ENOTDIR\n    }\n  }\n\n  #onReaddirCB: ((\n    er: NodeJS.ErrnoException | null,\n    entries: Path[],\n  ) => any)[] = []\n  #readdirCBInFlight: boolean = false\n  #callOnReaddirCB(children: Path[]) {\n    this.#readdirCBInFlight = false\n    const cbs = this.#onReaddirCB.slice()\n    this.#onReaddirCB.length = 0\n    cbs.forEach(cb => cb(null, children))\n  }\n\n  /**\n   * Standard node-style callback interface to get list of directory entries.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   *\n   * @param cb The callback called with (er, entries).  Note that the `er`\n   * param is somewhat extraneous, as all readdir() errors are handled and\n   * simply result in an empty set of entries being returned.\n   * @param allowZalgo Boolean indicating that immediately known results should\n   * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release\n   * zalgo at your peril, the dark pony lord is devious and unforgiving.\n   */\n  readdirCB(\n    cb: (er: NodeJS.ErrnoException | null, entries: PathBase[]) => any,\n    allowZalgo: boolean = false,\n  ): void {\n    if (!this.canReaddir()) {\n      if (allowZalgo) cb(null, [])\n      else queueMicrotask(() => cb(null, []))\n      return\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      const c = children.slice(0, children.provisional)\n      if (allowZalgo) cb(null, c)\n      else queueMicrotask(() => cb(null, c))\n      return\n    }\n\n    // don't have to worry about zalgo at this point.\n    this.#onReaddirCB.push(cb)\n    if (this.#readdirCBInFlight) {\n      return\n    }\n    this.#readdirCBInFlight = true\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => {\n      if (er) {\n        this.#readdirFail((er as NodeJS.ErrnoException).code)\n        children.provisional = 0\n      } else {\n        // if we didn't get an error, we always get entries.\n        //@ts-ignore\n        for (const e of entries) {\n          this.#readdirAddChild(e, children)\n        }\n        this.#readdirSuccess(children)\n      }\n      this.#callOnReaddirCB(children.slice(0, children.provisional))\n      return\n    })\n  }\n\n  #asyncReaddirInFlight?: Promise\n\n  /**\n   * Return an array of known child entries.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async readdir(): Promise {\n    if (!this.canReaddir()) {\n      return []\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      return children.slice(0, children.provisional)\n    }\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    if (this.#asyncReaddirInFlight) {\n      await this.#asyncReaddirInFlight\n    } else {\n      /* c8 ignore start */\n      let resolve: () => void = () => {}\n      /* c8 ignore stop */\n      this.#asyncReaddirInFlight = new Promise(\n        res => (resolve = res),\n      )\n      try {\n        for (const e of await this.#fs.promises.readdir(fullpath, {\n          withFileTypes: true,\n        })) {\n          this.#readdirAddChild(e, children)\n        }\n        this.#readdirSuccess(children)\n      } catch (er) {\n        this.#readdirFail((er as NodeJS.ErrnoException).code)\n        children.provisional = 0\n      }\n      this.#asyncReaddirInFlight = undefined\n      resolve()\n    }\n    return children.slice(0, children.provisional)\n  }\n\n  /**\n   * synchronous {@link PathBase.readdir}\n   */\n  readdirSync(): PathBase[] {\n    if (!this.canReaddir()) {\n      return []\n    }\n\n    const children = this.children()\n    if (this.calledReaddir()) {\n      return children.slice(0, children.provisional)\n    }\n\n    // else read the directory, fill up children\n    // de-provisionalize any provisional children.\n    const fullpath = this.fullpath()\n    try {\n      for (const e of this.#fs.readdirSync(fullpath, {\n        withFileTypes: true,\n      })) {\n        this.#readdirAddChild(e, children)\n      }\n      this.#readdirSuccess(children)\n    } catch (er) {\n      this.#readdirFail((er as NodeJS.ErrnoException).code)\n      children.provisional = 0\n    }\n    return children.slice(0, children.provisional)\n  }\n\n  canReaddir() {\n    if (this.#type & ENOCHILD) return false\n    const ifmt = IFMT & this.#type\n    // we always set ENOTDIR when setting IFMT, so should be impossible\n    /* c8 ignore start */\n    if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) {\n      return false\n    }\n    /* c8 ignore stop */\n    return true\n  }\n\n  shouldWalk(\n    dirs: Set,\n    walkFilter?: (e: PathBase) => boolean,\n  ): boolean {\n    return (\n      (this.#type & IFDIR) === IFDIR &&\n      !(this.#type & ENOCHILD) &&\n      !dirs.has(this) &&\n      (!walkFilter || walkFilter(this))\n    )\n  }\n\n  /**\n   * Return the Path object corresponding to path as resolved\n   * by realpath(3).\n   *\n   * If the realpath call fails for any reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   * On success, returns a Path object.\n   */\n  async realpath(): Promise {\n    if (this.#realpath) return this.#realpath\n    if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) return undefined\n    try {\n      const rp = await this.#fs.promises.realpath(this.fullpath())\n      return (this.#realpath = this.resolve(rp))\n    } catch (_) {\n      this.#markENOREALPATH()\n    }\n  }\n\n  /**\n   * Synchronous {@link realpath}\n   */\n  realpathSync(): PathBase | undefined {\n    if (this.#realpath) return this.#realpath\n    if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) return undefined\n    try {\n      const rp = this.#fs.realpathSync(this.fullpath())\n      return (this.#realpath = this.resolve(rp))\n    } catch (_) {\n      this.#markENOREALPATH()\n    }\n  }\n\n  /**\n   * Internal method to mark this Path object as the scurry cwd,\n   * called by {@link PathScurry#chdir}\n   *\n   * @internal\n   */\n  [setAsCwd](oldCwd: PathBase): void {\n    if (oldCwd === this) return\n    oldCwd.isCWD = false\n    this.isCWD = true\n\n    const changed = new Set([])\n    let rp = []\n    let p: PathBase = this\n    while (p && p.parent) {\n      changed.add(p)\n      p.#relative = rp.join(this.sep)\n      p.#relativePosix = rp.join('/')\n      p = p.parent\n      rp.push('..')\n    }\n    // now un-memoize parents of old cwd\n    p = oldCwd\n    while (p && p.parent && !changed.has(p)) {\n      p.#relative = undefined\n      p.#relativePosix = undefined\n      p = p.parent\n    }\n  }\n}\n\n/**\n * Path class used on win32 systems\n *\n * Uses `'\\\\'` as the path separator for returned paths, either `'\\\\'` or `'/'`\n * as the path separator for parsing paths.\n */\nexport class PathWin32 extends PathBase {\n  /**\n   * Separator for generating path strings.\n   */\n  sep: '\\\\' = '\\\\'\n  /**\n   * Separator for parsing path strings.\n   */\n  splitSep: RegExp = eitherSep\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    super(name, type, root, roots, nocase, children, opts)\n  }\n\n  /**\n   * @internal\n   */\n  newChild(name: string, type: number = UNKNOWN, opts: PathOpts = {}) {\n    return new PathWin32(\n      name,\n      type,\n      this.root,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      opts,\n    )\n  }\n\n  /**\n   * @internal\n   */\n  getRootString(path: string): string {\n    return win32.parse(path).root\n  }\n\n  /**\n   * @internal\n   */\n  getRoot(rootPath: string): PathBase {\n    rootPath = uncToDrive(rootPath.toUpperCase())\n    if (rootPath === this.root.name) {\n      return this.root\n    }\n    // ok, not that one, check if it matches another we know about\n    for (const [compare, root] of Object.entries(this.roots)) {\n      if (this.sameRoot(rootPath, compare)) {\n        return (this.roots[rootPath] = root)\n      }\n    }\n    // otherwise, have to create a new one.\n    return (this.roots[rootPath] = new PathScurryWin32(\n      rootPath,\n      this,\n    ).root)\n  }\n\n  /**\n   * @internal\n   */\n  sameRoot(rootPath: string, compare: string = this.root.name): boolean {\n    // windows can (rarely) have case-sensitive filesystem, but\n    // UNC and drive letters are always case-insensitive, and canonically\n    // represented uppercase.\n    rootPath = rootPath\n      .toUpperCase()\n      .replace(/\\//g, '\\\\')\n      .replace(uncDriveRegexp, '$1\\\\')\n    return rootPath === compare\n  }\n}\n\n/**\n * Path class used on all posix systems.\n *\n * Uses `'/'` as the path separator.\n */\nexport class PathPosix extends PathBase {\n  /**\n   * separator for parsing path strings\n   */\n  splitSep: '/' = '/'\n  /**\n   * separator for generating path strings\n   */\n  sep: '/' = '/'\n\n  /**\n   * Do not create new Path objects directly.  They should always be accessed\n   * via the PathScurry class or other methods on the Path class.\n   *\n   * @internal\n   */\n  constructor(\n    name: string,\n    type: number = UNKNOWN,\n    root: PathBase | undefined,\n    roots: { [k: string]: PathBase },\n    nocase: boolean,\n    children: ChildrenCache,\n    opts: PathOpts,\n  ) {\n    super(name, type, root, roots, nocase, children, opts)\n  }\n\n  /**\n   * @internal\n   */\n  getRootString(path: string): string {\n    return path.startsWith('/') ? '/' : ''\n  }\n\n  /**\n   * @internal\n   */\n  getRoot(_rootPath: string): PathBase {\n    return this.root\n  }\n\n  /**\n   * @internal\n   */\n  newChild(name: string, type: number = UNKNOWN, opts: PathOpts = {}) {\n    return new PathPosix(\n      name,\n      type,\n      this.root,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      opts,\n    )\n  }\n}\n\n/**\n * Options that may be provided to the PathScurry constructor\n */\nexport interface PathScurryOpts {\n  /**\n   * perform case-insensitive path matching. Default based on platform\n   * subclass.\n   */\n  nocase?: boolean\n  /**\n   * Number of Path entries to keep in the cache of Path child references.\n   *\n   * Setting this higher than 65536 will dramatically increase the data\n   * consumption and construction time overhead of each PathScurry.\n   *\n   * Setting this value to 256 or lower will significantly reduce the data\n   * consumption and construction time overhead, but may also reduce resolve()\n   * and readdir() performance on large filesystems.\n   *\n   * Default `16384`.\n   */\n  childrenCacheSize?: number\n  /**\n   * An object that overrides the built-in functions from the fs and\n   * fs/promises modules.\n   *\n   * See {@link FSOption}\n   */\n  fs?: FSOption\n}\n\n/**\n * The base class for all PathScurry classes, providing the interface for path\n * resolution and filesystem operations.\n *\n * Typically, you should *not* instantiate this class directly, but rather one\n * of the platform-specific classes, or the exported {@link PathScurry} which\n * defaults to the current platform.\n */\nexport abstract class PathScurryBase {\n  /**\n   * The root Path entry for the current working directory of this Scurry\n   */\n  root: PathBase\n  /**\n   * The string path for the root of this Scurry's current working directory\n   */\n  rootPath: string\n  /**\n   * A collection of all roots encountered, referenced by rootPath\n   */\n  roots: { [k: string]: PathBase }\n  /**\n   * The Path entry corresponding to this PathScurry's current working directory.\n   */\n  cwd: PathBase\n  #resolveCache: ResolveCache\n  #resolvePosixCache: ResolveCache\n  #children: ChildrenCache\n  /**\n   * Perform path comparisons case-insensitively.\n   *\n   * Defaults true on Darwin and Windows systems, false elsewhere.\n   */\n  nocase: boolean\n\n  /**\n   * The path separator used for parsing paths\n   *\n   * `'/'` on Posix systems, either `'/'` or `'\\\\'` on Windows\n   */\n  abstract sep: string | RegExp\n\n  #fs: FSValue\n\n  /**\n   * This class should not be instantiated directly.\n   *\n   * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry\n   *\n   * @internal\n   */\n  constructor(\n    cwd: URL | string = process.cwd(),\n    pathImpl: typeof win32 | typeof posix,\n    sep: string | RegExp,\n    {\n      nocase,\n      childrenCacheSize = 16 * 1024,\n      fs = defaultFS,\n    }: PathScurryOpts = {},\n  ) {\n    this.#fs = fsFromOption(fs)\n    if (cwd instanceof URL || cwd.startsWith('file://')) {\n      cwd = fileURLToPath(cwd)\n    }\n    // resolve and split root, and then add to the store.\n    // this is the only time we call path.resolve()\n    const cwdPath = pathImpl.resolve(cwd)\n    this.roots = Object.create(null)\n    this.rootPath = this.parseRootPath(cwdPath)\n    this.#resolveCache = new ResolveCache()\n    this.#resolvePosixCache = new ResolveCache()\n    this.#children = new ChildrenCache(childrenCacheSize)\n\n    const split = cwdPath.substring(this.rootPath.length).split(sep)\n    // resolve('/') leaves '', splits to [''], we don't want that.\n    if (split.length === 1 && !split[0]) {\n      split.pop()\n    }\n    /* c8 ignore start */\n    if (nocase === undefined) {\n      throw new TypeError(\n        'must provide nocase setting to PathScurryBase ctor',\n      )\n    }\n    /* c8 ignore stop */\n    this.nocase = nocase\n    this.root = this.newRoot(this.#fs)\n    this.roots[this.rootPath] = this.root\n    let prev: PathBase = this.root\n    let len = split.length - 1\n    const joinSep = pathImpl.sep\n    let abs = this.rootPath\n    let sawFirst = false\n    for (const part of split) {\n      const l = len--\n      prev = prev.child(part, {\n        relative: new Array(l).fill('..').join(joinSep),\n        relativePosix: new Array(l).fill('..').join('/'),\n        fullpath: (abs += (sawFirst ? '' : joinSep) + part),\n      })\n      sawFirst = true\n    }\n    this.cwd = prev\n  }\n\n  /**\n   * Get the depth of a provided path, string, or the cwd\n   */\n  depth(path: Path | string = this.cwd): number {\n    if (typeof path === 'string') {\n      path = this.cwd.resolve(path)\n    }\n    return path.depth()\n  }\n\n  /**\n   * Parse the root portion of a path string\n   *\n   * @internal\n   */\n  abstract parseRootPath(dir: string): string\n  /**\n   * create a new Path to use as root during construction.\n   *\n   * @internal\n   */\n  abstract newRoot(fs: FSValue): PathBase\n  /**\n   * Determine whether a given path string is absolute\n   */\n  abstract isAbsolute(p: string): boolean\n\n  /**\n   * Return the cache of child entries.  Exposed so subclasses can create\n   * child Path objects in a platform-specific way.\n   *\n   * @internal\n   */\n  childrenCache() {\n    return this.#children\n  }\n\n  /**\n   * Resolve one or more path strings to a resolved string\n   *\n   * Same interface as require('path').resolve.\n   *\n   * Much faster than path.resolve() when called multiple times for the same\n   * path, because the resolved Path objects are cached.  Much slower\n   * otherwise.\n   */\n  resolve(...paths: string[]): string {\n    // first figure out the minimum number of paths we have to test\n    // we always start at cwd, but any absolutes will bump the start\n    let r = ''\n    for (let i = paths.length - 1; i >= 0; i--) {\n      const p = paths[i]\n      if (!p || p === '.') continue\n      r = r ? `${p}/${r}` : p\n      if (this.isAbsolute(p)) {\n        break\n      }\n    }\n    const cached = this.#resolveCache.get(r)\n    if (cached !== undefined) {\n      return cached\n    }\n    const result = this.cwd.resolve(r).fullpath()\n    this.#resolveCache.set(r, result)\n    return result\n  }\n\n  /**\n   * Resolve one or more path strings to a resolved string, returning\n   * the posix path.  Identical to .resolve() on posix systems, but on\n   * windows will return a forward-slash separated UNC path.\n   *\n   * Same interface as require('path').resolve.\n   *\n   * Much faster than path.resolve() when called multiple times for the same\n   * path, because the resolved Path objects are cached.  Much slower\n   * otherwise.\n   */\n  resolvePosix(...paths: string[]): string {\n    // first figure out the minimum number of paths we have to test\n    // we always start at cwd, but any absolutes will bump the start\n    let r = ''\n    for (let i = paths.length - 1; i >= 0; i--) {\n      const p = paths[i]\n      if (!p || p === '.') continue\n      r = r ? `${p}/${r}` : p\n      if (this.isAbsolute(p)) {\n        break\n      }\n    }\n    const cached = this.#resolvePosixCache.get(r)\n    if (cached !== undefined) {\n      return cached\n    }\n    const result = this.cwd.resolve(r).fullpathPosix()\n    this.#resolvePosixCache.set(r, result)\n    return result\n  }\n\n  /**\n   * find the relative path from the cwd to the supplied path string or entry\n   */\n  relative(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.relative()\n  }\n\n  /**\n   * find the relative path from the cwd to the supplied path string or\n   * entry, using / as the path delimiter, even on Windows.\n   */\n  relativePosix(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.relativePosix()\n  }\n\n  /**\n   * Return the basename for the provided string or Path object\n   */\n  basename(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.name\n  }\n\n  /**\n   * Return the dirname for the provided string or Path object\n   */\n  dirname(entry: PathBase | string = this.cwd): string {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return (entry.parent || entry).fullpath()\n  }\n\n  /**\n   * Return an array of known child entries.\n   *\n   * First argument may be either a string, or a Path object.\n   *\n   * If the Path cannot or does not contain any children, then an empty array\n   * is returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   *\n   * Unlike `fs.readdir()`, the `withFileTypes` option defaults to `true`. Set\n   * `{ withFileTypes: false }` to return strings.\n   */\n\n  readdir(): Promise\n  readdir(opts: { withFileTypes: true }): Promise\n  readdir(opts: { withFileTypes: false }): Promise\n  readdir(opts: { withFileTypes: boolean }): Promise\n  readdir(entry: PathBase | string): Promise\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: true },\n  ): Promise\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: false },\n  ): Promise\n  readdir(\n    entry: PathBase | string,\n    opts: { withFileTypes: boolean },\n  ): Promise\n  async readdir(\n    entry: PathBase | string | { withFileTypes: boolean } = this.cwd,\n    opts: { withFileTypes: boolean } = {\n      withFileTypes: true,\n    },\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const { withFileTypes } = opts\n    if (!entry.canReaddir()) {\n      return []\n    } else {\n      const p = await entry.readdir()\n      return withFileTypes ? p : p.map(e => e.name)\n    }\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.readdir}\n   */\n  readdirSync(): PathBase[]\n  readdirSync(opts: { withFileTypes: true }): PathBase[]\n  readdirSync(opts: { withFileTypes: false }): string[]\n  readdirSync(opts: { withFileTypes: boolean }): PathBase[] | string[]\n  readdirSync(entry: PathBase | string): PathBase[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: true },\n  ): PathBase[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: false },\n  ): string[]\n  readdirSync(\n    entry: PathBase | string,\n    opts: { withFileTypes: boolean },\n  ): PathBase[] | string[]\n  readdirSync(\n    entry: PathBase | string | { withFileTypes: boolean } = this.cwd,\n    opts: { withFileTypes: boolean } = {\n      withFileTypes: true,\n    },\n  ): PathBase[] | string[] {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const { withFileTypes = true } = opts\n    if (!entry.canReaddir()) {\n      return []\n    } else if (withFileTypes) {\n      return entry.readdirSync()\n    } else {\n      return entry.readdirSync().map(e => e.name)\n    }\n  }\n\n  /**\n   * Call lstat() on the string or Path object, and update all known\n   * information that can be determined.\n   *\n   * Note that unlike `fs.lstat()`, the returned value does not contain some\n   * information, such as `mode`, `dev`, `nlink`, and `ino`.  If that\n   * information is required, you will need to call `fs.lstat` yourself.\n   *\n   * If the Path refers to a nonexistent file, or if the lstat call fails for\n   * any reason, `undefined` is returned.  Otherwise the updated Path object is\n   * returned.\n   *\n   * Results are cached, and thus may be out of date if the filesystem is\n   * mutated.\n   */\n  async lstat(\n    entry: string | PathBase = this.cwd,\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.lstat()\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.lstat}\n   */\n  lstatSync(entry: string | PathBase = this.cwd): PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    }\n    return entry.lstatSync()\n  }\n\n  /**\n   * Return the Path object or string path corresponding to the target of a\n   * symbolic link.\n   *\n   * If the path is not a symbolic link, or if the readlink call fails for any\n   * reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   *\n   * `{withFileTypes}` option defaults to `false`.\n   *\n   * On success, returns a Path object if `withFileTypes` option is true,\n   * otherwise a string.\n   */\n  readlink(): Promise\n  readlink(opt: { withFileTypes: false }): Promise\n  readlink(opt: { withFileTypes: true }): Promise\n  readlink(opt: {\n    withFileTypes: boolean\n  }): Promise\n  readlink(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): Promise\n  readlink(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): Promise\n  readlink(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): Promise\n  async readlink(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = await entry.readlink()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * synchronous {@link PathScurryBase.readlink}\n   */\n  readlinkSync(): string | undefined\n  readlinkSync(opt: { withFileTypes: false }): string | undefined\n  readlinkSync(opt: { withFileTypes: true }): PathBase | undefined\n  readlinkSync(opt: {\n    withFileTypes: boolean\n  }): PathBase | string | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): string | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): PathBase | undefined\n  readlinkSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): string | PathBase | undefined\n  readlinkSync(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): string | PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = entry.readlinkSync()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * Return the Path object or string path corresponding to path as resolved\n   * by realpath(3).\n   *\n   * If the realpath call fails for any reason, `undefined` is returned.\n   *\n   * Result is cached, and thus may be outdated if the filesystem is mutated.\n   *\n   * `{withFileTypes}` option defaults to `false`.\n   *\n   * On success, returns a Path object if `withFileTypes` option is true,\n   * otherwise a string.\n   */\n  realpath(): Promise\n  realpath(opt: { withFileTypes: false }): Promise\n  realpath(opt: { withFileTypes: true }): Promise\n  realpath(opt: {\n    withFileTypes: boolean\n  }): Promise\n  realpath(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): Promise\n  realpath(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): Promise\n  realpath(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): Promise\n  async realpath(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = await entry.realpath()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  realpathSync(): string | undefined\n  realpathSync(opt: { withFileTypes: false }): string | undefined\n  realpathSync(opt: { withFileTypes: true }): PathBase | undefined\n  realpathSync(opt: {\n    withFileTypes: boolean\n  }): PathBase | string | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt?: { withFileTypes: false },\n  ): string | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: true },\n  ): PathBase | undefined\n  realpathSync(\n    entry: string | PathBase,\n    opt: { withFileTypes: boolean },\n  ): string | PathBase | undefined\n  realpathSync(\n    entry: string | PathBase | { withFileTypes: boolean } = this.cwd,\n    { withFileTypes }: { withFileTypes: boolean } = {\n      withFileTypes: false,\n    },\n  ): string | PathBase | undefined {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      withFileTypes = entry.withFileTypes\n      entry = this.cwd\n    }\n    const e = entry.realpathSync()\n    return withFileTypes ? e : e?.fullpath()\n  }\n\n  /**\n   * Asynchronously walk the directory tree, returning an array of\n   * all path strings or Path objects found.\n   *\n   * Note that this will be extremely memory-hungry on large filesystems.\n   * In such cases, it may be better to use the stream or async iterator\n   * walk implementation.\n   */\n  walk(): Promise\n  walk(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Promise\n  walk(opts: WalkOptionsWithFileTypesFalse): Promise\n  walk(opts: WalkOptions): Promise\n  walk(entry: string | PathBase): Promise\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Promise\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Promise\n  walk(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Promise\n  async walk(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Promise {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results: (string | PathBase)[] = []\n    if (!filter || filter(entry)) {\n      results.push(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set()\n    const walk = (\n      dir: PathBase,\n      cb: (er?: NodeJS.ErrnoException) => void,\n    ) => {\n      dirs.add(dir)\n      dir.readdirCB((er, entries) => {\n        /* c8 ignore start */\n        if (er) {\n          return cb(er)\n        }\n        /* c8 ignore stop */\n        let len = entries.length\n        if (!len) return cb()\n        const next = () => {\n          if (--len === 0) {\n            cb()\n          }\n        }\n        for (const e of entries) {\n          if (!filter || filter(e)) {\n            results.push(withFileTypes ? e : e.fullpath())\n          }\n          if (follow && e.isSymbolicLink()) {\n            e.realpath()\n              .then(r => (r?.isUnknown() ? r.lstat() : r))\n              .then(r =>\n                r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next(),\n              )\n          } else {\n            if (e.shouldWalk(dirs, walkFilter)) {\n              walk(e, next)\n            } else {\n              next()\n            }\n          }\n        }\n      }, true) // zalgooooooo\n    }\n\n    const start = entry\n    return new Promise((res, rej) => {\n      walk(start, er => {\n        /* c8 ignore start */\n        if (er) return rej(er)\n        /* c8 ignore stop */\n        res(results as PathBase[] | string[])\n      })\n    })\n  }\n\n  /**\n   * Synchronously walk the directory tree, returning an array of\n   * all path strings or Path objects found.\n   *\n   * Note that this will be extremely memory-hungry on large filesystems.\n   * In such cases, it may be better to use the stream or async iterator\n   * walk implementation.\n   */\n  walkSync(): PathBase[]\n  walkSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): PathBase[]\n  walkSync(opts: WalkOptionsWithFileTypesFalse): string[]\n  walkSync(opts: WalkOptions): string[] | PathBase[]\n  walkSync(entry: string | PathBase): PathBase[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): PathBase[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): string[]\n  walkSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): PathBase[] | string[]\n  walkSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): PathBase[] | string[] {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results: (string | PathBase)[] = []\n    if (!filter || filter(entry)) {\n      results.push(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set([entry])\n    for (const dir of dirs) {\n      const entries = dir.readdirSync()\n      for (const e of entries) {\n        if (!filter || filter(e)) {\n          results.push(withFileTypes ? e : e.fullpath())\n        }\n        let r: PathBase | undefined = e\n        if (e.isSymbolicLink()) {\n          if (!(follow && (r = e.realpathSync()))) continue\n          if (r.isUnknown()) r.lstatSync()\n        }\n        if (r.shouldWalk(dirs, walkFilter)) {\n          dirs.add(r)\n        }\n      }\n    }\n    return results as string[] | PathBase[]\n  }\n\n  /**\n   * Support for `for await`\n   *\n   * Alias for {@link PathScurryBase.iterate}\n   *\n   * Note: As of Node 19, this is very slow, compared to other methods of\n   * walking.  Consider using {@link PathScurryBase.stream} if memory overhead\n   * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n   */\n  [Symbol.asyncIterator]() {\n    return this.iterate()\n  }\n\n  /**\n   * Async generator form of {@link PathScurryBase.walk}\n   *\n   * Note: As of Node 19, this is very slow, compared to other methods of\n   * walking, especially if most/all of the directory tree has been previously\n   * walked.  Consider using {@link PathScurryBase.stream} if memory overhead\n   * and backpressure are concerns, or {@link PathScurryBase.walk} if not.\n   */\n  iterate(): AsyncGenerator\n  iterate(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): AsyncGenerator\n  iterate(\n    opts: WalkOptionsWithFileTypesFalse,\n  ): AsyncGenerator\n  iterate(opts: WalkOptions): AsyncGenerator\n  iterate(entry: string | PathBase): AsyncGenerator\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): AsyncGenerator\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): AsyncGenerator\n  iterate(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): AsyncGenerator\n  iterate(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    options: WalkOptions = {},\n  ): AsyncGenerator {\n    // iterating async over the stream is significantly more performant,\n    // especially in the warm-cache scenario, because it buffers up directory\n    // entries in the background instead of waiting for a yield for each one.\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      options = entry\n      entry = this.cwd\n    }\n    return this.stream(entry, options)[Symbol.asyncIterator]()\n  }\n\n  /**\n   * Iterating over a PathScurry performs a synchronous walk.\n   *\n   * Alias for {@link PathScurryBase.iterateSync}\n   */\n  [Symbol.iterator]() {\n    return this.iterateSync()\n  }\n\n  iterateSync(): Generator\n  iterateSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Generator\n  iterateSync(\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Generator\n  iterateSync(opts: WalkOptions): Generator\n  iterateSync(entry: string | PathBase): Generator\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Generator\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Generator\n  iterateSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Generator\n  *iterateSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Generator {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    if (!filter || filter(entry)) {\n      yield withFileTypes ? entry : entry.fullpath()\n    }\n    const dirs = new Set([entry])\n    for (const dir of dirs) {\n      const entries = dir.readdirSync()\n      for (const e of entries) {\n        if (!filter || filter(e)) {\n          yield withFileTypes ? e : e.fullpath()\n        }\n        let r: PathBase | undefined = e\n        if (e.isSymbolicLink()) {\n          if (!(follow && (r = e.realpathSync()))) continue\n          if (r.isUnknown()) r.lstatSync()\n        }\n        if (r.shouldWalk(dirs, walkFilter)) {\n          dirs.add(r)\n        }\n      }\n    }\n  }\n\n  /**\n   * Stream form of {@link PathScurryBase.walk}\n   *\n   * Returns a Minipass stream that emits {@link PathBase} objects by default,\n   * or strings if `{ withFileTypes: false }` is set in the options.\n   */\n  stream(): Minipass\n  stream(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Minipass\n  stream(opts: WalkOptionsWithFileTypesFalse): Minipass\n  stream(opts: WalkOptions): Minipass\n  stream(entry: string | PathBase): Minipass\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): Minipass\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Minipass\n  stream(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Minipass | Minipass\n  stream(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Minipass | Minipass {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results = new Minipass({ objectMode: true })\n    if (!filter || filter(entry)) {\n      results.write(withFileTypes ? entry : entry.fullpath())\n    }\n    const dirs = new Set()\n    const queue: PathBase[] = [entry]\n    let processing = 0\n    const process = () => {\n      let paused = false\n      while (!paused) {\n        const dir = queue.shift()\n        if (!dir) {\n          if (processing === 0) results.end()\n          return\n        }\n\n        processing++\n        dirs.add(dir)\n\n        const onReaddir = (\n          er: null | NodeJS.ErrnoException,\n          entries: PathBase[],\n          didRealpaths: boolean = false,\n        ) => {\n          /* c8 ignore start */\n          if (er) return results.emit('error', er)\n          /* c8 ignore stop */\n          if (follow && !didRealpaths) {\n            const promises: Promise[] = []\n            for (const e of entries) {\n              if (e.isSymbolicLink()) {\n                promises.push(\n                  e\n                    .realpath()\n                    .then((r: PathBase | undefined) =>\n                      r?.isUnknown() ? r.lstat() : r,\n                    ),\n                )\n              }\n            }\n            if (promises.length) {\n              Promise.all(promises).then(() =>\n                onReaddir(null, entries, true),\n              )\n              return\n            }\n          }\n\n          for (const e of entries) {\n            if (e && (!filter || filter(e))) {\n              if (!results.write(withFileTypes ? e : e.fullpath())) {\n                paused = true\n              }\n            }\n          }\n\n          processing--\n          for (const e of entries) {\n            const r = e.realpathCached() || e\n            if (r.shouldWalk(dirs, walkFilter)) {\n              queue.push(r)\n            }\n          }\n          if (paused && !results.flowing) {\n            results.once('drain', process)\n          } else if (!sync) {\n            process()\n          }\n        }\n\n        // zalgo containment\n        let sync = true\n        dir.readdirCB(onReaddir, true)\n        sync = false\n      }\n    }\n    process()\n    return results as Minipass | Minipass\n  }\n\n  /**\n   * Synchronous form of {@link PathScurryBase.stream}\n   *\n   * Returns a Minipass stream that emits {@link PathBase} objects by default,\n   * or strings if `{ withFileTypes: false }` is set in the options.\n   *\n   * Will complete the walk in a single tick if the stream is consumed fully.\n   * Otherwise, will pause as needed for stream backpressure.\n   */\n  streamSync(): Minipass\n  streamSync(\n    opts: WalkOptionsWithFileTypesTrue | WalkOptionsWithFileTypesUnset,\n  ): Minipass\n  streamSync(opts: WalkOptionsWithFileTypesFalse): Minipass\n  streamSync(opts: WalkOptions): Minipass\n  streamSync(entry: string | PathBase): Minipass\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesUnset | WalkOptionsWithFileTypesTrue,\n  ): Minipass\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptionsWithFileTypesFalse,\n  ): Minipass\n  streamSync(\n    entry: string | PathBase,\n    opts: WalkOptions,\n  ): Minipass | Minipass\n  streamSync(\n    entry: string | PathBase | WalkOptions = this.cwd,\n    opts: WalkOptions = {},\n  ): Minipass | Minipass {\n    if (typeof entry === 'string') {\n      entry = this.cwd.resolve(entry)\n    } else if (!(entry instanceof PathBase)) {\n      opts = entry\n      entry = this.cwd\n    }\n    const {\n      withFileTypes = true,\n      follow = false,\n      filter,\n      walkFilter,\n    } = opts\n    const results = new Minipass({ objectMode: true })\n    const dirs = new Set()\n    if (!filter || filter(entry)) {\n      results.write(withFileTypes ? entry : entry.fullpath())\n    }\n    const queue: PathBase[] = [entry]\n    let processing = 0\n    const process = () => {\n      let paused = false\n      while (!paused) {\n        const dir = queue.shift()\n        if (!dir) {\n          if (processing === 0) results.end()\n          return\n        }\n        processing++\n        dirs.add(dir)\n\n        const entries = dir.readdirSync()\n        for (const e of entries) {\n          if (!filter || filter(e)) {\n            if (!results.write(withFileTypes ? e : e.fullpath())) {\n              paused = true\n            }\n          }\n        }\n        processing--\n        for (const e of entries) {\n          let r: PathBase | undefined = e\n          if (e.isSymbolicLink()) {\n            if (!(follow && (r = e.realpathSync()))) continue\n            if (r.isUnknown()) r.lstatSync()\n          }\n          if (r.shouldWalk(dirs, walkFilter)) {\n            queue.push(r)\n          }\n        }\n      }\n      if (paused && !results.flowing) results.once('drain', process)\n    }\n    process()\n    return results as Minipass | Minipass\n  }\n\n  chdir(path: string | Path = this.cwd) {\n    const oldCwd = this.cwd\n    this.cwd = typeof path === 'string' ? this.cwd.resolve(path) : path\n    this.cwd[setAsCwd](oldCwd)\n  }\n}\n\n/**\n * Options provided to all walk methods.\n */\nexport interface WalkOptions {\n  /**\n   * Return results as {@link PathBase} objects rather than strings.\n   * When set to false, results are fully resolved paths, as returned by\n   * {@link PathBase.fullpath}.\n   * @default true\n   */\n  withFileTypes?: boolean\n\n  /**\n   *  Attempt to read directory entries from symbolic links. Otherwise, only\n   *  actual directories are traversed. Regardless of this setting, a given\n   *  target path will only ever be walked once, meaning that a symbolic link\n   *  to a previously traversed directory will never be followed.\n   *\n   *  Setting this imposes a slight performance penalty, because `readlink`\n   *  must be called on all symbolic links encountered, in order to avoid\n   *  infinite cycles.\n   * @default false\n   */\n  follow?: boolean\n\n  /**\n   * Only return entries where the provided function returns true.\n   *\n   * This will not prevent directories from being traversed, even if they do\n   * not pass the filter, though it will prevent directories themselves from\n   * being included in the result set.  See {@link walkFilter}\n   *\n   * Asynchronous functions are not supported here.\n   *\n   * By default, if no filter is provided, all entries and traversed\n   * directories are included.\n   */\n  filter?: (entry: PathBase) => boolean\n\n  /**\n   * Only traverse directories (and in the case of {@link follow} being set to\n   * true, symbolic links to directories) if the provided function returns\n   * true.\n   *\n   * This will not prevent directories from being included in the result set,\n   * even if they do not pass the supplied filter function.  See {@link filter}\n   * to do that.\n   *\n   * Asynchronous functions are not supported here.\n   */\n  walkFilter?: (entry: PathBase) => boolean\n}\n\nexport type WalkOptionsWithFileTypesUnset = WalkOptions & {\n  withFileTypes?: undefined\n}\nexport type WalkOptionsWithFileTypesTrue = WalkOptions & {\n  withFileTypes: true\n}\nexport type WalkOptionsWithFileTypesFalse = WalkOptions & {\n  withFileTypes: false\n}\n\n/**\n * Windows implementation of {@link PathScurryBase}\n *\n * Defaults to case insensitve, uses `'\\\\'` to generate path strings.  Uses\n * {@link PathWin32} for Path objects.\n */\nexport class PathScurryWin32 extends PathScurryBase {\n  /**\n   * separator for generating path strings\n   */\n  sep: '\\\\' = '\\\\'\n\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = true } = opts\n    super(cwd, win32, '\\\\', { ...opts, nocase })\n    this.nocase = nocase\n    for (let p: PathBase | undefined = this.cwd; p; p = p.parent) {\n      p.nocase = this.nocase\n    }\n  }\n\n  /**\n   * @internal\n   */\n  parseRootPath(dir: string): string {\n    // if the path starts with a single separator, it's not a UNC, and we'll\n    // just get separator as the root, and driveFromUNC will return \\\n    // In that case, mount \\ on the root from the cwd.\n    return win32.parse(dir).root.toUpperCase()\n  }\n\n  /**\n   * @internal\n   */\n  newRoot(fs: FSValue) {\n    return new PathWin32(\n      this.rootPath,\n      IFDIR,\n      undefined,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      { fs },\n    )\n  }\n\n  /**\n   * Return true if the provided path string is an absolute path\n   */\n  isAbsolute(p: string): boolean {\n    return (\n      p.startsWith('/') || p.startsWith('\\\\') || /^[a-z]:(\\/|\\\\)/i.test(p)\n    )\n  }\n}\n\n/**\n * {@link PathScurryBase} implementation for all posix systems other than Darwin.\n *\n * Defaults to case-sensitive matching, uses `'/'` to generate path strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryPosix extends PathScurryBase {\n  /**\n   * separator for generating path strings\n   */\n  sep: '/' = '/'\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = false } = opts\n    super(cwd, posix, '/', { ...opts, nocase })\n    this.nocase = nocase\n  }\n\n  /**\n   * @internal\n   */\n  parseRootPath(_dir: string): string {\n    return '/'\n  }\n\n  /**\n   * @internal\n   */\n  newRoot(fs: FSValue) {\n    return new PathPosix(\n      this.rootPath,\n      IFDIR,\n      undefined,\n      this.roots,\n      this.nocase,\n      this.childrenCache(),\n      { fs },\n    )\n  }\n\n  /**\n   * Return true if the provided path string is an absolute path\n   */\n  isAbsolute(p: string): boolean {\n    return p.startsWith('/')\n  }\n}\n\n/**\n * {@link PathScurryBase} implementation for Darwin (macOS) systems.\n *\n * Defaults to case-insensitive matching, uses `'/'` for generating path\n * strings.\n *\n * Uses {@link PathPosix} for Path objects.\n */\nexport class PathScurryDarwin extends PathScurryPosix {\n  constructor(\n    cwd: URL | string = process.cwd(),\n    opts: PathScurryOpts = {},\n  ) {\n    const { nocase = true } = opts\n    super(cwd, { ...opts, nocase })\n  }\n}\n\n/**\n * Default {@link PathBase} implementation for the current platform.\n *\n * {@link PathWin32} on Windows systems, {@link PathPosix} on all others.\n */\nexport const Path = process.platform === 'win32' ? PathWin32 : PathPosix\nexport type Path = PathBase | InstanceType\n\n/**\n * Default {@link PathScurryBase} implementation for the current platform.\n *\n * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on\n * Darwin (macOS) systems, {@link PathScurryPosix} on all others.\n */\nexport const PathScurry:\n  | typeof PathScurryWin32\n  | typeof PathScurryDarwin\n  | typeof PathScurryPosix =\n  process.platform === 'win32' ? PathScurryWin32\n  : process.platform === 'darwin' ? PathScurryDarwin\n  : PathScurryPosix\nexport type PathScurry = PathScurryBase | InstanceType\n"]}
\ No newline at end of file
diff --git a/node_modules/path-scurry/dist/esm/package.json b/node_modules/path-scurry/dist/esm/package.json
new file mode 100644
index 00000000..3dbc1ca5
--- /dev/null
+++ b/node_modules/path-scurry/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "module"
+}
diff --git a/node_modules/path-scurry/node_modules/lru-cache/LICENSE b/node_modules/path-scurry/node_modules/lru-cache/LICENSE
new file mode 100644
index 00000000..f785757c
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2010-2023 Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/path-scurry/node_modules/lru-cache/README.md b/node_modules/path-scurry/node_modules/lru-cache/README.md
new file mode 100644
index 00000000..931822f3
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/README.md
@@ -0,0 +1,331 @@
+# lru-cache
+
+A cache object that deletes the least-recently-used items.
+
+Specify a max number of the most recently used items that you
+want to keep, and this cache will keep that many of the most
+recently accessed items.
+
+This is not primarily a TTL cache, and does not make strong TTL
+guarantees. There is no preemptive pruning of expired items by
+default, but you _may_ set a TTL on the cache or on a single
+`set`. If you do so, it will treat expired items as missing, and
+delete them when fetched. If you are more interested in TTL
+caching than LRU caching, check out
+[@isaacs/ttlcache](http://npm.im/@isaacs/ttlcache).
+
+As of version 7, this is one of the most performant LRU
+implementations available in JavaScript, and supports a wide
+diversity of use cases. However, note that using some of the
+features will necessarily impact performance, by causing the
+cache to have to do more work. See the "Performance" section
+below.
+
+## Installation
+
+```bash
+npm install lru-cache --save
+```
+
+## Usage
+
+```js
+// hybrid module, either works
+import { LRUCache } from 'lru-cache'
+// or:
+const { LRUCache } = require('lru-cache')
+// or in minified form for web browsers:
+import { LRUCache } from 'http://unpkg.com/lru-cache@9/dist/mjs/index.min.mjs'
+
+// At least one of 'max', 'ttl', or 'maxSize' is required, to prevent
+// unsafe unbounded storage.
+//
+// In most cases, it's best to specify a max for performance, so all
+// the required memory allocation is done up-front.
+//
+// All the other options are optional, see the sections below for
+// documentation on what each one does.  Most of them can be
+// overridden for specific items in get()/set()
+const options = {
+  max: 500,
+
+  // for use with tracking overall storage size
+  maxSize: 5000,
+  sizeCalculation: (value, key) => {
+    return 1
+  },
+
+  // for use when you need to clean up something when objects
+  // are evicted from the cache
+  dispose: (value, key) => {
+    freeFromMemoryOrWhatever(value)
+  },
+
+  // how long to live in ms
+  ttl: 1000 * 60 * 5,
+
+  // return stale items before removing from cache?
+  allowStale: false,
+
+  updateAgeOnGet: false,
+  updateAgeOnHas: false,
+
+  // async method to use for cache.fetch(), for
+  // stale-while-revalidate type of behavior
+  fetchMethod: async (
+    key,
+    staleValue,
+    { options, signal, context }
+  ) => {},
+}
+
+const cache = new LRUCache(options)
+
+cache.set('key', 'value')
+cache.get('key') // "value"
+
+// non-string keys ARE fully supported
+// but note that it must be THE SAME object, not
+// just a JSON-equivalent object.
+var someObject = { a: 1 }
+cache.set(someObject, 'a value')
+// Object keys are not toString()-ed
+cache.set('[object Object]', 'a different value')
+assert.equal(cache.get(someObject), 'a value')
+// A similar object with same keys/values won't work,
+// because it's a different object identity
+assert.equal(cache.get({ a: 1 }), undefined)
+
+cache.clear() // empty the cache
+```
+
+If you put more stuff in the cache, then less recently used items
+will fall out. That's what an LRU cache is.
+
+For full description of the API and all options, please see [the
+LRUCache typedocs](https://isaacs.github.io/node-lru-cache/)
+
+## Storage Bounds Safety
+
+This implementation aims to be as flexible as possible, within
+the limits of safe memory consumption and optimal performance.
+
+At initial object creation, storage is allocated for `max` items.
+If `max` is set to zero, then some performance is lost, and item
+count is unbounded. Either `maxSize` or `ttl` _must_ be set if
+`max` is not specified.
+
+If `maxSize` is set, then this creates a safe limit on the
+maximum storage consumed, but without the performance benefits of
+pre-allocation. When `maxSize` is set, every item _must_ provide
+a size, either via the `sizeCalculation` method provided to the
+constructor, or via a `size` or `sizeCalculation` option provided
+to `cache.set()`. The size of every item _must_ be a positive
+integer.
+
+If neither `max` nor `maxSize` are set, then `ttl` tracking must
+be enabled. Note that, even when tracking item `ttl`, items are
+_not_ preemptively deleted when they become stale, unless
+`ttlAutopurge` is enabled. Instead, they are only purged the
+next time the key is requested. Thus, if `ttlAutopurge`, `max`,
+and `maxSize` are all not set, then the cache will potentially
+grow unbounded.
+
+In this case, a warning is printed to standard error. Future
+versions may require the use of `ttlAutopurge` if `max` and
+`maxSize` are not specified.
+
+If you truly wish to use a cache that is bound _only_ by TTL
+expiration, consider using a `Map` object, and calling
+`setTimeout` to delete entries when they expire. It will perform
+much better than an LRU cache.
+
+Here is an implementation you may use, under the same
+[license](./LICENSE) as this package:
+
+```js
+// a storage-unbounded ttl cache that is not an lru-cache
+const cache = {
+  data: new Map(),
+  timers: new Map(),
+  set: (k, v, ttl) => {
+    if (cache.timers.has(k)) {
+      clearTimeout(cache.timers.get(k))
+    }
+    cache.timers.set(
+      k,
+      setTimeout(() => cache.delete(k), ttl)
+    )
+    cache.data.set(k, v)
+  },
+  get: k => cache.data.get(k),
+  has: k => cache.data.has(k),
+  delete: k => {
+    if (cache.timers.has(k)) {
+      clearTimeout(cache.timers.get(k))
+    }
+    cache.timers.delete(k)
+    return cache.data.delete(k)
+  },
+  clear: () => {
+    cache.data.clear()
+    for (const v of cache.timers.values()) {
+      clearTimeout(v)
+    }
+    cache.timers.clear()
+  },
+}
+```
+
+If that isn't to your liking, check out
+[@isaacs/ttlcache](http://npm.im/@isaacs/ttlcache).
+
+## Storing Undefined Values
+
+This cache never stores undefined values, as `undefined` is used
+internally in a few places to indicate that a key is not in the
+cache.
+
+You may call `cache.set(key, undefined)`, but this is just
+an alias for `cache.delete(key)`. Note that this has the effect
+that `cache.has(key)` will return _false_ after setting it to
+undefined.
+
+```js
+cache.set(myKey, undefined)
+cache.has(myKey) // false!
+```
+
+If you need to track `undefined` values, and still note that the
+key is in the cache, an easy workaround is to use a sigil object
+of your own.
+
+```js
+import { LRUCache } from 'lru-cache'
+const undefinedValue = Symbol('undefined')
+const cache = new LRUCache(...)
+const mySet = (key, value) =>
+  cache.set(key, value === undefined ? undefinedValue : value)
+const myGet = (key, value) => {
+  const v = cache.get(key)
+  return v === undefinedValue ? undefined : v
+}
+```
+
+## Performance
+
+As of January 2022, version 7 of this library is one of the most
+performant LRU cache implementations in JavaScript.
+
+Benchmarks can be extremely difficult to get right. In
+particular, the performance of set/get/delete operations on
+objects will vary _wildly_ depending on the type of key used. V8
+is highly optimized for objects with keys that are short strings,
+especially integer numeric strings. Thus any benchmark which
+tests _solely_ using numbers as keys will tend to find that an
+object-based approach performs the best.
+
+Note that coercing _anything_ to strings to use as object keys is
+unsafe, unless you can be 100% certain that no other type of
+value will be used. For example:
+
+```js
+const myCache = {}
+const set = (k, v) => (myCache[k] = v)
+const get = k => myCache[k]
+
+set({}, 'please hang onto this for me')
+set('[object Object]', 'oopsie')
+```
+
+Also beware of "Just So" stories regarding performance. Garbage
+collection of large (especially: deep) object graphs can be
+incredibly costly, with several "tipping points" where it
+increases exponentially. As a result, putting that off until
+later can make it much worse, and less predictable. If a library
+performs well, but only in a scenario where the object graph is
+kept shallow, then that won't help you if you are using large
+objects as keys.
+
+In general, when attempting to use a library to improve
+performance (such as a cache like this one), it's best to choose
+an option that will perform well in the sorts of scenarios where
+you'll actually use it.
+
+This library is optimized for repeated gets and minimizing
+eviction time, since that is the expected need of a LRU. Set
+operations are somewhat slower on average than a few other
+options, in part because of that optimization. It is assumed
+that you'll be caching some costly operation, ideally as rarely
+as possible, so optimizing set over get would be unwise.
+
+If performance matters to you:
+
+1. If it's at all possible to use small integer values as keys,
+   and you can guarantee that no other types of values will be
+   used as keys, then do that, and use a cache such as
+   [lru-fast](https://npmjs.com/package/lru-fast), or
+   [mnemonist's
+   LRUCache](https://yomguithereal.github.io/mnemonist/lru-cache)
+   which uses an Object as its data store.
+
+2. Failing that, if at all possible, use short non-numeric
+   strings (ie, less than 256 characters) as your keys, and use
+   [mnemonist's
+   LRUCache](https://yomguithereal.github.io/mnemonist/lru-cache).
+
+3. If the types of your keys will be anything else, especially
+   long strings, strings that look like floats, objects, or some
+   mix of types, or if you aren't sure, then this library will
+   work well for you.
+
+   If you do not need the features that this library provides
+   (like asynchronous fetching, a variety of TTL staleness
+   options, and so on), then [mnemonist's
+   LRUMap](https://yomguithereal.github.io/mnemonist/lru-map) is
+   a very good option, and just slightly faster than this module
+   (since it does considerably less).
+
+4. Do not use a `dispose` function, size tracking, or especially
+   ttl behavior, unless absolutely needed. These features are
+   convenient, and necessary in some use cases, and every attempt
+   has been made to make the performance impact minimal, but it
+   isn't nothing.
+
+## Breaking Changes in Version 7
+
+This library changed to a different algorithm and internal data
+structure in version 7, yielding significantly better
+performance, albeit with some subtle changes as a result.
+
+If you were relying on the internals of LRUCache in version 6 or
+before, it probably will not work in version 7 and above.
+
+## Breaking Changes in Version 8
+
+- The `fetchContext` option was renamed to `context`, and may no
+  longer be set on the cache instance itself.
+- Rewritten in TypeScript, so pretty much all the types moved
+  around a lot.
+- The AbortController/AbortSignal polyfill was removed. For this
+  reason, **Node version 16.14.0 or higher is now required**.
+- Internal properties were moved to actual private class
+  properties.
+- Keys and values must not be `null` or `undefined`.
+- Minified export available at `'lru-cache/min'`, for both CJS
+  and MJS builds.
+
+## Breaking Changes in Version 9
+
+- Named export only, no default export.
+- AbortController polyfill returned, albeit with a warning when
+  used.
+
+## Breaking Changes in Version 10
+
+- `cache.fetch()` return type is now `Promise`
+  instead of `Promise`. This is an irrelevant change
+  practically speaking, but can require changes for TypeScript
+  users.
+
+For more info, see the [change log](CHANGELOG.md).
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts
new file mode 100644
index 00000000..44409569
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts
@@ -0,0 +1,1277 @@
+/**
+ * @module LRUCache
+ */
+declare const TYPE: unique symbol;
+export type PosInt = number & {
+    [TYPE]: 'Positive Integer';
+};
+export type Index = number & {
+    [TYPE]: 'LRUCache Index';
+};
+export type UintArray = Uint8Array | Uint16Array | Uint32Array;
+export type NumberArray = UintArray | number[];
+declare class ZeroArray extends Array {
+    constructor(size: number);
+}
+export type { ZeroArray };
+export type { Stack };
+export type StackLike = Stack | Index[];
+declare class Stack {
+    #private;
+    heap: NumberArray;
+    length: number;
+    static create(max: number): StackLike;
+    constructor(max: number, HeapCls: {
+        new (n: number): NumberArray;
+    });
+    push(n: Index): void;
+    pop(): Index;
+}
+/**
+ * Promise representing an in-progress {@link LRUCache#fetch} call
+ */
+export type BackgroundFetch = Promise & {
+    __returned: BackgroundFetch | undefined;
+    __abortController: AbortController;
+    __staleWhileFetching: V | undefined;
+};
+export type DisposeTask = [
+    value: V,
+    key: K,
+    reason: LRUCache.DisposeReason
+];
+export declare namespace LRUCache {
+    /**
+     * An integer greater than 0, reflecting the calculated size of items
+     */
+    type Size = number;
+    /**
+     * Integer greater than 0, representing some number of milliseconds, or the
+     * time at which a TTL started counting from.
+     */
+    type Milliseconds = number;
+    /**
+     * An integer greater than 0, reflecting a number of items
+     */
+    type Count = number;
+    /**
+     * The reason why an item was removed from the cache, passed
+     * to the {@link Disposer} methods.
+     *
+     * - `evict`: The item was evicted because it is the least recently used,
+     *   and the cache is full.
+     * - `set`: A new value was set, overwriting the old value being disposed.
+     * - `delete`: The item was explicitly deleted, either by calling
+     *   {@link LRUCache#delete}, {@link LRUCache#clear}, or
+     *   {@link LRUCache#set} with an undefined value.
+     * - `expire`: The item was removed due to exceeding its TTL.
+     * - `fetch`: A {@link OptionsBase#fetchMethod} operation returned
+     *   `undefined` or was aborted, causing the item to be deleted.
+     */
+    type DisposeReason = 'evict' | 'set' | 'delete' | 'expire' | 'fetch';
+    /**
+     * A method called upon item removal, passed as the
+     * {@link OptionsBase.dispose} and/or
+     * {@link OptionsBase.disposeAfter} options.
+     */
+    type Disposer = (value: V, key: K, reason: DisposeReason) => void;
+    /**
+     * A function that returns the effective calculated size
+     * of an entry in the cache.
+     */
+    type SizeCalculator = (value: V, key: K) => Size;
+    /**
+     * Options provided to the
+     * {@link OptionsBase.fetchMethod} function.
+     */
+    interface FetcherOptions {
+        signal: AbortSignal;
+        options: FetcherFetchOptions;
+        /**
+         * Object provided in the {@link FetchOptions.context} option to
+         * {@link LRUCache#fetch}
+         */
+        context: FC;
+    }
+    /**
+     * Occasionally, it may be useful to track the internal behavior of the
+     * cache, particularly for logging, debugging, or for behavior within the
+     * `fetchMethod`. To do this, you can pass a `status` object to the
+     * {@link LRUCache#fetch}, {@link LRUCache#get}, {@link LRUCache#set},
+     * {@link LRUCache#memo}, and {@link LRUCache#has} methods.
+     *
+     * The `status` option should be a plain JavaScript object. The following
+     * fields will be set on it appropriately, depending on the situation.
+     */
+    interface Status {
+        /**
+         * The status of a set() operation.
+         *
+         * - add: the item was not found in the cache, and was added
+         * - update: the item was in the cache, with the same value provided
+         * - replace: the item was in the cache, and replaced
+         * - miss: the item was not added to the cache for some reason
+         */
+        set?: 'add' | 'update' | 'replace' | 'miss';
+        /**
+         * the ttl stored for the item, or undefined if ttls are not used.
+         */
+        ttl?: Milliseconds;
+        /**
+         * the start time for the item, or undefined if ttls are not used.
+         */
+        start?: Milliseconds;
+        /**
+         * The timestamp used for TTL calculation
+         */
+        now?: Milliseconds;
+        /**
+         * the remaining ttl for the item, or undefined if ttls are not used.
+         */
+        remainingTTL?: Milliseconds;
+        /**
+         * The calculated size for the item, if sizes are used.
+         */
+        entrySize?: Size;
+        /**
+         * The total calculated size of the cache, if sizes are used.
+         */
+        totalCalculatedSize?: Size;
+        /**
+         * A flag indicating that the item was not stored, due to exceeding the
+         * {@link OptionsBase.maxEntrySize}
+         */
+        maxEntrySizeExceeded?: true;
+        /**
+         * The old value, specified in the case of `set:'update'` or
+         * `set:'replace'`
+         */
+        oldValue?: V;
+        /**
+         * The results of a {@link LRUCache#has} operation
+         *
+         * - hit: the item was found in the cache
+         * - stale: the item was found in the cache, but is stale
+         * - miss: the item was not found in the cache
+         */
+        has?: 'hit' | 'stale' | 'miss';
+        /**
+         * The status of a {@link LRUCache#fetch} operation.
+         * Note that this can change as the underlying fetch() moves through
+         * various states.
+         *
+         * - inflight: there is another fetch() for this key which is in process
+         * - get: there is no {@link OptionsBase.fetchMethod}, so
+         *   {@link LRUCache#get} was called.
+         * - miss: the item is not in cache, and will be fetched.
+         * - hit: the item is in the cache, and was resolved immediately.
+         * - stale: the item is in the cache, but stale.
+         * - refresh: the item is in the cache, and not stale, but
+         *   {@link FetchOptions.forceRefresh} was specified.
+         */
+        fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh';
+        /**
+         * The {@link OptionsBase.fetchMethod} was called
+         */
+        fetchDispatched?: true;
+        /**
+         * The cached value was updated after a successful call to
+         * {@link OptionsBase.fetchMethod}
+         */
+        fetchUpdated?: true;
+        /**
+         * The reason for a fetch() rejection.  Either the error raised by the
+         * {@link OptionsBase.fetchMethod}, or the reason for an
+         * AbortSignal.
+         */
+        fetchError?: Error;
+        /**
+         * The fetch received an abort signal
+         */
+        fetchAborted?: true;
+        /**
+         * The abort signal received was ignored, and the fetch was allowed to
+         * continue.
+         */
+        fetchAbortIgnored?: true;
+        /**
+         * The fetchMethod promise resolved successfully
+         */
+        fetchResolved?: true;
+        /**
+         * The fetchMethod promise was rejected
+         */
+        fetchRejected?: true;
+        /**
+         * The status of a {@link LRUCache#get} operation.
+         *
+         * - fetching: The item is currently being fetched.  If a previous value
+         *   is present and allowed, that will be returned.
+         * - stale: The item is in the cache, and is stale.
+         * - hit: the item is in the cache
+         * - miss: the item is not in the cache
+         */
+        get?: 'stale' | 'hit' | 'miss';
+        /**
+         * A fetch or get operation returned a stale value.
+         */
+        returnedStale?: true;
+    }
+    /**
+     * options which override the options set in the LRUCache constructor
+     * when calling {@link LRUCache#fetch}.
+     *
+     * This is the union of {@link GetOptions} and {@link SetOptions}, plus
+     * {@link OptionsBase.noDeleteOnFetchRejection},
+     * {@link OptionsBase.allowStaleOnFetchRejection},
+     * {@link FetchOptions.forceRefresh}, and
+     * {@link FetcherOptions.context}
+     *
+     * Any of these may be modified in the {@link OptionsBase.fetchMethod}
+     * function, but the {@link GetOptions} fields will of course have no
+     * effect, as the {@link LRUCache#get} call already happened by the time
+     * the fetchMethod is called.
+     */
+    interface FetcherFetchOptions extends Pick, 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet' | 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL' | 'noDeleteOnFetchRejection' | 'allowStaleOnFetchRejection' | 'ignoreFetchAbort' | 'allowStaleOnFetchAbort'> {
+        status?: Status;
+        size?: Size;
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#fetch} method.
+     */
+    interface FetchOptions extends FetcherFetchOptions {
+        /**
+         * Set to true to force a re-load of the existing data, even if it
+         * is not yet stale.
+         */
+        forceRefresh?: boolean;
+        /**
+         * Context provided to the {@link OptionsBase.fetchMethod} as
+         * the {@link FetcherOptions.context} param.
+         *
+         * If the FC type is specified as unknown (the default),
+         * undefined or void, then this is optional.  Otherwise, it will
+         * be required.
+         */
+        context?: FC;
+        signal?: AbortSignal;
+        status?: Status;
+    }
+    /**
+     * Options provided to {@link LRUCache#fetch} when the FC type is something
+     * other than `unknown`, `undefined`, or `void`
+     */
+    interface FetchOptionsWithContext extends FetchOptions {
+        context: FC;
+    }
+    /**
+     * Options provided to {@link LRUCache#fetch} when the FC type is
+     * `undefined` or `void`
+     */
+    interface FetchOptionsNoContext extends FetchOptions {
+        context?: undefined;
+    }
+    interface MemoOptions extends Pick, 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet' | 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL' | 'noDeleteOnFetchRejection' | 'allowStaleOnFetchRejection' | 'ignoreFetchAbort' | 'allowStaleOnFetchAbort'> {
+        /**
+         * Set to true to force a re-load of the existing data, even if it
+         * is not yet stale.
+         */
+        forceRefresh?: boolean;
+        /**
+         * Context provided to the {@link OptionsBase.memoMethod} as
+         * the {@link MemoizerOptions.context} param.
+         *
+         * If the FC type is specified as unknown (the default),
+         * undefined or void, then this is optional.  Otherwise, it will
+         * be required.
+         */
+        context?: FC;
+        status?: Status;
+    }
+    /**
+     * Options provided to {@link LRUCache#memo} when the FC type is something
+     * other than `unknown`, `undefined`, or `void`
+     */
+    interface MemoOptionsWithContext extends MemoOptions {
+        context: FC;
+    }
+    /**
+     * Options provided to {@link LRUCache#memo} when the FC type is
+     * `undefined` or `void`
+     */
+    interface MemoOptionsNoContext extends MemoOptions {
+        context?: undefined;
+    }
+    /**
+     * Options provided to the
+     * {@link OptionsBase.memoMethod} function.
+     */
+    interface MemoizerOptions {
+        options: MemoizerMemoOptions;
+        /**
+         * Object provided in the {@link MemoOptions.context} option to
+         * {@link LRUCache#memo}
+         */
+        context: FC;
+    }
+    /**
+     * options which override the options set in the LRUCache constructor
+     * when calling {@link LRUCache#memo}.
+     *
+     * This is the union of {@link GetOptions} and {@link SetOptions}, plus
+     * {@link MemoOptions.forceRefresh}, and
+     * {@link MemoerOptions.context}
+     *
+     * Any of these may be modified in the {@link OptionsBase.memoMethod}
+     * function, but the {@link GetOptions} fields will of course have no
+     * effect, as the {@link LRUCache#get} call already happened by the time
+     * the memoMethod is called.
+     */
+    interface MemoizerMemoOptions extends Pick, 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet' | 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'> {
+        status?: Status;
+        size?: Size;
+        start?: Milliseconds;
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#has} method.
+     */
+    interface HasOptions extends Pick, 'updateAgeOnHas'> {
+        status?: Status;
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#get} method.
+     */
+    interface GetOptions extends Pick, 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'> {
+        status?: Status;
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#peek} method.
+     */
+    interface PeekOptions extends Pick, 'allowStale'> {
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#set} method.
+     */
+    interface SetOptions extends Pick, 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'> {
+        /**
+         * If size tracking is enabled, then setting an explicit size
+         * in the {@link LRUCache#set} call will prevent calling the
+         * {@link OptionsBase.sizeCalculation} function.
+         */
+        size?: Size;
+        /**
+         * If TTL tracking is enabled, then setting an explicit start
+         * time in the {@link LRUCache#set} call will override the
+         * default time from `performance.now()` or `Date.now()`.
+         *
+         * Note that it must be a valid value for whichever time-tracking
+         * method is in use.
+         */
+        start?: Milliseconds;
+        status?: Status;
+    }
+    /**
+     * The type signature for the {@link OptionsBase.fetchMethod} option.
+     */
+    type Fetcher = (key: K, staleValue: V | undefined, options: FetcherOptions) => Promise | V | undefined | void;
+    /**
+     * the type signature for the {@link OptionsBase.memoMethod} option.
+     */
+    type Memoizer = (key: K, staleValue: V | undefined, options: MemoizerOptions) => V;
+    /**
+     * Options which may be passed to the {@link LRUCache} constructor.
+     *
+     * Most of these may be overridden in the various options that use
+     * them.
+     *
+     * Despite all being technically optional, the constructor requires that
+     * a cache is at minimum limited by one or more of {@link OptionsBase.max},
+     * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.
+     *
+     * If {@link OptionsBase.ttl} is used alone, then it is strongly advised
+     * (and in fact required by the type definitions here) that the cache
+     * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially
+     * unbounded storage.
+     *
+     * All options are also available on the {@link LRUCache} instance, making
+     * it safe to pass an LRUCache instance as the options argumemnt to
+     * make another empty cache of the same type.
+     *
+     * Some options are marked as read-only, because changing them after
+     * instantiation is not safe. Changing any of the other options will of
+     * course only have an effect on subsequent method calls.
+     */
+    interface OptionsBase {
+        /**
+         * The maximum number of items to store in the cache before evicting
+         * old entries. This is read-only on the {@link LRUCache} instance,
+         * and may not be overridden.
+         *
+         * If set, then storage space will be pre-allocated at construction
+         * time, and the cache will perform significantly faster.
+         *
+         * Note that significantly fewer items may be stored, if
+         * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also
+         * set.
+         *
+         * **It is strongly recommended to set a `max` to prevent unbounded growth
+         * of the cache.**
+         */
+        max?: Count;
+        /**
+         * Max time in milliseconds for items to live in cache before they are
+         * considered stale.  Note that stale items are NOT preemptively removed by
+         * default, and MAY live in the cache, contributing to its LRU max, long
+         * after they have expired, unless {@link OptionsBase.ttlAutopurge} is
+         * set.
+         *
+         * If set to `0` (the default value), then that means "do not track
+         * TTL", not "expire immediately".
+         *
+         * Also, as this cache is optimized for LRU/MRU operations, some of
+         * the staleness/TTL checks will reduce performance, as they will incur
+         * overhead by deleting items.
+         *
+         * This is not primarily a TTL cache, and does not make strong TTL
+         * guarantees. There is no pre-emptive pruning of expired items, but you
+         * _may_ set a TTL on the cache, and it will treat expired items as missing
+         * when they are fetched, and delete them.
+         *
+         * Optional, but must be a non-negative integer in ms if specified.
+         *
+         * This may be overridden by passing an options object to `cache.set()`.
+         *
+         * At least one of `max`, `maxSize`, or `TTL` is required. This must be a
+         * positive integer if set.
+         *
+         * Even if ttl tracking is enabled, **it is strongly recommended to set a
+         * `max` to prevent unbounded growth of the cache.**
+         *
+         * If ttl tracking is enabled, and `max` and `maxSize` are not set,
+         * and `ttlAutopurge` is not set, then a warning will be emitted
+         * cautioning about the potential for unbounded memory consumption.
+         * (The TypeScript definitions will also discourage this.)
+         */
+        ttl?: Milliseconds;
+        /**
+         * Minimum amount of time in ms in which to check for staleness.
+         * Defaults to 1, which means that the current time is checked
+         * at most once per millisecond.
+         *
+         * Set to 0 to check the current time every time staleness is tested.
+         * (This reduces performance, and is theoretically unnecessary.)
+         *
+         * Setting this to a higher value will improve performance somewhat
+         * while using ttl tracking, albeit at the expense of keeping stale
+         * items around a bit longer than their TTLs would indicate.
+         *
+         * @default 1
+         */
+        ttlResolution?: Milliseconds;
+        /**
+         * Preemptively remove stale items from the cache.
+         *
+         * Note that this may *significantly* degrade performance, especially if
+         * the cache is storing a large number of items. It is almost always best
+         * to just leave the stale items in the cache, and let them fall out as new
+         * items are added.
+         *
+         * Note that this means that {@link OptionsBase.allowStale} is a bit
+         * pointless, as stale items will be deleted almost as soon as they
+         * expire.
+         *
+         * Use with caution!
+         */
+        ttlAutopurge?: boolean;
+        /**
+         * When using time-expiring entries with `ttl`, setting this to `true` will
+         * make each item's age reset to 0 whenever it is retrieved from cache with
+         * {@link LRUCache#get}, causing it to not expire. (It can still fall out
+         * of cache based on recency of use, of course.)
+         *
+         * Has no effect if {@link OptionsBase.ttl} is not set.
+         *
+         * This may be overridden by passing an options object to `cache.get()`.
+         */
+        updateAgeOnGet?: boolean;
+        /**
+         * When using time-expiring entries with `ttl`, setting this to `true` will
+         * make each item's age reset to 0 whenever its presence in the cache is
+         * checked with {@link LRUCache#has}, causing it to not expire. (It can
+         * still fall out of cache based on recency of use, of course.)
+         *
+         * Has no effect if {@link OptionsBase.ttl} is not set.
+         */
+        updateAgeOnHas?: boolean;
+        /**
+         * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return
+         * stale data, if available.
+         *
+         * By default, if you set `ttl`, stale items will only be deleted from the
+         * cache when you `get(key)`. That is, it's not preemptively pruning items,
+         * unless {@link OptionsBase.ttlAutopurge} is set.
+         *
+         * If you set `allowStale:true`, it'll return the stale value *as well as*
+         * deleting it. If you don't set this, then it'll return `undefined` when
+         * you try to get a stale entry.
+         *
+         * Note that when a stale entry is fetched, _even if it is returned due to
+         * `allowStale` being set_, it is removed from the cache immediately. You
+         * can suppress this behavior by setting
+         * {@link OptionsBase.noDeleteOnStaleGet}, either in the constructor, or in
+         * the options provided to {@link LRUCache#get}.
+         *
+         * This may be overridden by passing an options object to `cache.get()`.
+         * The `cache.has()` method will always return `false` for stale items.
+         *
+         * Only relevant if a ttl is set.
+         */
+        allowStale?: boolean;
+        /**
+         * Function that is called on items when they are dropped from the
+         * cache, as `dispose(value, key, reason)`.
+         *
+         * This can be handy if you want to close file descriptors or do
+         * other cleanup tasks when items are no longer stored in the cache.
+         *
+         * **NOTE**: It is called _before_ the item has been fully removed
+         * from the cache, so if you want to put it right back in, you need
+         * to wait until the next tick. If you try to add it back in during
+         * the `dispose()` function call, it will break things in subtle and
+         * weird ways.
+         *
+         * Unlike several other options, this may _not_ be overridden by
+         * passing an option to `set()`, for performance reasons.
+         *
+         * The `reason` will be one of the following strings, corresponding
+         * to the reason for the item's deletion:
+         *
+         * - `evict` Item was evicted to make space for a new addition
+         * - `set` Item was overwritten by a new value
+         * - `expire` Item expired its TTL
+         * - `fetch` Item was deleted due to a failed or aborted fetch, or a
+         *   fetchMethod returning `undefined.
+         * - `delete` Item was removed by explicit `cache.delete(key)`,
+         *   `cache.clear()`, or `cache.set(key, undefined)`.
+         */
+        dispose?: Disposer;
+        /**
+         * The same as {@link OptionsBase.dispose}, but called *after* the entry
+         * is completely removed and the cache is once again in a clean state.
+         *
+         * It is safe to add an item right back into the cache at this point.
+         * However, note that it is *very* easy to inadvertently create infinite
+         * recursion this way.
+         */
+        disposeAfter?: Disposer;
+        /**
+         * Set to true to suppress calling the
+         * {@link OptionsBase.dispose} function if the entry key is
+         * still accessible within the cache.
+         *
+         * This may be overridden by passing an options object to
+         * {@link LRUCache#set}.
+         *
+         * Only relevant if `dispose` or `disposeAfter` are set.
+         */
+        noDisposeOnSet?: boolean;
+        /**
+         * Boolean flag to tell the cache to not update the TTL when setting a new
+         * value for an existing key (ie, when updating a value rather than
+         * inserting a new value).  Note that the TTL value is _always_ set (if
+         * provided) when adding a new entry into the cache.
+         *
+         * Has no effect if a {@link OptionsBase.ttl} is not set.
+         *
+         * May be passed as an option to {@link LRUCache#set}.
+         */
+        noUpdateTTL?: boolean;
+        /**
+         * Set to a positive integer to track the sizes of items added to the
+         * cache, and automatically evict items in order to stay below this size.
+         * Note that this may result in fewer than `max` items being stored.
+         *
+         * Attempting to add an item to the cache whose calculated size is greater
+         * that this amount will be a no-op. The item will not be cached, and no
+         * other items will be evicted.
+         *
+         * Optional, must be a positive integer if provided.
+         *
+         * Sets `maxEntrySize` to the same value, unless a different value is
+         * provided for `maxEntrySize`.
+         *
+         * At least one of `max`, `maxSize`, or `TTL` is required. This must be a
+         * positive integer if set.
+         *
+         * Even if size tracking is enabled, **it is strongly recommended to set a
+         * `max` to prevent unbounded growth of the cache.**
+         *
+         * Note also that size tracking can negatively impact performance,
+         * though for most cases, only minimally.
+         */
+        maxSize?: Size;
+        /**
+         * The maximum allowed size for any single item in the cache.
+         *
+         * If a larger item is passed to {@link LRUCache#set} or returned by a
+         * {@link OptionsBase.fetchMethod} or {@link OptionsBase.memoMethod}, then
+         * it will not be stored in the cache.
+         *
+         * Attempting to add an item whose calculated size is greater than
+         * this amount will not cache the item or evict any old items, but
+         * WILL delete an existing value if one is already present.
+         *
+         * Optional, must be a positive integer if provided. Defaults to
+         * the value of `maxSize` if provided.
+         */
+        maxEntrySize?: Size;
+        /**
+         * A function that returns a number indicating the item's size.
+         *
+         * Requires {@link OptionsBase.maxSize} to be set.
+         *
+         * If not provided, and {@link OptionsBase.maxSize} or
+         * {@link OptionsBase.maxEntrySize} are set, then all
+         * {@link LRUCache#set} calls **must** provide an explicit
+         * {@link SetOptions.size} or sizeCalculation param.
+         */
+        sizeCalculation?: SizeCalculator;
+        /**
+         * Method that provides the implementation for {@link LRUCache#fetch}
+         *
+         * ```ts
+         * fetchMethod(key, staleValue, { signal, options, context })
+         * ```
+         *
+         * If `fetchMethod` is not provided, then `cache.fetch(key)` is equivalent
+         * to `Promise.resolve(cache.get(key))`.
+         *
+         * If at any time, `signal.aborted` is set to `true`, or if the
+         * `signal.onabort` method is called, or if it emits an `'abort'` event
+         * which you can listen to with `addEventListener`, then that means that
+         * the fetch should be abandoned. This may be passed along to async
+         * functions aware of AbortController/AbortSignal behavior.
+         *
+         * The `fetchMethod` should **only** return `undefined` or a Promise
+         * resolving to `undefined` if the AbortController signaled an `abort`
+         * event. In all other cases, it should return or resolve to a value
+         * suitable for adding to the cache.
+         *
+         * The `options` object is a union of the options that may be provided to
+         * `set()` and `get()`. If they are modified, then that will result in
+         * modifying the settings to `cache.set()` when the value is resolved, and
+         * in the case of
+         * {@link OptionsBase.noDeleteOnFetchRejection} and
+         * {@link OptionsBase.allowStaleOnFetchRejection}, the handling of
+         * `fetchMethod` failures.
+         *
+         * For example, a DNS cache may update the TTL based on the value returned
+         * from a remote DNS server by changing `options.ttl` in the `fetchMethod`.
+         */
+        fetchMethod?: Fetcher;
+        /**
+         * Method that provides the implementation for {@link LRUCache#memo}
+         */
+        memoMethod?: Memoizer;
+        /**
+         * Set to true to suppress the deletion of stale data when a
+         * {@link OptionsBase.fetchMethod} returns a rejected promise.
+         */
+        noDeleteOnFetchRejection?: boolean;
+        /**
+         * Do not delete stale items when they are retrieved with
+         * {@link LRUCache#get}.
+         *
+         * Note that the `get` return value will still be `undefined`
+         * unless {@link OptionsBase.allowStale} is true.
+         *
+         * When using time-expiring entries with `ttl`, by default stale
+         * items will be removed from the cache when the key is accessed
+         * with `cache.get()`.
+         *
+         * Setting this option will cause stale items to remain in the cache, until
+         * they are explicitly deleted with `cache.delete(key)`, or retrieved with
+         * `noDeleteOnStaleGet` set to `false`.
+         *
+         * This may be overridden by passing an options object to `cache.get()`.
+         *
+         * Only relevant if a ttl is used.
+         */
+        noDeleteOnStaleGet?: boolean;
+        /**
+         * Set to true to allow returning stale data when a
+         * {@link OptionsBase.fetchMethod} throws an error or returns a rejected
+         * promise.
+         *
+         * This differs from using {@link OptionsBase.allowStale} in that stale
+         * data will ONLY be returned in the case that the {@link LRUCache#fetch}
+         * fails, not any other times.
+         *
+         * If a `fetchMethod` fails, and there is no stale value available, the
+         * `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` errors are
+         * suppressed.
+         *
+         * Implies `noDeleteOnFetchRejection`.
+         *
+         * This may be set in calls to `fetch()`, or defaulted on the constructor,
+         * or overridden by modifying the options object in the `fetchMethod`.
+         */
+        allowStaleOnFetchRejection?: boolean;
+        /**
+         * Set to true to return a stale value from the cache when the
+         * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches
+         * an `'abort'` event, whether user-triggered, or due to internal cache
+         * behavior.
+         *
+         * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying
+         * {@link OptionsBase.fetchMethod} will still be considered canceled, and
+         * any value it returns will be ignored and not cached.
+         *
+         * Caveat: since fetches are aborted when a new value is explicitly
+         * set in the cache, this can lead to fetch returning a stale value,
+         * since that was the fallback value _at the moment the `fetch()` was
+         * initiated_, even though the new updated value is now present in
+         * the cache.
+         *
+         * For example:
+         *
+         * ```ts
+         * const cache = new LRUCache({
+         *   ttl: 100,
+         *   fetchMethod: async (url, oldValue, { signal }) =>  {
+         *     const res = await fetch(url, { signal })
+         *     return await res.json()
+         *   }
+         * })
+         * cache.set('https://example.com/', { some: 'data' })
+         * // 100ms go by...
+         * const result = cache.fetch('https://example.com/')
+         * cache.set('https://example.com/', { other: 'thing' })
+         * console.log(await result) // { some: 'data' }
+         * console.log(cache.get('https://example.com/')) // { other: 'thing' }
+         * ```
+         */
+        allowStaleOnFetchAbort?: boolean;
+        /**
+         * Set to true to ignore the `abort` event emitted by the `AbortSignal`
+         * object passed to {@link OptionsBase.fetchMethod}, and still cache the
+         * resulting resolution value, as long as it is not `undefined`.
+         *
+         * When used on its own, this means aborted {@link LRUCache#fetch} calls
+         * are not immediately resolved or rejected when they are aborted, and
+         * instead take the full time to await.
+         *
+         * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted
+         * {@link LRUCache#fetch} calls will resolve immediately to their stale
+         * cached value or `undefined`, and will continue to process and eventually
+         * update the cache when they resolve, as long as the resulting value is
+         * not `undefined`, thus supporting a "return stale on timeout while
+         * refreshing" mechanism by passing `AbortSignal.timeout(n)` as the signal.
+         *
+         * For example:
+         *
+         * ```ts
+         * const c = new LRUCache({
+         *   ttl: 100,
+         *   ignoreFetchAbort: true,
+         *   allowStaleOnFetchAbort: true,
+         *   fetchMethod: async (key, oldValue, { signal }) => {
+         *     // note: do NOT pass the signal to fetch()!
+         *     // let's say this fetch can take a long time.
+         *     const res = await fetch(`https://slow-backend-server/${key}`)
+         *     return await res.json()
+         *   },
+         * })
+         *
+         * // this will return the stale value after 100ms, while still
+         * // updating in the background for next time.
+         * const val = await c.fetch('key', { signal: AbortSignal.timeout(100) })
+         * ```
+         *
+         * **Note**: regardless of this setting, an `abort` event _is still
+         * emitted on the `AbortSignal` object_, so may result in invalid results
+         * when passed to other underlying APIs that use AbortSignals.
+         *
+         * This may be overridden in the {@link OptionsBase.fetchMethod} or the
+         * call to {@link LRUCache#fetch}.
+         */
+        ignoreFetchAbort?: boolean;
+    }
+    interface OptionsMaxLimit extends OptionsBase {
+        max: Count;
+    }
+    interface OptionsTTLLimit extends OptionsBase {
+        ttl: Milliseconds;
+        ttlAutopurge: boolean;
+    }
+    interface OptionsSizeLimit extends OptionsBase {
+        maxSize: Size;
+    }
+    /**
+     * The valid safe options for the {@link LRUCache} constructor
+     */
+    type Options = OptionsMaxLimit | OptionsSizeLimit | OptionsTTLLimit;
+    /**
+     * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump},
+     * and returned by {@link LRUCache#info}.
+     */
+    interface Entry {
+        value: V;
+        ttl?: Milliseconds;
+        size?: Size;
+        start?: Milliseconds;
+    }
+}
+/**
+ * Default export, the thing you're using this module to get.
+ *
+ * The `K` and `V` types define the key and value types, respectively. The
+ * optional `FC` type defines the type of the `context` object passed to
+ * `cache.fetch()` and `cache.memo()`.
+ *
+ * Keys and values **must not** be `null` or `undefined`.
+ *
+ * All properties from the options object (with the exception of `max`,
+ * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are
+ * added as normal public members. (The listed options are read-only getters.)
+ *
+ * Changing any of these will alter the defaults for subsequent method calls.
+ */
+export declare class LRUCache {
+    #private;
+    /**
+     * {@link LRUCache.OptionsBase.ttl}
+     */
+    ttl: LRUCache.Milliseconds;
+    /**
+     * {@link LRUCache.OptionsBase.ttlResolution}
+     */
+    ttlResolution: LRUCache.Milliseconds;
+    /**
+     * {@link LRUCache.OptionsBase.ttlAutopurge}
+     */
+    ttlAutopurge: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.updateAgeOnGet}
+     */
+    updateAgeOnGet: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.updateAgeOnHas}
+     */
+    updateAgeOnHas: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.allowStale}
+     */
+    allowStale: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.noDisposeOnSet}
+     */
+    noDisposeOnSet: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.noUpdateTTL}
+     */
+    noUpdateTTL: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.maxEntrySize}
+     */
+    maxEntrySize: LRUCache.Size;
+    /**
+     * {@link LRUCache.OptionsBase.sizeCalculation}
+     */
+    sizeCalculation?: LRUCache.SizeCalculator;
+    /**
+     * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}
+     */
+    noDeleteOnFetchRejection: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}
+     */
+    noDeleteOnStaleGet: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}
+     */
+    allowStaleOnFetchAbort: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}
+     */
+    allowStaleOnFetchRejection: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.ignoreFetchAbort}
+     */
+    ignoreFetchAbort: boolean;
+    /**
+     * Do not call this method unless you need to inspect the
+     * inner workings of the cache.  If anything returned by this
+     * object is modified in any way, strange breakage may occur.
+     *
+     * These fields are private for a reason!
+     *
+     * @internal
+     */
+    static unsafeExposeInternals(c: LRUCache): {
+        starts: ZeroArray | undefined;
+        ttls: ZeroArray | undefined;
+        sizes: ZeroArray | undefined;
+        keyMap: Map;
+        keyList: (K | undefined)[];
+        valList: (V | BackgroundFetch | undefined)[];
+        next: NumberArray;
+        prev: NumberArray;
+        readonly head: Index;
+        readonly tail: Index;
+        free: StackLike;
+        isBackgroundFetch: (p: any) => p is BackgroundFetch;
+        backgroundFetch: (k: K, index: number | undefined, options: LRUCache.FetchOptions, context: any) => BackgroundFetch;
+        moveToTail: (index: number) => void;
+        indexes: (options?: {
+            allowStale: boolean;
+        }) => Generator;
+        rindexes: (options?: {
+            allowStale: boolean;
+        }) => Generator;
+        isStale: (index: number | undefined) => boolean;
+    };
+    /**
+     * {@link LRUCache.OptionsBase.max} (read-only)
+     */
+    get max(): LRUCache.Count;
+    /**
+     * {@link LRUCache.OptionsBase.maxSize} (read-only)
+     */
+    get maxSize(): LRUCache.Count;
+    /**
+     * The total computed size of items in the cache (read-only)
+     */
+    get calculatedSize(): LRUCache.Size;
+    /**
+     * The number of items stored in the cache (read-only)
+     */
+    get size(): LRUCache.Count;
+    /**
+     * {@link LRUCache.OptionsBase.fetchMethod} (read-only)
+     */
+    get fetchMethod(): LRUCache.Fetcher | undefined;
+    get memoMethod(): LRUCache.Memoizer | undefined;
+    /**
+     * {@link LRUCache.OptionsBase.dispose} (read-only)
+     */
+    get dispose(): LRUCache.Disposer | undefined;
+    /**
+     * {@link LRUCache.OptionsBase.disposeAfter} (read-only)
+     */
+    get disposeAfter(): LRUCache.Disposer | undefined;
+    constructor(options: LRUCache.Options | LRUCache);
+    /**
+     * Return the number of ms left in the item's TTL. If item is not in cache,
+     * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.
+     */
+    getRemainingTTL(key: K): number;
+    /**
+     * Return a generator yielding `[key, value]` pairs,
+     * in order from most recently used to least recently used.
+     */
+    entries(): Generator<[K, V], void, unknown>;
+    /**
+     * Inverse order version of {@link LRUCache.entries}
+     *
+     * Return a generator yielding `[key, value]` pairs,
+     * in order from least recently used to most recently used.
+     */
+    rentries(): Generator<(K | V)[], void, unknown>;
+    /**
+     * Return a generator yielding the keys in the cache,
+     * in order from most recently used to least recently used.
+     */
+    keys(): Generator;
+    /**
+     * Inverse order version of {@link LRUCache.keys}
+     *
+     * Return a generator yielding the keys in the cache,
+     * in order from least recently used to most recently used.
+     */
+    rkeys(): Generator;
+    /**
+     * Return a generator yielding the values in the cache,
+     * in order from most recently used to least recently used.
+     */
+    values(): Generator;
+    /**
+     * Inverse order version of {@link LRUCache.values}
+     *
+     * Return a generator yielding the values in the cache,
+     * in order from least recently used to most recently used.
+     */
+    rvalues(): Generator;
+    /**
+     * Iterating over the cache itself yields the same results as
+     * {@link LRUCache.entries}
+     */
+    [Symbol.iterator](): Generator<[K, V], void, unknown>;
+    /**
+     * 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]: string;
+    /**
+     * 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)`.
+     */
+    find(fn: (v: V, k: K, self: LRUCache) => boolean, getOptions?: LRUCache.GetOptions): V | undefined;
+    /**
+     * Call the supplied function on each item in the cache, in order from most
+     * recently used to least recently used.
+     *
+     * `fn` is called as `fn(value, key, cache)`.
+     *
+     * If `thisp` is provided, function will be called in the `this`-context of
+     * the provided object, or the cache if no `thisp` object is provided.
+     *
+     * Does not update age or recenty of use, or iterate over stale values.
+     */
+    forEach(fn: (v: V, k: K, self: LRUCache) => any, thisp?: any): void;
+    /**
+     * The same as {@link LRUCache.forEach} but items are iterated over in
+     * reverse order.  (ie, less recently used items are iterated over first.)
+     */
+    rforEach(fn: (v: V, k: K, self: LRUCache) => any, thisp?: any): void;
+    /**
+     * Delete any stale entries. Returns true if anything was removed,
+     * false otherwise.
+     */
+    purgeStale(): boolean;
+    /**
+     * Get the extended info about a given entry, to get its value, size, and
+     * TTL info simultaneously. Returns `undefined` if the key is not present.
+     *
+     * Unlike {@link LRUCache#dump}, which is designed to be portable and survive
+     * serialization, the `start` value is always the current timestamp, and the
+     * `ttl` is a calculated remaining time to live (negative if expired).
+     *
+     * Always returns stale values, if their info is found in the cache, so be
+     * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})
+     * if relevant.
+     */
+    info(key: K): LRUCache.Entry | undefined;
+    /**
+     * Return an array of [key, {@link LRUCache.Entry}] tuples which can be
+     * passed to {@link LRLUCache#load}.
+     *
+     * The `start` fields are calculated relative to a portable `Date.now()`
+     * timestamp, even if `performance.now()` is available.
+     *
+     * Stale entries are always included in the `dump`, even if
+     * {@link LRUCache.OptionsBase.allowStale} is false.
+     *
+     * Note: this returns an actual array, not a generator, so it can be more
+     * easily passed around.
+     */
+    dump(): [K, LRUCache.Entry][];
+    /**
+     * Reset the cache and load in the items in entries in the order listed.
+     *
+     * The shape of the resulting cache may be different if the same options are
+     * not used in both caches.
+     *
+     * The `start` fields are assumed to be calculated relative to a portable
+     * `Date.now()` timestamp, even if `performance.now()` is available.
+     */
+    load(arr: [K, LRUCache.Entry][]): void;
+    /**
+     * Add a value to the cache.
+     *
+     * Note: if `undefined` is specified as a value, this is an alias for
+     * {@link LRUCache#delete}
+     *
+     * Fields on the {@link LRUCache.SetOptions} options param will override
+     * their corresponding values in the constructor options for the scope
+     * of this single `set()` operation.
+     *
+     * If `start` is provided, then that will set the effective start
+     * time for the TTL calculation. Note that this must be a previous
+     * value of `performance.now()` if supported, or a previous value of
+     * `Date.now()` if not.
+     *
+     * Options object may also include `size`, which will prevent
+     * calling the `sizeCalculation` function and just use the specified
+     * number if it is a positive integer, and `noDisposeOnSet` which
+     * will prevent calling a `dispose` function in the case of
+     * overwrites.
+     *
+     * If the `size` (or return value of `sizeCalculation`) for a given
+     * entry is greater than `maxEntrySize`, then the item will not be
+     * added to the cache.
+     *
+     * Will update the recency of the entry.
+     *
+     * If the value is `undefined`, then this is an alias for
+     * `cache.delete(key)`. `undefined` is never stored in the cache.
+     */
+    set(k: K, v: V | BackgroundFetch | undefined, setOptions?: LRUCache.SetOptions): this;
+    /**
+     * Evict the least recently used item, returning its value or
+     * `undefined` if cache is empty.
+     */
+    pop(): V | undefined;
+    /**
+     * Check if a key is in the cache, without updating the recency of use.
+     * Will return false if the item is stale, even though it is technically
+     * in the cache.
+     *
+     * Check if a key is in the cache, without updating the recency of
+     * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set
+     * to `true` in either the options or the constructor.
+     *
+     * Will return `false` if the item is stale, even though it is technically in
+     * the cache. The difference can be determined (if it matters) by using a
+     * `status` argument, and inspecting the `has` field.
+     *
+     * Will not update item age unless
+     * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
+     */
+    has(k: K, hasOptions?: LRUCache.HasOptions): boolean;
+    /**
+     * Like {@link LRUCache#get} but doesn't update recency or delete stale
+     * items.
+     *
+     * Returns `undefined` if the item is stale, unless
+     * {@link LRUCache.OptionsBase.allowStale} is set.
+     */
+    peek(k: K, peekOptions?: LRUCache.PeekOptions): V | undefined;
+    /**
+     * Make an asynchronous cached fetch using the
+     * {@link LRUCache.OptionsBase.fetchMethod} function.
+     *
+     * If the value is in the cache and not stale, then the returned
+     * Promise resolves to the value.
+     *
+     * If not in the cache, or beyond its TTL staleness, then
+     * `fetchMethod(key, staleValue, { options, signal, context })` is
+     * called, and the value returned will be added to the cache once
+     * resolved.
+     *
+     * If called with `allowStale`, and an asynchronous fetch is
+     * currently in progress to reload a stale value, then the former
+     * stale value will be returned.
+     *
+     * If called with `forceRefresh`, then the cached item will be
+     * re-fetched, even if it is not stale. However, if `allowStale` is also
+     * set, then the old value will still be returned. This is useful
+     * in cases where you want to force a reload of a cached value. If
+     * a background fetch is already in progress, then `forceRefresh`
+     * has no effect.
+     *
+     * If multiple fetches for the same key are issued, then they will all be
+     * coalesced into a single call to fetchMethod.
+     *
+     * Note that this means that handling options such as
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},
+     * {@link LRUCache.FetchOptions.signal},
+     * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be
+     * determined by the FIRST fetch() call for a given key.
+     *
+     * This is a known (fixable) shortcoming which will be addresed on when
+     * someone complains about it, as the fix would involve added complexity and
+     * may not be worth the costs for this edge case.
+     *
+     * If {@link LRUCache.OptionsBase.fetchMethod} is not specified, then this is
+     * effectively an alias for `Promise.resolve(cache.get(key))`.
+     *
+     * When the fetch method resolves to a value, if the fetch has not
+     * been aborted due to deletion, eviction, or being overwritten,
+     * then it is added to the cache using the options provided.
+     *
+     * If the key is evicted or deleted before the `fetchMethod`
+     * resolves, then the AbortSignal passed to the `fetchMethod` will
+     * receive an `abort` event, and the promise returned by `fetch()`
+     * will reject with the reason for the abort.
+     *
+     * If a `signal` is passed to the `fetch()` call, then aborting the
+     * signal will abort the fetch and cause the `fetch()` promise to
+     * reject with the reason provided.
+     *
+     * **Setting `context`**
+     *
+     * If an `FC` type is set to a type other than `unknown`, `void`, or
+     * `undefined` in the {@link LRUCache} constructor, then all
+     * calls to `cache.fetch()` _must_ provide a `context` option. If
+     * set to `undefined` or `void`, then calls to fetch _must not_
+     * provide a `context` option.
+     *
+     * The `context` param allows you to provide arbitrary data that
+     * might be relevant in the course of fetching the data. It is only
+     * relevant for the course of a single `fetch()` operation, and
+     * discarded afterwards.
+     *
+     * **Note: `fetch()` calls are inflight-unique**
+     *
+     * If you call `fetch()` multiple times with the same key value,
+     * then every call after the first will resolve on the same
+     * promise1,
+     * _even if they have different settings that would otherwise change
+     * the behavior of the fetch_, such as `noDeleteOnFetchRejection`
+     * or `ignoreFetchAbort`.
+     *
+     * In most cases, this is not a problem (in fact, only fetching
+     * something once is what you probably want, if you're caching in
+     * the first place). If you are changing the fetch() options
+     * dramatically between runs, there's a good chance that you might
+     * be trying to fit divergent semantics into a single object, and
+     * would be better off with multiple cache instances.
+     *
+     * **1**: Ie, they're not the "same Promise", but they resolve at
+     * the same time, because they're both waiting on the same
+     * underlying fetchMethod response.
+     */
+    fetch(k: K, fetchOptions: unknown extends FC ? LRUCache.FetchOptions : FC extends undefined | void ? LRUCache.FetchOptionsNoContext : LRUCache.FetchOptionsWithContext): Promise;
+    fetch(k: unknown extends FC ? K : FC extends undefined | void ? K : never, fetchOptions?: unknown extends FC ? LRUCache.FetchOptions : FC extends undefined | void ? LRUCache.FetchOptionsNoContext : never): Promise;
+    /**
+     * In some cases, `cache.fetch()` may resolve to `undefined`, either because
+     * a {@link LRUCache.OptionsBase#fetchMethod} was not provided (turning
+     * `cache.fetch(k)` into just an async wrapper around `cache.get(k)`) or
+     * because `ignoreFetchAbort` was specified (either to the constructor or
+     * in the {@link LRUCache.FetchOptions}). Also, the
+     * {@link OptionsBase.fetchMethod} may return `undefined` or `void`, making
+     * the test even more complicated.
+     *
+     * Because inferring the cases where `undefined` might be returned are so
+     * cumbersome, but testing for `undefined` can also be annoying, this method
+     * can be used, which will reject if `this.fetch()` resolves to undefined.
+     */
+    forceFetch(k: K, fetchOptions: unknown extends FC ? LRUCache.FetchOptions : FC extends undefined | void ? LRUCache.FetchOptionsNoContext : LRUCache.FetchOptionsWithContext): Promise;
+    forceFetch(k: unknown extends FC ? K : FC extends undefined | void ? K : never, fetchOptions?: unknown extends FC ? LRUCache.FetchOptions : FC extends undefined | void ? LRUCache.FetchOptionsNoContext : never): Promise;
+    /**
+     * If the key is found in the cache, then this is equivalent to
+     * {@link LRUCache#get}. If not, in the cache, then calculate the value using
+     * the {@link LRUCache.OptionsBase.memoMethod}, and add it to the cache.
+     *
+     * If an `FC` type is set to a type other than `unknown`, `void`, or
+     * `undefined` in the LRUCache constructor, then all calls to `cache.memo()`
+     * _must_ provide a `context` option. If set to `undefined` or `void`, then
+     * calls to memo _must not_ provide a `context` option.
+     *
+     * The `context` param allows you to provide arbitrary data that might be
+     * relevant in the course of fetching the data. It is only relevant for the
+     * course of a single `memo()` operation, and discarded afterwards.
+     */
+    memo(k: K, memoOptions: unknown extends FC ? LRUCache.MemoOptions : FC extends undefined | void ? LRUCache.MemoOptionsNoContext : LRUCache.MemoOptionsWithContext): V;
+    memo(k: unknown extends FC ? K : FC extends undefined | void ? K : never, memoOptions?: unknown extends FC ? LRUCache.MemoOptions : FC extends undefined | void ? LRUCache.MemoOptionsNoContext : never): V;
+    /**
+     * Return a value from the cache. Will update the recency of the cache
+     * entry found.
+     *
+     * If the key is not found, get() will return `undefined`.
+     */
+    get(k: K, getOptions?: LRUCache.GetOptions): V | undefined;
+    /**
+     * Deletes a key out of the cache.
+     *
+     * Returns true if the key was deleted, false otherwise.
+     */
+    delete(k: K): boolean;
+    /**
+     * Clear the cache entirely, throwing away all values.
+     */
+    clear(): void;
+}
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map
new file mode 100644
index 00000000..1d242ed8
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js
new file mode 100644
index 00000000..05892318
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js
@@ -0,0 +1,1546 @@
+"use strict";
+/**
+ * @module LRUCache
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.LRUCache = void 0;
+const perf = typeof performance === 'object' &&
+    performance &&
+    typeof performance.now === 'function'
+    ? performance
+    : Date;
+const warned = new Set();
+/* c8 ignore start */
+const PROCESS = (typeof process === 'object' && !!process ? process : {});
+/* c8 ignore start */
+const emitWarning = (msg, type, code, fn) => {
+    typeof PROCESS.emitWarning === 'function'
+        ? PROCESS.emitWarning(msg, type, code, fn)
+        : console.error(`[${code}] ${type}: ${msg}`);
+};
+let AC = globalThis.AbortController;
+let AS = globalThis.AbortSignal;
+/* c8 ignore start */
+if (typeof AC === 'undefined') {
+    //@ts-ignore
+    AS = class AbortSignal {
+        onabort;
+        _onabort = [];
+        reason;
+        aborted = false;
+        addEventListener(_, fn) {
+            this._onabort.push(fn);
+        }
+    };
+    //@ts-ignore
+    AC = class AbortController {
+        constructor() {
+            warnACPolyfill();
+        }
+        signal = new AS();
+        abort(reason) {
+            if (this.signal.aborted)
+                return;
+            //@ts-ignore
+            this.signal.reason = reason;
+            //@ts-ignore
+            this.signal.aborted = true;
+            //@ts-ignore
+            for (const fn of this.signal._onabort) {
+                fn(reason);
+            }
+            this.signal.onabort?.(reason);
+        }
+    };
+    let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';
+    const warnACPolyfill = () => {
+        if (!printACPolyfillWarning)
+            return;
+        printACPolyfillWarning = false;
+        emitWarning('AbortController is not defined. If using lru-cache in ' +
+            'node 14, load an AbortController polyfill from the ' +
+            '`node-abort-controller` package. A minimal polyfill is ' +
+            'provided for use by LRUCache.fetch(), but it should not be ' +
+            'relied upon in other contexts (eg, passing it to other APIs that ' +
+            'use AbortController/AbortSignal might have undesirable effects). ' +
+            'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill);
+    };
+}
+/* c8 ignore stop */
+const shouldWarn = (code) => !warned.has(code);
+const TYPE = Symbol('type');
+const isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);
+/* c8 ignore start */
+// This is a little bit ridiculous, tbh.
+// The maximum array length is 2^32-1 or thereabouts on most JS impls.
+// And well before that point, you're caching the entire world, I mean,
+// that's ~32GB of just integers for the next/prev links, plus whatever
+// else to hold that many keys and values.  Just filling the memory with
+// zeroes at init time is brutal when you get that big.
+// But why not be complete?
+// Maybe in the future, these limits will have expanded.
+const 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;
+/* c8 ignore stop */
+class ZeroArray extends Array {
+    constructor(size) {
+        super(size);
+        this.fill(0);
+    }
+}
+class Stack {
+    heap;
+    length;
+    // private constructor
+    static #constructing = false;
+    static create(max) {
+        const HeapCls = getUintArray(max);
+        if (!HeapCls)
+            return [];
+        Stack.#constructing = true;
+        const s = new Stack(max, HeapCls);
+        Stack.#constructing = false;
+        return s;
+    }
+    constructor(max, HeapCls) {
+        /* c8 ignore start */
+        if (!Stack.#constructing) {
+            throw new TypeError('instantiate Stack using Stack.create(n)');
+        }
+        /* c8 ignore stop */
+        this.heap = new HeapCls(max);
+        this.length = 0;
+    }
+    push(n) {
+        this.heap[this.length++] = n;
+    }
+    pop() {
+        return this.heap[--this.length];
+    }
+}
+/**
+ * Default export, the thing you're using this module to get.
+ *
+ * The `K` and `V` types define the key and value types, respectively. The
+ * optional `FC` type defines the type of the `context` object passed to
+ * `cache.fetch()` and `cache.memo()`.
+ *
+ * Keys and values **must not** be `null` or `undefined`.
+ *
+ * All properties from the options object (with the exception of `max`,
+ * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are
+ * added as normal public members. (The listed options are read-only getters.)
+ *
+ * Changing any of these will alter the defaults for subsequent method calls.
+ */
+class LRUCache {
+    // options that cannot be changed without disaster
+    #max;
+    #maxSize;
+    #dispose;
+    #disposeAfter;
+    #fetchMethod;
+    #memoMethod;
+    /**
+     * {@link LRUCache.OptionsBase.ttl}
+     */
+    ttl;
+    /**
+     * {@link LRUCache.OptionsBase.ttlResolution}
+     */
+    ttlResolution;
+    /**
+     * {@link LRUCache.OptionsBase.ttlAutopurge}
+     */
+    ttlAutopurge;
+    /**
+     * {@link LRUCache.OptionsBase.updateAgeOnGet}
+     */
+    updateAgeOnGet;
+    /**
+     * {@link LRUCache.OptionsBase.updateAgeOnHas}
+     */
+    updateAgeOnHas;
+    /**
+     * {@link LRUCache.OptionsBase.allowStale}
+     */
+    allowStale;
+    /**
+     * {@link LRUCache.OptionsBase.noDisposeOnSet}
+     */
+    noDisposeOnSet;
+    /**
+     * {@link LRUCache.OptionsBase.noUpdateTTL}
+     */
+    noUpdateTTL;
+    /**
+     * {@link LRUCache.OptionsBase.maxEntrySize}
+     */
+    maxEntrySize;
+    /**
+     * {@link LRUCache.OptionsBase.sizeCalculation}
+     */
+    sizeCalculation;
+    /**
+     * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}
+     */
+    noDeleteOnFetchRejection;
+    /**
+     * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}
+     */
+    noDeleteOnStaleGet;
+    /**
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}
+     */
+    allowStaleOnFetchAbort;
+    /**
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}
+     */
+    allowStaleOnFetchRejection;
+    /**
+     * {@link LRUCache.OptionsBase.ignoreFetchAbort}
+     */
+    ignoreFetchAbort;
+    // computed properties
+    #size;
+    #calculatedSize;
+    #keyMap;
+    #keyList;
+    #valList;
+    #next;
+    #prev;
+    #head;
+    #tail;
+    #free;
+    #disposed;
+    #sizes;
+    #starts;
+    #ttls;
+    #hasDispose;
+    #hasFetchMethod;
+    #hasDisposeAfter;
+    /**
+     * Do not call this method unless you need to inspect the
+     * inner workings of the cache.  If anything returned by this
+     * object is modified in any way, strange breakage may occur.
+     *
+     * These fields are private for a reason!
+     *
+     * @internal
+     */
+    static unsafeExposeInternals(c) {
+        return {
+            // properties
+            starts: c.#starts,
+            ttls: c.#ttls,
+            sizes: c.#sizes,
+            keyMap: c.#keyMap,
+            keyList: c.#keyList,
+            valList: c.#valList,
+            next: c.#next,
+            prev: c.#prev,
+            get head() {
+                return c.#head;
+            },
+            get tail() {
+                return c.#tail;
+            },
+            free: c.#free,
+            // methods
+            isBackgroundFetch: (p) => c.#isBackgroundFetch(p),
+            backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),
+            moveToTail: (index) => c.#moveToTail(index),
+            indexes: (options) => c.#indexes(options),
+            rindexes: (options) => c.#rindexes(options),
+            isStale: (index) => c.#isStale(index),
+        };
+    }
+    // Protected read-only members
+    /**
+     * {@link LRUCache.OptionsBase.max} (read-only)
+     */
+    get max() {
+        return this.#max;
+    }
+    /**
+     * {@link LRUCache.OptionsBase.maxSize} (read-only)
+     */
+    get maxSize() {
+        return this.#maxSize;
+    }
+    /**
+     * The total computed size of items in the cache (read-only)
+     */
+    get calculatedSize() {
+        return this.#calculatedSize;
+    }
+    /**
+     * The number of items stored in the cache (read-only)
+     */
+    get size() {
+        return this.#size;
+    }
+    /**
+     * {@link LRUCache.OptionsBase.fetchMethod} (read-only)
+     */
+    get fetchMethod() {
+        return this.#fetchMethod;
+    }
+    get memoMethod() {
+        return this.#memoMethod;
+    }
+    /**
+     * {@link LRUCache.OptionsBase.dispose} (read-only)
+     */
+    get dispose() {
+        return this.#dispose;
+    }
+    /**
+     * {@link LRUCache.OptionsBase.disposeAfter} (read-only)
+     */
+    get disposeAfter() {
+        return this.#disposeAfter;
+    }
+    constructor(options) {
+        const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = 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;
+        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');
+            }
+        }
+        if (memoMethod !== undefined &&
+            typeof memoMethod !== 'function') {
+            throw new TypeError('memoMethod must be a function if defined');
+        }
+        this.#memoMethod = memoMethod;
+        if (fetchMethod !== undefined &&
+            typeof fetchMethod !== 'function') {
+            throw new TypeError('fetchMethod must be a function if specified');
+        }
+        this.#fetchMethod = fetchMethod;
+        this.#hasFetchMethod = !!fetchMethod;
+        this.#keyMap = new Map();
+        this.#keyList = new Array(max).fill(undefined);
+        this.#valList = new Array(max).fill(undefined);
+        this.#next = new UintArray(max);
+        this.#prev = new UintArray(max);
+        this.#head = 0;
+        this.#tail = 0;
+        this.#free = Stack.create(max);
+        this.#size = 0;
+        this.#calculatedSize = 0;
+        if (typeof dispose === 'function') {
+            this.#dispose = dispose;
+        }
+        if (typeof disposeAfter === 'function') {
+            this.#disposeAfter = disposeAfter;
+            this.#disposed = [];
+        }
+        else {
+            this.#disposeAfter = undefined;
+            this.#disposed = undefined;
+        }
+        this.#hasDispose = !!this.#dispose;
+        this.#hasDisposeAfter = !!this.#disposeAfter;
+        this.noDisposeOnSet = !!noDisposeOnSet;
+        this.noUpdateTTL = !!noUpdateTTL;
+        this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;
+        this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;
+        this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;
+        this.ignoreFetchAbort = !!ignoreFetchAbort;
+        // NB: maxEntrySize is set to maxSize if it's set
+        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');
+            }
+            this.#initializeSizeTracking();
+        }
+        this.allowStale = !!allowStale;
+        this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;
+        this.updateAgeOnGet = !!updateAgeOnGet;
+        this.updateAgeOnHas = !!updateAgeOnHas;
+        this.ttlResolution =
+            isPosInt(ttlResolution) || ttlResolution === 0
+                ? ttlResolution
+                : 1;
+        this.ttlAutopurge = !!ttlAutopurge;
+        this.ttl = ttl || 0;
+        if (this.ttl) {
+            if (!isPosInt(this.ttl)) {
+                throw new TypeError('ttl must be a positive integer if specified');
+            }
+            this.#initializeTTLTracking();
+        }
+        // do not allow completely unbounded caches
+        if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {
+            throw new TypeError('At least one of max, maxSize, or ttl is required');
+        }
+        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);
+            }
+        }
+    }
+    /**
+     * Return the number of ms left in the item's TTL. If item is not in cache,
+     * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.
+     */
+    getRemainingTTL(key) {
+        return this.#keyMap.has(key) ? Infinity : 0;
+    }
+    #initializeTTLTracking() {
+        const ttls = new ZeroArray(this.#max);
+        const starts = new ZeroArray(this.#max);
+        this.#ttls = ttls;
+        this.#starts = starts;
+        this.#setItemTTL = (index, ttl, start = perf.now()) => {
+            starts[index] = ttl !== 0 ? start : 0;
+            ttls[index] = ttl;
+            if (ttl !== 0 && this.ttlAutopurge) {
+                const t = setTimeout(() => {
+                    if (this.#isStale(index)) {
+                        this.#delete(this.#keyList[index], 'expire');
+                    }
+                }, ttl + 1);
+                // unref() not supported on all platforms
+                /* c8 ignore start */
+                if (t.unref) {
+                    t.unref();
+                }
+                /* c8 ignore stop */
+            }
+        };
+        this.#updateItemAge = index => {
+            starts[index] = ttls[index] !== 0 ? perf.now() : 0;
+        };
+        this.#statusTTL = (status, index) => {
+            if (ttls[index]) {
+                const ttl = ttls[index];
+                const start = starts[index];
+                /* c8 ignore next */
+                if (!ttl || !start)
+                    return;
+                status.ttl = ttl;
+                status.start = start;
+                status.now = cachedNow || getNow();
+                const age = status.now - start;
+                status.remainingTTL = ttl - age;
+            }
+        };
+        // debounce calls to perf.now() to 1s so we're not hitting
+        // that costly call repeatedly.
+        let cachedNow = 0;
+        const getNow = () => {
+            const n = perf.now();
+            if (this.ttlResolution > 0) {
+                cachedNow = n;
+                const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);
+                // not available on all platforms
+                /* c8 ignore start */
+                if (t.unref) {
+                    t.unref();
+                }
+                /* c8 ignore stop */
+            }
+            return n;
+        };
+        this.getRemainingTTL = key => {
+            const index = this.#keyMap.get(key);
+            if (index === undefined) {
+                return 0;
+            }
+            const ttl = ttls[index];
+            const start = starts[index];
+            if (!ttl || !start) {
+                return Infinity;
+            }
+            const age = (cachedNow || getNow()) - start;
+            return ttl - age;
+        };
+        this.#isStale = index => {
+            const s = starts[index];
+            const t = ttls[index];
+            return !!t && !!s && (cachedNow || getNow()) - s > t;
+        };
+    }
+    // conditionally set private methods related to TTL
+    #updateItemAge = () => { };
+    #statusTTL = () => { };
+    #setItemTTL = () => { };
+    /* c8 ignore stop */
+    #isStale = () => false;
+    #initializeSizeTracking() {
+        const sizes = new ZeroArray(this.#max);
+        this.#calculatedSize = 0;
+        this.#sizes = sizes;
+        this.#removeItemSize = index => {
+            this.#calculatedSize -= sizes[index];
+            sizes[index] = 0;
+        };
+        this.#requireSize = (k, v, size, sizeCalculation) => {
+            // provisionally accept background fetches.
+            // actual value size will be checked when they return.
+            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) => {
+            sizes[index] = size;
+            if (this.#maxSize) {
+                const maxSize = this.#maxSize - sizes[index];
+                while (this.#calculatedSize > maxSize) {
+                    this.#evict(true);
+                }
+            }
+            this.#calculatedSize += sizes[index];
+            if (status) {
+                status.entrySize = size;
+                status.totalCalculatedSize = this.#calculatedSize;
+            }
+        };
+    }
+    #removeItemSize = _i => { };
+    #addItemSize = (_i, _s, _st) => { };
+    #requireSize = (_k, _v, size, sizeCalculation) => {
+        if (size || sizeCalculation) {
+            throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');
+        }
+        return 0;
+    };
+    *#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];
+                }
+            }
+        }
+    }
+    *#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) {
+                    break;
+                }
+                else {
+                    i = this.#next[i];
+                }
+            }
+        }
+    }
+    #isValidIndex(index) {
+        return (index !== undefined &&
+            this.#keyMap.get(this.#keyList[index]) === index);
+    }
+    /**
+     * Return a generator yielding `[key, value]` pairs,
+     * in order from most recently used to least recently used.
+     */
+    *entries() {
+        for (const i of this.#indexes()) {
+            if (this.#valList[i] !== undefined &&
+                this.#keyList[i] !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield [this.#keyList[i], this.#valList[i]];
+            }
+        }
+    }
+    /**
+     * Inverse order version of {@link LRUCache.entries}
+     *
+     * Return a generator yielding `[key, value]` pairs,
+     * in order from least recently used to most recently used.
+     */
+    *rentries() {
+        for (const i of this.#rindexes()) {
+            if (this.#valList[i] !== undefined &&
+                this.#keyList[i] !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield [this.#keyList[i], this.#valList[i]];
+            }
+        }
+    }
+    /**
+     * Return a generator yielding the keys in the cache,
+     * in order from most recently used to least recently used.
+     */
+    *keys() {
+        for (const i of this.#indexes()) {
+            const k = this.#keyList[i];
+            if (k !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield k;
+            }
+        }
+    }
+    /**
+     * Inverse order version of {@link LRUCache.keys}
+     *
+     * Return a generator yielding the keys in the cache,
+     * in order from least recently used to most recently used.
+     */
+    *rkeys() {
+        for (const i of this.#rindexes()) {
+            const k = this.#keyList[i];
+            if (k !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield k;
+            }
+        }
+    }
+    /**
+     * Return a generator yielding the values in the cache,
+     * in order from most recently used to least recently used.
+     */
+    *values() {
+        for (const i of this.#indexes()) {
+            const v = this.#valList[i];
+            if (v !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield this.#valList[i];
+            }
+        }
+    }
+    /**
+     * Inverse order version of {@link LRUCache.values}
+     *
+     * Return a generator yielding the values in the cache,
+     * in order from least recently used to most recently used.
+     */
+    *rvalues() {
+        for (const i of this.#rindexes()) {
+            const v = this.#valList[i];
+            if (v !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield this.#valList[i];
+            }
+        }
+    }
+    /**
+     * Iterating over the cache itself yields the same results as
+     * {@link LRUCache.entries}
+     */
+    [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)`.
+     */
+    find(fn, getOptions = {}) {
+        for (const i of this.#indexes()) {
+            const v = this.#valList[i];
+            const value = this.#isBackgroundFetch(v)
+                ? v.__staleWhileFetching
+                : v;
+            if (value === undefined)
+                continue;
+            if (fn(value, this.#keyList[i], this)) {
+                return this.get(this.#keyList[i], getOptions);
+            }
+        }
+    }
+    /**
+     * Call the supplied function on each item in the cache, in order from most
+     * recently used to least recently used.
+     *
+     * `fn` is called as `fn(value, key, cache)`.
+     *
+     * If `thisp` is provided, function will be called in the `this`-context of
+     * the provided object, or the cache if no `thisp` object is provided.
+     *
+     * Does not update age or recenty of use, or iterate over stale values.
+     */
+    forEach(fn, thisp = this) {
+        for (const i of this.#indexes()) {
+            const v = this.#valList[i];
+            const value = this.#isBackgroundFetch(v)
+                ? v.__staleWhileFetching
+                : v;
+            if (value === undefined)
+                continue;
+            fn.call(thisp, value, this.#keyList[i], this);
+        }
+    }
+    /**
+     * The same as {@link LRUCache.forEach} but items are iterated over in
+     * reverse order.  (ie, less recently used items are iterated over first.)
+     */
+    rforEach(fn, thisp = this) {
+        for (const i of this.#rindexes()) {
+            const v = this.#valList[i];
+            const value = this.#isBackgroundFetch(v)
+                ? v.__staleWhileFetching
+                : v;
+            if (value === undefined)
+                continue;
+            fn.call(thisp, value, this.#keyList[i], this);
+        }
+    }
+    /**
+     * Delete any stale entries. Returns true if anything was removed,
+     * false otherwise.
+     */
+    purgeStale() {
+        let deleted = false;
+        for (const i of this.#rindexes({ allowStale: true })) {
+            if (this.#isStale(i)) {
+                this.#delete(this.#keyList[i], 'expire');
+                deleted = true;
+            }
+        }
+        return deleted;
+    }
+    /**
+     * Get the extended info about a given entry, to get its value, size, and
+     * TTL info simultaneously. Returns `undefined` if the key is not present.
+     *
+     * Unlike {@link LRUCache#dump}, which is designed to be portable and survive
+     * serialization, the `start` value is always the current timestamp, and the
+     * `ttl` is a calculated remaining time to live (negative if expired).
+     *
+     * Always returns stale values, if their info is found in the cache, so be
+     * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})
+     * if relevant.
+     */
+    info(key) {
+        const i = this.#keyMap.get(key);
+        if (i === undefined)
+            return undefined;
+        const v = this.#valList[i];
+        const value = this.#isBackgroundFetch(v)
+            ? v.__staleWhileFetching
+            : v;
+        if (value === undefined)
+            return undefined;
+        const entry = { value };
+        if (this.#ttls && this.#starts) {
+            const ttl = this.#ttls[i];
+            const start = this.#starts[i];
+            if (ttl && start) {
+                const remain = ttl - (perf.now() - start);
+                entry.ttl = remain;
+                entry.start = Date.now();
+            }
+        }
+        if (this.#sizes) {
+            entry.size = this.#sizes[i];
+        }
+        return entry;
+    }
+    /**
+     * Return an array of [key, {@link LRUCache.Entry}] tuples which can be
+     * passed to {@link LRLUCache#load}.
+     *
+     * The `start` fields are calculated relative to a portable `Date.now()`
+     * timestamp, even if `performance.now()` is available.
+     *
+     * Stale entries are always included in the `dump`, even if
+     * {@link LRUCache.OptionsBase.allowStale} is false.
+     *
+     * Note: this returns an actual array, not a generator, so it can be more
+     * easily passed around.
+     */
+    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 === undefined || key === undefined)
+                continue;
+            const entry = { value };
+            if (this.#ttls && this.#starts) {
+                entry.ttl = this.#ttls[i];
+                // always dump the start relative to a portable timestamp
+                // it's ok for this to be a bit slow, it's a rare operation.
+                const age = perf.now() - this.#starts[i];
+                entry.start = Math.floor(Date.now() - age);
+            }
+            if (this.#sizes) {
+                entry.size = this.#sizes[i];
+            }
+            arr.unshift([key, entry]);
+        }
+        return arr;
+    }
+    /**
+     * Reset the cache and load in the items in entries in the order listed.
+     *
+     * The shape of the resulting cache may be different if the same options are
+     * not used in both caches.
+     *
+     * The `start` fields are assumed to be calculated relative to a portable
+     * `Date.now()` timestamp, even if `performance.now()` is available.
+     */
+    load(arr) {
+        this.clear();
+        for (const [key, entry] of arr) {
+            if (entry.start) {
+                // entry.start is a portable timestamp, but we may be using
+                // node's performance.now(), so calculate the offset, so that
+                // we get the intended remaining TTL, no matter how long it's
+                // been on ice.
+                //
+                // it's ok for this to be a bit slow, it's a rare operation.
+                const age = Date.now() - entry.start;
+                entry.start = perf.now() - age;
+            }
+            this.set(key, entry.value, entry);
+        }
+    }
+    /**
+     * Add a value to the cache.
+     *
+     * Note: if `undefined` is specified as a value, this is an alias for
+     * {@link LRUCache#delete}
+     *
+     * Fields on the {@link LRUCache.SetOptions} options param will override
+     * their corresponding values in the constructor options for the scope
+     * of this single `set()` operation.
+     *
+     * If `start` is provided, then that will set the effective start
+     * time for the TTL calculation. Note that this must be a previous
+     * value of `performance.now()` if supported, or a previous value of
+     * `Date.now()` if not.
+     *
+     * Options object may also include `size`, which will prevent
+     * calling the `sizeCalculation` function and just use the specified
+     * number if it is a positive integer, and `noDisposeOnSet` which
+     * will prevent calling a `dispose` function in the case of
+     * overwrites.
+     *
+     * If the `size` (or return value of `sizeCalculation`) for a given
+     * entry is greater than `maxEntrySize`, then the item will not be
+     * added to the cache.
+     *
+     * Will update the recency of the entry.
+     *
+     * If the value is `undefined`, then this is an alias for
+     * `cache.delete(key)`. `undefined` is never stored in the cache.
+     */
+    set(k, v, setOptions = {}) {
+        if (v === undefined) {
+            this.delete(k);
+            return this;
+        }
+        const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;
+        let { noUpdateTTL = this.noUpdateTTL } = setOptions;
+        const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);
+        // if the item doesn't fit, don't do anything
+        // NB: maxEntrySize set to maxSize by default
+        if (this.maxEntrySize && size > this.maxEntrySize) {
+            if (status) {
+                status.set = 'miss';
+                status.maxEntrySizeExceeded = true;
+            }
+            // have to delete, in case something is there already.
+            this.#delete(k, 'set');
+            return this;
+        }
+        let index = this.#size === 0 ? undefined : this.#keyMap.get(k);
+        if (index === undefined) {
+            // addition
+            index = (this.#size === 0
+                ? this.#tail
+                : this.#free.length !== 0
+                    ? this.#free.pop()
+                    : this.#size === this.#max
+                        ? this.#evict(false)
+                        : this.#size);
+            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 {
+            // update
+            this.#moveToTail(index);
+            const oldVal = this.#valList[index];
+            if (v !== oldVal) {
+                if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {
+                    oldVal.__abortController.abort(new Error('replaced'));
+                    const { __staleWhileFetching: s } = oldVal;
+                    if (s !== undefined && !noDisposeOnSet) {
+                        if (this.#hasDispose) {
+                            this.#dispose?.(s, k, 'set');
+                        }
+                        if (this.#hasDisposeAfter) {
+                            this.#disposed?.push([s, k, 'set']);
+                        }
+                    }
+                }
+                else if (!noDisposeOnSet) {
+                    if (this.#hasDispose) {
+                        this.#dispose?.(oldVal, k, 'set');
+                    }
+                    if (this.#hasDisposeAfter) {
+                        this.#disposed?.push([oldVal, k, 'set']);
+                    }
+                }
+                this.#removeItemSize(index);
+                this.#addItemSize(index, size, status);
+                this.#valList[index] = v;
+                if (status) {
+                    status.set = 'replace';
+                    const oldValue = oldVal && this.#isBackgroundFetch(oldVal)
+                        ? oldVal.__staleWhileFetching
+                        : oldVal;
+                    if (oldValue !== undefined)
+                        status.oldValue = oldValue;
+                }
+            }
+            else if (status) {
+                status.set = 'update';
+            }
+        }
+        if (ttl !== 0 && !this.#ttls) {
+            this.#initializeTTLTracking();
+        }
+        if (this.#ttls) {
+            if (!noUpdateTTL) {
+                this.#setItemTTL(index, ttl, start);
+            }
+            if (status)
+                this.#statusTTL(status, index);
+        }
+        if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {
+            const dt = this.#disposed;
+            let task;
+            while ((task = dt?.shift())) {
+                this.#disposeAfter?.(...task);
+            }
+        }
+        return this;
+    }
+    /**
+     * Evict the least recently used item, returning its value or
+     * `undefined` if cache is empty.
+     */
+    pop() {
+        try {
+            while (this.#size) {
+                const val = this.#valList[this.#head];
+                this.#evict(true);
+                if (this.#isBackgroundFetch(val)) {
+                    if (val.__staleWhileFetching) {
+                        return val.__staleWhileFetching;
+                    }
+                }
+                else if (val !== undefined) {
+                    return val;
+                }
+            }
+        }
+        finally {
+            if (this.#hasDisposeAfter && this.#disposed) {
+                const dt = this.#disposed;
+                let task;
+                while ((task = dt?.shift())) {
+                    this.#disposeAfter?.(...task);
+                }
+            }
+        }
+    }
+    #evict(free) {
+        const head = this.#head;
+        const k = this.#keyList[head];
+        const v = this.#valList[head];
+        if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {
+            v.__abortController.abort(new Error('evicted'));
+        }
+        else if (this.#hasDispose || this.#hasDisposeAfter) {
+            if (this.#hasDispose) {
+                this.#dispose?.(v, k, 'evict');
+            }
+            if (this.#hasDisposeAfter) {
+                this.#disposed?.push([v, k, 'evict']);
+            }
+        }
+        this.#removeItemSize(head);
+        // if we aren't about to use the index, then null these out
+        if (free) {
+            this.#keyList[head] = undefined;
+            this.#valList[head] = undefined;
+            this.#free.push(head);
+        }
+        if (this.#size === 1) {
+            this.#head = this.#tail = 0;
+            this.#free.length = 0;
+        }
+        else {
+            this.#head = this.#next[head];
+        }
+        this.#keyMap.delete(k);
+        this.#size--;
+        return head;
+    }
+    /**
+     * Check if a key is in the cache, without updating the recency of use.
+     * Will return false if the item is stale, even though it is technically
+     * in the cache.
+     *
+     * Check if a key is in the cache, without updating the recency of
+     * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set
+     * to `true` in either the options or the constructor.
+     *
+     * Will return `false` if the item is stale, even though it is technically in
+     * the cache. The difference can be determined (if it matters) by using a
+     * `status` argument, and inspecting the `has` field.
+     *
+     * Will not update item age unless
+     * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
+     */
+    has(k, hasOptions = {}) {
+        const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;
+        const index = this.#keyMap.get(k);
+        if (index !== undefined) {
+            const v = this.#valList[index];
+            if (this.#isBackgroundFetch(v) &&
+                v.__staleWhileFetching === undefined) {
+                return false;
+            }
+            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);
+            }
+        }
+        else if (status) {
+            status.has = 'miss';
+        }
+        return false;
+    }
+    /**
+     * Like {@link LRUCache#get} but doesn't update recency or delete stale
+     * items.
+     *
+     * Returns `undefined` if the item is stale, unless
+     * {@link LRUCache.OptionsBase.allowStale} is set.
+     */
+    peek(k, peekOptions = {}) {
+        const { allowStale = this.allowStale } = peekOptions;
+        const index = this.#keyMap.get(k);
+        if (index === undefined ||
+            (!allowStale && this.#isStale(index))) {
+            return;
+        }
+        const v = this.#valList[index];
+        // either stale and allowed, or forcing a refresh of non-stale value
+        return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+    }
+    #backgroundFetch(k, index, options, context) {
+        const v = index === undefined ? undefined : this.#valList[index];
+        if (this.#isBackgroundFetch(v)) {
+            return v;
+        }
+        const ac = new AC();
+        const { signal } = options;
+        // when/if our AC signals, then stop listening to theirs.
+        signal?.addEventListener('abort', () => ac.abort(signal.reason), {
+            signal: ac.signal,
+        });
+        const fetchOpts = {
+            signal: ac.signal,
+            options,
+            context,
+        };
+        const cb = (v, updateCache = false) => {
+            const { aborted } = ac.signal;
+            const ignoreAbort = options.ignoreFetchAbort && v !== undefined;
+            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);
+            }
+            // either we didn't abort, and are still here, or we did, and ignored
+            const bf = p;
+            if (this.#valList[index] === p) {
+                if (v === undefined) {
+                    if (bf.__staleWhileFetching) {
+                        this.#valList[index] = bf.__staleWhileFetching;
+                    }
+                    else {
+                        this.#delete(k, 'fetch');
+                    }
+                }
+                else {
+                    if (options.status)
+                        options.status.fetchUpdated = true;
+                    this.set(k, v, fetchOpts.options);
+                }
+            }
+            return v;
+        };
+        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;
+            const bf = p;
+            if (this.#valList[index] === p) {
+                // if we allow stale on fetch rejections, then we need to ensure that
+                // the stale value is not removed from the cache when the fetch fails.
+                const del = !noDelete || bf.__staleWhileFetching === undefined;
+                if (del) {
+                    this.#delete(k, 'fetch');
+                }
+                else if (!allowStaleAborted) {
+                    // still replace the *promise* with the stale value,
+                    // since we are done with the promise at this point.
+                    // leave it untouched if we're still waiting for an
+                    // aborted background fetch that hasn't yet returned.
+                    this.#valList[index] = bf.__staleWhileFetching;
+                }
+            }
+            if (allowStale) {
+                if (options.status && bf.__staleWhileFetching !== undefined) {
+                    options.status.returnedStale = true;
+                }
+                return bf.__staleWhileFetching;
+            }
+            else if (bf.__returned === bf) {
+                throw er;
+            }
+        };
+        const pcall = (res, rej) => {
+            const fmp = this.#fetchMethod?.(k, v, fetchOpts);
+            if (fmp && fmp instanceof Promise) {
+                fmp.then(v => res(v === undefined ? undefined : v), rej);
+            }
+            // ignored, we go until we finish, regardless.
+            // defer check until we are actually aborting,
+            // so fetchMethod can override.
+            ac.signal.addEventListener('abort', () => {
+                if (!options.ignoreFetchAbort ||
+                    options.allowStaleOnFetchAbort) {
+                    res(undefined);
+                    // when it eventually resolves, update the cache.
+                    if (options.allowStaleOnFetchAbort) {
+                        res = v => cb(v, true);
+                    }
+                }
+            });
+        };
+        if (options.status)
+            options.status.fetchDispatched = true;
+        const p = new Promise(pcall).then(cb, eb);
+        const bf = Object.assign(p, {
+            __abortController: ac,
+            __staleWhileFetching: v,
+            __returned: undefined,
+        });
+        if (index === undefined) {
+            // internal, don't expose status.
+            this.set(k, bf, { ...fetchOpts.options, status: undefined });
+            index = this.#keyMap.get(k);
+        }
+        else {
+            this.#valList[index] = bf;
+        }
+        return bf;
+    }
+    #isBackgroundFetch(p) {
+        if (!this.#hasFetchMethod)
+            return false;
+        const b = p;
+        return (!!b &&
+            b instanceof Promise &&
+            b.hasOwnProperty('__staleWhileFetching') &&
+            b.__abortController instanceof AC);
+    }
+    async fetch(k, fetchOptions = {}) {
+        const { 
+        // 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, context, forceRefresh = false, status, signal, } = fetchOptions;
+        if (!this.#hasFetchMethod) {
+            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 === undefined) {
+            if (status)
+                status.fetch = 'miss';
+            const p = this.#backgroundFetch(k, index, options, context);
+            return (p.__returned = p);
+        }
+        else {
+            // in cache, maybe already fetching
+            const v = this.#valList[index];
+            if (this.#isBackgroundFetch(v)) {
+                const stale = allowStale && v.__staleWhileFetching !== undefined;
+                if (status) {
+                    status.fetch = 'inflight';
+                    if (stale)
+                        status.returnedStale = true;
+                }
+                return stale ? v.__staleWhileFetching : (v.__returned = v);
+            }
+            // if we force a refresh, that means do NOT serve the cached value,
+            // unless we are already in the process of refreshing the cache.
+            const isStale = this.#isStale(index);
+            if (!forceRefresh && !isStale) {
+                if (status)
+                    status.fetch = 'hit';
+                this.#moveToTail(index);
+                if (updateAgeOnGet) {
+                    this.#updateItemAge(index);
+                }
+                if (status)
+                    this.#statusTTL(status, index);
+                return v;
+            }
+            // ok, it is stale or a forced refresh, and not already fetching.
+            // refresh the cache.
+            const p = this.#backgroundFetch(k, index, options, context);
+            const hasStale = p.__staleWhileFetching !== undefined;
+            const staleVal = hasStale && allowStale;
+            if (status) {
+                status.fetch = isStale ? 'stale' : 'refresh';
+                if (staleVal && isStale)
+                    status.returnedStale = true;
+            }
+            return staleVal ? p.__staleWhileFetching : (p.__returned = p);
+        }
+    }
+    async forceFetch(k, fetchOptions = {}) {
+        const v = await this.fetch(k, fetchOptions);
+        if (v === undefined)
+            throw new Error('fetch() returned undefined');
+        return v;
+    }
+    memo(k, memoOptions = {}) {
+        const memoMethod = this.#memoMethod;
+        if (!memoMethod) {
+            throw new Error('no memoMethod provided to constructor');
+        }
+        const { context, forceRefresh, ...options } = memoOptions;
+        const v = this.get(k, options);
+        if (!forceRefresh && v !== undefined)
+            return v;
+        const vv = memoMethod(k, v, {
+            options,
+            context,
+        });
+        this.set(k, vv, options);
+        return vv;
+    }
+    /**
+     * Return a value from the cache. Will update the recency of the cache
+     * entry found.
+     *
+     * If the key is not found, get() will return `undefined`.
+     */
+    get(k, getOptions = {}) {
+        const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;
+        const index = this.#keyMap.get(k);
+        if (index !== undefined) {
+            const value = this.#valList[index];
+            const fetching = this.#isBackgroundFetch(value);
+            if (status)
+                this.#statusTTL(status, index);
+            if (this.#isStale(index)) {
+                if (status)
+                    status.get = 'stale';
+                // delete only if not an in-flight background fetch
+                if (!fetching) {
+                    if (!noDeleteOnStaleGet) {
+                        this.#delete(k, 'expire');
+                    }
+                    if (status && allowStale)
+                        status.returnedStale = true;
+                    return allowStale ? value : undefined;
+                }
+                else {
+                    if (status &&
+                        allowStale &&
+                        value.__staleWhileFetching !== undefined) {
+                        status.returnedStale = true;
+                    }
+                    return allowStale ? value.__staleWhileFetching : undefined;
+                }
+            }
+            else {
+                if (status)
+                    status.get = 'hit';
+                // if we're currently fetching it, we don't actually have it yet
+                // it's not stale, which means this isn't a staleWhileRefetching.
+                // If it's not stale, and fetching, AND has a __staleWhileFetching
+                // value, then that means the user fetched with {forceRefresh:true},
+                // so it's safe to return that value.
+                if (fetching) {
+                    return value.__staleWhileFetching;
+                }
+                this.#moveToTail(index);
+                if (updateAgeOnGet) {
+                    this.#updateItemAge(index);
+                }
+                return value;
+            }
+        }
+        else if (status) {
+            status.get = 'miss';
+        }
+    }
+    #connect(p, n) {
+        this.#prev[n] = p;
+        this.#next[p] = n;
+    }
+    #moveToTail(index) {
+        // if tail already, nothing to do
+        // if head, move head to next[index]
+        // else
+        //   move next[prev[index]] to next[index] (head has no prev)
+        //   move prev[next[index]] to prev[index]
+        // prev[index] = tail
+        // next[tail] = index
+        // tail = 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;
+        }
+    }
+    /**
+     * Deletes a key out of the cache.
+     *
+     * Returns true if the key was deleted, false otherwise.
+     */
+    delete(k) {
+        return this.#delete(k, 'delete');
+    }
+    #delete(k, reason) {
+        let deleted = false;
+        if (this.#size !== 0) {
+            const index = this.#keyMap.get(k);
+            if (index !== undefined) {
+                deleted = true;
+                if (this.#size === 1) {
+                    this.#clear(reason);
+                }
+                else {
+                    this.#removeItemSize(index);
+                    const v = this.#valList[index];
+                    if (this.#isBackgroundFetch(v)) {
+                        v.__abortController.abort(new Error('deleted'));
+                    }
+                    else if (this.#hasDispose || this.#hasDisposeAfter) {
+                        if (this.#hasDispose) {
+                            this.#dispose?.(v, k, reason);
+                        }
+                        if (this.#hasDisposeAfter) {
+                            this.#disposed?.push([v, k, reason]);
+                        }
+                    }
+                    this.#keyMap.delete(k);
+                    this.#keyList[index] = undefined;
+                    this.#valList[index] = undefined;
+                    if (index === this.#tail) {
+                        this.#tail = this.#prev[index];
+                    }
+                    else if (index === this.#head) {
+                        this.#head = this.#next[index];
+                    }
+                    else {
+                        const pi = this.#prev[index];
+                        this.#next[pi] = this.#next[index];
+                        const ni = this.#next[index];
+                        this.#prev[ni] = this.#prev[index];
+                    }
+                    this.#size--;
+                    this.#free.push(index);
+                }
+            }
+        }
+        if (this.#hasDisposeAfter && this.#disposed?.length) {
+            const dt = this.#disposed;
+            let task;
+            while ((task = dt?.shift())) {
+                this.#disposeAfter?.(...task);
+            }
+        }
+        return deleted;
+    }
+    /**
+     * Clear the cache entirely, throwing away all values.
+     */
+    clear() {
+        return this.#clear('delete');
+    }
+    #clear(reason) {
+        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];
+                if (this.#hasDispose) {
+                    this.#dispose?.(v, k, reason);
+                }
+                if (this.#hasDisposeAfter) {
+                    this.#disposed?.push([v, k, reason]);
+                }
+            }
+        }
+        this.#keyMap.clear();
+        this.#valList.fill(undefined);
+        this.#keyList.fill(undefined);
+        if (this.#ttls && this.#starts) {
+            this.#ttls.fill(0);
+            this.#starts.fill(0);
+        }
+        if (this.#sizes) {
+            this.#sizes.fill(0);
+        }
+        this.#head = 0;
+        this.#tail = 0;
+        this.#free.length = 0;
+        this.#calculatedSize = 0;
+        this.#size = 0;
+        if (this.#hasDisposeAfter && this.#disposed) {
+            const dt = this.#disposed;
+            let task;
+            while ((task = dt?.shift())) {
+                this.#disposeAfter?.(...task);
+            }
+        }
+    }
+}
+exports.LRUCache = LRUCache;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map
new file mode 100644
index 00000000..7a473d3d
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst warned = new Set()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n  typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n  msg: string,\n  type: string,\n  code: string,\n  fn: ForC\n) => {\n  typeof PROCESS.emitWarning === 'function'\n    ? PROCESS.emitWarning(msg, type, code, fn)\n    : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n  //@ts-ignore\n  AS = class AbortSignal {\n    onabort?: (...a: any[]) => any\n    _onabort: ((...a: any[]) => any)[] = []\n    reason?: any\n    aborted: boolean = false\n    addEventListener(_: string, fn: (...a: any[]) => any) {\n      this._onabort.push(fn)\n    }\n  }\n  //@ts-ignore\n  AC = class AbortController {\n    constructor() {\n      warnACPolyfill()\n    }\n    signal = new AS()\n    abort(reason: any) {\n      if (this.signal.aborted) return\n      //@ts-ignore\n      this.signal.reason = reason\n      //@ts-ignore\n      this.signal.aborted = true\n      //@ts-ignore\n      for (const fn of this.signal._onabort) {\n        fn(reason)\n      }\n      this.signal.onabort?.(reason)\n    }\n  }\n  let printACPolyfillWarning =\n    PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n  const warnACPolyfill = () => {\n    if (!printACPolyfillWarning) return\n    printACPolyfillWarning = false\n    emitWarning(\n      'AbortController is not defined. If using lru-cache in ' +\n        'node 14, load an AbortController polyfill from the ' +\n        '`node-abort-controller` package. A minimal polyfill is ' +\n        'provided for use by LRUCache.fetch(), but it should not be ' +\n        'relied upon in other contexts (eg, passing it to other APIs that ' +\n        'use AbortController/AbortSignal might have undesirable effects). ' +\n        'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n      'NO_ABORT_CONTROLLER',\n      'ENOTSUP',\n      warnACPolyfill\n    )\n  }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\nexport type PosInt = number & { [TYPE]: 'Positive Integer' }\nexport type Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n  n && n === Math.floor(n) && n > 0 && isFinite(n)\n\nexport type UintArray = Uint8Array | Uint16Array | Uint32Array\nexport type NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array {\n  constructor(size: number) {\n    super(size)\n    this.fill(0)\n  }\n}\nexport type { ZeroArray }\nexport type { Stack }\n\nexport type StackLike = Stack | Index[]\nclass Stack {\n  heap: NumberArray\n  length: number\n  // private constructor\n  static #constructing: boolean = false\n  static create(max: number): StackLike {\n    const HeapCls = getUintArray(max)\n    if (!HeapCls) return []\n    Stack.#constructing = true\n    const s = new Stack(max, HeapCls)\n    Stack.#constructing = false\n    return s\n  }\n  constructor(\n    max: number,\n    HeapCls: { new (n: number): NumberArray }\n  ) {\n    /* c8 ignore start */\n    if (!Stack.#constructing) {\n      throw new TypeError('instantiate Stack using Stack.create(n)')\n    }\n    /* c8 ignore stop */\n    this.heap = new HeapCls(max)\n    this.length = 0\n  }\n  push(n: Index) {\n    this.heap[this.length++] = n\n  }\n  pop(): Index {\n    return this.heap[--this.length] as Index\n  }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch = Promise & {\n  __returned: BackgroundFetch | undefined\n  __abortController: AbortController\n  __staleWhileFetching: V | undefined\n}\n\nexport type DisposeTask = [\n  value: V,\n  key: K,\n  reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n  /**\n   * An integer greater than 0, reflecting the calculated size of items\n   */\n  export type Size = number\n\n  /**\n   * Integer greater than 0, representing some number of milliseconds, or the\n   * time at which a TTL started counting from.\n   */\n  export type Milliseconds = number\n\n  /**\n   * An integer greater than 0, reflecting a number of items\n   */\n  export type Count = number\n\n  /**\n   * The reason why an item was removed from the cache, passed\n   * to the {@link Disposer} methods.\n   *\n   * - `evict`: The item was evicted because it is the least recently used,\n   *   and the cache is full.\n   * - `set`: A new value was set, overwriting the old value being disposed.\n   * - `delete`: The item was explicitly deleted, either by calling\n   *   {@link LRUCache#delete}, {@link LRUCache#clear}, or\n   *   {@link LRUCache#set} with an undefined value.\n   * - `expire`: The item was removed due to exceeding its TTL.\n   * - `fetch`: A {@link OptionsBase#fetchMethod} operation returned\n   *   `undefined` or was aborted, causing the item to be deleted.\n   */\n  export type DisposeReason =\n    | 'evict'\n    | 'set'\n    | 'delete'\n    | 'expire'\n    | 'fetch'\n  /**\n   * A method called upon item removal, passed as the\n   * {@link OptionsBase.dispose} and/or\n   * {@link OptionsBase.disposeAfter} options.\n   */\n  export type Disposer = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n\n  /**\n   * A function that returns the effective calculated size\n   * of an entry in the cache.\n   */\n  export type SizeCalculator = (value: V, key: K) => Size\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.fetchMethod} function.\n   */\n  export interface FetcherOptions {\n    signal: AbortSignal\n    options: FetcherFetchOptions\n    /**\n     * Object provided in the {@link FetchOptions.context} option to\n     * {@link LRUCache#fetch}\n     */\n    context: FC\n  }\n\n  /**\n   * Occasionally, it may be useful to track the internal behavior of the\n   * cache, particularly for logging, debugging, or for behavior within the\n   * `fetchMethod`. To do this, you can pass a `status` object to the\n   * {@link LRUCache#fetch}, {@link LRUCache#get}, {@link LRUCache#set},\n   * {@link LRUCache#memo}, and {@link LRUCache#has} methods.\n   *\n   * The `status` option should be a plain JavaScript object. The following\n   * fields will be set on it appropriately, depending on the situation.\n   */\n  export interface Status {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: Milliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: Milliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: Milliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: Milliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    entrySize?: Size\n\n    /**\n     * The total calculated size of the cache, if sizes are used.\n     */\n    totalCalculatedSize?: Size\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link OptionsBase.maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link LRUCache#has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link LRUCache#fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no {@link OptionsBase.fetchMethod}, so\n     *   {@link LRUCache#get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link FetchOptions.forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link OptionsBase.fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to\n     * {@link OptionsBase.fetchMethod}\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link OptionsBase.fetchMethod}, or the reason for an\n     * AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link LRUCache#get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value\n     *   is present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#fetch}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link OptionsBase.noDeleteOnFetchRejection},\n   * {@link OptionsBase.allowStaleOnFetchRejection},\n   * {@link FetchOptions.forceRefresh}, and\n   * {@link FetcherOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the fetchMethod is called.\n   */\n  export interface FetcherFetchOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    status?: Status\n    size?: Size\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#fetch} method.\n   */\n  export interface FetchOptions\n    extends FetcherFetchOptions {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.fetchMethod} as\n     * the {@link FetcherOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    signal?: AbortSignal\n    status?: Status\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface FetchOptionsWithContext\n    extends FetchOptions {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface FetchOptionsNoContext\n    extends FetchOptions {\n    context?: undefined\n  }\n\n  export interface MemoOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.memoMethod} as\n     * the {@link MemoizerOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    status?: Status\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface MemoOptionsWithContext\n    extends MemoOptions {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface MemoOptionsNoContext\n    extends MemoOptions {\n    context?: undefined\n  }\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.memoMethod} function.\n   */\n  export interface MemoizerOptions {\n    options: MemoizerMemoOptions\n    /**\n     * Object provided in the {@link MemoOptions.context} option to\n     * {@link LRUCache#memo}\n     */\n    context: FC\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#memo}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link MemoOptions.forceRefresh}, and\n   * {@link MemoerOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.memoMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the memoMethod is called.\n   */\n  export interface MemoizerMemoOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n    > {\n    status?: Status\n    size?: Size\n    start?: Milliseconds\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#has} method.\n   */\n  export interface HasOptions\n    extends Pick, 'updateAgeOnHas'> {\n    status?: Status\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#get} method.\n   */\n  export interface GetOptions\n    extends Pick<\n      OptionsBase,\n      'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n    > {\n    status?: Status\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#peek} method.\n   */\n  export interface PeekOptions\n    extends Pick, 'allowStale'> {}\n\n  /**\n   * Options that may be passed to the {@link LRUCache#set} method.\n   */\n  export interface SetOptions\n    extends Pick<\n      OptionsBase,\n      'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n    > {\n    /**\n     * If size tracking is enabled, then setting an explicit size\n     * in the {@link LRUCache#set} call will prevent calling the\n     * {@link OptionsBase.sizeCalculation} function.\n     */\n    size?: Size\n    /**\n     * If TTL tracking is enabled, then setting an explicit start\n     * time in the {@link LRUCache#set} call will override the\n     * default time from `performance.now()` or `Date.now()`.\n     *\n     * Note that it must be a valid value for whichever time-tracking\n     * method is in use.\n     */\n    start?: Milliseconds\n    status?: Status\n  }\n\n  /**\n   * The type signature for the {@link OptionsBase.fetchMethod} option.\n   */\n  export type Fetcher = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions\n  ) => Promise | V | undefined | void\n\n  /**\n   * the type signature for the {@link OptionsBase.memoMethod} option.\n   */\n  export type Memoizer = (\n    key: K,\n    staleValue: V | undefined,\n    options: MemoizerOptions\n  ) => V\n\n  /**\n   * Options which may be passed to the {@link LRUCache} constructor.\n   *\n   * Most of these may be overridden in the various options that use\n   * them.\n   *\n   * Despite all being technically optional, the constructor requires that\n   * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n   * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n   *\n   * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n   * (and in fact required by the type definitions here) that the cache\n   * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n   * unbounded storage.\n   *\n   * All options are also available on the {@link LRUCache} instance, making\n   * it safe to pass an LRUCache instance as the options argumemnt to\n   * make another empty cache of the same type.\n   *\n   * Some options are marked as read-only, because changing them after\n   * instantiation is not safe. Changing any of the other options will of\n   * course only have an effect on subsequent method calls.\n   */\n  export interface OptionsBase {\n    /**\n     * The maximum number of items to store in the cache before evicting\n     * old entries. This is read-only on the {@link LRUCache} instance,\n     * and may not be overridden.\n     *\n     * If set, then storage space will be pre-allocated at construction\n     * time, and the cache will perform significantly faster.\n     *\n     * Note that significantly fewer items may be stored, if\n     * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n     * set.\n     *\n     * **It is strongly recommended to set a `max` to prevent unbounded growth\n     * of the cache.**\n     */\n    max?: Count\n\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed by\n     * default, and MAY live in the cache, contributing to its LRU max, long\n     * after they have expired, unless {@link OptionsBase.ttlAutopurge} is\n     * set.\n     *\n     * If set to `0` (the default value), then that means \"do not track\n     * TTL\", not \"expire immediately\".\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * This is not primarily a TTL cache, and does not make strong TTL\n     * guarantees. There is no pre-emptive pruning of expired items, but you\n     * _may_ set a TTL on the cache, and it will treat expired items as missing\n     * when they are fetched, and delete them.\n     *\n     * Optional, but must be a non-negative integer in ms if specified.\n     *\n     * This may be overridden by passing an options object to `cache.set()`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if ttl tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * If ttl tracking is enabled, and `max` and `maxSize` are not set,\n     * and `ttlAutopurge` is not set, then a warning will be emitted\n     * cautioning about the potential for unbounded memory consumption.\n     * (The TypeScript definitions will also discourage this.)\n     */\n    ttl?: Milliseconds\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     */\n    ttlResolution?: Milliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     *\n     * Note that this may *significantly* degrade performance, especially if\n     * the cache is storing a large number of items. It is almost always best\n     * to just leave the stale items in the cache, and let them fall out as new\n     * items are added.\n     *\n     * Note that this means that {@link OptionsBase.allowStale} is a bit\n     * pointless, as stale items will be deleted almost as soon as they\n     * expire.\n     *\n     * Use with caution!\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever it is retrieved from cache with\n     * {@link LRUCache#get}, causing it to not expire. (It can still fall out\n     * of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever its presence in the cache is\n     * checked with {@link LRUCache#has}, causing it to not expire. (It can\n     * still fall out of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     */\n    updateAgeOnHas?: boolean\n\n    /**\n     * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n     * stale data, if available.\n     *\n     * By default, if you set `ttl`, stale items will only be deleted from the\n     * cache when you `get(key)`. That is, it's not preemptively pruning items,\n     * unless {@link OptionsBase.ttlAutopurge} is set.\n     *\n     * If you set `allowStale:true`, it'll return the stale value *as well as*\n     * deleting it. If you don't set this, then it'll return `undefined` when\n     * you try to get a stale entry.\n     *\n     * Note that when a stale entry is fetched, _even if it is returned due to\n     * `allowStale` being set_, it is removed from the cache immediately. You\n     * can suppress this behavior by setting\n     * {@link OptionsBase.noDeleteOnStaleGet}, either in the constructor, or in\n     * the options provided to {@link LRUCache#get}.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     * The `cache.has()` method will always return `false` for stale items.\n     *\n     * Only relevant if a ttl is set.\n     */\n    allowStale?: boolean\n\n    /**\n     * Function that is called on items when they are dropped from the\n     * cache, as `dispose(value, key, reason)`.\n     *\n     * This can be handy if you want to close file descriptors or do\n     * other cleanup tasks when items are no longer stored in the cache.\n     *\n     * **NOTE**: It is called _before_ the item has been fully removed\n     * from the cache, so if you want to put it right back in, you need\n     * to wait until the next tick. If you try to add it back in during\n     * the `dispose()` function call, it will break things in subtle and\n     * weird ways.\n     *\n     * Unlike several other options, this may _not_ be overridden by\n     * passing an option to `set()`, for performance reasons.\n     *\n     * The `reason` will be one of the following strings, corresponding\n     * to the reason for the item's deletion:\n     *\n     * - `evict` Item was evicted to make space for a new addition\n     * - `set` Item was overwritten by a new value\n     * - `expire` Item expired its TTL\n     * - `fetch` Item was deleted due to a failed or aborted fetch, or a\n     *   fetchMethod returning `undefined.\n     * - `delete` Item was removed by explicit `cache.delete(key)`,\n     *   `cache.clear()`, or `cache.set(key, undefined)`.\n     */\n    dispose?: Disposer\n\n    /**\n     * The same as {@link OptionsBase.dispose}, but called *after* the entry\n     * is completely removed and the cache is once again in a clean state.\n     *\n     * It is safe to add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     */\n    disposeAfter?: Disposer\n\n    /**\n     * Set to true to suppress calling the\n     * {@link OptionsBase.dispose} function if the entry key is\n     * still accessible within the cache.\n     *\n     * This may be overridden by passing an options object to\n     * {@link LRUCache#set}.\n     *\n     * Only relevant if `dispose` or `disposeAfter` are set.\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when setting a new\n     * value for an existing key (ie, when updating a value rather than\n     * inserting a new value).  Note that the TTL value is _always_ set (if\n     * provided) when adding a new entry into the cache.\n     *\n     * Has no effect if a {@link OptionsBase.ttl} is not set.\n     *\n     * May be passed as an option to {@link LRUCache#set}.\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * Set to a positive integer to track the sizes of items added to the\n     * cache, and automatically evict items in order to stay below this size.\n     * Note that this may result in fewer than `max` items being stored.\n     *\n     * Attempting to add an item to the cache whose calculated size is greater\n     * that this amount will be a no-op. The item will not be cached, and no\n     * other items will be evicted.\n     *\n     * Optional, must be a positive integer if provided.\n     *\n     * Sets `maxEntrySize` to the same value, unless a different value is\n     * provided for `maxEntrySize`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if size tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize?: Size\n\n    /**\n     * The maximum allowed size for any single item in the cache.\n     *\n     * If a larger item is passed to {@link LRUCache#set} or returned by a\n     * {@link OptionsBase.fetchMethod} or {@link OptionsBase.memoMethod}, then\n     * it will not be stored in the cache.\n     *\n     * Attempting to add an item whose calculated size is greater than\n     * this amount will not cache the item or evict any old items, but\n     * WILL delete an existing value if one is already present.\n     *\n     * Optional, must be a positive integer if provided. Defaults to\n     * the value of `maxSize` if provided.\n     */\n    maxEntrySize?: Size\n\n    /**\n     * A function that returns a number indicating the item's size.\n     *\n     * Requires {@link OptionsBase.maxSize} to be set.\n     *\n     * If not provided, and {@link OptionsBase.maxSize} or\n     * {@link OptionsBase.maxEntrySize} are set, then all\n     * {@link LRUCache#set} calls **must** provide an explicit\n     * {@link SetOptions.size} or sizeCalculation param.\n     */\n    sizeCalculation?: SizeCalculator\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#fetch}\n     *\n     * ```ts\n     * fetchMethod(key, staleValue, { signal, options, context })\n     * ```\n     *\n     * If `fetchMethod` is not provided, then `cache.fetch(key)` is equivalent\n     * to `Promise.resolve(cache.get(key))`.\n     *\n     * If at any time, `signal.aborted` is set to `true`, or if the\n     * `signal.onabort` method is called, or if it emits an `'abort'` event\n     * which you can listen to with `addEventListener`, then that means that\n     * the fetch should be abandoned. This may be passed along to async\n     * functions aware of AbortController/AbortSignal behavior.\n     *\n     * The `fetchMethod` should **only** return `undefined` or a Promise\n     * resolving to `undefined` if the AbortController signaled an `abort`\n     * event. In all other cases, it should return or resolve to a value\n     * suitable for adding to the cache.\n     *\n     * The `options` object is a union of the options that may be provided to\n     * `set()` and `get()`. If they are modified, then that will result in\n     * modifying the settings to `cache.set()` when the value is resolved, and\n     * in the case of\n     * {@link OptionsBase.noDeleteOnFetchRejection} and\n     * {@link OptionsBase.allowStaleOnFetchRejection}, the handling of\n     * `fetchMethod` failures.\n     *\n     * For example, a DNS cache may update the TTL based on the value returned\n     * from a remote DNS server by changing `options.ttl` in the `fetchMethod`.\n     */\n    fetchMethod?: Fetcher\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#memo}\n     */\n    memoMethod?: Memoizer\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link OptionsBase.fetchMethod} returns a rejected promise.\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with\n     * {@link LRUCache#get}.\n     *\n     * Note that the `get` return value will still be `undefined`\n     * unless {@link OptionsBase.allowStale} is true.\n     *\n     * When using time-expiring entries with `ttl`, by default stale\n     * items will be removed from the cache when the key is accessed\n     * with `cache.get()`.\n     *\n     * Setting this option will cause stale items to remain in the cache, until\n     * they are explicitly deleted with `cache.delete(key)`, or retrieved with\n     * `noDeleteOnStaleGet` set to `false`.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     *\n     * Only relevant if a ttl is used.\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a\n     * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n     * promise.\n     *\n     * This differs from using {@link OptionsBase.allowStale} in that stale\n     * data will ONLY be returned in the case that the {@link LRUCache#fetch}\n     * fails, not any other times.\n     *\n     * If a `fetchMethod` fails, and there is no stale value available, the\n     * `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` errors are\n     * suppressed.\n     *\n     * Implies `noDeleteOnFetchRejection`.\n     *\n     * This may be set in calls to `fetch()`, or defaulted on the constructor,\n     * or overridden by modifying the options object in the `fetchMethod`.\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches\n     * an `'abort'` event, whether user-triggered, or due to internal cache\n     * behavior.\n     *\n     * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n     * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n     * any value it returns will be ignored and not cached.\n     *\n     * Caveat: since fetches are aborted when a new value is explicitly\n     * set in the cache, this can lead to fetch returning a stale value,\n     * since that was the fallback value _at the moment the `fetch()` was\n     * initiated_, even though the new updated value is now present in\n     * the cache.\n     *\n     * For example:\n     *\n     * ```ts\n     * const cache = new LRUCache({\n     *   ttl: 100,\n     *   fetchMethod: async (url, oldValue, { signal }) =>  {\n     *     const res = await fetch(url, { signal })\n     *     return await res.json()\n     *   }\n     * })\n     * cache.set('https://example.com/', { some: 'data' })\n     * // 100ms go by...\n     * const result = cache.fetch('https://example.com/')\n     * cache.set('https://example.com/', { other: 'thing' })\n     * console.log(await result) // { some: 'data' }\n     * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n     * ```\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link LRUCache#fetch} calls\n     * are not immediately resolved or rejected when they are aborted, and\n     * instead take the full time to await.\n     *\n     * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n     * {@link LRUCache#fetch} calls will resolve immediately to their stale\n     * cached value or `undefined`, and will continue to process and eventually\n     * update the cache when they resolve, as long as the resulting value is\n     * not `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * For example:\n     *\n     * ```ts\n     * const c = new LRUCache({\n     *   ttl: 100,\n     *   ignoreFetchAbort: true,\n     *   allowStaleOnFetchAbort: true,\n     *   fetchMethod: async (key, oldValue, { signal }) => {\n     *     // note: do NOT pass the signal to fetch()!\n     *     // let's say this fetch can take a long time.\n     *     const res = await fetch(`https://slow-backend-server/${key}`)\n     *     return await res.json()\n     *   },\n     * })\n     *\n     * // this will return the stale value after 100ms, while still\n     * // updating in the background for next time.\n     * const val = await c.fetch('key', { signal: AbortSignal.timeout(100) })\n     * ```\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still\n     * emitted on the `AbortSignal` object_, so may result in invalid results\n     * when passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n     * call to {@link LRUCache#fetch}.\n     */\n    ignoreFetchAbort?: boolean\n  }\n\n  export interface OptionsMaxLimit\n    extends OptionsBase {\n    max: Count\n  }\n  export interface OptionsTTLLimit\n    extends OptionsBase {\n    ttl: Milliseconds\n    ttlAutopurge: boolean\n  }\n  export interface OptionsSizeLimit\n    extends OptionsBase {\n    maxSize: Size\n  }\n\n  /**\n   * The valid safe options for the {@link LRUCache} constructor\n   */\n  export type Options =\n    | OptionsMaxLimit\n    | OptionsSizeLimit\n    | OptionsTTLLimit\n\n  /**\n   * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump},\n   * and returned by {@link LRUCache#info}.\n   */\n  export interface Entry {\n    value: V\n    ttl?: Milliseconds\n    size?: Size\n    start?: Milliseconds\n  }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache {\n  // options that cannot be changed without disaster\n  readonly #max: LRUCache.Count\n  readonly #maxSize: LRUCache.Size\n  readonly #dispose?: LRUCache.Disposer\n  readonly #disposeAfter?: LRUCache.Disposer\n  readonly #fetchMethod?: LRUCache.Fetcher\n  readonly #memoMethod?: LRUCache.Memoizer\n\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl: LRUCache.Milliseconds\n\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution: LRUCache.Milliseconds\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale: boolean\n\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL: boolean\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize: LRUCache.Size\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation?: LRUCache.SizeCalculator\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort: boolean\n\n  // computed properties\n  #size: LRUCache.Count\n  #calculatedSize: LRUCache.Size\n  #keyMap: Map\n  #keyList: (K | undefined)[]\n  #valList: (V | BackgroundFetch | undefined)[]\n  #next: NumberArray\n  #prev: NumberArray\n  #head: Index\n  #tail: Index\n  #free: StackLike\n  #disposed?: DisposeTask[]\n  #sizes?: ZeroArray\n  #starts?: ZeroArray\n  #ttls?: ZeroArray\n\n  #hasDispose: boolean\n  #hasFetchMethod: boolean\n  #hasDisposeAfter: boolean\n\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals<\n    K extends {},\n    V extends {},\n    FC extends unknown = unknown\n  >(c: LRUCache) {\n    return {\n      // properties\n      starts: c.#starts,\n      ttls: c.#ttls,\n      sizes: c.#sizes,\n      keyMap: c.#keyMap as Map,\n      keyList: c.#keyList,\n      valList: c.#valList,\n      next: c.#next,\n      prev: c.#prev,\n      get head() {\n        return c.#head\n      },\n      get tail() {\n        return c.#tail\n      },\n      free: c.#free,\n      // methods\n      isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n      backgroundFetch: (\n        k: K,\n        index: number | undefined,\n        options: LRUCache.FetchOptions,\n        context: any\n      ): BackgroundFetch =>\n        c.#backgroundFetch(\n          k,\n          index as Index | undefined,\n          options,\n          context\n        ),\n      moveToTail: (index: number): void =>\n        c.#moveToTail(index as Index),\n      indexes: (options?: { allowStale: boolean }) =>\n        c.#indexes(options),\n      rindexes: (options?: { allowStale: boolean }) =>\n        c.#rindexes(options),\n      isStale: (index: number | undefined) =>\n        c.#isStale(index as Index),\n    }\n  }\n\n  // Protected read-only members\n\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max(): LRUCache.Count {\n    return this.#max\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize(): LRUCache.Count {\n    return this.#maxSize\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize(): LRUCache.Size {\n    return this.#calculatedSize\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size(): LRUCache.Count {\n    return this.#size\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod(): LRUCache.Fetcher | undefined {\n    return this.#fetchMethod\n  }\n  get memoMethod(): LRUCache.Memoizer | undefined {\n    return this.#memoMethod\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#dispose\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#disposeAfter\n  }\n\n  constructor(\n    options: LRUCache.Options | LRUCache\n  ) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      memoMethod,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.#max = max\n    this.#maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.#maxSize\n    this.sizeCalculation = sizeCalculation\n    if (this.sizeCalculation) {\n      if (!this.#maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    if (\n      memoMethod !== undefined &&\n      typeof memoMethod !== 'function'\n    ) {\n      throw new TypeError('memoMethod must be a function if defined')\n    }\n    this.#memoMethod = memoMethod\n\n    if (\n      fetchMethod !== undefined &&\n      typeof fetchMethod !== 'function'\n    ) {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n    this.#fetchMethod = fetchMethod\n    this.#hasFetchMethod = !!fetchMethod\n\n    this.#keyMap = new Map()\n    this.#keyList = new Array(max).fill(undefined)\n    this.#valList = new Array(max).fill(undefined)\n    this.#next = new UintArray(max)\n    this.#prev = new UintArray(max)\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free = Stack.create(max)\n    this.#size = 0\n    this.#calculatedSize = 0\n\n    if (typeof dispose === 'function') {\n      this.#dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.#disposeAfter = disposeAfter\n      this.#disposed = []\n    } else {\n      this.#disposeAfter = undefined\n      this.#disposed = undefined\n    }\n    this.#hasDispose = !!this.#dispose\n    this.#hasDisposeAfter = !!this.#disposeAfter\n\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.#maxSize !== 0) {\n        if (!isPosInt(this.#maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.#initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.#initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n  }\n\n  /**\n   * Return the number of ms left in the item's TTL. If item is not in cache,\n   * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n   */\n  getRemainingTTL(key: K) {\n    return this.#keyMap.has(key) ? Infinity : 0\n  }\n\n  #initializeTTLTracking() {\n    const ttls = new ZeroArray(this.#max)\n    const starts = new ZeroArray(this.#max)\n    this.#ttls = ttls\n    this.#starts = starts\n\n    this.#setItemTTL = (index, ttl, start = perf.now()) => {\n      starts[index] = ttl !== 0 ? start : 0\n      ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.#isStale(index)) {\n            this.#delete(this.#keyList[index] as K, 'expire')\n          }\n        }, ttl + 1)\n        // unref() not supported on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n    }\n\n    this.#updateItemAge = index => {\n      starts[index] = ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.#statusTTL = (status, index) => {\n      if (ttls[index]) {\n        const ttl = ttls[index]\n        const start = starts[index]\n        /* c8 ignore next */\n        if (!ttl || !start) return\n        status.ttl = ttl\n        status.start = start\n        status.now = cachedNow || getNow()\n        const age = status.now - start\n        status.remainingTTL = ttl - age\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        // not available on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.#keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      const ttl = ttls[index]\n      const start = starts[index]\n      if (!ttl || !start) {\n        return Infinity\n      }\n      const age = (cachedNow || getNow()) - start\n      return ttl - age\n    }\n\n    this.#isStale = index => {\n      const s = starts[index]\n      const t = ttls[index]\n      return !!t && !!s && (cachedNow || getNow()) - s > t\n    }\n  }\n\n  // conditionally set private methods related to TTL\n  #updateItemAge: (index: Index) => void = () => {}\n  #statusTTL: (status: LRUCache.Status, index: Index) => void =\n    () => {}\n  #setItemTTL: (\n    index: Index,\n    ttl: LRUCache.Milliseconds,\n    start?: LRUCache.Milliseconds\n    // ignore because we never call this if we're not already in TTL mode\n    /* c8 ignore start */\n  ) => void = () => {}\n  /* c8 ignore stop */\n\n  #isStale: (index: Index) => boolean = () => false\n\n  #initializeSizeTracking() {\n    const sizes = new ZeroArray(this.#max)\n    this.#calculatedSize = 0\n    this.#sizes = sizes\n    this.#removeItemSize = index => {\n      this.#calculatedSize -= sizes[index] as number\n      sizes[index] = 0\n    }\n    this.#requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.#isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation ' +\n              'or size must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.#addItemSize = (\n      index: Index,\n      size: LRUCache.Size,\n      status?: LRUCache.Status\n    ) => {\n      sizes[index] = size\n      if (this.#maxSize) {\n        const maxSize = this.#maxSize - (sizes[index] as number)\n        while (this.#calculatedSize > maxSize) {\n          this.#evict(true)\n        }\n      }\n      this.#calculatedSize += sizes[index] as number\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.#calculatedSize\n      }\n    }\n  }\n\n  #removeItemSize: (index: Index) => void = _i => {}\n  #addItemSize: (\n    index: Index,\n    size: LRUCache.Size,\n    status?: LRUCache.Status\n  ) => void = (_i, _s, _st) => {}\n  #requireSize: (\n    k: K,\n    v: V | BackgroundFetch,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator\n  ) => LRUCache.Size = (\n    _k: K,\n    _v: V | BackgroundFetch,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator\n  ) => {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n    return 0\n  };\n\n  *#indexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#tail; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#head) {\n          break\n        } else {\n          i = this.#prev[i] as Index\n        }\n      }\n    }\n  }\n\n  *#rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#head; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#tail) {\n          break\n        } else {\n          i = this.#next[i] as Index\n        }\n      }\n    }\n  }\n\n  #isValidIndex(index: Index) {\n    return (\n      index !== undefined &&\n      this.#keyMap.get(this.#keyList[index] as K) === index\n    )\n  }\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const i of this.#indexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]] as [K, V]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const i of this.#rindexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const i of this.#indexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const i of this.#rindexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i] as V\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  /**\n   * A String value that is used in the creation of the default string\n   * description of an object. Called by the built-in method\n   * `Object.prototype.toString`.\n   */\n  [Symbol.toStringTag] = 'LRUCache'\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n   */\n  find(\n    fn: (v: V, k: K, self: LRUCache) => boolean,\n    getOptions: LRUCache.GetOptions = {}\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.#keyList[i] as K, this)) {\n        return this.get(this.#keyList[i] as K, getOptions)\n      }\n    }\n  }\n\n  /**\n   * Call the supplied function on each item in the cache, in order from most\n   * recently used to least recently used.\n   *\n   * `fn` is called as `fn(value, key, cache)`.\n   *\n   * If `thisp` is provided, function will be called in the `this`-context of\n   * the provided object, or the cache if no `thisp` object is provided.\n   *\n   * Does not update age or recenty of use, or iterate over stale values.\n   */\n  forEach(\n    fn: (v: V, k: K, self: LRUCache) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(\n    fn: (v: V, k: K, self: LRUCache) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let deleted = false\n    for (const i of this.#rindexes({ allowStale: true })) {\n      if (this.#isStale(i)) {\n        this.#delete(this.#keyList[i] as K, 'expire')\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Get the extended info about a given entry, to get its value, size, and\n   * TTL info simultaneously. Returns `undefined` if the key is not present.\n   *\n   * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n   * serialization, the `start` value is always the current timestamp, and the\n   * `ttl` is a calculated remaining time to live (negative if expired).\n   *\n   * Always returns stale values, if their info is found in the cache, so be\n   * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n   * if relevant.\n   */\n  info(key: K): LRUCache.Entry | undefined {\n    const i = this.#keyMap.get(key)\n    if (i === undefined) return undefined\n    const v = this.#valList[i]\n    const value: V | undefined = this.#isBackgroundFetch(v)\n      ? v.__staleWhileFetching\n      : v\n    if (value === undefined) return undefined\n    const entry: LRUCache.Entry = { value }\n    if (this.#ttls && this.#starts) {\n      const ttl = this.#ttls[i]\n      const start = this.#starts[i]\n      if (ttl && start) {\n        const remain = ttl - (perf.now() - start)\n        entry.ttl = remain\n        entry.start = Date.now()\n      }\n    }\n    if (this.#sizes) {\n      entry.size = this.#sizes[i]\n    }\n    return entry\n  }\n\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to {@link LRLUCache#load}.\n   *\n   * The `start` fields are calculated relative to a portable `Date.now()`\n   * timestamp, even if `performance.now()` is available.\n   *\n   * Stale entries are always included in the `dump`, even if\n   * {@link LRUCache.OptionsBase.allowStale} is false.\n   *\n   * Note: this returns an actual array, not a generator, so it can be more\n   * easily passed around.\n   */\n  dump() {\n    const arr: [K, LRUCache.Entry][] = []\n    for (const i of this.#indexes({ allowStale: true })) {\n      const key = this.#keyList[i]\n      const v = this.#valList[i]\n      const value: V | undefined = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined || key === undefined) continue\n      const entry: LRUCache.Entry = { value }\n      if (this.#ttls && this.#starts) {\n        entry.ttl = this.#ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - (this.#starts[i] as number)\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.#sizes) {\n        entry.size = this.#sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   *\n   * The shape of the resulting cache may be different if the same options are\n   * not used in both caches.\n   *\n   * The `start` fields are assumed to be calculated relative to a portable\n   * `Date.now()` timestamp, even if `performance.now()` is available.\n   */\n  load(arr: [K, LRUCache.Entry][]) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset, so that\n        // we get the intended remaining TTL, no matter how long it's\n        // been on ice.\n        //\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   *\n   * Fields on the {@link LRUCache.SetOptions} options param will override\n   * their corresponding values in the constructor options for the scope\n   * of this single `set()` operation.\n   *\n   * If `start` is provided, then that will set the effective start\n   * time for the TTL calculation. Note that this must be a previous\n   * value of `performance.now()` if supported, or a previous value of\n   * `Date.now()` if not.\n   *\n   * Options object may also include `size`, which will prevent\n   * calling the `sizeCalculation` function and just use the specified\n   * number if it is a positive integer, and `noDisposeOnSet` which\n   * will prevent calling a `dispose` function in the case of\n   * overwrites.\n   *\n   * If the `size` (or return value of `sizeCalculation`) for a given\n   * entry is greater than `maxEntrySize`, then the item will not be\n   * added to the cache.\n   *\n   * Will update the recency of the entry.\n   *\n   * If the value is `undefined`, then this is an alias for\n   * `cache.delete(key)`. `undefined` is never stored in the cache.\n   */\n  set(\n    k: K,\n    v: V | BackgroundFetch | undefined,\n    setOptions: LRUCache.SetOptions = {}\n  ) {\n    if (v === undefined) {\n      this.delete(k)\n      return this\n    }\n    const {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      sizeCalculation = this.sizeCalculation,\n      status,\n    } = setOptions\n    let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n    const size = this.#requireSize(\n      k,\n      v,\n      setOptions.size || 0,\n      sizeCalculation\n    )\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case something is there already.\n      this.#delete(k, 'set')\n      return this\n    }\n    let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = (\n        this.#size === 0\n          ? this.#tail\n          : this.#free.length !== 0\n          ? this.#free.pop()\n          : this.#size === this.#max\n          ? this.#evict(false)\n          : this.#size\n      ) as Index\n      this.#keyList[index] = k\n      this.#valList[index] = v\n      this.#keyMap.set(k, index)\n      this.#next[this.#tail] = index\n      this.#prev[index] = this.#tail\n      this.#tail = index\n      this.#size++\n      this.#addItemSize(index, size, status)\n      if (status) status.set = 'add'\n      noUpdateTTL = false\n    } else {\n      // update\n      this.#moveToTail(index)\n      const oldVal = this.#valList[index] as V | BackgroundFetch\n      if (v !== oldVal) {\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n          const { __staleWhileFetching: s } = oldVal\n          if (s !== undefined && !noDisposeOnSet) {\n            if (this.#hasDispose) {\n              this.#dispose?.(s as V, k, 'set')\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([s as V, k, 'set'])\n            }\n          }\n        } else if (!noDisposeOnSet) {\n          if (this.#hasDispose) {\n            this.#dispose?.(oldVal as V, k, 'set')\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([oldVal as V, k, 'set'])\n          }\n        }\n        this.#removeItemSize(index)\n        this.#addItemSize(index, size, status)\n        this.#valList[index] = v\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.#isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && !this.#ttls) {\n      this.#initializeTTLTracking()\n    }\n    if (this.#ttls) {\n      if (!noUpdateTTL) {\n        this.#setItemTTL(index, ttl, start)\n      }\n      if (status) this.#statusTTL(status, index)\n    }\n    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop(): V | undefined {\n    try {\n      while (this.#size) {\n        const val = this.#valList[this.#head]\n        this.#evict(true)\n        if (this.#isBackgroundFetch(val)) {\n          if (val.__staleWhileFetching) {\n            return val.__staleWhileFetching\n          }\n        } else if (val !== undefined) {\n          return val\n        }\n      }\n    } finally {\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed\n        let task: DisposeTask | undefined\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task)\n        }\n      }\n    }\n  }\n\n  #evict(free: boolean) {\n    const head = this.#head\n    const k = this.#keyList[head] as K\n    const v = this.#valList[head] as V\n    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else if (this.#hasDispose || this.#hasDisposeAfter) {\n      if (this.#hasDispose) {\n        this.#dispose?.(v, k, 'evict')\n      }\n      if (this.#hasDisposeAfter) {\n        this.#disposed?.push([v, k, 'evict'])\n      }\n    }\n    this.#removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.#keyList[head] = undefined\n      this.#valList[head] = undefined\n      this.#free.push(head)\n    }\n    if (this.#size === 1) {\n      this.#head = this.#tail = 0 as Index\n      this.#free.length = 0\n    } else {\n      this.#head = this.#next[head] as Index\n    }\n    this.#keyMap.delete(k)\n    this.#size--\n    return head\n  }\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Check if a key is in the cache, without updating the recency of\n   * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n   * to `true` in either the options or the constructor.\n   *\n   * Will return `false` if the item is stale, even though it is technically in\n   * the cache. The difference can be determined (if it matters) by using a\n   * `status` argument, and inspecting the `has` field.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(k: K, hasOptions: LRUCache.HasOptions = {}) {\n    const { updateAgeOnHas = this.updateAgeOnHas, status } =\n      hasOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const v = this.#valList[index]\n      if (\n        this.#isBackgroundFetch(v) &&\n        v.__staleWhileFetching === undefined\n      ) {\n        return false\n      }\n      if (!this.#isStale(index)) {\n        if (updateAgeOnHas) {\n          this.#updateItemAge(index)\n        }\n        if (status) {\n          status.has = 'hit'\n          this.#statusTTL(status, index)\n        }\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.#statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(k: K, peekOptions: LRUCache.PeekOptions = {}) {\n    const { allowStale = this.allowStale } = peekOptions\n    const index = this.#keyMap.get(k)\n    if (\n      index === undefined ||\n      (!allowStale && this.#isStale(index))\n    ) {\n      return\n    }\n    const v = this.#valList[index]\n    // either stale and allowed, or forcing a refresh of non-stale value\n    return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n  }\n\n  #backgroundFetch(\n    k: K,\n    index: Index | undefined,\n    options: LRUCache.FetchOptions,\n    context: any\n  ): BackgroundFetch {\n    const v = index === undefined ? undefined : this.#valList[index]\n    if (this.#isBackgroundFetch(v)) {\n      return v\n    }\n\n    const ac = new AC()\n    const { signal } = options\n    // when/if our AC signals, then stop listening to theirs.\n    signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n      signal: ac.signal,\n    })\n\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n\n    const cb = (\n      v: V | undefined,\n      updateCache = false\n    ): V | undefined => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      const bf = p as BackgroundFetch\n      if (this.#valList[index as Index] === p) {\n        if (v === undefined) {\n          if (bf.__staleWhileFetching) {\n            this.#valList[index as Index] = bf.__staleWhileFetching\n          } else {\n            this.#delete(k, 'fetch')\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n\n    const eb = (er: any) => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n\n    const fetchFail = (er: any): V | undefined => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      const bf = p as BackgroundFetch\n      if (this.#valList[index as Index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || bf.__staleWhileFetching === undefined\n        if (del) {\n          this.#delete(k, 'fetch')\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.#valList[index as Index] = bf.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && bf.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return bf.__staleWhileFetching\n      } else if (bf.__returned === bf) {\n        throw er\n      }\n    }\n\n    const pcall = (\n      res: (v: V | undefined) => void,\n      rej: (e: any) => void\n    ) => {\n      const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n      if (fmp && fmp instanceof Promise) {\n        fmp.then(v => res(v === undefined ? undefined : v), rej)\n      }\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res(undefined)\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    const bf: BackgroundFetch = Object.assign(p, {\n      __abortController: ac,\n      __staleWhileFetching: v,\n      __returned: undefined,\n    })\n\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, bf, { ...fetchOpts.options, status: undefined })\n      index = this.#keyMap.get(k)\n    } else {\n      this.#valList[index] = bf\n    }\n    return bf\n  }\n\n  #isBackgroundFetch(p: any): p is BackgroundFetch {\n    if (!this.#hasFetchMethod) return false\n    const b = p as BackgroundFetch\n    return (\n      !!b &&\n      b instanceof Promise &&\n      b.hasOwnProperty('__staleWhileFetching') &&\n      b.__abortController instanceof AC\n    )\n  }\n\n  /**\n   * Make an asynchronous cached fetch using the\n   * {@link LRUCache.OptionsBase.fetchMethod} function.\n   *\n   * If the value is in the cache and not stale, then the returned\n   * Promise resolves to the value.\n   *\n   * If not in the cache, or beyond its TTL staleness, then\n   * `fetchMethod(key, staleValue, { options, signal, context })` is\n   * called, and the value returned will be added to the cache once\n   * resolved.\n   *\n   * If called with `allowStale`, and an asynchronous fetch is\n   * currently in progress to reload a stale value, then the former\n   * stale value will be returned.\n   *\n   * If called with `forceRefresh`, then the cached item will be\n   * re-fetched, even if it is not stale. However, if `allowStale` is also\n   * set, then the old value will still be returned. This is useful\n   * in cases where you want to force a reload of a cached value. If\n   * a background fetch is already in progress, then `forceRefresh`\n   * has no effect.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n   * {@link LRUCache.FetchOptions.signal},\n   * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n   * determined by the FIRST fetch() call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   *\n   * If {@link LRUCache.OptionsBase.fetchMethod} is not specified, then this is\n   * effectively an alias for `Promise.resolve(cache.get(key))`.\n   *\n   * When the fetch method resolves to a value, if the fetch has not\n   * been aborted due to deletion, eviction, or being overwritten,\n   * then it is added to the cache using the options provided.\n   *\n   * If the key is evicted or deleted before the `fetchMethod`\n   * resolves, then the AbortSignal passed to the `fetchMethod` will\n   * receive an `abort` event, and the promise returned by `fetch()`\n   * will reject with the reason for the abort.\n   *\n   * If a `signal` is passed to the `fetch()` call, then aborting the\n   * signal will abort the fetch and cause the `fetch()` promise to\n   * reject with the reason provided.\n   *\n   * **Setting `context`**\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the {@link LRUCache} constructor, then all\n   * calls to `cache.fetch()` _must_ provide a `context` option. If\n   * set to `undefined` or `void`, then calls to fetch _must not_\n   * provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that\n   * might be relevant in the course of fetching the data. It is only\n   * relevant for the course of a single `fetch()` operation, and\n   * discarded afterwards.\n   *\n   * **Note: `fetch()` calls are inflight-unique**\n   *\n   * If you call `fetch()` multiple times with the same key value,\n   * then every call after the first will resolve on the same\n   * promise1,\n   * _even if they have different settings that would otherwise change\n   * the behavior of the fetch_, such as `noDeleteOnFetchRejection`\n   * or `ignoreFetchAbort`.\n   *\n   * In most cases, this is not a problem (in fact, only fetching\n   * something once is what you probably want, if you're caching in\n   * the first place). If you are changing the fetch() options\n   * dramatically between runs, there's a good chance that you might\n   * be trying to fit divergent semantics into a single object, and\n   * would be better off with multiple cache instances.\n   *\n   * **1**: Ie, they're not the \"same Promise\", but they resolve at\n   * the same time, because they're both waiting on the same\n   * underlying fetchMethod response.\n   */\n\n  fetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : LRUCache.FetchOptionsWithContext\n  ): Promise\n\n  // this overload not allowed if context is required\n  fetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : never\n  ): Promise\n\n  async fetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions = {}\n  ): Promise {\n    const {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      context,\n      forceRefresh = false,\n      status,\n      signal,\n    } = fetchOptions\n\n    if (!this.#hasFetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.#keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.#backgroundFetch(k, index, options, context)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.#isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        if (status) this.#statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.#backgroundFetch(k, index, options, context)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  /**\n   * In some cases, `cache.fetch()` may resolve to `undefined`, either because\n   * a {@link LRUCache.OptionsBase#fetchMethod} was not provided (turning\n   * `cache.fetch(k)` into just an async wrapper around `cache.get(k)`) or\n   * because `ignoreFetchAbort` was specified (either to the constructor or\n   * in the {@link LRUCache.FetchOptions}). Also, the\n   * {@link OptionsBase.fetchMethod} may return `undefined` or `void`, making\n   * the test even more complicated.\n   *\n   * Because inferring the cases where `undefined` might be returned are so\n   * cumbersome, but testing for `undefined` can also be annoying, this method\n   * can be used, which will reject if `this.fetch()` resolves to undefined.\n   */\n  forceFetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : LRUCache.FetchOptionsWithContext\n  ): Promise\n  // this overload not allowed if context is required\n  forceFetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : never\n  ): Promise\n  async forceFetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions = {}\n  ): Promise {\n    const v = await this.fetch(\n      k,\n      fetchOptions as unknown extends FC\n        ? LRUCache.FetchOptions\n        : FC extends undefined | void\n        ? LRUCache.FetchOptionsNoContext\n        : LRUCache.FetchOptionsWithContext\n    )\n    if (v === undefined) throw new Error('fetch() returned undefined')\n    return v\n  }\n\n  /**\n   * If the key is found in the cache, then this is equivalent to\n   * {@link LRUCache#get}. If not, in the cache, then calculate the value using\n   * the {@link LRUCache.OptionsBase.memoMethod}, and add it to the cache.\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the LRUCache constructor, then all calls to `cache.memo()`\n   * _must_ provide a `context` option. If set to `undefined` or `void`, then\n   * calls to memo _must not_ provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that might be\n   * relevant in the course of fetching the data. It is only relevant for the\n   * course of a single `memo()` operation, and discarded afterwards.\n   */\n  memo(\n    k: K,\n    memoOptions: unknown extends FC\n      ? LRUCache.MemoOptions\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext\n      : LRUCache.MemoOptionsWithContext\n  ): V\n  // this overload not allowed if context is required\n  memo(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    memoOptions?: unknown extends FC\n      ? LRUCache.MemoOptions\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext\n      : never\n  ): V\n  memo(k: K, memoOptions: LRUCache.MemoOptions = {}) {\n    const memoMethod = this.#memoMethod\n    if (!memoMethod) {\n      throw new Error('no memoMethod provided to constructor')\n    }\n    const { context, forceRefresh, ...options } = memoOptions\n    const v = this.get(k, options)\n    if (!forceRefresh && v !== undefined) return v\n    const vv = memoMethod(k, v, {\n      options,\n      context,\n    } as LRUCache.MemoizerOptions)\n    this.set(k, vv, options)\n    return vv\n  }\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(k: K, getOptions: LRUCache.GetOptions = {}) {\n    const {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = getOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.#valList[index]\n      const fetching = this.#isBackgroundFetch(value)\n      if (status) this.#statusTTL(status, index)\n      if (this.#isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.#delete(k, 'expire')\n          }\n          if (status && allowStale) status.returnedStale = true\n          return allowStale ? value : undefined\n        } else {\n          if (\n            status &&\n            allowStale &&\n            value.__staleWhileFetching !== undefined\n          ) {\n            status.returnedStale = true\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  #connect(p: Index, n: Index) {\n    this.#prev[n] = p\n    this.#next[p] = n\n  }\n\n  #moveToTail(index: Index): void {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.#tail) {\n      if (index === this.#head) {\n        this.#head = this.#next[index] as Index\n      } else {\n        this.#connect(\n          this.#prev[index] as Index,\n          this.#next[index] as Index\n        )\n      }\n      this.#connect(this.#tail, index)\n      this.#tail = index\n    }\n  }\n\n  /**\n   * Deletes a key out of the cache.\n   *\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(k: K) {\n    return this.#delete(k, 'delete')\n  }\n\n  #delete(k: K, reason: LRUCache.DisposeReason) {\n    let deleted = false\n    if (this.#size !== 0) {\n      const index = this.#keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.#size === 1) {\n          this.#clear(reason)\n        } else {\n          this.#removeItemSize(index)\n          const v = this.#valList[index]\n          if (this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n              this.#dispose?.(v as V, k, reason)\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([v as V, k, reason])\n            }\n          }\n          this.#keyMap.delete(k)\n          this.#keyList[index] = undefined\n          this.#valList[index] = undefined\n          if (index === this.#tail) {\n            this.#tail = this.#prev[index] as Index\n          } else if (index === this.#head) {\n            this.#head = this.#next[index] as Index\n          } else {\n            const pi = this.#prev[index] as number\n            this.#next[pi] = this.#next[index] as number\n            const ni = this.#next[index] as number\n            this.#prev[ni] = this.#prev[index] as number\n          }\n          this.#size--\n          this.#free.push(index)\n        }\n      }\n    }\n    if (this.#hasDisposeAfter && this.#disposed?.length) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    return this.#clear('delete')\n  }\n  #clear(reason: LRUCache.DisposeReason) {\n    for (const index of this.#rindexes({ allowStale: true })) {\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.#keyList[index]\n        if (this.#hasDispose) {\n          this.#dispose?.(v as V, k as K, reason)\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v as V, k as K, reason])\n        }\n      }\n    }\n\n    this.#keyMap.clear()\n    this.#valList.fill(undefined)\n    this.#keyList.fill(undefined)\n    if (this.#ttls && this.#starts) {\n      this.#ttls.fill(0)\n      this.#starts.fill(0)\n    }\n    if (this.#sizes) {\n      this.#sizes.fill(0)\n    }\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free.length = 0\n    this.#calculatedSize = 0\n    this.#size = 0\n    if (this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n  }\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js
new file mode 100644
index 00000000..ad643b0b
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js
@@ -0,0 +1,2 @@
+"use strict";var G=(l,t,e)=>{if(!t.has(l))throw TypeError("Cannot "+e)};var j=(l,t,e)=>(G(l,t,"read from private field"),e?e.call(l):t.get(l)),I=(l,t,e)=>{if(t.has(l))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(l):t.set(l,e)},x=(l,t,e,i)=>(G(l,t,"write to private field"),i?i.call(l,e):t.set(l,e),e);Object.defineProperty(exports,"__esModule",{value:!0});exports.LRUCache=void 0;var T=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,P=new Set,U=typeof process=="object"&&process?process:{},H=(l,t,e,i)=>{typeof U.emitWarning=="function"?U.emitWarning(l,t,e,i):console.error(`[${e}] ${t}: ${l}`)},D=globalThis.AbortController,N=globalThis.AbortSignal;if(typeof D>"u"){N=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,s){this._onabort.push(s)}},D=class{constructor(){t()}signal=new N;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i)}}};let l=U.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{l&&(l=!1,H("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var V=l=>!P.has(l),Y=Symbol("type"),A=l=>l&&l===Math.floor(l)&&l>0&&isFinite(l),k=l=>A(l)?l<=Math.pow(2,8)?Uint8Array:l<=Math.pow(2,16)?Uint16Array:l<=Math.pow(2,32)?Uint32Array:l<=Number.MAX_SAFE_INTEGER?E:null:null,E=class extends Array{constructor(t){super(t),this.fill(0)}},v,O=class{heap;length;static create(t){let e=k(t);if(!e)return[];x(O,v,!0);let i=new O(t,e);return x(O,v,!1),i}constructor(t,e){if(!j(O,v))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}},W=O;v=new WeakMap,I(W,v,!1);var C=class{#g;#f;#p;#w;#R;#W;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#S;#s;#i;#t;#l;#c;#o;#h;#_;#r;#b;#m;#u;#y;#E;#a;static unsafeExposeInternals(t){return{starts:t.#m,ttls:t.#u,sizes:t.#b,keyMap:t.#s,keyList:t.#i,valList:t.#t,next:t.#l,prev:t.#c,get head(){return t.#o},get tail(){return t.#h},free:t.#_,isBackgroundFetch:e=>t.#e(e),backgroundFetch:(e,i,s,n)=>t.#x(e,i,s,n),moveToTail:e=>t.#C(e),indexes:e=>t.#A(e),rindexes:e=>t.#F(e),isStale:e=>t.#d(e)}}get max(){return this.#g}get maxSize(){return this.#f}get calculatedSize(){return this.#S}get size(){return this.#n}get fetchMethod(){return this.#R}get memoMethod(){return this.#W}get dispose(){return this.#p}get disposeAfter(){return this.#w}constructor(t){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:h,updateAgeOnHas:o,allowStale:r,dispose:g,disposeAfter:b,noDisposeOnSet:f,noUpdateTTL:u,maxSize:c=0,maxEntrySize:F=0,sizeCalculation:d,fetchMethod:S,memoMethod:a,noDeleteOnFetchRejection:w,noDeleteOnStaleGet:m,allowStaleOnFetchRejection:p,allowStaleOnFetchAbort:_,ignoreFetchAbort:z}=t;if(e!==0&&!A(e))throw new TypeError("max option must be a nonnegative integer");let y=e?k(e):Array;if(!y)throw new Error("invalid max value: "+e);if(this.#g=e,this.#f=c,this.maxEntrySize=F||this.#f,this.sizeCalculation=d,this.sizeCalculation){if(!this.#f&&!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")}if(a!==void 0&&typeof a!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#W=a,S!==void 0&&typeof S!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#R=S,this.#E=!!S,this.#s=new Map,this.#i=new Array(e).fill(void 0),this.#t=new Array(e).fill(void 0),this.#l=new y(e),this.#c=new y(e),this.#o=0,this.#h=0,this.#_=W.create(e),this.#n=0,this.#S=0,typeof g=="function"&&(this.#p=g),typeof b=="function"?(this.#w=b,this.#r=[]):(this.#w=void 0,this.#r=void 0),this.#y=!!this.#p,this.#a=!!this.#w,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!u,this.noDeleteOnFetchRejection=!!w,this.allowStaleOnFetchRejection=!!p,this.allowStaleOnFetchAbort=!!_,this.ignoreFetchAbort=!!z,this.maxEntrySize!==0){if(this.#f!==0&&!A(this.#f))throw new TypeError("maxSize must be a positive integer if specified");if(!A(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#P()}if(this.allowStale=!!r,this.noDeleteOnStaleGet=!!m,this.updateAgeOnGet=!!h,this.updateAgeOnHas=!!o,this.ttlResolution=A(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!A(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#U()}if(this.#g===0&&this.ttl===0&&this.#f===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#g&&!this.#f){let R="LRU_CACHE_UNBOUNDED";V(R)&&(P.add(R),H("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",R,C))}}getRemainingTTL(t){return this.#s.has(t)?1/0:0}#U(){let t=new E(this.#g),e=new E(this.#g);this.#u=t,this.#m=e,this.#M=(n,h,o=T.now())=>{if(e[n]=h!==0?o:0,t[n]=h,h!==0&&this.ttlAutopurge){let r=setTimeout(()=>{this.#d(n)&&this.#T(this.#i[n],"expire")},h+1);r.unref&&r.unref()}},this.#v=n=>{e[n]=t[n]!==0?T.now():0},this.#O=(n,h)=>{if(t[h]){let o=t[h],r=e[h];if(!o||!r)return;n.ttl=o,n.start=r,n.now=i||s();let g=n.now-r;n.remainingTTL=o-g}};let i=0,s=()=>{let n=T.now();if(this.ttlResolution>0){i=n;let h=setTimeout(()=>i=0,this.ttlResolution);h.unref&&h.unref()}return n};this.getRemainingTTL=n=>{let h=this.#s.get(n);if(h===void 0)return 0;let o=t[h],r=e[h];if(!o||!r)return 1/0;let g=(i||s())-r;return o-g},this.#d=n=>{let h=e[n],o=t[n];return!!o&&!!h&&(i||s())-h>o}}#v=()=>{};#O=()=>{};#M=()=>{};#d=()=>!1;#P(){let t=new E(this.#g);this.#S=0,this.#b=t,this.#z=e=>{this.#S-=t[e],t[e]=0},this.#G=(e,i,s,n)=>{if(this.#e(i))return 0;if(!A(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!A(s))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 s},this.#D=(e,i,s)=>{if(t[e]=i,this.#f){let n=this.#f-t[e];for(;this.#S>n;)this.#L(!0)}this.#S+=t[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#S)}}#z=t=>{};#D=(t,e,i)=>{};#G=(t,e,i,s)=>{if(i||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#A({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#h;!(!this.#j(e)||((t||!this.#d(e))&&(yield e),e===this.#o));)e=this.#c[e]}*#F({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#o;!(!this.#j(e)||((t||!this.#d(e))&&(yield e),e===this.#h));)e=this.#l[e]}#j(t){return t!==void 0&&this.#s.get(this.#i[t])===t}*entries(){for(let t of this.#A())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*rentries(){for(let t of this.#F())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*keys(){for(let t of this.#A()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*rkeys(){for(let t of this.#F()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*values(){for(let t of this.#A())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}*rvalues(){for(let t of this.#F())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;if(n!==void 0&&t(n,this.#i[i],this))return this.get(this.#i[i],e)}}forEach(t,e=this){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}rforEach(t,e=this){for(let i of this.#F()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}purgeStale(){let t=!1;for(let e of this.#F({allowStale:!0}))this.#d(e)&&(this.#T(this.#i[e],"expire"),t=!0);return t}info(t){let e=this.#s.get(t);if(e===void 0)return;let i=this.#t[e],s=this.#e(i)?i.__staleWhileFetching:i;if(s===void 0)return;let n={value:s};if(this.#u&&this.#m){let h=this.#u[e],o=this.#m[e];if(h&&o){let r=h-(T.now()-o);n.ttl=r,n.start=Date.now()}}return this.#b&&(n.size=this.#b[e]),n}dump(){let t=[];for(let e of this.#A({allowStale:!0})){let i=this.#i[e],s=this.#t[e],n=this.#e(s)?s.__staleWhileFetching:s;if(n===void 0||i===void 0)continue;let h={value:n};if(this.#u&&this.#m){h.ttl=this.#u[e];let o=T.now()-this.#m[e];h.start=Math.floor(Date.now()-o)}this.#b&&(h.size=this.#b[e]),t.unshift([i,h])}return t}load(t){this.clear();for(let[e,i]of t){if(i.start){let s=Date.now()-i.start;i.start=T.now()-s}this.set(e,i.value,i)}}set(t,e,i={}){if(e===void 0)return this.delete(t),this;let{ttl:s=this.ttl,start:n,noDisposeOnSet:h=this.noDisposeOnSet,sizeCalculation:o=this.sizeCalculation,status:r}=i,{noUpdateTTL:g=this.noUpdateTTL}=i,b=this.#G(t,e,i.size||0,o);if(this.maxEntrySize&&b>this.maxEntrySize)return r&&(r.set="miss",r.maxEntrySizeExceeded=!0),this.#T(t,"set"),this;let f=this.#n===0?void 0:this.#s.get(t);if(f===void 0)f=this.#n===0?this.#h:this.#_.length!==0?this.#_.pop():this.#n===this.#g?this.#L(!1):this.#n,this.#i[f]=t,this.#t[f]=e,this.#s.set(t,f),this.#l[this.#h]=f,this.#c[f]=this.#h,this.#h=f,this.#n++,this.#D(f,b,r),r&&(r.set="add"),g=!1;else{this.#C(f);let u=this.#t[f];if(e!==u){if(this.#E&&this.#e(u)){u.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:c}=u;c!==void 0&&!h&&(this.#y&&this.#p?.(c,t,"set"),this.#a&&this.#r?.push([c,t,"set"]))}else h||(this.#y&&this.#p?.(u,t,"set"),this.#a&&this.#r?.push([u,t,"set"]));if(this.#z(f),this.#D(f,b,r),this.#t[f]=e,r){r.set="replace";let c=u&&this.#e(u)?u.__staleWhileFetching:u;c!==void 0&&(r.oldValue=c)}}else r&&(r.set="update")}if(s!==0&&!this.#u&&this.#U(),this.#u&&(g||this.#M(f,s,n),r&&this.#O(r,f)),!h&&this.#a&&this.#r){let u=this.#r,c;for(;c=u?.shift();)this.#w?.(...c)}return this}pop(){try{for(;this.#n;){let t=this.#t[this.#o];if(this.#L(!0),this.#e(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(t!==void 0)return t}}finally{if(this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#w?.(...e)}}}#L(t){let e=this.#o,i=this.#i[e],s=this.#t[e];return this.#E&&this.#e(s)?s.__abortController.abort(new Error("evicted")):(this.#y||this.#a)&&(this.#y&&this.#p?.(s,i,"evict"),this.#a&&this.#r?.push([s,i,"evict"])),this.#z(e),t&&(this.#i[e]=void 0,this.#t[e]=void 0,this.#_.push(e)),this.#n===1?(this.#o=this.#h=0,this.#_.length=0):this.#o=this.#l[e],this.#s.delete(i),this.#n--,e}has(t,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#s.get(t);if(n!==void 0){let h=this.#t[n];if(this.#e(h)&&h.__staleWhileFetching===void 0)return!1;if(this.#d(n))s&&(s.has="stale",this.#O(s,n));else return i&&this.#v(n),s&&(s.has="hit",this.#O(s,n)),!0}else s&&(s.has="miss");return!1}peek(t,e={}){let{allowStale:i=this.allowStale}=e,s=this.#s.get(t);if(s===void 0||!i&&this.#d(s))return;let n=this.#t[s];return this.#e(n)?n.__staleWhileFetching:n}#x(t,e,i,s){let n=e===void 0?void 0:this.#t[e];if(this.#e(n))return n;let h=new D,{signal:o}=i;o?.addEventListener("abort",()=>h.abort(o.reason),{signal:h.signal});let r={signal:h.signal,options:i,context:s},g=(d,S=!1)=>{let{aborted:a}=h.signal,w=i.ignoreFetchAbort&&d!==void 0;if(i.status&&(a&&!S?(i.status.fetchAborted=!0,i.status.fetchError=h.signal.reason,w&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),a&&!w&&!S)return f(h.signal.reason);let m=c;return this.#t[e]===c&&(d===void 0?m.__staleWhileFetching?this.#t[e]=m.__staleWhileFetching:this.#T(t,"fetch"):(i.status&&(i.status.fetchUpdated=!0),this.set(t,d,r.options))),d},b=d=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=d),f(d)),f=d=>{let{aborted:S}=h.signal,a=S&&i.allowStaleOnFetchAbort,w=a||i.allowStaleOnFetchRejection,m=w||i.noDeleteOnFetchRejection,p=c;if(this.#t[e]===c&&(!m||p.__staleWhileFetching===void 0?this.#T(t,"fetch"):a||(this.#t[e]=p.__staleWhileFetching)),w)return i.status&&p.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),p.__staleWhileFetching;if(p.__returned===p)throw d},u=(d,S)=>{let a=this.#R?.(t,n,r);a&&a instanceof Promise&&a.then(w=>d(w===void 0?void 0:w),S),h.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(d(void 0),i.allowStaleOnFetchAbort&&(d=w=>g(w,!0)))})};i.status&&(i.status.fetchDispatched=!0);let c=new Promise(u).then(g,b),F=Object.assign(c,{__abortController:h,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,F,{...r.options,status:void 0}),e=this.#s.get(t)):this.#t[e]=F,F}#e(t){if(!this.#E)return!1;let e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof D}async fetch(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:h=this.ttl,noDisposeOnSet:o=this.noDisposeOnSet,size:r=0,sizeCalculation:g=this.sizeCalculation,noUpdateTTL:b=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:c=this.ignoreFetchAbort,allowStaleOnFetchAbort:F=this.allowStaleOnFetchAbort,context:d,forceRefresh:S=!1,status:a,signal:w}=e;if(!this.#E)return a&&(a.fetch="get"),this.get(t,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:a});let m={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:h,noDisposeOnSet:o,size:r,sizeCalculation:g,noUpdateTTL:b,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:F,ignoreFetchAbort:c,status:a,signal:w},p=this.#s.get(t);if(p===void 0){a&&(a.fetch="miss");let _=this.#x(t,p,m,d);return _.__returned=_}else{let _=this.#t[p];if(this.#e(_)){let M=i&&_.__staleWhileFetching!==void 0;return a&&(a.fetch="inflight",M&&(a.returnedStale=!0)),M?_.__staleWhileFetching:_.__returned=_}let z=this.#d(p);if(!S&&!z)return a&&(a.fetch="hit"),this.#C(p),s&&this.#v(p),a&&this.#O(a,p),_;let y=this.#x(t,p,m,d),L=y.__staleWhileFetching!==void 0&&i;return a&&(a.fetch=z?"stale":"refresh",L&&z&&(a.returnedStale=!0)),L?y.__staleWhileFetching:y.__returned=y}}async forceFetch(t,e={}){let i=await this.fetch(t,e);if(i===void 0)throw new Error("fetch() returned undefined");return i}memo(t,e={}){let i=this.#W;if(!i)throw new Error("no memoMethod provided to constructor");let{context:s,forceRefresh:n,...h}=e,o=this.get(t,h);if(!n&&o!==void 0)return o;let r=i(t,o,{options:h,context:s});return this.set(t,r,h),r}get(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:h}=e,o=this.#s.get(t);if(o!==void 0){let r=this.#t[o],g=this.#e(r);return h&&this.#O(h,o),this.#d(o)?(h&&(h.get="stale"),g?(h&&i&&r.__staleWhileFetching!==void 0&&(h.returnedStale=!0),i?r.__staleWhileFetching:void 0):(n||this.#T(t,"expire"),h&&i&&(h.returnedStale=!0),i?r:void 0)):(h&&(h.get="hit"),g?r.__staleWhileFetching:(this.#C(o),s&&this.#v(o),r))}else h&&(h.get="miss")}#I(t,e){this.#c[e]=t,this.#l[t]=e}#C(t){t!==this.#h&&(t===this.#o?this.#o=this.#l[t]:this.#I(this.#c[t],this.#l[t]),this.#I(this.#h,t),this.#h=t)}delete(t){return this.#T(t,"delete")}#T(t,e){let i=!1;if(this.#n!==0){let s=this.#s.get(t);if(s!==void 0)if(i=!0,this.#n===1)this.#N(e);else{this.#z(s);let n=this.#t[s];if(this.#e(n)?n.__abortController.abort(new Error("deleted")):(this.#y||this.#a)&&(this.#y&&this.#p?.(n,t,e),this.#a&&this.#r?.push([n,t,e])),this.#s.delete(t),this.#i[s]=void 0,this.#t[s]=void 0,s===this.#h)this.#h=this.#c[s];else if(s===this.#o)this.#o=this.#l[s];else{let h=this.#c[s];this.#l[h]=this.#l[s];let o=this.#l[s];this.#c[o]=this.#c[s]}this.#n--,this.#_.push(s)}}if(this.#a&&this.#r?.length){let s=this.#r,n;for(;n=s?.shift();)this.#w?.(...n)}return i}clear(){return this.#N("delete")}#N(t){for(let e of this.#F({allowStale:!0})){let i=this.#t[e];if(this.#e(i))i.__abortController.abort(new Error("deleted"));else{let s=this.#i[e];this.#y&&this.#p?.(i,s,t),this.#a&&this.#r?.push([i,s,t])}}if(this.#s.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#u&&this.#m&&(this.#u.fill(0),this.#m.fill(0)),this.#b&&this.#b.fill(0),this.#o=0,this.#h=0,this.#_.length=0,this.#S=0,this.#n=0,this.#a&&this.#r){let e=this.#r,i;for(;i=e?.shift();)this.#w?.(...i)}}};exports.LRUCache=C;
+//# sourceMappingURL=index.min.js.map
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map
new file mode 100644
index 00000000..37ca070d
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map
@@ -0,0 +1,7 @@
+{
+  "version": 3,
+  "sources": ["../../src/index.ts"],
+  "sourcesContent": ["/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst warned = new Set()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n  typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n  msg: string,\n  type: string,\n  code: string,\n  fn: ForC\n) => {\n  typeof PROCESS.emitWarning === 'function'\n    ? PROCESS.emitWarning(msg, type, code, fn)\n    : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n  //@ts-ignore\n  AS = class AbortSignal {\n    onabort?: (...a: any[]) => any\n    _onabort: ((...a: any[]) => any)[] = []\n    reason?: any\n    aborted: boolean = false\n    addEventListener(_: string, fn: (...a: any[]) => any) {\n      this._onabort.push(fn)\n    }\n  }\n  //@ts-ignore\n  AC = class AbortController {\n    constructor() {\n      warnACPolyfill()\n    }\n    signal = new AS()\n    abort(reason: any) {\n      if (this.signal.aborted) return\n      //@ts-ignore\n      this.signal.reason = reason\n      //@ts-ignore\n      this.signal.aborted = true\n      //@ts-ignore\n      for (const fn of this.signal._onabort) {\n        fn(reason)\n      }\n      this.signal.onabort?.(reason)\n    }\n  }\n  let printACPolyfillWarning =\n    PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n  const warnACPolyfill = () => {\n    if (!printACPolyfillWarning) return\n    printACPolyfillWarning = false\n    emitWarning(\n      'AbortController is not defined. If using lru-cache in ' +\n        'node 14, load an AbortController polyfill from the ' +\n        '`node-abort-controller` package. A minimal polyfill is ' +\n        'provided for use by LRUCache.fetch(), but it should not be ' +\n        'relied upon in other contexts (eg, passing it to other APIs that ' +\n        'use AbortController/AbortSignal might have undesirable effects). ' +\n        'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n      'NO_ABORT_CONTROLLER',\n      'ENOTSUP',\n      warnACPolyfill\n    )\n  }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\nexport type PosInt = number & { [TYPE]: 'Positive Integer' }\nexport type Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n  n && n === Math.floor(n) && n > 0 && isFinite(n)\n\nexport type UintArray = Uint8Array | Uint16Array | Uint32Array\nexport type NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array {\n  constructor(size: number) {\n    super(size)\n    this.fill(0)\n  }\n}\nexport type { ZeroArray }\nexport type { Stack }\n\nexport type StackLike = Stack | Index[]\nclass Stack {\n  heap: NumberArray\n  length: number\n  // private constructor\n  static #constructing: boolean = false\n  static create(max: number): StackLike {\n    const HeapCls = getUintArray(max)\n    if (!HeapCls) return []\n    Stack.#constructing = true\n    const s = new Stack(max, HeapCls)\n    Stack.#constructing = false\n    return s\n  }\n  constructor(\n    max: number,\n    HeapCls: { new (n: number): NumberArray }\n  ) {\n    /* c8 ignore start */\n    if (!Stack.#constructing) {\n      throw new TypeError('instantiate Stack using Stack.create(n)')\n    }\n    /* c8 ignore stop */\n    this.heap = new HeapCls(max)\n    this.length = 0\n  }\n  push(n: Index) {\n    this.heap[this.length++] = n\n  }\n  pop(): Index {\n    return this.heap[--this.length] as Index\n  }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch = Promise & {\n  __returned: BackgroundFetch | undefined\n  __abortController: AbortController\n  __staleWhileFetching: V | undefined\n}\n\nexport type DisposeTask = [\n  value: V,\n  key: K,\n  reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n  /**\n   * An integer greater than 0, reflecting the calculated size of items\n   */\n  export type Size = number\n\n  /**\n   * Integer greater than 0, representing some number of milliseconds, or the\n   * time at which a TTL started counting from.\n   */\n  export type Milliseconds = number\n\n  /**\n   * An integer greater than 0, reflecting a number of items\n   */\n  export type Count = number\n\n  /**\n   * The reason why an item was removed from the cache, passed\n   * to the {@link Disposer} methods.\n   *\n   * - `evict`: The item was evicted because it is the least recently used,\n   *   and the cache is full.\n   * - `set`: A new value was set, overwriting the old value being disposed.\n   * - `delete`: The item was explicitly deleted, either by calling\n   *   {@link LRUCache#delete}, {@link LRUCache#clear}, or\n   *   {@link LRUCache#set} with an undefined value.\n   * - `expire`: The item was removed due to exceeding its TTL.\n   * - `fetch`: A {@link OptionsBase#fetchMethod} operation returned\n   *   `undefined` or was aborted, causing the item to be deleted.\n   */\n  export type DisposeReason =\n    | 'evict'\n    | 'set'\n    | 'delete'\n    | 'expire'\n    | 'fetch'\n  /**\n   * A method called upon item removal, passed as the\n   * {@link OptionsBase.dispose} and/or\n   * {@link OptionsBase.disposeAfter} options.\n   */\n  export type Disposer = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n\n  /**\n   * A function that returns the effective calculated size\n   * of an entry in the cache.\n   */\n  export type SizeCalculator = (value: V, key: K) => Size\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.fetchMethod} function.\n   */\n  export interface FetcherOptions {\n    signal: AbortSignal\n    options: FetcherFetchOptions\n    /**\n     * Object provided in the {@link FetchOptions.context} option to\n     * {@link LRUCache#fetch}\n     */\n    context: FC\n  }\n\n  /**\n   * Occasionally, it may be useful to track the internal behavior of the\n   * cache, particularly for logging, debugging, or for behavior within the\n   * `fetchMethod`. To do this, you can pass a `status` object to the\n   * {@link LRUCache#fetch}, {@link LRUCache#get}, {@link LRUCache#set},\n   * {@link LRUCache#memo}, and {@link LRUCache#has} methods.\n   *\n   * The `status` option should be a plain JavaScript object. The following\n   * fields will be set on it appropriately, depending on the situation.\n   */\n  export interface Status {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: Milliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: Milliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: Milliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: Milliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    entrySize?: Size\n\n    /**\n     * The total calculated size of the cache, if sizes are used.\n     */\n    totalCalculatedSize?: Size\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link OptionsBase.maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link LRUCache#has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link LRUCache#fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no {@link OptionsBase.fetchMethod}, so\n     *   {@link LRUCache#get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link FetchOptions.forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link OptionsBase.fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to\n     * {@link OptionsBase.fetchMethod}\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link OptionsBase.fetchMethod}, or the reason for an\n     * AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link LRUCache#get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value\n     *   is present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#fetch}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link OptionsBase.noDeleteOnFetchRejection},\n   * {@link OptionsBase.allowStaleOnFetchRejection},\n   * {@link FetchOptions.forceRefresh}, and\n   * {@link FetcherOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the fetchMethod is called.\n   */\n  export interface FetcherFetchOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    status?: Status\n    size?: Size\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#fetch} method.\n   */\n  export interface FetchOptions\n    extends FetcherFetchOptions {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.fetchMethod} as\n     * the {@link FetcherOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    signal?: AbortSignal\n    status?: Status\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface FetchOptionsWithContext\n    extends FetchOptions {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface FetchOptionsNoContext\n    extends FetchOptions {\n    context?: undefined\n  }\n\n  export interface MemoOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.memoMethod} as\n     * the {@link MemoizerOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    status?: Status\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface MemoOptionsWithContext\n    extends MemoOptions {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface MemoOptionsNoContext\n    extends MemoOptions {\n    context?: undefined\n  }\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.memoMethod} function.\n   */\n  export interface MemoizerOptions {\n    options: MemoizerMemoOptions\n    /**\n     * Object provided in the {@link MemoOptions.context} option to\n     * {@link LRUCache#memo}\n     */\n    context: FC\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#memo}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link MemoOptions.forceRefresh}, and\n   * {@link MemoerOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.memoMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the memoMethod is called.\n   */\n  export interface MemoizerMemoOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n    > {\n    status?: Status\n    size?: Size\n    start?: Milliseconds\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#has} method.\n   */\n  export interface HasOptions\n    extends Pick, 'updateAgeOnHas'> {\n    status?: Status\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#get} method.\n   */\n  export interface GetOptions\n    extends Pick<\n      OptionsBase,\n      'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n    > {\n    status?: Status\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#peek} method.\n   */\n  export interface PeekOptions\n    extends Pick, 'allowStale'> {}\n\n  /**\n   * Options that may be passed to the {@link LRUCache#set} method.\n   */\n  export interface SetOptions\n    extends Pick<\n      OptionsBase,\n      'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n    > {\n    /**\n     * If size tracking is enabled, then setting an explicit size\n     * in the {@link LRUCache#set} call will prevent calling the\n     * {@link OptionsBase.sizeCalculation} function.\n     */\n    size?: Size\n    /**\n     * If TTL tracking is enabled, then setting an explicit start\n     * time in the {@link LRUCache#set} call will override the\n     * default time from `performance.now()` or `Date.now()`.\n     *\n     * Note that it must be a valid value for whichever time-tracking\n     * method is in use.\n     */\n    start?: Milliseconds\n    status?: Status\n  }\n\n  /**\n   * The type signature for the {@link OptionsBase.fetchMethod} option.\n   */\n  export type Fetcher = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions\n  ) => Promise | V | undefined | void\n\n  /**\n   * the type signature for the {@link OptionsBase.memoMethod} option.\n   */\n  export type Memoizer = (\n    key: K,\n    staleValue: V | undefined,\n    options: MemoizerOptions\n  ) => V\n\n  /**\n   * Options which may be passed to the {@link LRUCache} constructor.\n   *\n   * Most of these may be overridden in the various options that use\n   * them.\n   *\n   * Despite all being technically optional, the constructor requires that\n   * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n   * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n   *\n   * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n   * (and in fact required by the type definitions here) that the cache\n   * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n   * unbounded storage.\n   *\n   * All options are also available on the {@link LRUCache} instance, making\n   * it safe to pass an LRUCache instance as the options argumemnt to\n   * make another empty cache of the same type.\n   *\n   * Some options are marked as read-only, because changing them after\n   * instantiation is not safe. Changing any of the other options will of\n   * course only have an effect on subsequent method calls.\n   */\n  export interface OptionsBase {\n    /**\n     * The maximum number of items to store in the cache before evicting\n     * old entries. This is read-only on the {@link LRUCache} instance,\n     * and may not be overridden.\n     *\n     * If set, then storage space will be pre-allocated at construction\n     * time, and the cache will perform significantly faster.\n     *\n     * Note that significantly fewer items may be stored, if\n     * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n     * set.\n     *\n     * **It is strongly recommended to set a `max` to prevent unbounded growth\n     * of the cache.**\n     */\n    max?: Count\n\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed by\n     * default, and MAY live in the cache, contributing to its LRU max, long\n     * after they have expired, unless {@link OptionsBase.ttlAutopurge} is\n     * set.\n     *\n     * If set to `0` (the default value), then that means \"do not track\n     * TTL\", not \"expire immediately\".\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * This is not primarily a TTL cache, and does not make strong TTL\n     * guarantees. There is no pre-emptive pruning of expired items, but you\n     * _may_ set a TTL on the cache, and it will treat expired items as missing\n     * when they are fetched, and delete them.\n     *\n     * Optional, but must be a non-negative integer in ms if specified.\n     *\n     * This may be overridden by passing an options object to `cache.set()`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if ttl tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * If ttl tracking is enabled, and `max` and `maxSize` are not set,\n     * and `ttlAutopurge` is not set, then a warning will be emitted\n     * cautioning about the potential for unbounded memory consumption.\n     * (The TypeScript definitions will also discourage this.)\n     */\n    ttl?: Milliseconds\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     */\n    ttlResolution?: Milliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     *\n     * Note that this may *significantly* degrade performance, especially if\n     * the cache is storing a large number of items. It is almost always best\n     * to just leave the stale items in the cache, and let them fall out as new\n     * items are added.\n     *\n     * Note that this means that {@link OptionsBase.allowStale} is a bit\n     * pointless, as stale items will be deleted almost as soon as they\n     * expire.\n     *\n     * Use with caution!\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever it is retrieved from cache with\n     * {@link LRUCache#get}, causing it to not expire. (It can still fall out\n     * of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever its presence in the cache is\n     * checked with {@link LRUCache#has}, causing it to not expire. (It can\n     * still fall out of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     */\n    updateAgeOnHas?: boolean\n\n    /**\n     * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n     * stale data, if available.\n     *\n     * By default, if you set `ttl`, stale items will only be deleted from the\n     * cache when you `get(key)`. That is, it's not preemptively pruning items,\n     * unless {@link OptionsBase.ttlAutopurge} is set.\n     *\n     * If you set `allowStale:true`, it'll return the stale value *as well as*\n     * deleting it. If you don't set this, then it'll return `undefined` when\n     * you try to get a stale entry.\n     *\n     * Note that when a stale entry is fetched, _even if it is returned due to\n     * `allowStale` being set_, it is removed from the cache immediately. You\n     * can suppress this behavior by setting\n     * {@link OptionsBase.noDeleteOnStaleGet}, either in the constructor, or in\n     * the options provided to {@link LRUCache#get}.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     * The `cache.has()` method will always return `false` for stale items.\n     *\n     * Only relevant if a ttl is set.\n     */\n    allowStale?: boolean\n\n    /**\n     * Function that is called on items when they are dropped from the\n     * cache, as `dispose(value, key, reason)`.\n     *\n     * This can be handy if you want to close file descriptors or do\n     * other cleanup tasks when items are no longer stored in the cache.\n     *\n     * **NOTE**: It is called _before_ the item has been fully removed\n     * from the cache, so if you want to put it right back in, you need\n     * to wait until the next tick. If you try to add it back in during\n     * the `dispose()` function call, it will break things in subtle and\n     * weird ways.\n     *\n     * Unlike several other options, this may _not_ be overridden by\n     * passing an option to `set()`, for performance reasons.\n     *\n     * The `reason` will be one of the following strings, corresponding\n     * to the reason for the item's deletion:\n     *\n     * - `evict` Item was evicted to make space for a new addition\n     * - `set` Item was overwritten by a new value\n     * - `expire` Item expired its TTL\n     * - `fetch` Item was deleted due to a failed or aborted fetch, or a\n     *   fetchMethod returning `undefined.\n     * - `delete` Item was removed by explicit `cache.delete(key)`,\n     *   `cache.clear()`, or `cache.set(key, undefined)`.\n     */\n    dispose?: Disposer\n\n    /**\n     * The same as {@link OptionsBase.dispose}, but called *after* the entry\n     * is completely removed and the cache is once again in a clean state.\n     *\n     * It is safe to add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     */\n    disposeAfter?: Disposer\n\n    /**\n     * Set to true to suppress calling the\n     * {@link OptionsBase.dispose} function if the entry key is\n     * still accessible within the cache.\n     *\n     * This may be overridden by passing an options object to\n     * {@link LRUCache#set}.\n     *\n     * Only relevant if `dispose` or `disposeAfter` are set.\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when setting a new\n     * value for an existing key (ie, when updating a value rather than\n     * inserting a new value).  Note that the TTL value is _always_ set (if\n     * provided) when adding a new entry into the cache.\n     *\n     * Has no effect if a {@link OptionsBase.ttl} is not set.\n     *\n     * May be passed as an option to {@link LRUCache#set}.\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * Set to a positive integer to track the sizes of items added to the\n     * cache, and automatically evict items in order to stay below this size.\n     * Note that this may result in fewer than `max` items being stored.\n     *\n     * Attempting to add an item to the cache whose calculated size is greater\n     * that this amount will be a no-op. The item will not be cached, and no\n     * other items will be evicted.\n     *\n     * Optional, must be a positive integer if provided.\n     *\n     * Sets `maxEntrySize` to the same value, unless a different value is\n     * provided for `maxEntrySize`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if size tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize?: Size\n\n    /**\n     * The maximum allowed size for any single item in the cache.\n     *\n     * If a larger item is passed to {@link LRUCache#set} or returned by a\n     * {@link OptionsBase.fetchMethod} or {@link OptionsBase.memoMethod}, then\n     * it will not be stored in the cache.\n     *\n     * Attempting to add an item whose calculated size is greater than\n     * this amount will not cache the item or evict any old items, but\n     * WILL delete an existing value if one is already present.\n     *\n     * Optional, must be a positive integer if provided. Defaults to\n     * the value of `maxSize` if provided.\n     */\n    maxEntrySize?: Size\n\n    /**\n     * A function that returns a number indicating the item's size.\n     *\n     * Requires {@link OptionsBase.maxSize} to be set.\n     *\n     * If not provided, and {@link OptionsBase.maxSize} or\n     * {@link OptionsBase.maxEntrySize} are set, then all\n     * {@link LRUCache#set} calls **must** provide an explicit\n     * {@link SetOptions.size} or sizeCalculation param.\n     */\n    sizeCalculation?: SizeCalculator\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#fetch}\n     *\n     * ```ts\n     * fetchMethod(key, staleValue, { signal, options, context })\n     * ```\n     *\n     * If `fetchMethod` is not provided, then `cache.fetch(key)` is equivalent\n     * to `Promise.resolve(cache.get(key))`.\n     *\n     * If at any time, `signal.aborted` is set to `true`, or if the\n     * `signal.onabort` method is called, or if it emits an `'abort'` event\n     * which you can listen to with `addEventListener`, then that means that\n     * the fetch should be abandoned. This may be passed along to async\n     * functions aware of AbortController/AbortSignal behavior.\n     *\n     * The `fetchMethod` should **only** return `undefined` or a Promise\n     * resolving to `undefined` if the AbortController signaled an `abort`\n     * event. In all other cases, it should return or resolve to a value\n     * suitable for adding to the cache.\n     *\n     * The `options` object is a union of the options that may be provided to\n     * `set()` and `get()`. If they are modified, then that will result in\n     * modifying the settings to `cache.set()` when the value is resolved, and\n     * in the case of\n     * {@link OptionsBase.noDeleteOnFetchRejection} and\n     * {@link OptionsBase.allowStaleOnFetchRejection}, the handling of\n     * `fetchMethod` failures.\n     *\n     * For example, a DNS cache may update the TTL based on the value returned\n     * from a remote DNS server by changing `options.ttl` in the `fetchMethod`.\n     */\n    fetchMethod?: Fetcher\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#memo}\n     */\n    memoMethod?: Memoizer\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link OptionsBase.fetchMethod} returns a rejected promise.\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with\n     * {@link LRUCache#get}.\n     *\n     * Note that the `get` return value will still be `undefined`\n     * unless {@link OptionsBase.allowStale} is true.\n     *\n     * When using time-expiring entries with `ttl`, by default stale\n     * items will be removed from the cache when the key is accessed\n     * with `cache.get()`.\n     *\n     * Setting this option will cause stale items to remain in the cache, until\n     * they are explicitly deleted with `cache.delete(key)`, or retrieved with\n     * `noDeleteOnStaleGet` set to `false`.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     *\n     * Only relevant if a ttl is used.\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a\n     * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n     * promise.\n     *\n     * This differs from using {@link OptionsBase.allowStale} in that stale\n     * data will ONLY be returned in the case that the {@link LRUCache#fetch}\n     * fails, not any other times.\n     *\n     * If a `fetchMethod` fails, and there is no stale value available, the\n     * `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` errors are\n     * suppressed.\n     *\n     * Implies `noDeleteOnFetchRejection`.\n     *\n     * This may be set in calls to `fetch()`, or defaulted on the constructor,\n     * or overridden by modifying the options object in the `fetchMethod`.\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches\n     * an `'abort'` event, whether user-triggered, or due to internal cache\n     * behavior.\n     *\n     * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n     * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n     * any value it returns will be ignored and not cached.\n     *\n     * Caveat: since fetches are aborted when a new value is explicitly\n     * set in the cache, this can lead to fetch returning a stale value,\n     * since that was the fallback value _at the moment the `fetch()` was\n     * initiated_, even though the new updated value is now present in\n     * the cache.\n     *\n     * For example:\n     *\n     * ```ts\n     * const cache = new LRUCache({\n     *   ttl: 100,\n     *   fetchMethod: async (url, oldValue, { signal }) =>  {\n     *     const res = await fetch(url, { signal })\n     *     return await res.json()\n     *   }\n     * })\n     * cache.set('https://example.com/', { some: 'data' })\n     * // 100ms go by...\n     * const result = cache.fetch('https://example.com/')\n     * cache.set('https://example.com/', { other: 'thing' })\n     * console.log(await result) // { some: 'data' }\n     * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n     * ```\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link LRUCache#fetch} calls\n     * are not immediately resolved or rejected when they are aborted, and\n     * instead take the full time to await.\n     *\n     * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n     * {@link LRUCache#fetch} calls will resolve immediately to their stale\n     * cached value or `undefined`, and will continue to process and eventually\n     * update the cache when they resolve, as long as the resulting value is\n     * not `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * For example:\n     *\n     * ```ts\n     * const c = new LRUCache({\n     *   ttl: 100,\n     *   ignoreFetchAbort: true,\n     *   allowStaleOnFetchAbort: true,\n     *   fetchMethod: async (key, oldValue, { signal }) => {\n     *     // note: do NOT pass the signal to fetch()!\n     *     // let's say this fetch can take a long time.\n     *     const res = await fetch(`https://slow-backend-server/${key}`)\n     *     return await res.json()\n     *   },\n     * })\n     *\n     * // this will return the stale value after 100ms, while still\n     * // updating in the background for next time.\n     * const val = await c.fetch('key', { signal: AbortSignal.timeout(100) })\n     * ```\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still\n     * emitted on the `AbortSignal` object_, so may result in invalid results\n     * when passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n     * call to {@link LRUCache#fetch}.\n     */\n    ignoreFetchAbort?: boolean\n  }\n\n  export interface OptionsMaxLimit\n    extends OptionsBase {\n    max: Count\n  }\n  export interface OptionsTTLLimit\n    extends OptionsBase {\n    ttl: Milliseconds\n    ttlAutopurge: boolean\n  }\n  export interface OptionsSizeLimit\n    extends OptionsBase {\n    maxSize: Size\n  }\n\n  /**\n   * The valid safe options for the {@link LRUCache} constructor\n   */\n  export type Options =\n    | OptionsMaxLimit\n    | OptionsSizeLimit\n    | OptionsTTLLimit\n\n  /**\n   * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump},\n   * and returned by {@link LRUCache#info}.\n   */\n  export interface Entry {\n    value: V\n    ttl?: Milliseconds\n    size?: Size\n    start?: Milliseconds\n  }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache {\n  // options that cannot be changed without disaster\n  readonly #max: LRUCache.Count\n  readonly #maxSize: LRUCache.Size\n  readonly #dispose?: LRUCache.Disposer\n  readonly #disposeAfter?: LRUCache.Disposer\n  readonly #fetchMethod?: LRUCache.Fetcher\n  readonly #memoMethod?: LRUCache.Memoizer\n\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl: LRUCache.Milliseconds\n\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution: LRUCache.Milliseconds\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale: boolean\n\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL: boolean\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize: LRUCache.Size\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation?: LRUCache.SizeCalculator\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort: boolean\n\n  // computed properties\n  #size: LRUCache.Count\n  #calculatedSize: LRUCache.Size\n  #keyMap: Map\n  #keyList: (K | undefined)[]\n  #valList: (V | BackgroundFetch | undefined)[]\n  #next: NumberArray\n  #prev: NumberArray\n  #head: Index\n  #tail: Index\n  #free: StackLike\n  #disposed?: DisposeTask[]\n  #sizes?: ZeroArray\n  #starts?: ZeroArray\n  #ttls?: ZeroArray\n\n  #hasDispose: boolean\n  #hasFetchMethod: boolean\n  #hasDisposeAfter: boolean\n\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals<\n    K extends {},\n    V extends {},\n    FC extends unknown = unknown\n  >(c: LRUCache) {\n    return {\n      // properties\n      starts: c.#starts,\n      ttls: c.#ttls,\n      sizes: c.#sizes,\n      keyMap: c.#keyMap as Map,\n      keyList: c.#keyList,\n      valList: c.#valList,\n      next: c.#next,\n      prev: c.#prev,\n      get head() {\n        return c.#head\n      },\n      get tail() {\n        return c.#tail\n      },\n      free: c.#free,\n      // methods\n      isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n      backgroundFetch: (\n        k: K,\n        index: number | undefined,\n        options: LRUCache.FetchOptions,\n        context: any\n      ): BackgroundFetch =>\n        c.#backgroundFetch(\n          k,\n          index as Index | undefined,\n          options,\n          context\n        ),\n      moveToTail: (index: number): void =>\n        c.#moveToTail(index as Index),\n      indexes: (options?: { allowStale: boolean }) =>\n        c.#indexes(options),\n      rindexes: (options?: { allowStale: boolean }) =>\n        c.#rindexes(options),\n      isStale: (index: number | undefined) =>\n        c.#isStale(index as Index),\n    }\n  }\n\n  // Protected read-only members\n\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max(): LRUCache.Count {\n    return this.#max\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize(): LRUCache.Count {\n    return this.#maxSize\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize(): LRUCache.Size {\n    return this.#calculatedSize\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size(): LRUCache.Count {\n    return this.#size\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod(): LRUCache.Fetcher | undefined {\n    return this.#fetchMethod\n  }\n  get memoMethod(): LRUCache.Memoizer | undefined {\n    return this.#memoMethod\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#dispose\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#disposeAfter\n  }\n\n  constructor(\n    options: LRUCache.Options | LRUCache\n  ) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      memoMethod,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.#max = max\n    this.#maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.#maxSize\n    this.sizeCalculation = sizeCalculation\n    if (this.sizeCalculation) {\n      if (!this.#maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    if (\n      memoMethod !== undefined &&\n      typeof memoMethod !== 'function'\n    ) {\n      throw new TypeError('memoMethod must be a function if defined')\n    }\n    this.#memoMethod = memoMethod\n\n    if (\n      fetchMethod !== undefined &&\n      typeof fetchMethod !== 'function'\n    ) {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n    this.#fetchMethod = fetchMethod\n    this.#hasFetchMethod = !!fetchMethod\n\n    this.#keyMap = new Map()\n    this.#keyList = new Array(max).fill(undefined)\n    this.#valList = new Array(max).fill(undefined)\n    this.#next = new UintArray(max)\n    this.#prev = new UintArray(max)\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free = Stack.create(max)\n    this.#size = 0\n    this.#calculatedSize = 0\n\n    if (typeof dispose === 'function') {\n      this.#dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.#disposeAfter = disposeAfter\n      this.#disposed = []\n    } else {\n      this.#disposeAfter = undefined\n      this.#disposed = undefined\n    }\n    this.#hasDispose = !!this.#dispose\n    this.#hasDisposeAfter = !!this.#disposeAfter\n\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.#maxSize !== 0) {\n        if (!isPosInt(this.#maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.#initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.#initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n  }\n\n  /**\n   * Return the number of ms left in the item's TTL. If item is not in cache,\n   * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n   */\n  getRemainingTTL(key: K) {\n    return this.#keyMap.has(key) ? Infinity : 0\n  }\n\n  #initializeTTLTracking() {\n    const ttls = new ZeroArray(this.#max)\n    const starts = new ZeroArray(this.#max)\n    this.#ttls = ttls\n    this.#starts = starts\n\n    this.#setItemTTL = (index, ttl, start = perf.now()) => {\n      starts[index] = ttl !== 0 ? start : 0\n      ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.#isStale(index)) {\n            this.#delete(this.#keyList[index] as K, 'expire')\n          }\n        }, ttl + 1)\n        // unref() not supported on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n    }\n\n    this.#updateItemAge = index => {\n      starts[index] = ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.#statusTTL = (status, index) => {\n      if (ttls[index]) {\n        const ttl = ttls[index]\n        const start = starts[index]\n        /* c8 ignore next */\n        if (!ttl || !start) return\n        status.ttl = ttl\n        status.start = start\n        status.now = cachedNow || getNow()\n        const age = status.now - start\n        status.remainingTTL = ttl - age\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        // not available on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.#keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      const ttl = ttls[index]\n      const start = starts[index]\n      if (!ttl || !start) {\n        return Infinity\n      }\n      const age = (cachedNow || getNow()) - start\n      return ttl - age\n    }\n\n    this.#isStale = index => {\n      const s = starts[index]\n      const t = ttls[index]\n      return !!t && !!s && (cachedNow || getNow()) - s > t\n    }\n  }\n\n  // conditionally set private methods related to TTL\n  #updateItemAge: (index: Index) => void = () => {}\n  #statusTTL: (status: LRUCache.Status, index: Index) => void =\n    () => {}\n  #setItemTTL: (\n    index: Index,\n    ttl: LRUCache.Milliseconds,\n    start?: LRUCache.Milliseconds\n    // ignore because we never call this if we're not already in TTL mode\n    /* c8 ignore start */\n  ) => void = () => {}\n  /* c8 ignore stop */\n\n  #isStale: (index: Index) => boolean = () => false\n\n  #initializeSizeTracking() {\n    const sizes = new ZeroArray(this.#max)\n    this.#calculatedSize = 0\n    this.#sizes = sizes\n    this.#removeItemSize = index => {\n      this.#calculatedSize -= sizes[index] as number\n      sizes[index] = 0\n    }\n    this.#requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.#isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation ' +\n              'or size must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.#addItemSize = (\n      index: Index,\n      size: LRUCache.Size,\n      status?: LRUCache.Status\n    ) => {\n      sizes[index] = size\n      if (this.#maxSize) {\n        const maxSize = this.#maxSize - (sizes[index] as number)\n        while (this.#calculatedSize > maxSize) {\n          this.#evict(true)\n        }\n      }\n      this.#calculatedSize += sizes[index] as number\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.#calculatedSize\n      }\n    }\n  }\n\n  #removeItemSize: (index: Index) => void = _i => {}\n  #addItemSize: (\n    index: Index,\n    size: LRUCache.Size,\n    status?: LRUCache.Status\n  ) => void = (_i, _s, _st) => {}\n  #requireSize: (\n    k: K,\n    v: V | BackgroundFetch,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator\n  ) => LRUCache.Size = (\n    _k: K,\n    _v: V | BackgroundFetch,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator\n  ) => {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n    return 0\n  };\n\n  *#indexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#tail; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#head) {\n          break\n        } else {\n          i = this.#prev[i] as Index\n        }\n      }\n    }\n  }\n\n  *#rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#head; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#tail) {\n          break\n        } else {\n          i = this.#next[i] as Index\n        }\n      }\n    }\n  }\n\n  #isValidIndex(index: Index) {\n    return (\n      index !== undefined &&\n      this.#keyMap.get(this.#keyList[index] as K) === index\n    )\n  }\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const i of this.#indexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]] as [K, V]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const i of this.#rindexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const i of this.#indexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const i of this.#rindexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i] as V\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  /**\n   * A String value that is used in the creation of the default string\n   * description of an object. Called by the built-in method\n   * `Object.prototype.toString`.\n   */\n  [Symbol.toStringTag] = 'LRUCache'\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n   */\n  find(\n    fn: (v: V, k: K, self: LRUCache) => boolean,\n    getOptions: LRUCache.GetOptions = {}\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.#keyList[i] as K, this)) {\n        return this.get(this.#keyList[i] as K, getOptions)\n      }\n    }\n  }\n\n  /**\n   * Call the supplied function on each item in the cache, in order from most\n   * recently used to least recently used.\n   *\n   * `fn` is called as `fn(value, key, cache)`.\n   *\n   * If `thisp` is provided, function will be called in the `this`-context of\n   * the provided object, or the cache if no `thisp` object is provided.\n   *\n   * Does not update age or recenty of use, or iterate over stale values.\n   */\n  forEach(\n    fn: (v: V, k: K, self: LRUCache) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(\n    fn: (v: V, k: K, self: LRUCache) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let deleted = false\n    for (const i of this.#rindexes({ allowStale: true })) {\n      if (this.#isStale(i)) {\n        this.#delete(this.#keyList[i] as K, 'expire')\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Get the extended info about a given entry, to get its value, size, and\n   * TTL info simultaneously. Returns `undefined` if the key is not present.\n   *\n   * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n   * serialization, the `start` value is always the current timestamp, and the\n   * `ttl` is a calculated remaining time to live (negative if expired).\n   *\n   * Always returns stale values, if their info is found in the cache, so be\n   * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n   * if relevant.\n   */\n  info(key: K): LRUCache.Entry | undefined {\n    const i = this.#keyMap.get(key)\n    if (i === undefined) return undefined\n    const v = this.#valList[i]\n    const value: V | undefined = this.#isBackgroundFetch(v)\n      ? v.__staleWhileFetching\n      : v\n    if (value === undefined) return undefined\n    const entry: LRUCache.Entry = { value }\n    if (this.#ttls && this.#starts) {\n      const ttl = this.#ttls[i]\n      const start = this.#starts[i]\n      if (ttl && start) {\n        const remain = ttl - (perf.now() - start)\n        entry.ttl = remain\n        entry.start = Date.now()\n      }\n    }\n    if (this.#sizes) {\n      entry.size = this.#sizes[i]\n    }\n    return entry\n  }\n\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to {@link LRLUCache#load}.\n   *\n   * The `start` fields are calculated relative to a portable `Date.now()`\n   * timestamp, even if `performance.now()` is available.\n   *\n   * Stale entries are always included in the `dump`, even if\n   * {@link LRUCache.OptionsBase.allowStale} is false.\n   *\n   * Note: this returns an actual array, not a generator, so it can be more\n   * easily passed around.\n   */\n  dump() {\n    const arr: [K, LRUCache.Entry][] = []\n    for (const i of this.#indexes({ allowStale: true })) {\n      const key = this.#keyList[i]\n      const v = this.#valList[i]\n      const value: V | undefined = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined || key === undefined) continue\n      const entry: LRUCache.Entry = { value }\n      if (this.#ttls && this.#starts) {\n        entry.ttl = this.#ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - (this.#starts[i] as number)\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.#sizes) {\n        entry.size = this.#sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   *\n   * The shape of the resulting cache may be different if the same options are\n   * not used in both caches.\n   *\n   * The `start` fields are assumed to be calculated relative to a portable\n   * `Date.now()` timestamp, even if `performance.now()` is available.\n   */\n  load(arr: [K, LRUCache.Entry][]) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset, so that\n        // we get the intended remaining TTL, no matter how long it's\n        // been on ice.\n        //\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   *\n   * Fields on the {@link LRUCache.SetOptions} options param will override\n   * their corresponding values in the constructor options for the scope\n   * of this single `set()` operation.\n   *\n   * If `start` is provided, then that will set the effective start\n   * time for the TTL calculation. Note that this must be a previous\n   * value of `performance.now()` if supported, or a previous value of\n   * `Date.now()` if not.\n   *\n   * Options object may also include `size`, which will prevent\n   * calling the `sizeCalculation` function and just use the specified\n   * number if it is a positive integer, and `noDisposeOnSet` which\n   * will prevent calling a `dispose` function in the case of\n   * overwrites.\n   *\n   * If the `size` (or return value of `sizeCalculation`) for a given\n   * entry is greater than `maxEntrySize`, then the item will not be\n   * added to the cache.\n   *\n   * Will update the recency of the entry.\n   *\n   * If the value is `undefined`, then this is an alias for\n   * `cache.delete(key)`. `undefined` is never stored in the cache.\n   */\n  set(\n    k: K,\n    v: V | BackgroundFetch | undefined,\n    setOptions: LRUCache.SetOptions = {}\n  ) {\n    if (v === undefined) {\n      this.delete(k)\n      return this\n    }\n    const {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      sizeCalculation = this.sizeCalculation,\n      status,\n    } = setOptions\n    let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n    const size = this.#requireSize(\n      k,\n      v,\n      setOptions.size || 0,\n      sizeCalculation\n    )\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case something is there already.\n      this.#delete(k, 'set')\n      return this\n    }\n    let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = (\n        this.#size === 0\n          ? this.#tail\n          : this.#free.length !== 0\n          ? this.#free.pop()\n          : this.#size === this.#max\n          ? this.#evict(false)\n          : this.#size\n      ) as Index\n      this.#keyList[index] = k\n      this.#valList[index] = v\n      this.#keyMap.set(k, index)\n      this.#next[this.#tail] = index\n      this.#prev[index] = this.#tail\n      this.#tail = index\n      this.#size++\n      this.#addItemSize(index, size, status)\n      if (status) status.set = 'add'\n      noUpdateTTL = false\n    } else {\n      // update\n      this.#moveToTail(index)\n      const oldVal = this.#valList[index] as V | BackgroundFetch\n      if (v !== oldVal) {\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n          const { __staleWhileFetching: s } = oldVal\n          if (s !== undefined && !noDisposeOnSet) {\n            if (this.#hasDispose) {\n              this.#dispose?.(s as V, k, 'set')\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([s as V, k, 'set'])\n            }\n          }\n        } else if (!noDisposeOnSet) {\n          if (this.#hasDispose) {\n            this.#dispose?.(oldVal as V, k, 'set')\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([oldVal as V, k, 'set'])\n          }\n        }\n        this.#removeItemSize(index)\n        this.#addItemSize(index, size, status)\n        this.#valList[index] = v\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.#isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && !this.#ttls) {\n      this.#initializeTTLTracking()\n    }\n    if (this.#ttls) {\n      if (!noUpdateTTL) {\n        this.#setItemTTL(index, ttl, start)\n      }\n      if (status) this.#statusTTL(status, index)\n    }\n    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop(): V | undefined {\n    try {\n      while (this.#size) {\n        const val = this.#valList[this.#head]\n        this.#evict(true)\n        if (this.#isBackgroundFetch(val)) {\n          if (val.__staleWhileFetching) {\n            return val.__staleWhileFetching\n          }\n        } else if (val !== undefined) {\n          return val\n        }\n      }\n    } finally {\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed\n        let task: DisposeTask | undefined\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task)\n        }\n      }\n    }\n  }\n\n  #evict(free: boolean) {\n    const head = this.#head\n    const k = this.#keyList[head] as K\n    const v = this.#valList[head] as V\n    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else if (this.#hasDispose || this.#hasDisposeAfter) {\n      if (this.#hasDispose) {\n        this.#dispose?.(v, k, 'evict')\n      }\n      if (this.#hasDisposeAfter) {\n        this.#disposed?.push([v, k, 'evict'])\n      }\n    }\n    this.#removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.#keyList[head] = undefined\n      this.#valList[head] = undefined\n      this.#free.push(head)\n    }\n    if (this.#size === 1) {\n      this.#head = this.#tail = 0 as Index\n      this.#free.length = 0\n    } else {\n      this.#head = this.#next[head] as Index\n    }\n    this.#keyMap.delete(k)\n    this.#size--\n    return head\n  }\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Check if a key is in the cache, without updating the recency of\n   * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n   * to `true` in either the options or the constructor.\n   *\n   * Will return `false` if the item is stale, even though it is technically in\n   * the cache. The difference can be determined (if it matters) by using a\n   * `status` argument, and inspecting the `has` field.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(k: K, hasOptions: LRUCache.HasOptions = {}) {\n    const { updateAgeOnHas = this.updateAgeOnHas, status } =\n      hasOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const v = this.#valList[index]\n      if (\n        this.#isBackgroundFetch(v) &&\n        v.__staleWhileFetching === undefined\n      ) {\n        return false\n      }\n      if (!this.#isStale(index)) {\n        if (updateAgeOnHas) {\n          this.#updateItemAge(index)\n        }\n        if (status) {\n          status.has = 'hit'\n          this.#statusTTL(status, index)\n        }\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.#statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(k: K, peekOptions: LRUCache.PeekOptions = {}) {\n    const { allowStale = this.allowStale } = peekOptions\n    const index = this.#keyMap.get(k)\n    if (\n      index === undefined ||\n      (!allowStale && this.#isStale(index))\n    ) {\n      return\n    }\n    const v = this.#valList[index]\n    // either stale and allowed, or forcing a refresh of non-stale value\n    return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n  }\n\n  #backgroundFetch(\n    k: K,\n    index: Index | undefined,\n    options: LRUCache.FetchOptions,\n    context: any\n  ): BackgroundFetch {\n    const v = index === undefined ? undefined : this.#valList[index]\n    if (this.#isBackgroundFetch(v)) {\n      return v\n    }\n\n    const ac = new AC()\n    const { signal } = options\n    // when/if our AC signals, then stop listening to theirs.\n    signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n      signal: ac.signal,\n    })\n\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n\n    const cb = (\n      v: V | undefined,\n      updateCache = false\n    ): V | undefined => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      const bf = p as BackgroundFetch\n      if (this.#valList[index as Index] === p) {\n        if (v === undefined) {\n          if (bf.__staleWhileFetching) {\n            this.#valList[index as Index] = bf.__staleWhileFetching\n          } else {\n            this.#delete(k, 'fetch')\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n\n    const eb = (er: any) => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n\n    const fetchFail = (er: any): V | undefined => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      const bf = p as BackgroundFetch\n      if (this.#valList[index as Index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || bf.__staleWhileFetching === undefined\n        if (del) {\n          this.#delete(k, 'fetch')\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.#valList[index as Index] = bf.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && bf.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return bf.__staleWhileFetching\n      } else if (bf.__returned === bf) {\n        throw er\n      }\n    }\n\n    const pcall = (\n      res: (v: V | undefined) => void,\n      rej: (e: any) => void\n    ) => {\n      const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n      if (fmp && fmp instanceof Promise) {\n        fmp.then(v => res(v === undefined ? undefined : v), rej)\n      }\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res(undefined)\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    const bf: BackgroundFetch = Object.assign(p, {\n      __abortController: ac,\n      __staleWhileFetching: v,\n      __returned: undefined,\n    })\n\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, bf, { ...fetchOpts.options, status: undefined })\n      index = this.#keyMap.get(k)\n    } else {\n      this.#valList[index] = bf\n    }\n    return bf\n  }\n\n  #isBackgroundFetch(p: any): p is BackgroundFetch {\n    if (!this.#hasFetchMethod) return false\n    const b = p as BackgroundFetch\n    return (\n      !!b &&\n      b instanceof Promise &&\n      b.hasOwnProperty('__staleWhileFetching') &&\n      b.__abortController instanceof AC\n    )\n  }\n\n  /**\n   * Make an asynchronous cached fetch using the\n   * {@link LRUCache.OptionsBase.fetchMethod} function.\n   *\n   * If the value is in the cache and not stale, then the returned\n   * Promise resolves to the value.\n   *\n   * If not in the cache, or beyond its TTL staleness, then\n   * `fetchMethod(key, staleValue, { options, signal, context })` is\n   * called, and the value returned will be added to the cache once\n   * resolved.\n   *\n   * If called with `allowStale`, and an asynchronous fetch is\n   * currently in progress to reload a stale value, then the former\n   * stale value will be returned.\n   *\n   * If called with `forceRefresh`, then the cached item will be\n   * re-fetched, even if it is not stale. However, if `allowStale` is also\n   * set, then the old value will still be returned. This is useful\n   * in cases where you want to force a reload of a cached value. If\n   * a background fetch is already in progress, then `forceRefresh`\n   * has no effect.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n   * {@link LRUCache.FetchOptions.signal},\n   * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n   * determined by the FIRST fetch() call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   *\n   * If {@link LRUCache.OptionsBase.fetchMethod} is not specified, then this is\n   * effectively an alias for `Promise.resolve(cache.get(key))`.\n   *\n   * When the fetch method resolves to a value, if the fetch has not\n   * been aborted due to deletion, eviction, or being overwritten,\n   * then it is added to the cache using the options provided.\n   *\n   * If the key is evicted or deleted before the `fetchMethod`\n   * resolves, then the AbortSignal passed to the `fetchMethod` will\n   * receive an `abort` event, and the promise returned by `fetch()`\n   * will reject with the reason for the abort.\n   *\n   * If a `signal` is passed to the `fetch()` call, then aborting the\n   * signal will abort the fetch and cause the `fetch()` promise to\n   * reject with the reason provided.\n   *\n   * **Setting `context`**\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the {@link LRUCache} constructor, then all\n   * calls to `cache.fetch()` _must_ provide a `context` option. If\n   * set to `undefined` or `void`, then calls to fetch _must not_\n   * provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that\n   * might be relevant in the course of fetching the data. It is only\n   * relevant for the course of a single `fetch()` operation, and\n   * discarded afterwards.\n   *\n   * **Note: `fetch()` calls are inflight-unique**\n   *\n   * If you call `fetch()` multiple times with the same key value,\n   * then every call after the first will resolve on the same\n   * promise1,\n   * _even if they have different settings that would otherwise change\n   * the behavior of the fetch_, such as `noDeleteOnFetchRejection`\n   * or `ignoreFetchAbort`.\n   *\n   * In most cases, this is not a problem (in fact, only fetching\n   * something once is what you probably want, if you're caching in\n   * the first place). If you are changing the fetch() options\n   * dramatically between runs, there's a good chance that you might\n   * be trying to fit divergent semantics into a single object, and\n   * would be better off with multiple cache instances.\n   *\n   * **1**: Ie, they're not the \"same Promise\", but they resolve at\n   * the same time, because they're both waiting on the same\n   * underlying fetchMethod response.\n   */\n\n  fetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : LRUCache.FetchOptionsWithContext\n  ): Promise\n\n  // this overload not allowed if context is required\n  fetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : never\n  ): Promise\n\n  async fetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions = {}\n  ): Promise {\n    const {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      context,\n      forceRefresh = false,\n      status,\n      signal,\n    } = fetchOptions\n\n    if (!this.#hasFetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.#keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.#backgroundFetch(k, index, options, context)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.#isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        if (status) this.#statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.#backgroundFetch(k, index, options, context)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  /**\n   * In some cases, `cache.fetch()` may resolve to `undefined`, either because\n   * a {@link LRUCache.OptionsBase#fetchMethod} was not provided (turning\n   * `cache.fetch(k)` into just an async wrapper around `cache.get(k)`) or\n   * because `ignoreFetchAbort` was specified (either to the constructor or\n   * in the {@link LRUCache.FetchOptions}). Also, the\n   * {@link OptionsBase.fetchMethod} may return `undefined` or `void`, making\n   * the test even more complicated.\n   *\n   * Because inferring the cases where `undefined` might be returned are so\n   * cumbersome, but testing for `undefined` can also be annoying, this method\n   * can be used, which will reject if `this.fetch()` resolves to undefined.\n   */\n  forceFetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : LRUCache.FetchOptionsWithContext\n  ): Promise\n  // this overload not allowed if context is required\n  forceFetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : never\n  ): Promise\n  async forceFetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions = {}\n  ): Promise {\n    const v = await this.fetch(\n      k,\n      fetchOptions as unknown extends FC\n        ? LRUCache.FetchOptions\n        : FC extends undefined | void\n        ? LRUCache.FetchOptionsNoContext\n        : LRUCache.FetchOptionsWithContext\n    )\n    if (v === undefined) throw new Error('fetch() returned undefined')\n    return v\n  }\n\n  /**\n   * If the key is found in the cache, then this is equivalent to\n   * {@link LRUCache#get}. If not, in the cache, then calculate the value using\n   * the {@link LRUCache.OptionsBase.memoMethod}, and add it to the cache.\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the LRUCache constructor, then all calls to `cache.memo()`\n   * _must_ provide a `context` option. If set to `undefined` or `void`, then\n   * calls to memo _must not_ provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that might be\n   * relevant in the course of fetching the data. It is only relevant for the\n   * course of a single `memo()` operation, and discarded afterwards.\n   */\n  memo(\n    k: K,\n    memoOptions: unknown extends FC\n      ? LRUCache.MemoOptions\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext\n      : LRUCache.MemoOptionsWithContext\n  ): V\n  // this overload not allowed if context is required\n  memo(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    memoOptions?: unknown extends FC\n      ? LRUCache.MemoOptions\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext\n      : never\n  ): V\n  memo(k: K, memoOptions: LRUCache.MemoOptions = {}) {\n    const memoMethod = this.#memoMethod\n    if (!memoMethod) {\n      throw new Error('no memoMethod provided to constructor')\n    }\n    const { context, forceRefresh, ...options } = memoOptions\n    const v = this.get(k, options)\n    if (!forceRefresh && v !== undefined) return v\n    const vv = memoMethod(k, v, {\n      options,\n      context,\n    } as LRUCache.MemoizerOptions)\n    this.set(k, vv, options)\n    return vv\n  }\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(k: K, getOptions: LRUCache.GetOptions = {}) {\n    const {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = getOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.#valList[index]\n      const fetching = this.#isBackgroundFetch(value)\n      if (status) this.#statusTTL(status, index)\n      if (this.#isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.#delete(k, 'expire')\n          }\n          if (status && allowStale) status.returnedStale = true\n          return allowStale ? value : undefined\n        } else {\n          if (\n            status &&\n            allowStale &&\n            value.__staleWhileFetching !== undefined\n          ) {\n            status.returnedStale = true\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  #connect(p: Index, n: Index) {\n    this.#prev[n] = p\n    this.#next[p] = n\n  }\n\n  #moveToTail(index: Index): void {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.#tail) {\n      if (index === this.#head) {\n        this.#head = this.#next[index] as Index\n      } else {\n        this.#connect(\n          this.#prev[index] as Index,\n          this.#next[index] as Index\n        )\n      }\n      this.#connect(this.#tail, index)\n      this.#tail = index\n    }\n  }\n\n  /**\n   * Deletes a key out of the cache.\n   *\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(k: K) {\n    return this.#delete(k, 'delete')\n  }\n\n  #delete(k: K, reason: LRUCache.DisposeReason) {\n    let deleted = false\n    if (this.#size !== 0) {\n      const index = this.#keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.#size === 1) {\n          this.#clear(reason)\n        } else {\n          this.#removeItemSize(index)\n          const v = this.#valList[index]\n          if (this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n              this.#dispose?.(v as V, k, reason)\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([v as V, k, reason])\n            }\n          }\n          this.#keyMap.delete(k)\n          this.#keyList[index] = undefined\n          this.#valList[index] = undefined\n          if (index === this.#tail) {\n            this.#tail = this.#prev[index] as Index\n          } else if (index === this.#head) {\n            this.#head = this.#next[index] as Index\n          } else {\n            const pi = this.#prev[index] as number\n            this.#next[pi] = this.#next[index] as number\n            const ni = this.#next[index] as number\n            this.#prev[ni] = this.#prev[index] as number\n          }\n          this.#size--\n          this.#free.push(index)\n        }\n      }\n    }\n    if (this.#hasDisposeAfter && this.#disposed?.length) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    return this.#clear('delete')\n  }\n  #clear(reason: LRUCache.DisposeReason) {\n    for (const index of this.#rindexes({ allowStale: true })) {\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.#keyList[index]\n        if (this.#hasDispose) {\n          this.#dispose?.(v as V, k as K, reason)\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v as V, k as K, reason])\n        }\n      }\n    }\n\n    this.#keyMap.clear()\n    this.#valList.fill(undefined)\n    this.#keyList.fill(undefined)\n    if (this.#ttls && this.#starts) {\n      this.#ttls.fill(0)\n      this.#starts.fill(0)\n    }\n    if (this.#sizes) {\n      this.#sizes.fill(0)\n    }\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free.length = 0\n    this.#calculatedSize = 0\n    this.#size = 0\n    if (this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n  }\n}\n"],
+  "mappings": "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",
+  "names": ["perf", "warned", "PROCESS", "emitWarning", "msg", "type", "code", "fn", "AC", "AS", "_", "warnACPolyfill", "reason", "printACPolyfillWarning", "shouldWarn", "TYPE", "isPosInt", "n", "getUintArray", "max", "ZeroArray", "size", "_Stack", "HeapCls", "__privateSet", "_constructing", "s", "__privateGet", "Stack", "__privateAdd", "LRUCache", "#max", "#maxSize", "#dispose", "#disposeAfter", "#fetchMethod", "#memoMethod", "#size", "#calculatedSize", "#keyMap", "#keyList", "#valList", "#next", "#prev", "#head", "#tail", "#free", "#disposed", "#sizes", "#starts", "#ttls", "#hasDispose", "#hasFetchMethod", "#hasDisposeAfter", "c", "p", "#isBackgroundFetch", "k", "index", "options", "context", "#backgroundFetch", "#moveToTail", "#indexes", "#rindexes", "#isStale", "ttl", "ttlResolution", "ttlAutopurge", "updateAgeOnGet", "updateAgeOnHas", "allowStale", "dispose", "disposeAfter", "noDisposeOnSet", "noUpdateTTL", "maxSize", "maxEntrySize", "sizeCalculation", "fetchMethod", "memoMethod", "noDeleteOnFetchRejection", "noDeleteOnStaleGet", "allowStaleOnFetchRejection", "allowStaleOnFetchAbort", "ignoreFetchAbort", "UintArray", "#initializeSizeTracking", "#initializeTTLTracking", "key", "ttls", "starts", "#setItemTTL", "start", "t", "#delete", "#updateItemAge", "#statusTTL", "status", "cachedNow", "getNow", "age", "sizes", "#removeItemSize", "#requireSize", "v", "#addItemSize", "#evict", "_i", "_s", "_st", "_k", "_v", "i", "#isValidIndex", "getOptions", "value", "thisp", "deleted", "entry", "remain", "arr", "setOptions", "oldVal", "oldValue", "dt", "task", "val", "free", "head", "hasOptions", "peekOptions", "ac", "signal", "fetchOpts", "cb", "updateCache", "aborted", "ignoreAbort", "fetchFail", "bf", "eb", "er", "allowStaleAborted", "noDelete", "pcall", "res", "rej", "fmp", "b", "fetchOptions", "forceRefresh", "stale", "isStale", "staleVal", "memoOptions", "vv", "fetching", "#connect", "#clear", "pi", "ni"]
+}
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/package.json b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/package.json
new file mode 100644
index 00000000..5bbefffb
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts
new file mode 100644
index 00000000..44409569
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts
@@ -0,0 +1,1277 @@
+/**
+ * @module LRUCache
+ */
+declare const TYPE: unique symbol;
+export type PosInt = number & {
+    [TYPE]: 'Positive Integer';
+};
+export type Index = number & {
+    [TYPE]: 'LRUCache Index';
+};
+export type UintArray = Uint8Array | Uint16Array | Uint32Array;
+export type NumberArray = UintArray | number[];
+declare class ZeroArray extends Array {
+    constructor(size: number);
+}
+export type { ZeroArray };
+export type { Stack };
+export type StackLike = Stack | Index[];
+declare class Stack {
+    #private;
+    heap: NumberArray;
+    length: number;
+    static create(max: number): StackLike;
+    constructor(max: number, HeapCls: {
+        new (n: number): NumberArray;
+    });
+    push(n: Index): void;
+    pop(): Index;
+}
+/**
+ * Promise representing an in-progress {@link LRUCache#fetch} call
+ */
+export type BackgroundFetch = Promise & {
+    __returned: BackgroundFetch | undefined;
+    __abortController: AbortController;
+    __staleWhileFetching: V | undefined;
+};
+export type DisposeTask = [
+    value: V,
+    key: K,
+    reason: LRUCache.DisposeReason
+];
+export declare namespace LRUCache {
+    /**
+     * An integer greater than 0, reflecting the calculated size of items
+     */
+    type Size = number;
+    /**
+     * Integer greater than 0, representing some number of milliseconds, or the
+     * time at which a TTL started counting from.
+     */
+    type Milliseconds = number;
+    /**
+     * An integer greater than 0, reflecting a number of items
+     */
+    type Count = number;
+    /**
+     * The reason why an item was removed from the cache, passed
+     * to the {@link Disposer} methods.
+     *
+     * - `evict`: The item was evicted because it is the least recently used,
+     *   and the cache is full.
+     * - `set`: A new value was set, overwriting the old value being disposed.
+     * - `delete`: The item was explicitly deleted, either by calling
+     *   {@link LRUCache#delete}, {@link LRUCache#clear}, or
+     *   {@link LRUCache#set} with an undefined value.
+     * - `expire`: The item was removed due to exceeding its TTL.
+     * - `fetch`: A {@link OptionsBase#fetchMethod} operation returned
+     *   `undefined` or was aborted, causing the item to be deleted.
+     */
+    type DisposeReason = 'evict' | 'set' | 'delete' | 'expire' | 'fetch';
+    /**
+     * A method called upon item removal, passed as the
+     * {@link OptionsBase.dispose} and/or
+     * {@link OptionsBase.disposeAfter} options.
+     */
+    type Disposer = (value: V, key: K, reason: DisposeReason) => void;
+    /**
+     * A function that returns the effective calculated size
+     * of an entry in the cache.
+     */
+    type SizeCalculator = (value: V, key: K) => Size;
+    /**
+     * Options provided to the
+     * {@link OptionsBase.fetchMethod} function.
+     */
+    interface FetcherOptions {
+        signal: AbortSignal;
+        options: FetcherFetchOptions;
+        /**
+         * Object provided in the {@link FetchOptions.context} option to
+         * {@link LRUCache#fetch}
+         */
+        context: FC;
+    }
+    /**
+     * Occasionally, it may be useful to track the internal behavior of the
+     * cache, particularly for logging, debugging, or for behavior within the
+     * `fetchMethod`. To do this, you can pass a `status` object to the
+     * {@link LRUCache#fetch}, {@link LRUCache#get}, {@link LRUCache#set},
+     * {@link LRUCache#memo}, and {@link LRUCache#has} methods.
+     *
+     * The `status` option should be a plain JavaScript object. The following
+     * fields will be set on it appropriately, depending on the situation.
+     */
+    interface Status {
+        /**
+         * The status of a set() operation.
+         *
+         * - add: the item was not found in the cache, and was added
+         * - update: the item was in the cache, with the same value provided
+         * - replace: the item was in the cache, and replaced
+         * - miss: the item was not added to the cache for some reason
+         */
+        set?: 'add' | 'update' | 'replace' | 'miss';
+        /**
+         * the ttl stored for the item, or undefined if ttls are not used.
+         */
+        ttl?: Milliseconds;
+        /**
+         * the start time for the item, or undefined if ttls are not used.
+         */
+        start?: Milliseconds;
+        /**
+         * The timestamp used for TTL calculation
+         */
+        now?: Milliseconds;
+        /**
+         * the remaining ttl for the item, or undefined if ttls are not used.
+         */
+        remainingTTL?: Milliseconds;
+        /**
+         * The calculated size for the item, if sizes are used.
+         */
+        entrySize?: Size;
+        /**
+         * The total calculated size of the cache, if sizes are used.
+         */
+        totalCalculatedSize?: Size;
+        /**
+         * A flag indicating that the item was not stored, due to exceeding the
+         * {@link OptionsBase.maxEntrySize}
+         */
+        maxEntrySizeExceeded?: true;
+        /**
+         * The old value, specified in the case of `set:'update'` or
+         * `set:'replace'`
+         */
+        oldValue?: V;
+        /**
+         * The results of a {@link LRUCache#has} operation
+         *
+         * - hit: the item was found in the cache
+         * - stale: the item was found in the cache, but is stale
+         * - miss: the item was not found in the cache
+         */
+        has?: 'hit' | 'stale' | 'miss';
+        /**
+         * The status of a {@link LRUCache#fetch} operation.
+         * Note that this can change as the underlying fetch() moves through
+         * various states.
+         *
+         * - inflight: there is another fetch() for this key which is in process
+         * - get: there is no {@link OptionsBase.fetchMethod}, so
+         *   {@link LRUCache#get} was called.
+         * - miss: the item is not in cache, and will be fetched.
+         * - hit: the item is in the cache, and was resolved immediately.
+         * - stale: the item is in the cache, but stale.
+         * - refresh: the item is in the cache, and not stale, but
+         *   {@link FetchOptions.forceRefresh} was specified.
+         */
+        fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh';
+        /**
+         * The {@link OptionsBase.fetchMethod} was called
+         */
+        fetchDispatched?: true;
+        /**
+         * The cached value was updated after a successful call to
+         * {@link OptionsBase.fetchMethod}
+         */
+        fetchUpdated?: true;
+        /**
+         * The reason for a fetch() rejection.  Either the error raised by the
+         * {@link OptionsBase.fetchMethod}, or the reason for an
+         * AbortSignal.
+         */
+        fetchError?: Error;
+        /**
+         * The fetch received an abort signal
+         */
+        fetchAborted?: true;
+        /**
+         * The abort signal received was ignored, and the fetch was allowed to
+         * continue.
+         */
+        fetchAbortIgnored?: true;
+        /**
+         * The fetchMethod promise resolved successfully
+         */
+        fetchResolved?: true;
+        /**
+         * The fetchMethod promise was rejected
+         */
+        fetchRejected?: true;
+        /**
+         * The status of a {@link LRUCache#get} operation.
+         *
+         * - fetching: The item is currently being fetched.  If a previous value
+         *   is present and allowed, that will be returned.
+         * - stale: The item is in the cache, and is stale.
+         * - hit: the item is in the cache
+         * - miss: the item is not in the cache
+         */
+        get?: 'stale' | 'hit' | 'miss';
+        /**
+         * A fetch or get operation returned a stale value.
+         */
+        returnedStale?: true;
+    }
+    /**
+     * options which override the options set in the LRUCache constructor
+     * when calling {@link LRUCache#fetch}.
+     *
+     * This is the union of {@link GetOptions} and {@link SetOptions}, plus
+     * {@link OptionsBase.noDeleteOnFetchRejection},
+     * {@link OptionsBase.allowStaleOnFetchRejection},
+     * {@link FetchOptions.forceRefresh}, and
+     * {@link FetcherOptions.context}
+     *
+     * Any of these may be modified in the {@link OptionsBase.fetchMethod}
+     * function, but the {@link GetOptions} fields will of course have no
+     * effect, as the {@link LRUCache#get} call already happened by the time
+     * the fetchMethod is called.
+     */
+    interface FetcherFetchOptions extends Pick, 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet' | 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL' | 'noDeleteOnFetchRejection' | 'allowStaleOnFetchRejection' | 'ignoreFetchAbort' | 'allowStaleOnFetchAbort'> {
+        status?: Status;
+        size?: Size;
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#fetch} method.
+     */
+    interface FetchOptions extends FetcherFetchOptions {
+        /**
+         * Set to true to force a re-load of the existing data, even if it
+         * is not yet stale.
+         */
+        forceRefresh?: boolean;
+        /**
+         * Context provided to the {@link OptionsBase.fetchMethod} as
+         * the {@link FetcherOptions.context} param.
+         *
+         * If the FC type is specified as unknown (the default),
+         * undefined or void, then this is optional.  Otherwise, it will
+         * be required.
+         */
+        context?: FC;
+        signal?: AbortSignal;
+        status?: Status;
+    }
+    /**
+     * Options provided to {@link LRUCache#fetch} when the FC type is something
+     * other than `unknown`, `undefined`, or `void`
+     */
+    interface FetchOptionsWithContext extends FetchOptions {
+        context: FC;
+    }
+    /**
+     * Options provided to {@link LRUCache#fetch} when the FC type is
+     * `undefined` or `void`
+     */
+    interface FetchOptionsNoContext extends FetchOptions {
+        context?: undefined;
+    }
+    interface MemoOptions extends Pick, 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet' | 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL' | 'noDeleteOnFetchRejection' | 'allowStaleOnFetchRejection' | 'ignoreFetchAbort' | 'allowStaleOnFetchAbort'> {
+        /**
+         * Set to true to force a re-load of the existing data, even if it
+         * is not yet stale.
+         */
+        forceRefresh?: boolean;
+        /**
+         * Context provided to the {@link OptionsBase.memoMethod} as
+         * the {@link MemoizerOptions.context} param.
+         *
+         * If the FC type is specified as unknown (the default),
+         * undefined or void, then this is optional.  Otherwise, it will
+         * be required.
+         */
+        context?: FC;
+        status?: Status;
+    }
+    /**
+     * Options provided to {@link LRUCache#memo} when the FC type is something
+     * other than `unknown`, `undefined`, or `void`
+     */
+    interface MemoOptionsWithContext extends MemoOptions {
+        context: FC;
+    }
+    /**
+     * Options provided to {@link LRUCache#memo} when the FC type is
+     * `undefined` or `void`
+     */
+    interface MemoOptionsNoContext extends MemoOptions {
+        context?: undefined;
+    }
+    /**
+     * Options provided to the
+     * {@link OptionsBase.memoMethod} function.
+     */
+    interface MemoizerOptions {
+        options: MemoizerMemoOptions;
+        /**
+         * Object provided in the {@link MemoOptions.context} option to
+         * {@link LRUCache#memo}
+         */
+        context: FC;
+    }
+    /**
+     * options which override the options set in the LRUCache constructor
+     * when calling {@link LRUCache#memo}.
+     *
+     * This is the union of {@link GetOptions} and {@link SetOptions}, plus
+     * {@link MemoOptions.forceRefresh}, and
+     * {@link MemoerOptions.context}
+     *
+     * Any of these may be modified in the {@link OptionsBase.memoMethod}
+     * function, but the {@link GetOptions} fields will of course have no
+     * effect, as the {@link LRUCache#get} call already happened by the time
+     * the memoMethod is called.
+     */
+    interface MemoizerMemoOptions extends Pick, 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet' | 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'> {
+        status?: Status;
+        size?: Size;
+        start?: Milliseconds;
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#has} method.
+     */
+    interface HasOptions extends Pick, 'updateAgeOnHas'> {
+        status?: Status;
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#get} method.
+     */
+    interface GetOptions extends Pick, 'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'> {
+        status?: Status;
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#peek} method.
+     */
+    interface PeekOptions extends Pick, 'allowStale'> {
+    }
+    /**
+     * Options that may be passed to the {@link LRUCache#set} method.
+     */
+    interface SetOptions extends Pick, 'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'> {
+        /**
+         * If size tracking is enabled, then setting an explicit size
+         * in the {@link LRUCache#set} call will prevent calling the
+         * {@link OptionsBase.sizeCalculation} function.
+         */
+        size?: Size;
+        /**
+         * If TTL tracking is enabled, then setting an explicit start
+         * time in the {@link LRUCache#set} call will override the
+         * default time from `performance.now()` or `Date.now()`.
+         *
+         * Note that it must be a valid value for whichever time-tracking
+         * method is in use.
+         */
+        start?: Milliseconds;
+        status?: Status;
+    }
+    /**
+     * The type signature for the {@link OptionsBase.fetchMethod} option.
+     */
+    type Fetcher = (key: K, staleValue: V | undefined, options: FetcherOptions) => Promise | V | undefined | void;
+    /**
+     * the type signature for the {@link OptionsBase.memoMethod} option.
+     */
+    type Memoizer = (key: K, staleValue: V | undefined, options: MemoizerOptions) => V;
+    /**
+     * Options which may be passed to the {@link LRUCache} constructor.
+     *
+     * Most of these may be overridden in the various options that use
+     * them.
+     *
+     * Despite all being technically optional, the constructor requires that
+     * a cache is at minimum limited by one or more of {@link OptionsBase.max},
+     * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.
+     *
+     * If {@link OptionsBase.ttl} is used alone, then it is strongly advised
+     * (and in fact required by the type definitions here) that the cache
+     * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially
+     * unbounded storage.
+     *
+     * All options are also available on the {@link LRUCache} instance, making
+     * it safe to pass an LRUCache instance as the options argumemnt to
+     * make another empty cache of the same type.
+     *
+     * Some options are marked as read-only, because changing them after
+     * instantiation is not safe. Changing any of the other options will of
+     * course only have an effect on subsequent method calls.
+     */
+    interface OptionsBase {
+        /**
+         * The maximum number of items to store in the cache before evicting
+         * old entries. This is read-only on the {@link LRUCache} instance,
+         * and may not be overridden.
+         *
+         * If set, then storage space will be pre-allocated at construction
+         * time, and the cache will perform significantly faster.
+         *
+         * Note that significantly fewer items may be stored, if
+         * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also
+         * set.
+         *
+         * **It is strongly recommended to set a `max` to prevent unbounded growth
+         * of the cache.**
+         */
+        max?: Count;
+        /**
+         * Max time in milliseconds for items to live in cache before they are
+         * considered stale.  Note that stale items are NOT preemptively removed by
+         * default, and MAY live in the cache, contributing to its LRU max, long
+         * after they have expired, unless {@link OptionsBase.ttlAutopurge} is
+         * set.
+         *
+         * If set to `0` (the default value), then that means "do not track
+         * TTL", not "expire immediately".
+         *
+         * Also, as this cache is optimized for LRU/MRU operations, some of
+         * the staleness/TTL checks will reduce performance, as they will incur
+         * overhead by deleting items.
+         *
+         * This is not primarily a TTL cache, and does not make strong TTL
+         * guarantees. There is no pre-emptive pruning of expired items, but you
+         * _may_ set a TTL on the cache, and it will treat expired items as missing
+         * when they are fetched, and delete them.
+         *
+         * Optional, but must be a non-negative integer in ms if specified.
+         *
+         * This may be overridden by passing an options object to `cache.set()`.
+         *
+         * At least one of `max`, `maxSize`, or `TTL` is required. This must be a
+         * positive integer if set.
+         *
+         * Even if ttl tracking is enabled, **it is strongly recommended to set a
+         * `max` to prevent unbounded growth of the cache.**
+         *
+         * If ttl tracking is enabled, and `max` and `maxSize` are not set,
+         * and `ttlAutopurge` is not set, then a warning will be emitted
+         * cautioning about the potential for unbounded memory consumption.
+         * (The TypeScript definitions will also discourage this.)
+         */
+        ttl?: Milliseconds;
+        /**
+         * Minimum amount of time in ms in which to check for staleness.
+         * Defaults to 1, which means that the current time is checked
+         * at most once per millisecond.
+         *
+         * Set to 0 to check the current time every time staleness is tested.
+         * (This reduces performance, and is theoretically unnecessary.)
+         *
+         * Setting this to a higher value will improve performance somewhat
+         * while using ttl tracking, albeit at the expense of keeping stale
+         * items around a bit longer than their TTLs would indicate.
+         *
+         * @default 1
+         */
+        ttlResolution?: Milliseconds;
+        /**
+         * Preemptively remove stale items from the cache.
+         *
+         * Note that this may *significantly* degrade performance, especially if
+         * the cache is storing a large number of items. It is almost always best
+         * to just leave the stale items in the cache, and let them fall out as new
+         * items are added.
+         *
+         * Note that this means that {@link OptionsBase.allowStale} is a bit
+         * pointless, as stale items will be deleted almost as soon as they
+         * expire.
+         *
+         * Use with caution!
+         */
+        ttlAutopurge?: boolean;
+        /**
+         * When using time-expiring entries with `ttl`, setting this to `true` will
+         * make each item's age reset to 0 whenever it is retrieved from cache with
+         * {@link LRUCache#get}, causing it to not expire. (It can still fall out
+         * of cache based on recency of use, of course.)
+         *
+         * Has no effect if {@link OptionsBase.ttl} is not set.
+         *
+         * This may be overridden by passing an options object to `cache.get()`.
+         */
+        updateAgeOnGet?: boolean;
+        /**
+         * When using time-expiring entries with `ttl`, setting this to `true` will
+         * make each item's age reset to 0 whenever its presence in the cache is
+         * checked with {@link LRUCache#has}, causing it to not expire. (It can
+         * still fall out of cache based on recency of use, of course.)
+         *
+         * Has no effect if {@link OptionsBase.ttl} is not set.
+         */
+        updateAgeOnHas?: boolean;
+        /**
+         * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return
+         * stale data, if available.
+         *
+         * By default, if you set `ttl`, stale items will only be deleted from the
+         * cache when you `get(key)`. That is, it's not preemptively pruning items,
+         * unless {@link OptionsBase.ttlAutopurge} is set.
+         *
+         * If you set `allowStale:true`, it'll return the stale value *as well as*
+         * deleting it. If you don't set this, then it'll return `undefined` when
+         * you try to get a stale entry.
+         *
+         * Note that when a stale entry is fetched, _even if it is returned due to
+         * `allowStale` being set_, it is removed from the cache immediately. You
+         * can suppress this behavior by setting
+         * {@link OptionsBase.noDeleteOnStaleGet}, either in the constructor, or in
+         * the options provided to {@link LRUCache#get}.
+         *
+         * This may be overridden by passing an options object to `cache.get()`.
+         * The `cache.has()` method will always return `false` for stale items.
+         *
+         * Only relevant if a ttl is set.
+         */
+        allowStale?: boolean;
+        /**
+         * Function that is called on items when they are dropped from the
+         * cache, as `dispose(value, key, reason)`.
+         *
+         * This can be handy if you want to close file descriptors or do
+         * other cleanup tasks when items are no longer stored in the cache.
+         *
+         * **NOTE**: It is called _before_ the item has been fully removed
+         * from the cache, so if you want to put it right back in, you need
+         * to wait until the next tick. If you try to add it back in during
+         * the `dispose()` function call, it will break things in subtle and
+         * weird ways.
+         *
+         * Unlike several other options, this may _not_ be overridden by
+         * passing an option to `set()`, for performance reasons.
+         *
+         * The `reason` will be one of the following strings, corresponding
+         * to the reason for the item's deletion:
+         *
+         * - `evict` Item was evicted to make space for a new addition
+         * - `set` Item was overwritten by a new value
+         * - `expire` Item expired its TTL
+         * - `fetch` Item was deleted due to a failed or aborted fetch, or a
+         *   fetchMethod returning `undefined.
+         * - `delete` Item was removed by explicit `cache.delete(key)`,
+         *   `cache.clear()`, or `cache.set(key, undefined)`.
+         */
+        dispose?: Disposer;
+        /**
+         * The same as {@link OptionsBase.dispose}, but called *after* the entry
+         * is completely removed and the cache is once again in a clean state.
+         *
+         * It is safe to add an item right back into the cache at this point.
+         * However, note that it is *very* easy to inadvertently create infinite
+         * recursion this way.
+         */
+        disposeAfter?: Disposer;
+        /**
+         * Set to true to suppress calling the
+         * {@link OptionsBase.dispose} function if the entry key is
+         * still accessible within the cache.
+         *
+         * This may be overridden by passing an options object to
+         * {@link LRUCache#set}.
+         *
+         * Only relevant if `dispose` or `disposeAfter` are set.
+         */
+        noDisposeOnSet?: boolean;
+        /**
+         * Boolean flag to tell the cache to not update the TTL when setting a new
+         * value for an existing key (ie, when updating a value rather than
+         * inserting a new value).  Note that the TTL value is _always_ set (if
+         * provided) when adding a new entry into the cache.
+         *
+         * Has no effect if a {@link OptionsBase.ttl} is not set.
+         *
+         * May be passed as an option to {@link LRUCache#set}.
+         */
+        noUpdateTTL?: boolean;
+        /**
+         * Set to a positive integer to track the sizes of items added to the
+         * cache, and automatically evict items in order to stay below this size.
+         * Note that this may result in fewer than `max` items being stored.
+         *
+         * Attempting to add an item to the cache whose calculated size is greater
+         * that this amount will be a no-op. The item will not be cached, and no
+         * other items will be evicted.
+         *
+         * Optional, must be a positive integer if provided.
+         *
+         * Sets `maxEntrySize` to the same value, unless a different value is
+         * provided for `maxEntrySize`.
+         *
+         * At least one of `max`, `maxSize`, or `TTL` is required. This must be a
+         * positive integer if set.
+         *
+         * Even if size tracking is enabled, **it is strongly recommended to set a
+         * `max` to prevent unbounded growth of the cache.**
+         *
+         * Note also that size tracking can negatively impact performance,
+         * though for most cases, only minimally.
+         */
+        maxSize?: Size;
+        /**
+         * The maximum allowed size for any single item in the cache.
+         *
+         * If a larger item is passed to {@link LRUCache#set} or returned by a
+         * {@link OptionsBase.fetchMethod} or {@link OptionsBase.memoMethod}, then
+         * it will not be stored in the cache.
+         *
+         * Attempting to add an item whose calculated size is greater than
+         * this amount will not cache the item or evict any old items, but
+         * WILL delete an existing value if one is already present.
+         *
+         * Optional, must be a positive integer if provided. Defaults to
+         * the value of `maxSize` if provided.
+         */
+        maxEntrySize?: Size;
+        /**
+         * A function that returns a number indicating the item's size.
+         *
+         * Requires {@link OptionsBase.maxSize} to be set.
+         *
+         * If not provided, and {@link OptionsBase.maxSize} or
+         * {@link OptionsBase.maxEntrySize} are set, then all
+         * {@link LRUCache#set} calls **must** provide an explicit
+         * {@link SetOptions.size} or sizeCalculation param.
+         */
+        sizeCalculation?: SizeCalculator;
+        /**
+         * Method that provides the implementation for {@link LRUCache#fetch}
+         *
+         * ```ts
+         * fetchMethod(key, staleValue, { signal, options, context })
+         * ```
+         *
+         * If `fetchMethod` is not provided, then `cache.fetch(key)` is equivalent
+         * to `Promise.resolve(cache.get(key))`.
+         *
+         * If at any time, `signal.aborted` is set to `true`, or if the
+         * `signal.onabort` method is called, or if it emits an `'abort'` event
+         * which you can listen to with `addEventListener`, then that means that
+         * the fetch should be abandoned. This may be passed along to async
+         * functions aware of AbortController/AbortSignal behavior.
+         *
+         * The `fetchMethod` should **only** return `undefined` or a Promise
+         * resolving to `undefined` if the AbortController signaled an `abort`
+         * event. In all other cases, it should return or resolve to a value
+         * suitable for adding to the cache.
+         *
+         * The `options` object is a union of the options that may be provided to
+         * `set()` and `get()`. If they are modified, then that will result in
+         * modifying the settings to `cache.set()` when the value is resolved, and
+         * in the case of
+         * {@link OptionsBase.noDeleteOnFetchRejection} and
+         * {@link OptionsBase.allowStaleOnFetchRejection}, the handling of
+         * `fetchMethod` failures.
+         *
+         * For example, a DNS cache may update the TTL based on the value returned
+         * from a remote DNS server by changing `options.ttl` in the `fetchMethod`.
+         */
+        fetchMethod?: Fetcher;
+        /**
+         * Method that provides the implementation for {@link LRUCache#memo}
+         */
+        memoMethod?: Memoizer;
+        /**
+         * Set to true to suppress the deletion of stale data when a
+         * {@link OptionsBase.fetchMethod} returns a rejected promise.
+         */
+        noDeleteOnFetchRejection?: boolean;
+        /**
+         * Do not delete stale items when they are retrieved with
+         * {@link LRUCache#get}.
+         *
+         * Note that the `get` return value will still be `undefined`
+         * unless {@link OptionsBase.allowStale} is true.
+         *
+         * When using time-expiring entries with `ttl`, by default stale
+         * items will be removed from the cache when the key is accessed
+         * with `cache.get()`.
+         *
+         * Setting this option will cause stale items to remain in the cache, until
+         * they are explicitly deleted with `cache.delete(key)`, or retrieved with
+         * `noDeleteOnStaleGet` set to `false`.
+         *
+         * This may be overridden by passing an options object to `cache.get()`.
+         *
+         * Only relevant if a ttl is used.
+         */
+        noDeleteOnStaleGet?: boolean;
+        /**
+         * Set to true to allow returning stale data when a
+         * {@link OptionsBase.fetchMethod} throws an error or returns a rejected
+         * promise.
+         *
+         * This differs from using {@link OptionsBase.allowStale} in that stale
+         * data will ONLY be returned in the case that the {@link LRUCache#fetch}
+         * fails, not any other times.
+         *
+         * If a `fetchMethod` fails, and there is no stale value available, the
+         * `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` errors are
+         * suppressed.
+         *
+         * Implies `noDeleteOnFetchRejection`.
+         *
+         * This may be set in calls to `fetch()`, or defaulted on the constructor,
+         * or overridden by modifying the options object in the `fetchMethod`.
+         */
+        allowStaleOnFetchRejection?: boolean;
+        /**
+         * Set to true to return a stale value from the cache when the
+         * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches
+         * an `'abort'` event, whether user-triggered, or due to internal cache
+         * behavior.
+         *
+         * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying
+         * {@link OptionsBase.fetchMethod} will still be considered canceled, and
+         * any value it returns will be ignored and not cached.
+         *
+         * Caveat: since fetches are aborted when a new value is explicitly
+         * set in the cache, this can lead to fetch returning a stale value,
+         * since that was the fallback value _at the moment the `fetch()` was
+         * initiated_, even though the new updated value is now present in
+         * the cache.
+         *
+         * For example:
+         *
+         * ```ts
+         * const cache = new LRUCache({
+         *   ttl: 100,
+         *   fetchMethod: async (url, oldValue, { signal }) =>  {
+         *     const res = await fetch(url, { signal })
+         *     return await res.json()
+         *   }
+         * })
+         * cache.set('https://example.com/', { some: 'data' })
+         * // 100ms go by...
+         * const result = cache.fetch('https://example.com/')
+         * cache.set('https://example.com/', { other: 'thing' })
+         * console.log(await result) // { some: 'data' }
+         * console.log(cache.get('https://example.com/')) // { other: 'thing' }
+         * ```
+         */
+        allowStaleOnFetchAbort?: boolean;
+        /**
+         * Set to true to ignore the `abort` event emitted by the `AbortSignal`
+         * object passed to {@link OptionsBase.fetchMethod}, and still cache the
+         * resulting resolution value, as long as it is not `undefined`.
+         *
+         * When used on its own, this means aborted {@link LRUCache#fetch} calls
+         * are not immediately resolved or rejected when they are aborted, and
+         * instead take the full time to await.
+         *
+         * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted
+         * {@link LRUCache#fetch} calls will resolve immediately to their stale
+         * cached value or `undefined`, and will continue to process and eventually
+         * update the cache when they resolve, as long as the resulting value is
+         * not `undefined`, thus supporting a "return stale on timeout while
+         * refreshing" mechanism by passing `AbortSignal.timeout(n)` as the signal.
+         *
+         * For example:
+         *
+         * ```ts
+         * const c = new LRUCache({
+         *   ttl: 100,
+         *   ignoreFetchAbort: true,
+         *   allowStaleOnFetchAbort: true,
+         *   fetchMethod: async (key, oldValue, { signal }) => {
+         *     // note: do NOT pass the signal to fetch()!
+         *     // let's say this fetch can take a long time.
+         *     const res = await fetch(`https://slow-backend-server/${key}`)
+         *     return await res.json()
+         *   },
+         * })
+         *
+         * // this will return the stale value after 100ms, while still
+         * // updating in the background for next time.
+         * const val = await c.fetch('key', { signal: AbortSignal.timeout(100) })
+         * ```
+         *
+         * **Note**: regardless of this setting, an `abort` event _is still
+         * emitted on the `AbortSignal` object_, so may result in invalid results
+         * when passed to other underlying APIs that use AbortSignals.
+         *
+         * This may be overridden in the {@link OptionsBase.fetchMethod} or the
+         * call to {@link LRUCache#fetch}.
+         */
+        ignoreFetchAbort?: boolean;
+    }
+    interface OptionsMaxLimit extends OptionsBase {
+        max: Count;
+    }
+    interface OptionsTTLLimit extends OptionsBase {
+        ttl: Milliseconds;
+        ttlAutopurge: boolean;
+    }
+    interface OptionsSizeLimit extends OptionsBase {
+        maxSize: Size;
+    }
+    /**
+     * The valid safe options for the {@link LRUCache} constructor
+     */
+    type Options = OptionsMaxLimit | OptionsSizeLimit | OptionsTTLLimit;
+    /**
+     * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump},
+     * and returned by {@link LRUCache#info}.
+     */
+    interface Entry {
+        value: V;
+        ttl?: Milliseconds;
+        size?: Size;
+        start?: Milliseconds;
+    }
+}
+/**
+ * Default export, the thing you're using this module to get.
+ *
+ * The `K` and `V` types define the key and value types, respectively. The
+ * optional `FC` type defines the type of the `context` object passed to
+ * `cache.fetch()` and `cache.memo()`.
+ *
+ * Keys and values **must not** be `null` or `undefined`.
+ *
+ * All properties from the options object (with the exception of `max`,
+ * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are
+ * added as normal public members. (The listed options are read-only getters.)
+ *
+ * Changing any of these will alter the defaults for subsequent method calls.
+ */
+export declare class LRUCache {
+    #private;
+    /**
+     * {@link LRUCache.OptionsBase.ttl}
+     */
+    ttl: LRUCache.Milliseconds;
+    /**
+     * {@link LRUCache.OptionsBase.ttlResolution}
+     */
+    ttlResolution: LRUCache.Milliseconds;
+    /**
+     * {@link LRUCache.OptionsBase.ttlAutopurge}
+     */
+    ttlAutopurge: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.updateAgeOnGet}
+     */
+    updateAgeOnGet: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.updateAgeOnHas}
+     */
+    updateAgeOnHas: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.allowStale}
+     */
+    allowStale: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.noDisposeOnSet}
+     */
+    noDisposeOnSet: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.noUpdateTTL}
+     */
+    noUpdateTTL: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.maxEntrySize}
+     */
+    maxEntrySize: LRUCache.Size;
+    /**
+     * {@link LRUCache.OptionsBase.sizeCalculation}
+     */
+    sizeCalculation?: LRUCache.SizeCalculator;
+    /**
+     * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}
+     */
+    noDeleteOnFetchRejection: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}
+     */
+    noDeleteOnStaleGet: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}
+     */
+    allowStaleOnFetchAbort: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}
+     */
+    allowStaleOnFetchRejection: boolean;
+    /**
+     * {@link LRUCache.OptionsBase.ignoreFetchAbort}
+     */
+    ignoreFetchAbort: boolean;
+    /**
+     * Do not call this method unless you need to inspect the
+     * inner workings of the cache.  If anything returned by this
+     * object is modified in any way, strange breakage may occur.
+     *
+     * These fields are private for a reason!
+     *
+     * @internal
+     */
+    static unsafeExposeInternals(c: LRUCache): {
+        starts: ZeroArray | undefined;
+        ttls: ZeroArray | undefined;
+        sizes: ZeroArray | undefined;
+        keyMap: Map;
+        keyList: (K | undefined)[];
+        valList: (V | BackgroundFetch | undefined)[];
+        next: NumberArray;
+        prev: NumberArray;
+        readonly head: Index;
+        readonly tail: Index;
+        free: StackLike;
+        isBackgroundFetch: (p: any) => p is BackgroundFetch;
+        backgroundFetch: (k: K, index: number | undefined, options: LRUCache.FetchOptions, context: any) => BackgroundFetch;
+        moveToTail: (index: number) => void;
+        indexes: (options?: {
+            allowStale: boolean;
+        }) => Generator;
+        rindexes: (options?: {
+            allowStale: boolean;
+        }) => Generator;
+        isStale: (index: number | undefined) => boolean;
+    };
+    /**
+     * {@link LRUCache.OptionsBase.max} (read-only)
+     */
+    get max(): LRUCache.Count;
+    /**
+     * {@link LRUCache.OptionsBase.maxSize} (read-only)
+     */
+    get maxSize(): LRUCache.Count;
+    /**
+     * The total computed size of items in the cache (read-only)
+     */
+    get calculatedSize(): LRUCache.Size;
+    /**
+     * The number of items stored in the cache (read-only)
+     */
+    get size(): LRUCache.Count;
+    /**
+     * {@link LRUCache.OptionsBase.fetchMethod} (read-only)
+     */
+    get fetchMethod(): LRUCache.Fetcher | undefined;
+    get memoMethod(): LRUCache.Memoizer | undefined;
+    /**
+     * {@link LRUCache.OptionsBase.dispose} (read-only)
+     */
+    get dispose(): LRUCache.Disposer | undefined;
+    /**
+     * {@link LRUCache.OptionsBase.disposeAfter} (read-only)
+     */
+    get disposeAfter(): LRUCache.Disposer | undefined;
+    constructor(options: LRUCache.Options | LRUCache);
+    /**
+     * Return the number of ms left in the item's TTL. If item is not in cache,
+     * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.
+     */
+    getRemainingTTL(key: K): number;
+    /**
+     * Return a generator yielding `[key, value]` pairs,
+     * in order from most recently used to least recently used.
+     */
+    entries(): Generator<[K, V], void, unknown>;
+    /**
+     * Inverse order version of {@link LRUCache.entries}
+     *
+     * Return a generator yielding `[key, value]` pairs,
+     * in order from least recently used to most recently used.
+     */
+    rentries(): Generator<(K | V)[], void, unknown>;
+    /**
+     * Return a generator yielding the keys in the cache,
+     * in order from most recently used to least recently used.
+     */
+    keys(): Generator;
+    /**
+     * Inverse order version of {@link LRUCache.keys}
+     *
+     * Return a generator yielding the keys in the cache,
+     * in order from least recently used to most recently used.
+     */
+    rkeys(): Generator;
+    /**
+     * Return a generator yielding the values in the cache,
+     * in order from most recently used to least recently used.
+     */
+    values(): Generator;
+    /**
+     * Inverse order version of {@link LRUCache.values}
+     *
+     * Return a generator yielding the values in the cache,
+     * in order from least recently used to most recently used.
+     */
+    rvalues(): Generator;
+    /**
+     * Iterating over the cache itself yields the same results as
+     * {@link LRUCache.entries}
+     */
+    [Symbol.iterator](): Generator<[K, V], void, unknown>;
+    /**
+     * 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]: string;
+    /**
+     * 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)`.
+     */
+    find(fn: (v: V, k: K, self: LRUCache) => boolean, getOptions?: LRUCache.GetOptions): V | undefined;
+    /**
+     * Call the supplied function on each item in the cache, in order from most
+     * recently used to least recently used.
+     *
+     * `fn` is called as `fn(value, key, cache)`.
+     *
+     * If `thisp` is provided, function will be called in the `this`-context of
+     * the provided object, or the cache if no `thisp` object is provided.
+     *
+     * Does not update age or recenty of use, or iterate over stale values.
+     */
+    forEach(fn: (v: V, k: K, self: LRUCache) => any, thisp?: any): void;
+    /**
+     * The same as {@link LRUCache.forEach} but items are iterated over in
+     * reverse order.  (ie, less recently used items are iterated over first.)
+     */
+    rforEach(fn: (v: V, k: K, self: LRUCache) => any, thisp?: any): void;
+    /**
+     * Delete any stale entries. Returns true if anything was removed,
+     * false otherwise.
+     */
+    purgeStale(): boolean;
+    /**
+     * Get the extended info about a given entry, to get its value, size, and
+     * TTL info simultaneously. Returns `undefined` if the key is not present.
+     *
+     * Unlike {@link LRUCache#dump}, which is designed to be portable and survive
+     * serialization, the `start` value is always the current timestamp, and the
+     * `ttl` is a calculated remaining time to live (negative if expired).
+     *
+     * Always returns stale values, if their info is found in the cache, so be
+     * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})
+     * if relevant.
+     */
+    info(key: K): LRUCache.Entry | undefined;
+    /**
+     * Return an array of [key, {@link LRUCache.Entry}] tuples which can be
+     * passed to {@link LRLUCache#load}.
+     *
+     * The `start` fields are calculated relative to a portable `Date.now()`
+     * timestamp, even if `performance.now()` is available.
+     *
+     * Stale entries are always included in the `dump`, even if
+     * {@link LRUCache.OptionsBase.allowStale} is false.
+     *
+     * Note: this returns an actual array, not a generator, so it can be more
+     * easily passed around.
+     */
+    dump(): [K, LRUCache.Entry][];
+    /**
+     * Reset the cache and load in the items in entries in the order listed.
+     *
+     * The shape of the resulting cache may be different if the same options are
+     * not used in both caches.
+     *
+     * The `start` fields are assumed to be calculated relative to a portable
+     * `Date.now()` timestamp, even if `performance.now()` is available.
+     */
+    load(arr: [K, LRUCache.Entry][]): void;
+    /**
+     * Add a value to the cache.
+     *
+     * Note: if `undefined` is specified as a value, this is an alias for
+     * {@link LRUCache#delete}
+     *
+     * Fields on the {@link LRUCache.SetOptions} options param will override
+     * their corresponding values in the constructor options for the scope
+     * of this single `set()` operation.
+     *
+     * If `start` is provided, then that will set the effective start
+     * time for the TTL calculation. Note that this must be a previous
+     * value of `performance.now()` if supported, or a previous value of
+     * `Date.now()` if not.
+     *
+     * Options object may also include `size`, which will prevent
+     * calling the `sizeCalculation` function and just use the specified
+     * number if it is a positive integer, and `noDisposeOnSet` which
+     * will prevent calling a `dispose` function in the case of
+     * overwrites.
+     *
+     * If the `size` (or return value of `sizeCalculation`) for a given
+     * entry is greater than `maxEntrySize`, then the item will not be
+     * added to the cache.
+     *
+     * Will update the recency of the entry.
+     *
+     * If the value is `undefined`, then this is an alias for
+     * `cache.delete(key)`. `undefined` is never stored in the cache.
+     */
+    set(k: K, v: V | BackgroundFetch | undefined, setOptions?: LRUCache.SetOptions): this;
+    /**
+     * Evict the least recently used item, returning its value or
+     * `undefined` if cache is empty.
+     */
+    pop(): V | undefined;
+    /**
+     * Check if a key is in the cache, without updating the recency of use.
+     * Will return false if the item is stale, even though it is technically
+     * in the cache.
+     *
+     * Check if a key is in the cache, without updating the recency of
+     * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set
+     * to `true` in either the options or the constructor.
+     *
+     * Will return `false` if the item is stale, even though it is technically in
+     * the cache. The difference can be determined (if it matters) by using a
+     * `status` argument, and inspecting the `has` field.
+     *
+     * Will not update item age unless
+     * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
+     */
+    has(k: K, hasOptions?: LRUCache.HasOptions): boolean;
+    /**
+     * Like {@link LRUCache#get} but doesn't update recency or delete stale
+     * items.
+     *
+     * Returns `undefined` if the item is stale, unless
+     * {@link LRUCache.OptionsBase.allowStale} is set.
+     */
+    peek(k: K, peekOptions?: LRUCache.PeekOptions): V | undefined;
+    /**
+     * Make an asynchronous cached fetch using the
+     * {@link LRUCache.OptionsBase.fetchMethod} function.
+     *
+     * If the value is in the cache and not stale, then the returned
+     * Promise resolves to the value.
+     *
+     * If not in the cache, or beyond its TTL staleness, then
+     * `fetchMethod(key, staleValue, { options, signal, context })` is
+     * called, and the value returned will be added to the cache once
+     * resolved.
+     *
+     * If called with `allowStale`, and an asynchronous fetch is
+     * currently in progress to reload a stale value, then the former
+     * stale value will be returned.
+     *
+     * If called with `forceRefresh`, then the cached item will be
+     * re-fetched, even if it is not stale. However, if `allowStale` is also
+     * set, then the old value will still be returned. This is useful
+     * in cases where you want to force a reload of a cached value. If
+     * a background fetch is already in progress, then `forceRefresh`
+     * has no effect.
+     *
+     * If multiple fetches for the same key are issued, then they will all be
+     * coalesced into a single call to fetchMethod.
+     *
+     * Note that this means that handling options such as
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},
+     * {@link LRUCache.FetchOptions.signal},
+     * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be
+     * determined by the FIRST fetch() call for a given key.
+     *
+     * This is a known (fixable) shortcoming which will be addresed on when
+     * someone complains about it, as the fix would involve added complexity and
+     * may not be worth the costs for this edge case.
+     *
+     * If {@link LRUCache.OptionsBase.fetchMethod} is not specified, then this is
+     * effectively an alias for `Promise.resolve(cache.get(key))`.
+     *
+     * When the fetch method resolves to a value, if the fetch has not
+     * been aborted due to deletion, eviction, or being overwritten,
+     * then it is added to the cache using the options provided.
+     *
+     * If the key is evicted or deleted before the `fetchMethod`
+     * resolves, then the AbortSignal passed to the `fetchMethod` will
+     * receive an `abort` event, and the promise returned by `fetch()`
+     * will reject with the reason for the abort.
+     *
+     * If a `signal` is passed to the `fetch()` call, then aborting the
+     * signal will abort the fetch and cause the `fetch()` promise to
+     * reject with the reason provided.
+     *
+     * **Setting `context`**
+     *
+     * If an `FC` type is set to a type other than `unknown`, `void`, or
+     * `undefined` in the {@link LRUCache} constructor, then all
+     * calls to `cache.fetch()` _must_ provide a `context` option. If
+     * set to `undefined` or `void`, then calls to fetch _must not_
+     * provide a `context` option.
+     *
+     * The `context` param allows you to provide arbitrary data that
+     * might be relevant in the course of fetching the data. It is only
+     * relevant for the course of a single `fetch()` operation, and
+     * discarded afterwards.
+     *
+     * **Note: `fetch()` calls are inflight-unique**
+     *
+     * If you call `fetch()` multiple times with the same key value,
+     * then every call after the first will resolve on the same
+     * promise1,
+     * _even if they have different settings that would otherwise change
+     * the behavior of the fetch_, such as `noDeleteOnFetchRejection`
+     * or `ignoreFetchAbort`.
+     *
+     * In most cases, this is not a problem (in fact, only fetching
+     * something once is what you probably want, if you're caching in
+     * the first place). If you are changing the fetch() options
+     * dramatically between runs, there's a good chance that you might
+     * be trying to fit divergent semantics into a single object, and
+     * would be better off with multiple cache instances.
+     *
+     * **1**: Ie, they're not the "same Promise", but they resolve at
+     * the same time, because they're both waiting on the same
+     * underlying fetchMethod response.
+     */
+    fetch(k: K, fetchOptions: unknown extends FC ? LRUCache.FetchOptions : FC extends undefined | void ? LRUCache.FetchOptionsNoContext : LRUCache.FetchOptionsWithContext): Promise;
+    fetch(k: unknown extends FC ? K : FC extends undefined | void ? K : never, fetchOptions?: unknown extends FC ? LRUCache.FetchOptions : FC extends undefined | void ? LRUCache.FetchOptionsNoContext : never): Promise;
+    /**
+     * In some cases, `cache.fetch()` may resolve to `undefined`, either because
+     * a {@link LRUCache.OptionsBase#fetchMethod} was not provided (turning
+     * `cache.fetch(k)` into just an async wrapper around `cache.get(k)`) or
+     * because `ignoreFetchAbort` was specified (either to the constructor or
+     * in the {@link LRUCache.FetchOptions}). Also, the
+     * {@link OptionsBase.fetchMethod} may return `undefined` or `void`, making
+     * the test even more complicated.
+     *
+     * Because inferring the cases where `undefined` might be returned are so
+     * cumbersome, but testing for `undefined` can also be annoying, this method
+     * can be used, which will reject if `this.fetch()` resolves to undefined.
+     */
+    forceFetch(k: K, fetchOptions: unknown extends FC ? LRUCache.FetchOptions : FC extends undefined | void ? LRUCache.FetchOptionsNoContext : LRUCache.FetchOptionsWithContext): Promise;
+    forceFetch(k: unknown extends FC ? K : FC extends undefined | void ? K : never, fetchOptions?: unknown extends FC ? LRUCache.FetchOptions : FC extends undefined | void ? LRUCache.FetchOptionsNoContext : never): Promise;
+    /**
+     * If the key is found in the cache, then this is equivalent to
+     * {@link LRUCache#get}. If not, in the cache, then calculate the value using
+     * the {@link LRUCache.OptionsBase.memoMethod}, and add it to the cache.
+     *
+     * If an `FC` type is set to a type other than `unknown`, `void`, or
+     * `undefined` in the LRUCache constructor, then all calls to `cache.memo()`
+     * _must_ provide a `context` option. If set to `undefined` or `void`, then
+     * calls to memo _must not_ provide a `context` option.
+     *
+     * The `context` param allows you to provide arbitrary data that might be
+     * relevant in the course of fetching the data. It is only relevant for the
+     * course of a single `memo()` operation, and discarded afterwards.
+     */
+    memo(k: K, memoOptions: unknown extends FC ? LRUCache.MemoOptions : FC extends undefined | void ? LRUCache.MemoOptionsNoContext : LRUCache.MemoOptionsWithContext): V;
+    memo(k: unknown extends FC ? K : FC extends undefined | void ? K : never, memoOptions?: unknown extends FC ? LRUCache.MemoOptions : FC extends undefined | void ? LRUCache.MemoOptionsNoContext : never): V;
+    /**
+     * Return a value from the cache. Will update the recency of the cache
+     * entry found.
+     *
+     * If the key is not found, get() will return `undefined`.
+     */
+    get(k: K, getOptions?: LRUCache.GetOptions): V | undefined;
+    /**
+     * Deletes a key out of the cache.
+     *
+     * Returns true if the key was deleted, false otherwise.
+     */
+    delete(k: K): boolean;
+    /**
+     * Clear the cache entirely, throwing away all values.
+     */
+    clear(): void;
+}
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map
new file mode 100644
index 00000000..1d242ed8
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js
new file mode 100644
index 00000000..555654a5
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js
@@ -0,0 +1,1542 @@
+/**
+ * @module LRUCache
+ */
+const perf = typeof performance === 'object' &&
+    performance &&
+    typeof performance.now === 'function'
+    ? performance
+    : Date;
+const warned = new Set();
+/* c8 ignore start */
+const PROCESS = (typeof process === 'object' && !!process ? process : {});
+/* c8 ignore start */
+const emitWarning = (msg, type, code, fn) => {
+    typeof PROCESS.emitWarning === 'function'
+        ? PROCESS.emitWarning(msg, type, code, fn)
+        : console.error(`[${code}] ${type}: ${msg}`);
+};
+let AC = globalThis.AbortController;
+let AS = globalThis.AbortSignal;
+/* c8 ignore start */
+if (typeof AC === 'undefined') {
+    //@ts-ignore
+    AS = class AbortSignal {
+        onabort;
+        _onabort = [];
+        reason;
+        aborted = false;
+        addEventListener(_, fn) {
+            this._onabort.push(fn);
+        }
+    };
+    //@ts-ignore
+    AC = class AbortController {
+        constructor() {
+            warnACPolyfill();
+        }
+        signal = new AS();
+        abort(reason) {
+            if (this.signal.aborted)
+                return;
+            //@ts-ignore
+            this.signal.reason = reason;
+            //@ts-ignore
+            this.signal.aborted = true;
+            //@ts-ignore
+            for (const fn of this.signal._onabort) {
+                fn(reason);
+            }
+            this.signal.onabort?.(reason);
+        }
+    };
+    let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';
+    const warnACPolyfill = () => {
+        if (!printACPolyfillWarning)
+            return;
+        printACPolyfillWarning = false;
+        emitWarning('AbortController is not defined. If using lru-cache in ' +
+            'node 14, load an AbortController polyfill from the ' +
+            '`node-abort-controller` package. A minimal polyfill is ' +
+            'provided for use by LRUCache.fetch(), but it should not be ' +
+            'relied upon in other contexts (eg, passing it to other APIs that ' +
+            'use AbortController/AbortSignal might have undesirable effects). ' +
+            'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill);
+    };
+}
+/* c8 ignore stop */
+const shouldWarn = (code) => !warned.has(code);
+const TYPE = Symbol('type');
+const isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);
+/* c8 ignore start */
+// This is a little bit ridiculous, tbh.
+// The maximum array length is 2^32-1 or thereabouts on most JS impls.
+// And well before that point, you're caching the entire world, I mean,
+// that's ~32GB of just integers for the next/prev links, plus whatever
+// else to hold that many keys and values.  Just filling the memory with
+// zeroes at init time is brutal when you get that big.
+// But why not be complete?
+// Maybe in the future, these limits will have expanded.
+const 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;
+/* c8 ignore stop */
+class ZeroArray extends Array {
+    constructor(size) {
+        super(size);
+        this.fill(0);
+    }
+}
+class Stack {
+    heap;
+    length;
+    // private constructor
+    static #constructing = false;
+    static create(max) {
+        const HeapCls = getUintArray(max);
+        if (!HeapCls)
+            return [];
+        Stack.#constructing = true;
+        const s = new Stack(max, HeapCls);
+        Stack.#constructing = false;
+        return s;
+    }
+    constructor(max, HeapCls) {
+        /* c8 ignore start */
+        if (!Stack.#constructing) {
+            throw new TypeError('instantiate Stack using Stack.create(n)');
+        }
+        /* c8 ignore stop */
+        this.heap = new HeapCls(max);
+        this.length = 0;
+    }
+    push(n) {
+        this.heap[this.length++] = n;
+    }
+    pop() {
+        return this.heap[--this.length];
+    }
+}
+/**
+ * Default export, the thing you're using this module to get.
+ *
+ * The `K` and `V` types define the key and value types, respectively. The
+ * optional `FC` type defines the type of the `context` object passed to
+ * `cache.fetch()` and `cache.memo()`.
+ *
+ * Keys and values **must not** be `null` or `undefined`.
+ *
+ * All properties from the options object (with the exception of `max`,
+ * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are
+ * added as normal public members. (The listed options are read-only getters.)
+ *
+ * Changing any of these will alter the defaults for subsequent method calls.
+ */
+export class LRUCache {
+    // options that cannot be changed without disaster
+    #max;
+    #maxSize;
+    #dispose;
+    #disposeAfter;
+    #fetchMethod;
+    #memoMethod;
+    /**
+     * {@link LRUCache.OptionsBase.ttl}
+     */
+    ttl;
+    /**
+     * {@link LRUCache.OptionsBase.ttlResolution}
+     */
+    ttlResolution;
+    /**
+     * {@link LRUCache.OptionsBase.ttlAutopurge}
+     */
+    ttlAutopurge;
+    /**
+     * {@link LRUCache.OptionsBase.updateAgeOnGet}
+     */
+    updateAgeOnGet;
+    /**
+     * {@link LRUCache.OptionsBase.updateAgeOnHas}
+     */
+    updateAgeOnHas;
+    /**
+     * {@link LRUCache.OptionsBase.allowStale}
+     */
+    allowStale;
+    /**
+     * {@link LRUCache.OptionsBase.noDisposeOnSet}
+     */
+    noDisposeOnSet;
+    /**
+     * {@link LRUCache.OptionsBase.noUpdateTTL}
+     */
+    noUpdateTTL;
+    /**
+     * {@link LRUCache.OptionsBase.maxEntrySize}
+     */
+    maxEntrySize;
+    /**
+     * {@link LRUCache.OptionsBase.sizeCalculation}
+     */
+    sizeCalculation;
+    /**
+     * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}
+     */
+    noDeleteOnFetchRejection;
+    /**
+     * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}
+     */
+    noDeleteOnStaleGet;
+    /**
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}
+     */
+    allowStaleOnFetchAbort;
+    /**
+     * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}
+     */
+    allowStaleOnFetchRejection;
+    /**
+     * {@link LRUCache.OptionsBase.ignoreFetchAbort}
+     */
+    ignoreFetchAbort;
+    // computed properties
+    #size;
+    #calculatedSize;
+    #keyMap;
+    #keyList;
+    #valList;
+    #next;
+    #prev;
+    #head;
+    #tail;
+    #free;
+    #disposed;
+    #sizes;
+    #starts;
+    #ttls;
+    #hasDispose;
+    #hasFetchMethod;
+    #hasDisposeAfter;
+    /**
+     * Do not call this method unless you need to inspect the
+     * inner workings of the cache.  If anything returned by this
+     * object is modified in any way, strange breakage may occur.
+     *
+     * These fields are private for a reason!
+     *
+     * @internal
+     */
+    static unsafeExposeInternals(c) {
+        return {
+            // properties
+            starts: c.#starts,
+            ttls: c.#ttls,
+            sizes: c.#sizes,
+            keyMap: c.#keyMap,
+            keyList: c.#keyList,
+            valList: c.#valList,
+            next: c.#next,
+            prev: c.#prev,
+            get head() {
+                return c.#head;
+            },
+            get tail() {
+                return c.#tail;
+            },
+            free: c.#free,
+            // methods
+            isBackgroundFetch: (p) => c.#isBackgroundFetch(p),
+            backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),
+            moveToTail: (index) => c.#moveToTail(index),
+            indexes: (options) => c.#indexes(options),
+            rindexes: (options) => c.#rindexes(options),
+            isStale: (index) => c.#isStale(index),
+        };
+    }
+    // Protected read-only members
+    /**
+     * {@link LRUCache.OptionsBase.max} (read-only)
+     */
+    get max() {
+        return this.#max;
+    }
+    /**
+     * {@link LRUCache.OptionsBase.maxSize} (read-only)
+     */
+    get maxSize() {
+        return this.#maxSize;
+    }
+    /**
+     * The total computed size of items in the cache (read-only)
+     */
+    get calculatedSize() {
+        return this.#calculatedSize;
+    }
+    /**
+     * The number of items stored in the cache (read-only)
+     */
+    get size() {
+        return this.#size;
+    }
+    /**
+     * {@link LRUCache.OptionsBase.fetchMethod} (read-only)
+     */
+    get fetchMethod() {
+        return this.#fetchMethod;
+    }
+    get memoMethod() {
+        return this.#memoMethod;
+    }
+    /**
+     * {@link LRUCache.OptionsBase.dispose} (read-only)
+     */
+    get dispose() {
+        return this.#dispose;
+    }
+    /**
+     * {@link LRUCache.OptionsBase.disposeAfter} (read-only)
+     */
+    get disposeAfter() {
+        return this.#disposeAfter;
+    }
+    constructor(options) {
+        const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = 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;
+        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');
+            }
+        }
+        if (memoMethod !== undefined &&
+            typeof memoMethod !== 'function') {
+            throw new TypeError('memoMethod must be a function if defined');
+        }
+        this.#memoMethod = memoMethod;
+        if (fetchMethod !== undefined &&
+            typeof fetchMethod !== 'function') {
+            throw new TypeError('fetchMethod must be a function if specified');
+        }
+        this.#fetchMethod = fetchMethod;
+        this.#hasFetchMethod = !!fetchMethod;
+        this.#keyMap = new Map();
+        this.#keyList = new Array(max).fill(undefined);
+        this.#valList = new Array(max).fill(undefined);
+        this.#next = new UintArray(max);
+        this.#prev = new UintArray(max);
+        this.#head = 0;
+        this.#tail = 0;
+        this.#free = Stack.create(max);
+        this.#size = 0;
+        this.#calculatedSize = 0;
+        if (typeof dispose === 'function') {
+            this.#dispose = dispose;
+        }
+        if (typeof disposeAfter === 'function') {
+            this.#disposeAfter = disposeAfter;
+            this.#disposed = [];
+        }
+        else {
+            this.#disposeAfter = undefined;
+            this.#disposed = undefined;
+        }
+        this.#hasDispose = !!this.#dispose;
+        this.#hasDisposeAfter = !!this.#disposeAfter;
+        this.noDisposeOnSet = !!noDisposeOnSet;
+        this.noUpdateTTL = !!noUpdateTTL;
+        this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;
+        this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;
+        this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;
+        this.ignoreFetchAbort = !!ignoreFetchAbort;
+        // NB: maxEntrySize is set to maxSize if it's set
+        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');
+            }
+            this.#initializeSizeTracking();
+        }
+        this.allowStale = !!allowStale;
+        this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;
+        this.updateAgeOnGet = !!updateAgeOnGet;
+        this.updateAgeOnHas = !!updateAgeOnHas;
+        this.ttlResolution =
+            isPosInt(ttlResolution) || ttlResolution === 0
+                ? ttlResolution
+                : 1;
+        this.ttlAutopurge = !!ttlAutopurge;
+        this.ttl = ttl || 0;
+        if (this.ttl) {
+            if (!isPosInt(this.ttl)) {
+                throw new TypeError('ttl must be a positive integer if specified');
+            }
+            this.#initializeTTLTracking();
+        }
+        // do not allow completely unbounded caches
+        if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {
+            throw new TypeError('At least one of max, maxSize, or ttl is required');
+        }
+        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);
+            }
+        }
+    }
+    /**
+     * Return the number of ms left in the item's TTL. If item is not in cache,
+     * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.
+     */
+    getRemainingTTL(key) {
+        return this.#keyMap.has(key) ? Infinity : 0;
+    }
+    #initializeTTLTracking() {
+        const ttls = new ZeroArray(this.#max);
+        const starts = new ZeroArray(this.#max);
+        this.#ttls = ttls;
+        this.#starts = starts;
+        this.#setItemTTL = (index, ttl, start = perf.now()) => {
+            starts[index] = ttl !== 0 ? start : 0;
+            ttls[index] = ttl;
+            if (ttl !== 0 && this.ttlAutopurge) {
+                const t = setTimeout(() => {
+                    if (this.#isStale(index)) {
+                        this.#delete(this.#keyList[index], 'expire');
+                    }
+                }, ttl + 1);
+                // unref() not supported on all platforms
+                /* c8 ignore start */
+                if (t.unref) {
+                    t.unref();
+                }
+                /* c8 ignore stop */
+            }
+        };
+        this.#updateItemAge = index => {
+            starts[index] = ttls[index] !== 0 ? perf.now() : 0;
+        };
+        this.#statusTTL = (status, index) => {
+            if (ttls[index]) {
+                const ttl = ttls[index];
+                const start = starts[index];
+                /* c8 ignore next */
+                if (!ttl || !start)
+                    return;
+                status.ttl = ttl;
+                status.start = start;
+                status.now = cachedNow || getNow();
+                const age = status.now - start;
+                status.remainingTTL = ttl - age;
+            }
+        };
+        // debounce calls to perf.now() to 1s so we're not hitting
+        // that costly call repeatedly.
+        let cachedNow = 0;
+        const getNow = () => {
+            const n = perf.now();
+            if (this.ttlResolution > 0) {
+                cachedNow = n;
+                const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);
+                // not available on all platforms
+                /* c8 ignore start */
+                if (t.unref) {
+                    t.unref();
+                }
+                /* c8 ignore stop */
+            }
+            return n;
+        };
+        this.getRemainingTTL = key => {
+            const index = this.#keyMap.get(key);
+            if (index === undefined) {
+                return 0;
+            }
+            const ttl = ttls[index];
+            const start = starts[index];
+            if (!ttl || !start) {
+                return Infinity;
+            }
+            const age = (cachedNow || getNow()) - start;
+            return ttl - age;
+        };
+        this.#isStale = index => {
+            const s = starts[index];
+            const t = ttls[index];
+            return !!t && !!s && (cachedNow || getNow()) - s > t;
+        };
+    }
+    // conditionally set private methods related to TTL
+    #updateItemAge = () => { };
+    #statusTTL = () => { };
+    #setItemTTL = () => { };
+    /* c8 ignore stop */
+    #isStale = () => false;
+    #initializeSizeTracking() {
+        const sizes = new ZeroArray(this.#max);
+        this.#calculatedSize = 0;
+        this.#sizes = sizes;
+        this.#removeItemSize = index => {
+            this.#calculatedSize -= sizes[index];
+            sizes[index] = 0;
+        };
+        this.#requireSize = (k, v, size, sizeCalculation) => {
+            // provisionally accept background fetches.
+            // actual value size will be checked when they return.
+            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) => {
+            sizes[index] = size;
+            if (this.#maxSize) {
+                const maxSize = this.#maxSize - sizes[index];
+                while (this.#calculatedSize > maxSize) {
+                    this.#evict(true);
+                }
+            }
+            this.#calculatedSize += sizes[index];
+            if (status) {
+                status.entrySize = size;
+                status.totalCalculatedSize = this.#calculatedSize;
+            }
+        };
+    }
+    #removeItemSize = _i => { };
+    #addItemSize = (_i, _s, _st) => { };
+    #requireSize = (_k, _v, size, sizeCalculation) => {
+        if (size || sizeCalculation) {
+            throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');
+        }
+        return 0;
+    };
+    *#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];
+                }
+            }
+        }
+    }
+    *#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) {
+                    break;
+                }
+                else {
+                    i = this.#next[i];
+                }
+            }
+        }
+    }
+    #isValidIndex(index) {
+        return (index !== undefined &&
+            this.#keyMap.get(this.#keyList[index]) === index);
+    }
+    /**
+     * Return a generator yielding `[key, value]` pairs,
+     * in order from most recently used to least recently used.
+     */
+    *entries() {
+        for (const i of this.#indexes()) {
+            if (this.#valList[i] !== undefined &&
+                this.#keyList[i] !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield [this.#keyList[i], this.#valList[i]];
+            }
+        }
+    }
+    /**
+     * Inverse order version of {@link LRUCache.entries}
+     *
+     * Return a generator yielding `[key, value]` pairs,
+     * in order from least recently used to most recently used.
+     */
+    *rentries() {
+        for (const i of this.#rindexes()) {
+            if (this.#valList[i] !== undefined &&
+                this.#keyList[i] !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield [this.#keyList[i], this.#valList[i]];
+            }
+        }
+    }
+    /**
+     * Return a generator yielding the keys in the cache,
+     * in order from most recently used to least recently used.
+     */
+    *keys() {
+        for (const i of this.#indexes()) {
+            const k = this.#keyList[i];
+            if (k !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield k;
+            }
+        }
+    }
+    /**
+     * Inverse order version of {@link LRUCache.keys}
+     *
+     * Return a generator yielding the keys in the cache,
+     * in order from least recently used to most recently used.
+     */
+    *rkeys() {
+        for (const i of this.#rindexes()) {
+            const k = this.#keyList[i];
+            if (k !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield k;
+            }
+        }
+    }
+    /**
+     * Return a generator yielding the values in the cache,
+     * in order from most recently used to least recently used.
+     */
+    *values() {
+        for (const i of this.#indexes()) {
+            const v = this.#valList[i];
+            if (v !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield this.#valList[i];
+            }
+        }
+    }
+    /**
+     * Inverse order version of {@link LRUCache.values}
+     *
+     * Return a generator yielding the values in the cache,
+     * in order from least recently used to most recently used.
+     */
+    *rvalues() {
+        for (const i of this.#rindexes()) {
+            const v = this.#valList[i];
+            if (v !== undefined &&
+                !this.#isBackgroundFetch(this.#valList[i])) {
+                yield this.#valList[i];
+            }
+        }
+    }
+    /**
+     * Iterating over the cache itself yields the same results as
+     * {@link LRUCache.entries}
+     */
+    [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)`.
+     */
+    find(fn, getOptions = {}) {
+        for (const i of this.#indexes()) {
+            const v = this.#valList[i];
+            const value = this.#isBackgroundFetch(v)
+                ? v.__staleWhileFetching
+                : v;
+            if (value === undefined)
+                continue;
+            if (fn(value, this.#keyList[i], this)) {
+                return this.get(this.#keyList[i], getOptions);
+            }
+        }
+    }
+    /**
+     * Call the supplied function on each item in the cache, in order from most
+     * recently used to least recently used.
+     *
+     * `fn` is called as `fn(value, key, cache)`.
+     *
+     * If `thisp` is provided, function will be called in the `this`-context of
+     * the provided object, or the cache if no `thisp` object is provided.
+     *
+     * Does not update age or recenty of use, or iterate over stale values.
+     */
+    forEach(fn, thisp = this) {
+        for (const i of this.#indexes()) {
+            const v = this.#valList[i];
+            const value = this.#isBackgroundFetch(v)
+                ? v.__staleWhileFetching
+                : v;
+            if (value === undefined)
+                continue;
+            fn.call(thisp, value, this.#keyList[i], this);
+        }
+    }
+    /**
+     * The same as {@link LRUCache.forEach} but items are iterated over in
+     * reverse order.  (ie, less recently used items are iterated over first.)
+     */
+    rforEach(fn, thisp = this) {
+        for (const i of this.#rindexes()) {
+            const v = this.#valList[i];
+            const value = this.#isBackgroundFetch(v)
+                ? v.__staleWhileFetching
+                : v;
+            if (value === undefined)
+                continue;
+            fn.call(thisp, value, this.#keyList[i], this);
+        }
+    }
+    /**
+     * Delete any stale entries. Returns true if anything was removed,
+     * false otherwise.
+     */
+    purgeStale() {
+        let deleted = false;
+        for (const i of this.#rindexes({ allowStale: true })) {
+            if (this.#isStale(i)) {
+                this.#delete(this.#keyList[i], 'expire');
+                deleted = true;
+            }
+        }
+        return deleted;
+    }
+    /**
+     * Get the extended info about a given entry, to get its value, size, and
+     * TTL info simultaneously. Returns `undefined` if the key is not present.
+     *
+     * Unlike {@link LRUCache#dump}, which is designed to be portable and survive
+     * serialization, the `start` value is always the current timestamp, and the
+     * `ttl` is a calculated remaining time to live (negative if expired).
+     *
+     * Always returns stale values, if their info is found in the cache, so be
+     * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})
+     * if relevant.
+     */
+    info(key) {
+        const i = this.#keyMap.get(key);
+        if (i === undefined)
+            return undefined;
+        const v = this.#valList[i];
+        const value = this.#isBackgroundFetch(v)
+            ? v.__staleWhileFetching
+            : v;
+        if (value === undefined)
+            return undefined;
+        const entry = { value };
+        if (this.#ttls && this.#starts) {
+            const ttl = this.#ttls[i];
+            const start = this.#starts[i];
+            if (ttl && start) {
+                const remain = ttl - (perf.now() - start);
+                entry.ttl = remain;
+                entry.start = Date.now();
+            }
+        }
+        if (this.#sizes) {
+            entry.size = this.#sizes[i];
+        }
+        return entry;
+    }
+    /**
+     * Return an array of [key, {@link LRUCache.Entry}] tuples which can be
+     * passed to {@link LRLUCache#load}.
+     *
+     * The `start` fields are calculated relative to a portable `Date.now()`
+     * timestamp, even if `performance.now()` is available.
+     *
+     * Stale entries are always included in the `dump`, even if
+     * {@link LRUCache.OptionsBase.allowStale} is false.
+     *
+     * Note: this returns an actual array, not a generator, so it can be more
+     * easily passed around.
+     */
+    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 === undefined || key === undefined)
+                continue;
+            const entry = { value };
+            if (this.#ttls && this.#starts) {
+                entry.ttl = this.#ttls[i];
+                // always dump the start relative to a portable timestamp
+                // it's ok for this to be a bit slow, it's a rare operation.
+                const age = perf.now() - this.#starts[i];
+                entry.start = Math.floor(Date.now() - age);
+            }
+            if (this.#sizes) {
+                entry.size = this.#sizes[i];
+            }
+            arr.unshift([key, entry]);
+        }
+        return arr;
+    }
+    /**
+     * Reset the cache and load in the items in entries in the order listed.
+     *
+     * The shape of the resulting cache may be different if the same options are
+     * not used in both caches.
+     *
+     * The `start` fields are assumed to be calculated relative to a portable
+     * `Date.now()` timestamp, even if `performance.now()` is available.
+     */
+    load(arr) {
+        this.clear();
+        for (const [key, entry] of arr) {
+            if (entry.start) {
+                // entry.start is a portable timestamp, but we may be using
+                // node's performance.now(), so calculate the offset, so that
+                // we get the intended remaining TTL, no matter how long it's
+                // been on ice.
+                //
+                // it's ok for this to be a bit slow, it's a rare operation.
+                const age = Date.now() - entry.start;
+                entry.start = perf.now() - age;
+            }
+            this.set(key, entry.value, entry);
+        }
+    }
+    /**
+     * Add a value to the cache.
+     *
+     * Note: if `undefined` is specified as a value, this is an alias for
+     * {@link LRUCache#delete}
+     *
+     * Fields on the {@link LRUCache.SetOptions} options param will override
+     * their corresponding values in the constructor options for the scope
+     * of this single `set()` operation.
+     *
+     * If `start` is provided, then that will set the effective start
+     * time for the TTL calculation. Note that this must be a previous
+     * value of `performance.now()` if supported, or a previous value of
+     * `Date.now()` if not.
+     *
+     * Options object may also include `size`, which will prevent
+     * calling the `sizeCalculation` function and just use the specified
+     * number if it is a positive integer, and `noDisposeOnSet` which
+     * will prevent calling a `dispose` function in the case of
+     * overwrites.
+     *
+     * If the `size` (or return value of `sizeCalculation`) for a given
+     * entry is greater than `maxEntrySize`, then the item will not be
+     * added to the cache.
+     *
+     * Will update the recency of the entry.
+     *
+     * If the value is `undefined`, then this is an alias for
+     * `cache.delete(key)`. `undefined` is never stored in the cache.
+     */
+    set(k, v, setOptions = {}) {
+        if (v === undefined) {
+            this.delete(k);
+            return this;
+        }
+        const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;
+        let { noUpdateTTL = this.noUpdateTTL } = setOptions;
+        const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);
+        // if the item doesn't fit, don't do anything
+        // NB: maxEntrySize set to maxSize by default
+        if (this.maxEntrySize && size > this.maxEntrySize) {
+            if (status) {
+                status.set = 'miss';
+                status.maxEntrySizeExceeded = true;
+            }
+            // have to delete, in case something is there already.
+            this.#delete(k, 'set');
+            return this;
+        }
+        let index = this.#size === 0 ? undefined : this.#keyMap.get(k);
+        if (index === undefined) {
+            // addition
+            index = (this.#size === 0
+                ? this.#tail
+                : this.#free.length !== 0
+                    ? this.#free.pop()
+                    : this.#size === this.#max
+                        ? this.#evict(false)
+                        : this.#size);
+            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 {
+            // update
+            this.#moveToTail(index);
+            const oldVal = this.#valList[index];
+            if (v !== oldVal) {
+                if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {
+                    oldVal.__abortController.abort(new Error('replaced'));
+                    const { __staleWhileFetching: s } = oldVal;
+                    if (s !== undefined && !noDisposeOnSet) {
+                        if (this.#hasDispose) {
+                            this.#dispose?.(s, k, 'set');
+                        }
+                        if (this.#hasDisposeAfter) {
+                            this.#disposed?.push([s, k, 'set']);
+                        }
+                    }
+                }
+                else if (!noDisposeOnSet) {
+                    if (this.#hasDispose) {
+                        this.#dispose?.(oldVal, k, 'set');
+                    }
+                    if (this.#hasDisposeAfter) {
+                        this.#disposed?.push([oldVal, k, 'set']);
+                    }
+                }
+                this.#removeItemSize(index);
+                this.#addItemSize(index, size, status);
+                this.#valList[index] = v;
+                if (status) {
+                    status.set = 'replace';
+                    const oldValue = oldVal && this.#isBackgroundFetch(oldVal)
+                        ? oldVal.__staleWhileFetching
+                        : oldVal;
+                    if (oldValue !== undefined)
+                        status.oldValue = oldValue;
+                }
+            }
+            else if (status) {
+                status.set = 'update';
+            }
+        }
+        if (ttl !== 0 && !this.#ttls) {
+            this.#initializeTTLTracking();
+        }
+        if (this.#ttls) {
+            if (!noUpdateTTL) {
+                this.#setItemTTL(index, ttl, start);
+            }
+            if (status)
+                this.#statusTTL(status, index);
+        }
+        if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {
+            const dt = this.#disposed;
+            let task;
+            while ((task = dt?.shift())) {
+                this.#disposeAfter?.(...task);
+            }
+        }
+        return this;
+    }
+    /**
+     * Evict the least recently used item, returning its value or
+     * `undefined` if cache is empty.
+     */
+    pop() {
+        try {
+            while (this.#size) {
+                const val = this.#valList[this.#head];
+                this.#evict(true);
+                if (this.#isBackgroundFetch(val)) {
+                    if (val.__staleWhileFetching) {
+                        return val.__staleWhileFetching;
+                    }
+                }
+                else if (val !== undefined) {
+                    return val;
+                }
+            }
+        }
+        finally {
+            if (this.#hasDisposeAfter && this.#disposed) {
+                const dt = this.#disposed;
+                let task;
+                while ((task = dt?.shift())) {
+                    this.#disposeAfter?.(...task);
+                }
+            }
+        }
+    }
+    #evict(free) {
+        const head = this.#head;
+        const k = this.#keyList[head];
+        const v = this.#valList[head];
+        if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {
+            v.__abortController.abort(new Error('evicted'));
+        }
+        else if (this.#hasDispose || this.#hasDisposeAfter) {
+            if (this.#hasDispose) {
+                this.#dispose?.(v, k, 'evict');
+            }
+            if (this.#hasDisposeAfter) {
+                this.#disposed?.push([v, k, 'evict']);
+            }
+        }
+        this.#removeItemSize(head);
+        // if we aren't about to use the index, then null these out
+        if (free) {
+            this.#keyList[head] = undefined;
+            this.#valList[head] = undefined;
+            this.#free.push(head);
+        }
+        if (this.#size === 1) {
+            this.#head = this.#tail = 0;
+            this.#free.length = 0;
+        }
+        else {
+            this.#head = this.#next[head];
+        }
+        this.#keyMap.delete(k);
+        this.#size--;
+        return head;
+    }
+    /**
+     * Check if a key is in the cache, without updating the recency of use.
+     * Will return false if the item is stale, even though it is technically
+     * in the cache.
+     *
+     * Check if a key is in the cache, without updating the recency of
+     * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set
+     * to `true` in either the options or the constructor.
+     *
+     * Will return `false` if the item is stale, even though it is technically in
+     * the cache. The difference can be determined (if it matters) by using a
+     * `status` argument, and inspecting the `has` field.
+     *
+     * Will not update item age unless
+     * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.
+     */
+    has(k, hasOptions = {}) {
+        const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;
+        const index = this.#keyMap.get(k);
+        if (index !== undefined) {
+            const v = this.#valList[index];
+            if (this.#isBackgroundFetch(v) &&
+                v.__staleWhileFetching === undefined) {
+                return false;
+            }
+            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);
+            }
+        }
+        else if (status) {
+            status.has = 'miss';
+        }
+        return false;
+    }
+    /**
+     * Like {@link LRUCache#get} but doesn't update recency or delete stale
+     * items.
+     *
+     * Returns `undefined` if the item is stale, unless
+     * {@link LRUCache.OptionsBase.allowStale} is set.
+     */
+    peek(k, peekOptions = {}) {
+        const { allowStale = this.allowStale } = peekOptions;
+        const index = this.#keyMap.get(k);
+        if (index === undefined ||
+            (!allowStale && this.#isStale(index))) {
+            return;
+        }
+        const v = this.#valList[index];
+        // either stale and allowed, or forcing a refresh of non-stale value
+        return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;
+    }
+    #backgroundFetch(k, index, options, context) {
+        const v = index === undefined ? undefined : this.#valList[index];
+        if (this.#isBackgroundFetch(v)) {
+            return v;
+        }
+        const ac = new AC();
+        const { signal } = options;
+        // when/if our AC signals, then stop listening to theirs.
+        signal?.addEventListener('abort', () => ac.abort(signal.reason), {
+            signal: ac.signal,
+        });
+        const fetchOpts = {
+            signal: ac.signal,
+            options,
+            context,
+        };
+        const cb = (v, updateCache = false) => {
+            const { aborted } = ac.signal;
+            const ignoreAbort = options.ignoreFetchAbort && v !== undefined;
+            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);
+            }
+            // either we didn't abort, and are still here, or we did, and ignored
+            const bf = p;
+            if (this.#valList[index] === p) {
+                if (v === undefined) {
+                    if (bf.__staleWhileFetching) {
+                        this.#valList[index] = bf.__staleWhileFetching;
+                    }
+                    else {
+                        this.#delete(k, 'fetch');
+                    }
+                }
+                else {
+                    if (options.status)
+                        options.status.fetchUpdated = true;
+                    this.set(k, v, fetchOpts.options);
+                }
+            }
+            return v;
+        };
+        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;
+            const bf = p;
+            if (this.#valList[index] === p) {
+                // if we allow stale on fetch rejections, then we need to ensure that
+                // the stale value is not removed from the cache when the fetch fails.
+                const del = !noDelete || bf.__staleWhileFetching === undefined;
+                if (del) {
+                    this.#delete(k, 'fetch');
+                }
+                else if (!allowStaleAborted) {
+                    // still replace the *promise* with the stale value,
+                    // since we are done with the promise at this point.
+                    // leave it untouched if we're still waiting for an
+                    // aborted background fetch that hasn't yet returned.
+                    this.#valList[index] = bf.__staleWhileFetching;
+                }
+            }
+            if (allowStale) {
+                if (options.status && bf.__staleWhileFetching !== undefined) {
+                    options.status.returnedStale = true;
+                }
+                return bf.__staleWhileFetching;
+            }
+            else if (bf.__returned === bf) {
+                throw er;
+            }
+        };
+        const pcall = (res, rej) => {
+            const fmp = this.#fetchMethod?.(k, v, fetchOpts);
+            if (fmp && fmp instanceof Promise) {
+                fmp.then(v => res(v === undefined ? undefined : v), rej);
+            }
+            // ignored, we go until we finish, regardless.
+            // defer check until we are actually aborting,
+            // so fetchMethod can override.
+            ac.signal.addEventListener('abort', () => {
+                if (!options.ignoreFetchAbort ||
+                    options.allowStaleOnFetchAbort) {
+                    res(undefined);
+                    // when it eventually resolves, update the cache.
+                    if (options.allowStaleOnFetchAbort) {
+                        res = v => cb(v, true);
+                    }
+                }
+            });
+        };
+        if (options.status)
+            options.status.fetchDispatched = true;
+        const p = new Promise(pcall).then(cb, eb);
+        const bf = Object.assign(p, {
+            __abortController: ac,
+            __staleWhileFetching: v,
+            __returned: undefined,
+        });
+        if (index === undefined) {
+            // internal, don't expose status.
+            this.set(k, bf, { ...fetchOpts.options, status: undefined });
+            index = this.#keyMap.get(k);
+        }
+        else {
+            this.#valList[index] = bf;
+        }
+        return bf;
+    }
+    #isBackgroundFetch(p) {
+        if (!this.#hasFetchMethod)
+            return false;
+        const b = p;
+        return (!!b &&
+            b instanceof Promise &&
+            b.hasOwnProperty('__staleWhileFetching') &&
+            b.__abortController instanceof AC);
+    }
+    async fetch(k, fetchOptions = {}) {
+        const { 
+        // 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, context, forceRefresh = false, status, signal, } = fetchOptions;
+        if (!this.#hasFetchMethod) {
+            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 === undefined) {
+            if (status)
+                status.fetch = 'miss';
+            const p = this.#backgroundFetch(k, index, options, context);
+            return (p.__returned = p);
+        }
+        else {
+            // in cache, maybe already fetching
+            const v = this.#valList[index];
+            if (this.#isBackgroundFetch(v)) {
+                const stale = allowStale && v.__staleWhileFetching !== undefined;
+                if (status) {
+                    status.fetch = 'inflight';
+                    if (stale)
+                        status.returnedStale = true;
+                }
+                return stale ? v.__staleWhileFetching : (v.__returned = v);
+            }
+            // if we force a refresh, that means do NOT serve the cached value,
+            // unless we are already in the process of refreshing the cache.
+            const isStale = this.#isStale(index);
+            if (!forceRefresh && !isStale) {
+                if (status)
+                    status.fetch = 'hit';
+                this.#moveToTail(index);
+                if (updateAgeOnGet) {
+                    this.#updateItemAge(index);
+                }
+                if (status)
+                    this.#statusTTL(status, index);
+                return v;
+            }
+            // ok, it is stale or a forced refresh, and not already fetching.
+            // refresh the cache.
+            const p = this.#backgroundFetch(k, index, options, context);
+            const hasStale = p.__staleWhileFetching !== undefined;
+            const staleVal = hasStale && allowStale;
+            if (status) {
+                status.fetch = isStale ? 'stale' : 'refresh';
+                if (staleVal && isStale)
+                    status.returnedStale = true;
+            }
+            return staleVal ? p.__staleWhileFetching : (p.__returned = p);
+        }
+    }
+    async forceFetch(k, fetchOptions = {}) {
+        const v = await this.fetch(k, fetchOptions);
+        if (v === undefined)
+            throw new Error('fetch() returned undefined');
+        return v;
+    }
+    memo(k, memoOptions = {}) {
+        const memoMethod = this.#memoMethod;
+        if (!memoMethod) {
+            throw new Error('no memoMethod provided to constructor');
+        }
+        const { context, forceRefresh, ...options } = memoOptions;
+        const v = this.get(k, options);
+        if (!forceRefresh && v !== undefined)
+            return v;
+        const vv = memoMethod(k, v, {
+            options,
+            context,
+        });
+        this.set(k, vv, options);
+        return vv;
+    }
+    /**
+     * Return a value from the cache. Will update the recency of the cache
+     * entry found.
+     *
+     * If the key is not found, get() will return `undefined`.
+     */
+    get(k, getOptions = {}) {
+        const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;
+        const index = this.#keyMap.get(k);
+        if (index !== undefined) {
+            const value = this.#valList[index];
+            const fetching = this.#isBackgroundFetch(value);
+            if (status)
+                this.#statusTTL(status, index);
+            if (this.#isStale(index)) {
+                if (status)
+                    status.get = 'stale';
+                // delete only if not an in-flight background fetch
+                if (!fetching) {
+                    if (!noDeleteOnStaleGet) {
+                        this.#delete(k, 'expire');
+                    }
+                    if (status && allowStale)
+                        status.returnedStale = true;
+                    return allowStale ? value : undefined;
+                }
+                else {
+                    if (status &&
+                        allowStale &&
+                        value.__staleWhileFetching !== undefined) {
+                        status.returnedStale = true;
+                    }
+                    return allowStale ? value.__staleWhileFetching : undefined;
+                }
+            }
+            else {
+                if (status)
+                    status.get = 'hit';
+                // if we're currently fetching it, we don't actually have it yet
+                // it's not stale, which means this isn't a staleWhileRefetching.
+                // If it's not stale, and fetching, AND has a __staleWhileFetching
+                // value, then that means the user fetched with {forceRefresh:true},
+                // so it's safe to return that value.
+                if (fetching) {
+                    return value.__staleWhileFetching;
+                }
+                this.#moveToTail(index);
+                if (updateAgeOnGet) {
+                    this.#updateItemAge(index);
+                }
+                return value;
+            }
+        }
+        else if (status) {
+            status.get = 'miss';
+        }
+    }
+    #connect(p, n) {
+        this.#prev[n] = p;
+        this.#next[p] = n;
+    }
+    #moveToTail(index) {
+        // if tail already, nothing to do
+        // if head, move head to next[index]
+        // else
+        //   move next[prev[index]] to next[index] (head has no prev)
+        //   move prev[next[index]] to prev[index]
+        // prev[index] = tail
+        // next[tail] = index
+        // tail = 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;
+        }
+    }
+    /**
+     * Deletes a key out of the cache.
+     *
+     * Returns true if the key was deleted, false otherwise.
+     */
+    delete(k) {
+        return this.#delete(k, 'delete');
+    }
+    #delete(k, reason) {
+        let deleted = false;
+        if (this.#size !== 0) {
+            const index = this.#keyMap.get(k);
+            if (index !== undefined) {
+                deleted = true;
+                if (this.#size === 1) {
+                    this.#clear(reason);
+                }
+                else {
+                    this.#removeItemSize(index);
+                    const v = this.#valList[index];
+                    if (this.#isBackgroundFetch(v)) {
+                        v.__abortController.abort(new Error('deleted'));
+                    }
+                    else if (this.#hasDispose || this.#hasDisposeAfter) {
+                        if (this.#hasDispose) {
+                            this.#dispose?.(v, k, reason);
+                        }
+                        if (this.#hasDisposeAfter) {
+                            this.#disposed?.push([v, k, reason]);
+                        }
+                    }
+                    this.#keyMap.delete(k);
+                    this.#keyList[index] = undefined;
+                    this.#valList[index] = undefined;
+                    if (index === this.#tail) {
+                        this.#tail = this.#prev[index];
+                    }
+                    else if (index === this.#head) {
+                        this.#head = this.#next[index];
+                    }
+                    else {
+                        const pi = this.#prev[index];
+                        this.#next[pi] = this.#next[index];
+                        const ni = this.#next[index];
+                        this.#prev[ni] = this.#prev[index];
+                    }
+                    this.#size--;
+                    this.#free.push(index);
+                }
+            }
+        }
+        if (this.#hasDisposeAfter && this.#disposed?.length) {
+            const dt = this.#disposed;
+            let task;
+            while ((task = dt?.shift())) {
+                this.#disposeAfter?.(...task);
+            }
+        }
+        return deleted;
+    }
+    /**
+     * Clear the cache entirely, throwing away all values.
+     */
+    clear() {
+        return this.#clear('delete');
+    }
+    #clear(reason) {
+        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];
+                if (this.#hasDispose) {
+                    this.#dispose?.(v, k, reason);
+                }
+                if (this.#hasDisposeAfter) {
+                    this.#disposed?.push([v, k, reason]);
+                }
+            }
+        }
+        this.#keyMap.clear();
+        this.#valList.fill(undefined);
+        this.#keyList.fill(undefined);
+        if (this.#ttls && this.#starts) {
+            this.#ttls.fill(0);
+            this.#starts.fill(0);
+        }
+        if (this.#sizes) {
+            this.#sizes.fill(0);
+        }
+        this.#head = 0;
+        this.#tail = 0;
+        this.#free.length = 0;
+        this.#calculatedSize = 0;
+        this.#size = 0;
+        if (this.#hasDisposeAfter && this.#disposed) {
+            const dt = this.#disposed;
+            let task;
+            while ((task = dt?.shift())) {
+                this.#disposeAfter?.(...task);
+            }
+        }
+    }
+}
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map
new file mode 100644
index 00000000..7bec4fcf
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst warned = new Set()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n  typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n  msg: string,\n  type: string,\n  code: string,\n  fn: ForC\n) => {\n  typeof PROCESS.emitWarning === 'function'\n    ? PROCESS.emitWarning(msg, type, code, fn)\n    : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n  //@ts-ignore\n  AS = class AbortSignal {\n    onabort?: (...a: any[]) => any\n    _onabort: ((...a: any[]) => any)[] = []\n    reason?: any\n    aborted: boolean = false\n    addEventListener(_: string, fn: (...a: any[]) => any) {\n      this._onabort.push(fn)\n    }\n  }\n  //@ts-ignore\n  AC = class AbortController {\n    constructor() {\n      warnACPolyfill()\n    }\n    signal = new AS()\n    abort(reason: any) {\n      if (this.signal.aborted) return\n      //@ts-ignore\n      this.signal.reason = reason\n      //@ts-ignore\n      this.signal.aborted = true\n      //@ts-ignore\n      for (const fn of this.signal._onabort) {\n        fn(reason)\n      }\n      this.signal.onabort?.(reason)\n    }\n  }\n  let printACPolyfillWarning =\n    PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n  const warnACPolyfill = () => {\n    if (!printACPolyfillWarning) return\n    printACPolyfillWarning = false\n    emitWarning(\n      'AbortController is not defined. If using lru-cache in ' +\n        'node 14, load an AbortController polyfill from the ' +\n        '`node-abort-controller` package. A minimal polyfill is ' +\n        'provided for use by LRUCache.fetch(), but it should not be ' +\n        'relied upon in other contexts (eg, passing it to other APIs that ' +\n        'use AbortController/AbortSignal might have undesirable effects). ' +\n        'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n      'NO_ABORT_CONTROLLER',\n      'ENOTSUP',\n      warnACPolyfill\n    )\n  }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\nexport type PosInt = number & { [TYPE]: 'Positive Integer' }\nexport type Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n  n && n === Math.floor(n) && n > 0 && isFinite(n)\n\nexport type UintArray = Uint8Array | Uint16Array | Uint32Array\nexport type NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array {\n  constructor(size: number) {\n    super(size)\n    this.fill(0)\n  }\n}\nexport type { ZeroArray }\nexport type { Stack }\n\nexport type StackLike = Stack | Index[]\nclass Stack {\n  heap: NumberArray\n  length: number\n  // private constructor\n  static #constructing: boolean = false\n  static create(max: number): StackLike {\n    const HeapCls = getUintArray(max)\n    if (!HeapCls) return []\n    Stack.#constructing = true\n    const s = new Stack(max, HeapCls)\n    Stack.#constructing = false\n    return s\n  }\n  constructor(\n    max: number,\n    HeapCls: { new (n: number): NumberArray }\n  ) {\n    /* c8 ignore start */\n    if (!Stack.#constructing) {\n      throw new TypeError('instantiate Stack using Stack.create(n)')\n    }\n    /* c8 ignore stop */\n    this.heap = new HeapCls(max)\n    this.length = 0\n  }\n  push(n: Index) {\n    this.heap[this.length++] = n\n  }\n  pop(): Index {\n    return this.heap[--this.length] as Index\n  }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch = Promise & {\n  __returned: BackgroundFetch | undefined\n  __abortController: AbortController\n  __staleWhileFetching: V | undefined\n}\n\nexport type DisposeTask = [\n  value: V,\n  key: K,\n  reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n  /**\n   * An integer greater than 0, reflecting the calculated size of items\n   */\n  export type Size = number\n\n  /**\n   * Integer greater than 0, representing some number of milliseconds, or the\n   * time at which a TTL started counting from.\n   */\n  export type Milliseconds = number\n\n  /**\n   * An integer greater than 0, reflecting a number of items\n   */\n  export type Count = number\n\n  /**\n   * The reason why an item was removed from the cache, passed\n   * to the {@link Disposer} methods.\n   *\n   * - `evict`: The item was evicted because it is the least recently used,\n   *   and the cache is full.\n   * - `set`: A new value was set, overwriting the old value being disposed.\n   * - `delete`: The item was explicitly deleted, either by calling\n   *   {@link LRUCache#delete}, {@link LRUCache#clear}, or\n   *   {@link LRUCache#set} with an undefined value.\n   * - `expire`: The item was removed due to exceeding its TTL.\n   * - `fetch`: A {@link OptionsBase#fetchMethod} operation returned\n   *   `undefined` or was aborted, causing the item to be deleted.\n   */\n  export type DisposeReason =\n    | 'evict'\n    | 'set'\n    | 'delete'\n    | 'expire'\n    | 'fetch'\n  /**\n   * A method called upon item removal, passed as the\n   * {@link OptionsBase.dispose} and/or\n   * {@link OptionsBase.disposeAfter} options.\n   */\n  export type Disposer = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n\n  /**\n   * A function that returns the effective calculated size\n   * of an entry in the cache.\n   */\n  export type SizeCalculator = (value: V, key: K) => Size\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.fetchMethod} function.\n   */\n  export interface FetcherOptions {\n    signal: AbortSignal\n    options: FetcherFetchOptions\n    /**\n     * Object provided in the {@link FetchOptions.context} option to\n     * {@link LRUCache#fetch}\n     */\n    context: FC\n  }\n\n  /**\n   * Occasionally, it may be useful to track the internal behavior of the\n   * cache, particularly for logging, debugging, or for behavior within the\n   * `fetchMethod`. To do this, you can pass a `status` object to the\n   * {@link LRUCache#fetch}, {@link LRUCache#get}, {@link LRUCache#set},\n   * {@link LRUCache#memo}, and {@link LRUCache#has} methods.\n   *\n   * The `status` option should be a plain JavaScript object. The following\n   * fields will be set on it appropriately, depending on the situation.\n   */\n  export interface Status {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: Milliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: Milliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: Milliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: Milliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    entrySize?: Size\n\n    /**\n     * The total calculated size of the cache, if sizes are used.\n     */\n    totalCalculatedSize?: Size\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link OptionsBase.maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link LRUCache#has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link LRUCache#fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no {@link OptionsBase.fetchMethod}, so\n     *   {@link LRUCache#get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link FetchOptions.forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link OptionsBase.fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to\n     * {@link OptionsBase.fetchMethod}\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link OptionsBase.fetchMethod}, or the reason for an\n     * AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link LRUCache#get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value\n     *   is present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#fetch}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link OptionsBase.noDeleteOnFetchRejection},\n   * {@link OptionsBase.allowStaleOnFetchRejection},\n   * {@link FetchOptions.forceRefresh}, and\n   * {@link FetcherOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the fetchMethod is called.\n   */\n  export interface FetcherFetchOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    status?: Status\n    size?: Size\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#fetch} method.\n   */\n  export interface FetchOptions\n    extends FetcherFetchOptions {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.fetchMethod} as\n     * the {@link FetcherOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    signal?: AbortSignal\n    status?: Status\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface FetchOptionsWithContext\n    extends FetchOptions {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface FetchOptionsNoContext\n    extends FetchOptions {\n    context?: undefined\n  }\n\n  export interface MemoOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.memoMethod} as\n     * the {@link MemoizerOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    status?: Status\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface MemoOptionsWithContext\n    extends MemoOptions {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface MemoOptionsNoContext\n    extends MemoOptions {\n    context?: undefined\n  }\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.memoMethod} function.\n   */\n  export interface MemoizerOptions {\n    options: MemoizerMemoOptions\n    /**\n     * Object provided in the {@link MemoOptions.context} option to\n     * {@link LRUCache#memo}\n     */\n    context: FC\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#memo}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link MemoOptions.forceRefresh}, and\n   * {@link MemoerOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.memoMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the memoMethod is called.\n   */\n  export interface MemoizerMemoOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n    > {\n    status?: Status\n    size?: Size\n    start?: Milliseconds\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#has} method.\n   */\n  export interface HasOptions\n    extends Pick, 'updateAgeOnHas'> {\n    status?: Status\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#get} method.\n   */\n  export interface GetOptions\n    extends Pick<\n      OptionsBase,\n      'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n    > {\n    status?: Status\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#peek} method.\n   */\n  export interface PeekOptions\n    extends Pick, 'allowStale'> {}\n\n  /**\n   * Options that may be passed to the {@link LRUCache#set} method.\n   */\n  export interface SetOptions\n    extends Pick<\n      OptionsBase,\n      'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n    > {\n    /**\n     * If size tracking is enabled, then setting an explicit size\n     * in the {@link LRUCache#set} call will prevent calling the\n     * {@link OptionsBase.sizeCalculation} function.\n     */\n    size?: Size\n    /**\n     * If TTL tracking is enabled, then setting an explicit start\n     * time in the {@link LRUCache#set} call will override the\n     * default time from `performance.now()` or `Date.now()`.\n     *\n     * Note that it must be a valid value for whichever time-tracking\n     * method is in use.\n     */\n    start?: Milliseconds\n    status?: Status\n  }\n\n  /**\n   * The type signature for the {@link OptionsBase.fetchMethod} option.\n   */\n  export type Fetcher = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions\n  ) => Promise | V | undefined | void\n\n  /**\n   * the type signature for the {@link OptionsBase.memoMethod} option.\n   */\n  export type Memoizer = (\n    key: K,\n    staleValue: V | undefined,\n    options: MemoizerOptions\n  ) => V\n\n  /**\n   * Options which may be passed to the {@link LRUCache} constructor.\n   *\n   * Most of these may be overridden in the various options that use\n   * them.\n   *\n   * Despite all being technically optional, the constructor requires that\n   * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n   * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n   *\n   * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n   * (and in fact required by the type definitions here) that the cache\n   * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n   * unbounded storage.\n   *\n   * All options are also available on the {@link LRUCache} instance, making\n   * it safe to pass an LRUCache instance as the options argumemnt to\n   * make another empty cache of the same type.\n   *\n   * Some options are marked as read-only, because changing them after\n   * instantiation is not safe. Changing any of the other options will of\n   * course only have an effect on subsequent method calls.\n   */\n  export interface OptionsBase {\n    /**\n     * The maximum number of items to store in the cache before evicting\n     * old entries. This is read-only on the {@link LRUCache} instance,\n     * and may not be overridden.\n     *\n     * If set, then storage space will be pre-allocated at construction\n     * time, and the cache will perform significantly faster.\n     *\n     * Note that significantly fewer items may be stored, if\n     * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n     * set.\n     *\n     * **It is strongly recommended to set a `max` to prevent unbounded growth\n     * of the cache.**\n     */\n    max?: Count\n\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed by\n     * default, and MAY live in the cache, contributing to its LRU max, long\n     * after they have expired, unless {@link OptionsBase.ttlAutopurge} is\n     * set.\n     *\n     * If set to `0` (the default value), then that means \"do not track\n     * TTL\", not \"expire immediately\".\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * This is not primarily a TTL cache, and does not make strong TTL\n     * guarantees. There is no pre-emptive pruning of expired items, but you\n     * _may_ set a TTL on the cache, and it will treat expired items as missing\n     * when they are fetched, and delete them.\n     *\n     * Optional, but must be a non-negative integer in ms if specified.\n     *\n     * This may be overridden by passing an options object to `cache.set()`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if ttl tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * If ttl tracking is enabled, and `max` and `maxSize` are not set,\n     * and `ttlAutopurge` is not set, then a warning will be emitted\n     * cautioning about the potential for unbounded memory consumption.\n     * (The TypeScript definitions will also discourage this.)\n     */\n    ttl?: Milliseconds\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     */\n    ttlResolution?: Milliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     *\n     * Note that this may *significantly* degrade performance, especially if\n     * the cache is storing a large number of items. It is almost always best\n     * to just leave the stale items in the cache, and let them fall out as new\n     * items are added.\n     *\n     * Note that this means that {@link OptionsBase.allowStale} is a bit\n     * pointless, as stale items will be deleted almost as soon as they\n     * expire.\n     *\n     * Use with caution!\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever it is retrieved from cache with\n     * {@link LRUCache#get}, causing it to not expire. (It can still fall out\n     * of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever its presence in the cache is\n     * checked with {@link LRUCache#has}, causing it to not expire. (It can\n     * still fall out of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     */\n    updateAgeOnHas?: boolean\n\n    /**\n     * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n     * stale data, if available.\n     *\n     * By default, if you set `ttl`, stale items will only be deleted from the\n     * cache when you `get(key)`. That is, it's not preemptively pruning items,\n     * unless {@link OptionsBase.ttlAutopurge} is set.\n     *\n     * If you set `allowStale:true`, it'll return the stale value *as well as*\n     * deleting it. If you don't set this, then it'll return `undefined` when\n     * you try to get a stale entry.\n     *\n     * Note that when a stale entry is fetched, _even if it is returned due to\n     * `allowStale` being set_, it is removed from the cache immediately. You\n     * can suppress this behavior by setting\n     * {@link OptionsBase.noDeleteOnStaleGet}, either in the constructor, or in\n     * the options provided to {@link LRUCache#get}.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     * The `cache.has()` method will always return `false` for stale items.\n     *\n     * Only relevant if a ttl is set.\n     */\n    allowStale?: boolean\n\n    /**\n     * Function that is called on items when they are dropped from the\n     * cache, as `dispose(value, key, reason)`.\n     *\n     * This can be handy if you want to close file descriptors or do\n     * other cleanup tasks when items are no longer stored in the cache.\n     *\n     * **NOTE**: It is called _before_ the item has been fully removed\n     * from the cache, so if you want to put it right back in, you need\n     * to wait until the next tick. If you try to add it back in during\n     * the `dispose()` function call, it will break things in subtle and\n     * weird ways.\n     *\n     * Unlike several other options, this may _not_ be overridden by\n     * passing an option to `set()`, for performance reasons.\n     *\n     * The `reason` will be one of the following strings, corresponding\n     * to the reason for the item's deletion:\n     *\n     * - `evict` Item was evicted to make space for a new addition\n     * - `set` Item was overwritten by a new value\n     * - `expire` Item expired its TTL\n     * - `fetch` Item was deleted due to a failed or aborted fetch, or a\n     *   fetchMethod returning `undefined.\n     * - `delete` Item was removed by explicit `cache.delete(key)`,\n     *   `cache.clear()`, or `cache.set(key, undefined)`.\n     */\n    dispose?: Disposer\n\n    /**\n     * The same as {@link OptionsBase.dispose}, but called *after* the entry\n     * is completely removed and the cache is once again in a clean state.\n     *\n     * It is safe to add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     */\n    disposeAfter?: Disposer\n\n    /**\n     * Set to true to suppress calling the\n     * {@link OptionsBase.dispose} function if the entry key is\n     * still accessible within the cache.\n     *\n     * This may be overridden by passing an options object to\n     * {@link LRUCache#set}.\n     *\n     * Only relevant if `dispose` or `disposeAfter` are set.\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when setting a new\n     * value for an existing key (ie, when updating a value rather than\n     * inserting a new value).  Note that the TTL value is _always_ set (if\n     * provided) when adding a new entry into the cache.\n     *\n     * Has no effect if a {@link OptionsBase.ttl} is not set.\n     *\n     * May be passed as an option to {@link LRUCache#set}.\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * Set to a positive integer to track the sizes of items added to the\n     * cache, and automatically evict items in order to stay below this size.\n     * Note that this may result in fewer than `max` items being stored.\n     *\n     * Attempting to add an item to the cache whose calculated size is greater\n     * that this amount will be a no-op. The item will not be cached, and no\n     * other items will be evicted.\n     *\n     * Optional, must be a positive integer if provided.\n     *\n     * Sets `maxEntrySize` to the same value, unless a different value is\n     * provided for `maxEntrySize`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if size tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize?: Size\n\n    /**\n     * The maximum allowed size for any single item in the cache.\n     *\n     * If a larger item is passed to {@link LRUCache#set} or returned by a\n     * {@link OptionsBase.fetchMethod} or {@link OptionsBase.memoMethod}, then\n     * it will not be stored in the cache.\n     *\n     * Attempting to add an item whose calculated size is greater than\n     * this amount will not cache the item or evict any old items, but\n     * WILL delete an existing value if one is already present.\n     *\n     * Optional, must be a positive integer if provided. Defaults to\n     * the value of `maxSize` if provided.\n     */\n    maxEntrySize?: Size\n\n    /**\n     * A function that returns a number indicating the item's size.\n     *\n     * Requires {@link OptionsBase.maxSize} to be set.\n     *\n     * If not provided, and {@link OptionsBase.maxSize} or\n     * {@link OptionsBase.maxEntrySize} are set, then all\n     * {@link LRUCache#set} calls **must** provide an explicit\n     * {@link SetOptions.size} or sizeCalculation param.\n     */\n    sizeCalculation?: SizeCalculator\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#fetch}\n     *\n     * ```ts\n     * fetchMethod(key, staleValue, { signal, options, context })\n     * ```\n     *\n     * If `fetchMethod` is not provided, then `cache.fetch(key)` is equivalent\n     * to `Promise.resolve(cache.get(key))`.\n     *\n     * If at any time, `signal.aborted` is set to `true`, or if the\n     * `signal.onabort` method is called, or if it emits an `'abort'` event\n     * which you can listen to with `addEventListener`, then that means that\n     * the fetch should be abandoned. This may be passed along to async\n     * functions aware of AbortController/AbortSignal behavior.\n     *\n     * The `fetchMethod` should **only** return `undefined` or a Promise\n     * resolving to `undefined` if the AbortController signaled an `abort`\n     * event. In all other cases, it should return or resolve to a value\n     * suitable for adding to the cache.\n     *\n     * The `options` object is a union of the options that may be provided to\n     * `set()` and `get()`. If they are modified, then that will result in\n     * modifying the settings to `cache.set()` when the value is resolved, and\n     * in the case of\n     * {@link OptionsBase.noDeleteOnFetchRejection} and\n     * {@link OptionsBase.allowStaleOnFetchRejection}, the handling of\n     * `fetchMethod` failures.\n     *\n     * For example, a DNS cache may update the TTL based on the value returned\n     * from a remote DNS server by changing `options.ttl` in the `fetchMethod`.\n     */\n    fetchMethod?: Fetcher\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#memo}\n     */\n    memoMethod?: Memoizer\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link OptionsBase.fetchMethod} returns a rejected promise.\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with\n     * {@link LRUCache#get}.\n     *\n     * Note that the `get` return value will still be `undefined`\n     * unless {@link OptionsBase.allowStale} is true.\n     *\n     * When using time-expiring entries with `ttl`, by default stale\n     * items will be removed from the cache when the key is accessed\n     * with `cache.get()`.\n     *\n     * Setting this option will cause stale items to remain in the cache, until\n     * they are explicitly deleted with `cache.delete(key)`, or retrieved with\n     * `noDeleteOnStaleGet` set to `false`.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     *\n     * Only relevant if a ttl is used.\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a\n     * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n     * promise.\n     *\n     * This differs from using {@link OptionsBase.allowStale} in that stale\n     * data will ONLY be returned in the case that the {@link LRUCache#fetch}\n     * fails, not any other times.\n     *\n     * If a `fetchMethod` fails, and there is no stale value available, the\n     * `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` errors are\n     * suppressed.\n     *\n     * Implies `noDeleteOnFetchRejection`.\n     *\n     * This may be set in calls to `fetch()`, or defaulted on the constructor,\n     * or overridden by modifying the options object in the `fetchMethod`.\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches\n     * an `'abort'` event, whether user-triggered, or due to internal cache\n     * behavior.\n     *\n     * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n     * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n     * any value it returns will be ignored and not cached.\n     *\n     * Caveat: since fetches are aborted when a new value is explicitly\n     * set in the cache, this can lead to fetch returning a stale value,\n     * since that was the fallback value _at the moment the `fetch()` was\n     * initiated_, even though the new updated value is now present in\n     * the cache.\n     *\n     * For example:\n     *\n     * ```ts\n     * const cache = new LRUCache({\n     *   ttl: 100,\n     *   fetchMethod: async (url, oldValue, { signal }) =>  {\n     *     const res = await fetch(url, { signal })\n     *     return await res.json()\n     *   }\n     * })\n     * cache.set('https://example.com/', { some: 'data' })\n     * // 100ms go by...\n     * const result = cache.fetch('https://example.com/')\n     * cache.set('https://example.com/', { other: 'thing' })\n     * console.log(await result) // { some: 'data' }\n     * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n     * ```\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link LRUCache#fetch} calls\n     * are not immediately resolved or rejected when they are aborted, and\n     * instead take the full time to await.\n     *\n     * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n     * {@link LRUCache#fetch} calls will resolve immediately to their stale\n     * cached value or `undefined`, and will continue to process and eventually\n     * update the cache when they resolve, as long as the resulting value is\n     * not `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * For example:\n     *\n     * ```ts\n     * const c = new LRUCache({\n     *   ttl: 100,\n     *   ignoreFetchAbort: true,\n     *   allowStaleOnFetchAbort: true,\n     *   fetchMethod: async (key, oldValue, { signal }) => {\n     *     // note: do NOT pass the signal to fetch()!\n     *     // let's say this fetch can take a long time.\n     *     const res = await fetch(`https://slow-backend-server/${key}`)\n     *     return await res.json()\n     *   },\n     * })\n     *\n     * // this will return the stale value after 100ms, while still\n     * // updating in the background for next time.\n     * const val = await c.fetch('key', { signal: AbortSignal.timeout(100) })\n     * ```\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still\n     * emitted on the `AbortSignal` object_, so may result in invalid results\n     * when passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n     * call to {@link LRUCache#fetch}.\n     */\n    ignoreFetchAbort?: boolean\n  }\n\n  export interface OptionsMaxLimit\n    extends OptionsBase {\n    max: Count\n  }\n  export interface OptionsTTLLimit\n    extends OptionsBase {\n    ttl: Milliseconds\n    ttlAutopurge: boolean\n  }\n  export interface OptionsSizeLimit\n    extends OptionsBase {\n    maxSize: Size\n  }\n\n  /**\n   * The valid safe options for the {@link LRUCache} constructor\n   */\n  export type Options =\n    | OptionsMaxLimit\n    | OptionsSizeLimit\n    | OptionsTTLLimit\n\n  /**\n   * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump},\n   * and returned by {@link LRUCache#info}.\n   */\n  export interface Entry {\n    value: V\n    ttl?: Milliseconds\n    size?: Size\n    start?: Milliseconds\n  }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache {\n  // options that cannot be changed without disaster\n  readonly #max: LRUCache.Count\n  readonly #maxSize: LRUCache.Size\n  readonly #dispose?: LRUCache.Disposer\n  readonly #disposeAfter?: LRUCache.Disposer\n  readonly #fetchMethod?: LRUCache.Fetcher\n  readonly #memoMethod?: LRUCache.Memoizer\n\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl: LRUCache.Milliseconds\n\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution: LRUCache.Milliseconds\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale: boolean\n\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL: boolean\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize: LRUCache.Size\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation?: LRUCache.SizeCalculator\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort: boolean\n\n  // computed properties\n  #size: LRUCache.Count\n  #calculatedSize: LRUCache.Size\n  #keyMap: Map\n  #keyList: (K | undefined)[]\n  #valList: (V | BackgroundFetch | undefined)[]\n  #next: NumberArray\n  #prev: NumberArray\n  #head: Index\n  #tail: Index\n  #free: StackLike\n  #disposed?: DisposeTask[]\n  #sizes?: ZeroArray\n  #starts?: ZeroArray\n  #ttls?: ZeroArray\n\n  #hasDispose: boolean\n  #hasFetchMethod: boolean\n  #hasDisposeAfter: boolean\n\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals<\n    K extends {},\n    V extends {},\n    FC extends unknown = unknown\n  >(c: LRUCache) {\n    return {\n      // properties\n      starts: c.#starts,\n      ttls: c.#ttls,\n      sizes: c.#sizes,\n      keyMap: c.#keyMap as Map,\n      keyList: c.#keyList,\n      valList: c.#valList,\n      next: c.#next,\n      prev: c.#prev,\n      get head() {\n        return c.#head\n      },\n      get tail() {\n        return c.#tail\n      },\n      free: c.#free,\n      // methods\n      isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n      backgroundFetch: (\n        k: K,\n        index: number | undefined,\n        options: LRUCache.FetchOptions,\n        context: any\n      ): BackgroundFetch =>\n        c.#backgroundFetch(\n          k,\n          index as Index | undefined,\n          options,\n          context\n        ),\n      moveToTail: (index: number): void =>\n        c.#moveToTail(index as Index),\n      indexes: (options?: { allowStale: boolean }) =>\n        c.#indexes(options),\n      rindexes: (options?: { allowStale: boolean }) =>\n        c.#rindexes(options),\n      isStale: (index: number | undefined) =>\n        c.#isStale(index as Index),\n    }\n  }\n\n  // Protected read-only members\n\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max(): LRUCache.Count {\n    return this.#max\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize(): LRUCache.Count {\n    return this.#maxSize\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize(): LRUCache.Size {\n    return this.#calculatedSize\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size(): LRUCache.Count {\n    return this.#size\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod(): LRUCache.Fetcher | undefined {\n    return this.#fetchMethod\n  }\n  get memoMethod(): LRUCache.Memoizer | undefined {\n    return this.#memoMethod\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#dispose\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#disposeAfter\n  }\n\n  constructor(\n    options: LRUCache.Options | LRUCache\n  ) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      memoMethod,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.#max = max\n    this.#maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.#maxSize\n    this.sizeCalculation = sizeCalculation\n    if (this.sizeCalculation) {\n      if (!this.#maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    if (\n      memoMethod !== undefined &&\n      typeof memoMethod !== 'function'\n    ) {\n      throw new TypeError('memoMethod must be a function if defined')\n    }\n    this.#memoMethod = memoMethod\n\n    if (\n      fetchMethod !== undefined &&\n      typeof fetchMethod !== 'function'\n    ) {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n    this.#fetchMethod = fetchMethod\n    this.#hasFetchMethod = !!fetchMethod\n\n    this.#keyMap = new Map()\n    this.#keyList = new Array(max).fill(undefined)\n    this.#valList = new Array(max).fill(undefined)\n    this.#next = new UintArray(max)\n    this.#prev = new UintArray(max)\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free = Stack.create(max)\n    this.#size = 0\n    this.#calculatedSize = 0\n\n    if (typeof dispose === 'function') {\n      this.#dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.#disposeAfter = disposeAfter\n      this.#disposed = []\n    } else {\n      this.#disposeAfter = undefined\n      this.#disposed = undefined\n    }\n    this.#hasDispose = !!this.#dispose\n    this.#hasDisposeAfter = !!this.#disposeAfter\n\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.#maxSize !== 0) {\n        if (!isPosInt(this.#maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.#initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.#initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n  }\n\n  /**\n   * Return the number of ms left in the item's TTL. If item is not in cache,\n   * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n   */\n  getRemainingTTL(key: K) {\n    return this.#keyMap.has(key) ? Infinity : 0\n  }\n\n  #initializeTTLTracking() {\n    const ttls = new ZeroArray(this.#max)\n    const starts = new ZeroArray(this.#max)\n    this.#ttls = ttls\n    this.#starts = starts\n\n    this.#setItemTTL = (index, ttl, start = perf.now()) => {\n      starts[index] = ttl !== 0 ? start : 0\n      ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.#isStale(index)) {\n            this.#delete(this.#keyList[index] as K, 'expire')\n          }\n        }, ttl + 1)\n        // unref() not supported on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n    }\n\n    this.#updateItemAge = index => {\n      starts[index] = ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.#statusTTL = (status, index) => {\n      if (ttls[index]) {\n        const ttl = ttls[index]\n        const start = starts[index]\n        /* c8 ignore next */\n        if (!ttl || !start) return\n        status.ttl = ttl\n        status.start = start\n        status.now = cachedNow || getNow()\n        const age = status.now - start\n        status.remainingTTL = ttl - age\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        // not available on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.#keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      const ttl = ttls[index]\n      const start = starts[index]\n      if (!ttl || !start) {\n        return Infinity\n      }\n      const age = (cachedNow || getNow()) - start\n      return ttl - age\n    }\n\n    this.#isStale = index => {\n      const s = starts[index]\n      const t = ttls[index]\n      return !!t && !!s && (cachedNow || getNow()) - s > t\n    }\n  }\n\n  // conditionally set private methods related to TTL\n  #updateItemAge: (index: Index) => void = () => {}\n  #statusTTL: (status: LRUCache.Status, index: Index) => void =\n    () => {}\n  #setItemTTL: (\n    index: Index,\n    ttl: LRUCache.Milliseconds,\n    start?: LRUCache.Milliseconds\n    // ignore because we never call this if we're not already in TTL mode\n    /* c8 ignore start */\n  ) => void = () => {}\n  /* c8 ignore stop */\n\n  #isStale: (index: Index) => boolean = () => false\n\n  #initializeSizeTracking() {\n    const sizes = new ZeroArray(this.#max)\n    this.#calculatedSize = 0\n    this.#sizes = sizes\n    this.#removeItemSize = index => {\n      this.#calculatedSize -= sizes[index] as number\n      sizes[index] = 0\n    }\n    this.#requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.#isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation ' +\n              'or size must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.#addItemSize = (\n      index: Index,\n      size: LRUCache.Size,\n      status?: LRUCache.Status\n    ) => {\n      sizes[index] = size\n      if (this.#maxSize) {\n        const maxSize = this.#maxSize - (sizes[index] as number)\n        while (this.#calculatedSize > maxSize) {\n          this.#evict(true)\n        }\n      }\n      this.#calculatedSize += sizes[index] as number\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.#calculatedSize\n      }\n    }\n  }\n\n  #removeItemSize: (index: Index) => void = _i => {}\n  #addItemSize: (\n    index: Index,\n    size: LRUCache.Size,\n    status?: LRUCache.Status\n  ) => void = (_i, _s, _st) => {}\n  #requireSize: (\n    k: K,\n    v: V | BackgroundFetch,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator\n  ) => LRUCache.Size = (\n    _k: K,\n    _v: V | BackgroundFetch,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator\n  ) => {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n    return 0\n  };\n\n  *#indexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#tail; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#head) {\n          break\n        } else {\n          i = this.#prev[i] as Index\n        }\n      }\n    }\n  }\n\n  *#rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#head; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#tail) {\n          break\n        } else {\n          i = this.#next[i] as Index\n        }\n      }\n    }\n  }\n\n  #isValidIndex(index: Index) {\n    return (\n      index !== undefined &&\n      this.#keyMap.get(this.#keyList[index] as K) === index\n    )\n  }\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const i of this.#indexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]] as [K, V]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const i of this.#rindexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const i of this.#indexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const i of this.#rindexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i] as V\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  /**\n   * A String value that is used in the creation of the default string\n   * description of an object. Called by the built-in method\n   * `Object.prototype.toString`.\n   */\n  [Symbol.toStringTag] = 'LRUCache'\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n   */\n  find(\n    fn: (v: V, k: K, self: LRUCache) => boolean,\n    getOptions: LRUCache.GetOptions = {}\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.#keyList[i] as K, this)) {\n        return this.get(this.#keyList[i] as K, getOptions)\n      }\n    }\n  }\n\n  /**\n   * Call the supplied function on each item in the cache, in order from most\n   * recently used to least recently used.\n   *\n   * `fn` is called as `fn(value, key, cache)`.\n   *\n   * If `thisp` is provided, function will be called in the `this`-context of\n   * the provided object, or the cache if no `thisp` object is provided.\n   *\n   * Does not update age or recenty of use, or iterate over stale values.\n   */\n  forEach(\n    fn: (v: V, k: K, self: LRUCache) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(\n    fn: (v: V, k: K, self: LRUCache) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let deleted = false\n    for (const i of this.#rindexes({ allowStale: true })) {\n      if (this.#isStale(i)) {\n        this.#delete(this.#keyList[i] as K, 'expire')\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Get the extended info about a given entry, to get its value, size, and\n   * TTL info simultaneously. Returns `undefined` if the key is not present.\n   *\n   * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n   * serialization, the `start` value is always the current timestamp, and the\n   * `ttl` is a calculated remaining time to live (negative if expired).\n   *\n   * Always returns stale values, if their info is found in the cache, so be\n   * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n   * if relevant.\n   */\n  info(key: K): LRUCache.Entry | undefined {\n    const i = this.#keyMap.get(key)\n    if (i === undefined) return undefined\n    const v = this.#valList[i]\n    const value: V | undefined = this.#isBackgroundFetch(v)\n      ? v.__staleWhileFetching\n      : v\n    if (value === undefined) return undefined\n    const entry: LRUCache.Entry = { value }\n    if (this.#ttls && this.#starts) {\n      const ttl = this.#ttls[i]\n      const start = this.#starts[i]\n      if (ttl && start) {\n        const remain = ttl - (perf.now() - start)\n        entry.ttl = remain\n        entry.start = Date.now()\n      }\n    }\n    if (this.#sizes) {\n      entry.size = this.#sizes[i]\n    }\n    return entry\n  }\n\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to {@link LRLUCache#load}.\n   *\n   * The `start` fields are calculated relative to a portable `Date.now()`\n   * timestamp, even if `performance.now()` is available.\n   *\n   * Stale entries are always included in the `dump`, even if\n   * {@link LRUCache.OptionsBase.allowStale} is false.\n   *\n   * Note: this returns an actual array, not a generator, so it can be more\n   * easily passed around.\n   */\n  dump() {\n    const arr: [K, LRUCache.Entry][] = []\n    for (const i of this.#indexes({ allowStale: true })) {\n      const key = this.#keyList[i]\n      const v = this.#valList[i]\n      const value: V | undefined = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined || key === undefined) continue\n      const entry: LRUCache.Entry = { value }\n      if (this.#ttls && this.#starts) {\n        entry.ttl = this.#ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - (this.#starts[i] as number)\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.#sizes) {\n        entry.size = this.#sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   *\n   * The shape of the resulting cache may be different if the same options are\n   * not used in both caches.\n   *\n   * The `start` fields are assumed to be calculated relative to a portable\n   * `Date.now()` timestamp, even if `performance.now()` is available.\n   */\n  load(arr: [K, LRUCache.Entry][]) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset, so that\n        // we get the intended remaining TTL, no matter how long it's\n        // been on ice.\n        //\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   *\n   * Fields on the {@link LRUCache.SetOptions} options param will override\n   * their corresponding values in the constructor options for the scope\n   * of this single `set()` operation.\n   *\n   * If `start` is provided, then that will set the effective start\n   * time for the TTL calculation. Note that this must be a previous\n   * value of `performance.now()` if supported, or a previous value of\n   * `Date.now()` if not.\n   *\n   * Options object may also include `size`, which will prevent\n   * calling the `sizeCalculation` function and just use the specified\n   * number if it is a positive integer, and `noDisposeOnSet` which\n   * will prevent calling a `dispose` function in the case of\n   * overwrites.\n   *\n   * If the `size` (or return value of `sizeCalculation`) for a given\n   * entry is greater than `maxEntrySize`, then the item will not be\n   * added to the cache.\n   *\n   * Will update the recency of the entry.\n   *\n   * If the value is `undefined`, then this is an alias for\n   * `cache.delete(key)`. `undefined` is never stored in the cache.\n   */\n  set(\n    k: K,\n    v: V | BackgroundFetch | undefined,\n    setOptions: LRUCache.SetOptions = {}\n  ) {\n    if (v === undefined) {\n      this.delete(k)\n      return this\n    }\n    const {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      sizeCalculation = this.sizeCalculation,\n      status,\n    } = setOptions\n    let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n    const size = this.#requireSize(\n      k,\n      v,\n      setOptions.size || 0,\n      sizeCalculation\n    )\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case something is there already.\n      this.#delete(k, 'set')\n      return this\n    }\n    let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = (\n        this.#size === 0\n          ? this.#tail\n          : this.#free.length !== 0\n          ? this.#free.pop()\n          : this.#size === this.#max\n          ? this.#evict(false)\n          : this.#size\n      ) as Index\n      this.#keyList[index] = k\n      this.#valList[index] = v\n      this.#keyMap.set(k, index)\n      this.#next[this.#tail] = index\n      this.#prev[index] = this.#tail\n      this.#tail = index\n      this.#size++\n      this.#addItemSize(index, size, status)\n      if (status) status.set = 'add'\n      noUpdateTTL = false\n    } else {\n      // update\n      this.#moveToTail(index)\n      const oldVal = this.#valList[index] as V | BackgroundFetch\n      if (v !== oldVal) {\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n          const { __staleWhileFetching: s } = oldVal\n          if (s !== undefined && !noDisposeOnSet) {\n            if (this.#hasDispose) {\n              this.#dispose?.(s as V, k, 'set')\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([s as V, k, 'set'])\n            }\n          }\n        } else if (!noDisposeOnSet) {\n          if (this.#hasDispose) {\n            this.#dispose?.(oldVal as V, k, 'set')\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([oldVal as V, k, 'set'])\n          }\n        }\n        this.#removeItemSize(index)\n        this.#addItemSize(index, size, status)\n        this.#valList[index] = v\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.#isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && !this.#ttls) {\n      this.#initializeTTLTracking()\n    }\n    if (this.#ttls) {\n      if (!noUpdateTTL) {\n        this.#setItemTTL(index, ttl, start)\n      }\n      if (status) this.#statusTTL(status, index)\n    }\n    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop(): V | undefined {\n    try {\n      while (this.#size) {\n        const val = this.#valList[this.#head]\n        this.#evict(true)\n        if (this.#isBackgroundFetch(val)) {\n          if (val.__staleWhileFetching) {\n            return val.__staleWhileFetching\n          }\n        } else if (val !== undefined) {\n          return val\n        }\n      }\n    } finally {\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed\n        let task: DisposeTask | undefined\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task)\n        }\n      }\n    }\n  }\n\n  #evict(free: boolean) {\n    const head = this.#head\n    const k = this.#keyList[head] as K\n    const v = this.#valList[head] as V\n    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else if (this.#hasDispose || this.#hasDisposeAfter) {\n      if (this.#hasDispose) {\n        this.#dispose?.(v, k, 'evict')\n      }\n      if (this.#hasDisposeAfter) {\n        this.#disposed?.push([v, k, 'evict'])\n      }\n    }\n    this.#removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.#keyList[head] = undefined\n      this.#valList[head] = undefined\n      this.#free.push(head)\n    }\n    if (this.#size === 1) {\n      this.#head = this.#tail = 0 as Index\n      this.#free.length = 0\n    } else {\n      this.#head = this.#next[head] as Index\n    }\n    this.#keyMap.delete(k)\n    this.#size--\n    return head\n  }\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Check if a key is in the cache, without updating the recency of\n   * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n   * to `true` in either the options or the constructor.\n   *\n   * Will return `false` if the item is stale, even though it is technically in\n   * the cache. The difference can be determined (if it matters) by using a\n   * `status` argument, and inspecting the `has` field.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(k: K, hasOptions: LRUCache.HasOptions = {}) {\n    const { updateAgeOnHas = this.updateAgeOnHas, status } =\n      hasOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const v = this.#valList[index]\n      if (\n        this.#isBackgroundFetch(v) &&\n        v.__staleWhileFetching === undefined\n      ) {\n        return false\n      }\n      if (!this.#isStale(index)) {\n        if (updateAgeOnHas) {\n          this.#updateItemAge(index)\n        }\n        if (status) {\n          status.has = 'hit'\n          this.#statusTTL(status, index)\n        }\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.#statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(k: K, peekOptions: LRUCache.PeekOptions = {}) {\n    const { allowStale = this.allowStale } = peekOptions\n    const index = this.#keyMap.get(k)\n    if (\n      index === undefined ||\n      (!allowStale && this.#isStale(index))\n    ) {\n      return\n    }\n    const v = this.#valList[index]\n    // either stale and allowed, or forcing a refresh of non-stale value\n    return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n  }\n\n  #backgroundFetch(\n    k: K,\n    index: Index | undefined,\n    options: LRUCache.FetchOptions,\n    context: any\n  ): BackgroundFetch {\n    const v = index === undefined ? undefined : this.#valList[index]\n    if (this.#isBackgroundFetch(v)) {\n      return v\n    }\n\n    const ac = new AC()\n    const { signal } = options\n    // when/if our AC signals, then stop listening to theirs.\n    signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n      signal: ac.signal,\n    })\n\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n\n    const cb = (\n      v: V | undefined,\n      updateCache = false\n    ): V | undefined => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      const bf = p as BackgroundFetch\n      if (this.#valList[index as Index] === p) {\n        if (v === undefined) {\n          if (bf.__staleWhileFetching) {\n            this.#valList[index as Index] = bf.__staleWhileFetching\n          } else {\n            this.#delete(k, 'fetch')\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n\n    const eb = (er: any) => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n\n    const fetchFail = (er: any): V | undefined => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      const bf = p as BackgroundFetch\n      if (this.#valList[index as Index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || bf.__staleWhileFetching === undefined\n        if (del) {\n          this.#delete(k, 'fetch')\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.#valList[index as Index] = bf.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && bf.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return bf.__staleWhileFetching\n      } else if (bf.__returned === bf) {\n        throw er\n      }\n    }\n\n    const pcall = (\n      res: (v: V | undefined) => void,\n      rej: (e: any) => void\n    ) => {\n      const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n      if (fmp && fmp instanceof Promise) {\n        fmp.then(v => res(v === undefined ? undefined : v), rej)\n      }\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res(undefined)\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    const bf: BackgroundFetch = Object.assign(p, {\n      __abortController: ac,\n      __staleWhileFetching: v,\n      __returned: undefined,\n    })\n\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, bf, { ...fetchOpts.options, status: undefined })\n      index = this.#keyMap.get(k)\n    } else {\n      this.#valList[index] = bf\n    }\n    return bf\n  }\n\n  #isBackgroundFetch(p: any): p is BackgroundFetch {\n    if (!this.#hasFetchMethod) return false\n    const b = p as BackgroundFetch\n    return (\n      !!b &&\n      b instanceof Promise &&\n      b.hasOwnProperty('__staleWhileFetching') &&\n      b.__abortController instanceof AC\n    )\n  }\n\n  /**\n   * Make an asynchronous cached fetch using the\n   * {@link LRUCache.OptionsBase.fetchMethod} function.\n   *\n   * If the value is in the cache and not stale, then the returned\n   * Promise resolves to the value.\n   *\n   * If not in the cache, or beyond its TTL staleness, then\n   * `fetchMethod(key, staleValue, { options, signal, context })` is\n   * called, and the value returned will be added to the cache once\n   * resolved.\n   *\n   * If called with `allowStale`, and an asynchronous fetch is\n   * currently in progress to reload a stale value, then the former\n   * stale value will be returned.\n   *\n   * If called with `forceRefresh`, then the cached item will be\n   * re-fetched, even if it is not stale. However, if `allowStale` is also\n   * set, then the old value will still be returned. This is useful\n   * in cases where you want to force a reload of a cached value. If\n   * a background fetch is already in progress, then `forceRefresh`\n   * has no effect.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n   * {@link LRUCache.FetchOptions.signal},\n   * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n   * determined by the FIRST fetch() call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   *\n   * If {@link LRUCache.OptionsBase.fetchMethod} is not specified, then this is\n   * effectively an alias for `Promise.resolve(cache.get(key))`.\n   *\n   * When the fetch method resolves to a value, if the fetch has not\n   * been aborted due to deletion, eviction, or being overwritten,\n   * then it is added to the cache using the options provided.\n   *\n   * If the key is evicted or deleted before the `fetchMethod`\n   * resolves, then the AbortSignal passed to the `fetchMethod` will\n   * receive an `abort` event, and the promise returned by `fetch()`\n   * will reject with the reason for the abort.\n   *\n   * If a `signal` is passed to the `fetch()` call, then aborting the\n   * signal will abort the fetch and cause the `fetch()` promise to\n   * reject with the reason provided.\n   *\n   * **Setting `context`**\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the {@link LRUCache} constructor, then all\n   * calls to `cache.fetch()` _must_ provide a `context` option. If\n   * set to `undefined` or `void`, then calls to fetch _must not_\n   * provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that\n   * might be relevant in the course of fetching the data. It is only\n   * relevant for the course of a single `fetch()` operation, and\n   * discarded afterwards.\n   *\n   * **Note: `fetch()` calls are inflight-unique**\n   *\n   * If you call `fetch()` multiple times with the same key value,\n   * then every call after the first will resolve on the same\n   * promise1,\n   * _even if they have different settings that would otherwise change\n   * the behavior of the fetch_, such as `noDeleteOnFetchRejection`\n   * or `ignoreFetchAbort`.\n   *\n   * In most cases, this is not a problem (in fact, only fetching\n   * something once is what you probably want, if you're caching in\n   * the first place). If you are changing the fetch() options\n   * dramatically between runs, there's a good chance that you might\n   * be trying to fit divergent semantics into a single object, and\n   * would be better off with multiple cache instances.\n   *\n   * **1**: Ie, they're not the \"same Promise\", but they resolve at\n   * the same time, because they're both waiting on the same\n   * underlying fetchMethod response.\n   */\n\n  fetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : LRUCache.FetchOptionsWithContext\n  ): Promise\n\n  // this overload not allowed if context is required\n  fetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : never\n  ): Promise\n\n  async fetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions = {}\n  ): Promise {\n    const {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      context,\n      forceRefresh = false,\n      status,\n      signal,\n    } = fetchOptions\n\n    if (!this.#hasFetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.#keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.#backgroundFetch(k, index, options, context)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.#isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        if (status) this.#statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.#backgroundFetch(k, index, options, context)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  /**\n   * In some cases, `cache.fetch()` may resolve to `undefined`, either because\n   * a {@link LRUCache.OptionsBase#fetchMethod} was not provided (turning\n   * `cache.fetch(k)` into just an async wrapper around `cache.get(k)`) or\n   * because `ignoreFetchAbort` was specified (either to the constructor or\n   * in the {@link LRUCache.FetchOptions}). Also, the\n   * {@link OptionsBase.fetchMethod} may return `undefined` or `void`, making\n   * the test even more complicated.\n   *\n   * Because inferring the cases where `undefined` might be returned are so\n   * cumbersome, but testing for `undefined` can also be annoying, this method\n   * can be used, which will reject if `this.fetch()` resolves to undefined.\n   */\n  forceFetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : LRUCache.FetchOptionsWithContext\n  ): Promise\n  // this overload not allowed if context is required\n  forceFetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : never\n  ): Promise\n  async forceFetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions = {}\n  ): Promise {\n    const v = await this.fetch(\n      k,\n      fetchOptions as unknown extends FC\n        ? LRUCache.FetchOptions\n        : FC extends undefined | void\n        ? LRUCache.FetchOptionsNoContext\n        : LRUCache.FetchOptionsWithContext\n    )\n    if (v === undefined) throw new Error('fetch() returned undefined')\n    return v\n  }\n\n  /**\n   * If the key is found in the cache, then this is equivalent to\n   * {@link LRUCache#get}. If not, in the cache, then calculate the value using\n   * the {@link LRUCache.OptionsBase.memoMethod}, and add it to the cache.\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the LRUCache constructor, then all calls to `cache.memo()`\n   * _must_ provide a `context` option. If set to `undefined` or `void`, then\n   * calls to memo _must not_ provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that might be\n   * relevant in the course of fetching the data. It is only relevant for the\n   * course of a single `memo()` operation, and discarded afterwards.\n   */\n  memo(\n    k: K,\n    memoOptions: unknown extends FC\n      ? LRUCache.MemoOptions\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext\n      : LRUCache.MemoOptionsWithContext\n  ): V\n  // this overload not allowed if context is required\n  memo(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    memoOptions?: unknown extends FC\n      ? LRUCache.MemoOptions\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext\n      : never\n  ): V\n  memo(k: K, memoOptions: LRUCache.MemoOptions = {}) {\n    const memoMethod = this.#memoMethod\n    if (!memoMethod) {\n      throw new Error('no memoMethod provided to constructor')\n    }\n    const { context, forceRefresh, ...options } = memoOptions\n    const v = this.get(k, options)\n    if (!forceRefresh && v !== undefined) return v\n    const vv = memoMethod(k, v, {\n      options,\n      context,\n    } as LRUCache.MemoizerOptions)\n    this.set(k, vv, options)\n    return vv\n  }\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(k: K, getOptions: LRUCache.GetOptions = {}) {\n    const {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = getOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.#valList[index]\n      const fetching = this.#isBackgroundFetch(value)\n      if (status) this.#statusTTL(status, index)\n      if (this.#isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.#delete(k, 'expire')\n          }\n          if (status && allowStale) status.returnedStale = true\n          return allowStale ? value : undefined\n        } else {\n          if (\n            status &&\n            allowStale &&\n            value.__staleWhileFetching !== undefined\n          ) {\n            status.returnedStale = true\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  #connect(p: Index, n: Index) {\n    this.#prev[n] = p\n    this.#next[p] = n\n  }\n\n  #moveToTail(index: Index): void {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.#tail) {\n      if (index === this.#head) {\n        this.#head = this.#next[index] as Index\n      } else {\n        this.#connect(\n          this.#prev[index] as Index,\n          this.#next[index] as Index\n        )\n      }\n      this.#connect(this.#tail, index)\n      this.#tail = index\n    }\n  }\n\n  /**\n   * Deletes a key out of the cache.\n   *\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(k: K) {\n    return this.#delete(k, 'delete')\n  }\n\n  #delete(k: K, reason: LRUCache.DisposeReason) {\n    let deleted = false\n    if (this.#size !== 0) {\n      const index = this.#keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.#size === 1) {\n          this.#clear(reason)\n        } else {\n          this.#removeItemSize(index)\n          const v = this.#valList[index]\n          if (this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n              this.#dispose?.(v as V, k, reason)\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([v as V, k, reason])\n            }\n          }\n          this.#keyMap.delete(k)\n          this.#keyList[index] = undefined\n          this.#valList[index] = undefined\n          if (index === this.#tail) {\n            this.#tail = this.#prev[index] as Index\n          } else if (index === this.#head) {\n            this.#head = this.#next[index] as Index\n          } else {\n            const pi = this.#prev[index] as number\n            this.#next[pi] = this.#next[index] as number\n            const ni = this.#next[index] as number\n            this.#prev[ni] = this.#prev[index] as number\n          }\n          this.#size--\n          this.#free.push(index)\n        }\n      }\n    }\n    if (this.#hasDisposeAfter && this.#disposed?.length) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    return this.#clear('delete')\n  }\n  #clear(reason: LRUCache.DisposeReason) {\n    for (const index of this.#rindexes({ allowStale: true })) {\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.#keyList[index]\n        if (this.#hasDispose) {\n          this.#dispose?.(v as V, k as K, reason)\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v as V, k as K, reason])\n        }\n      }\n    }\n\n    this.#keyMap.clear()\n    this.#valList.fill(undefined)\n    this.#keyList.fill(undefined)\n    if (this.#ttls && this.#starts) {\n      this.#ttls.fill(0)\n      this.#starts.fill(0)\n    }\n    if (this.#sizes) {\n      this.#sizes.fill(0)\n    }\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free.length = 0\n    this.#calculatedSize = 0\n    this.#size = 0\n    if (this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n  }\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js
new file mode 100644
index 00000000..4571d025
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js
@@ -0,0 +1,2 @@
+var G=(l,t,e)=>{if(!t.has(l))throw TypeError("Cannot "+e)};var I=(l,t,e)=>(G(l,t,"read from private field"),e?e.call(l):t.get(l)),j=(l,t,e)=>{if(t.has(l))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(l):t.set(l,e)},x=(l,t,e,i)=>(G(l,t,"write to private field"),i?i.call(l,e):t.set(l,e),e);var T=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,P=new Set,M=typeof process=="object"&&process?process:{},H=(l,t,e,i)=>{typeof M.emitWarning=="function"?M.emitWarning(l,t,e,i):console.error(`[${e}] ${t}: ${l}`)},W=globalThis.AbortController,N=globalThis.AbortSignal;if(typeof W>"u"){N=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(i,s){this._onabort.push(s)}},W=class{constructor(){t()}signal=new N;abort(i){if(!this.signal.aborted){this.signal.reason=i,this.signal.aborted=!0;for(let s of this.signal._onabort)s(i);this.signal.onabort?.(i)}}};let l=M.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",t=()=>{l&&(l=!1,H("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}var V=l=>!P.has(l),Y=Symbol("type"),A=l=>l&&l===Math.floor(l)&&l>0&&isFinite(l),k=l=>A(l)?l<=Math.pow(2,8)?Uint8Array:l<=Math.pow(2,16)?Uint16Array:l<=Math.pow(2,32)?Uint32Array:l<=Number.MAX_SAFE_INTEGER?O:null:null,O=class extends Array{constructor(t){super(t),this.fill(0)}},z,E=class{heap;length;static create(t){let e=k(t);if(!e)return[];x(E,z,!0);let i=new E(t,e);return x(E,z,!1),i}constructor(t,e){if(!I(E,z))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new e(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}},R=E;z=new WeakMap,j(R,z,!1);var D=class{#g;#f;#p;#w;#R;#W;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#n;#S;#s;#i;#t;#l;#c;#o;#h;#_;#r;#m;#b;#u;#y;#O;#a;static unsafeExposeInternals(t){return{starts:t.#b,ttls:t.#u,sizes:t.#m,keyMap:t.#s,keyList:t.#i,valList:t.#t,next:t.#l,prev:t.#c,get head(){return t.#o},get tail(){return t.#h},free:t.#_,isBackgroundFetch:e=>t.#e(e),backgroundFetch:(e,i,s,n)=>t.#x(e,i,s,n),moveToTail:e=>t.#C(e),indexes:e=>t.#A(e),rindexes:e=>t.#F(e),isStale:e=>t.#d(e)}}get max(){return this.#g}get maxSize(){return this.#f}get calculatedSize(){return this.#S}get size(){return this.#n}get fetchMethod(){return this.#R}get memoMethod(){return this.#W}get dispose(){return this.#p}get disposeAfter(){return this.#w}constructor(t){let{max:e=0,ttl:i,ttlResolution:s=1,ttlAutopurge:n,updateAgeOnGet:h,updateAgeOnHas:o,allowStale:r,dispose:g,disposeAfter:m,noDisposeOnSet:f,noUpdateTTL:u,maxSize:c=0,maxEntrySize:F=0,sizeCalculation:d,fetchMethod:S,memoMethod:a,noDeleteOnFetchRejection:w,noDeleteOnStaleGet:b,allowStaleOnFetchRejection:p,allowStaleOnFetchAbort:_,ignoreFetchAbort:v}=t;if(e!==0&&!A(e))throw new TypeError("max option must be a nonnegative integer");let y=e?k(e):Array;if(!y)throw new Error("invalid max value: "+e);if(this.#g=e,this.#f=c,this.maxEntrySize=F||this.#f,this.sizeCalculation=d,this.sizeCalculation){if(!this.#f&&!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")}if(a!==void 0&&typeof a!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#W=a,S!==void 0&&typeof S!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#R=S,this.#O=!!S,this.#s=new Map,this.#i=new Array(e).fill(void 0),this.#t=new Array(e).fill(void 0),this.#l=new y(e),this.#c=new y(e),this.#o=0,this.#h=0,this.#_=R.create(e),this.#n=0,this.#S=0,typeof g=="function"&&(this.#p=g),typeof m=="function"?(this.#w=m,this.#r=[]):(this.#w=void 0,this.#r=void 0),this.#y=!!this.#p,this.#a=!!this.#w,this.noDisposeOnSet=!!f,this.noUpdateTTL=!!u,this.noDeleteOnFetchRejection=!!w,this.allowStaleOnFetchRejection=!!p,this.allowStaleOnFetchAbort=!!_,this.ignoreFetchAbort=!!v,this.maxEntrySize!==0){if(this.#f!==0&&!A(this.#f))throw new TypeError("maxSize must be a positive integer if specified");if(!A(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#P()}if(this.allowStale=!!r,this.noDeleteOnStaleGet=!!b,this.updateAgeOnGet=!!h,this.updateAgeOnHas=!!o,this.ttlResolution=A(s)||s===0?s:1,this.ttlAutopurge=!!n,this.ttl=i||0,this.ttl){if(!A(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#M()}if(this.#g===0&&this.ttl===0&&this.#f===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#g&&!this.#f){let C="LRU_CACHE_UNBOUNDED";V(C)&&(P.add(C),H("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",C,D))}}getRemainingTTL(t){return this.#s.has(t)?1/0:0}#M(){let t=new O(this.#g),e=new O(this.#g);this.#u=t,this.#b=e,this.#U=(n,h,o=T.now())=>{if(e[n]=h!==0?o:0,t[n]=h,h!==0&&this.ttlAutopurge){let r=setTimeout(()=>{this.#d(n)&&this.#T(this.#i[n],"expire")},h+1);r.unref&&r.unref()}},this.#z=n=>{e[n]=t[n]!==0?T.now():0},this.#E=(n,h)=>{if(t[h]){let o=t[h],r=e[h];if(!o||!r)return;n.ttl=o,n.start=r,n.now=i||s();let g=n.now-r;n.remainingTTL=o-g}};let i=0,s=()=>{let n=T.now();if(this.ttlResolution>0){i=n;let h=setTimeout(()=>i=0,this.ttlResolution);h.unref&&h.unref()}return n};this.getRemainingTTL=n=>{let h=this.#s.get(n);if(h===void 0)return 0;let o=t[h],r=e[h];if(!o||!r)return 1/0;let g=(i||s())-r;return o-g},this.#d=n=>{let h=e[n],o=t[n];return!!o&&!!h&&(i||s())-h>o}}#z=()=>{};#E=()=>{};#U=()=>{};#d=()=>!1;#P(){let t=new O(this.#g);this.#S=0,this.#m=t,this.#v=e=>{this.#S-=t[e],t[e]=0},this.#G=(e,i,s,n)=>{if(this.#e(i))return 0;if(!A(s))if(n){if(typeof n!="function")throw new TypeError("sizeCalculation must be a function");if(s=n(i,e),!A(s))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 s},this.#D=(e,i,s)=>{if(t[e]=i,this.#f){let n=this.#f-t[e];for(;this.#S>n;)this.#L(!0)}this.#S+=t[e],s&&(s.entrySize=i,s.totalCalculatedSize=this.#S)}}#v=t=>{};#D=(t,e,i)=>{};#G=(t,e,i,s)=>{if(i||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#A({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#h;!(!this.#I(e)||((t||!this.#d(e))&&(yield e),e===this.#o));)e=this.#c[e]}*#F({allowStale:t=this.allowStale}={}){if(this.#n)for(let e=this.#o;!(!this.#I(e)||((t||!this.#d(e))&&(yield e),e===this.#h));)e=this.#l[e]}#I(t){return t!==void 0&&this.#s.get(this.#i[t])===t}*entries(){for(let t of this.#A())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*rentries(){for(let t of this.#F())this.#t[t]!==void 0&&this.#i[t]!==void 0&&!this.#e(this.#t[t])&&(yield[this.#i[t],this.#t[t]])}*keys(){for(let t of this.#A()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*rkeys(){for(let t of this.#F()){let e=this.#i[t];e!==void 0&&!this.#e(this.#t[t])&&(yield e)}}*values(){for(let t of this.#A())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}*rvalues(){for(let t of this.#F())this.#t[t]!==void 0&&!this.#e(this.#t[t])&&(yield this.#t[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,e={}){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;if(n!==void 0&&t(n,this.#i[i],this))return this.get(this.#i[i],e)}}forEach(t,e=this){for(let i of this.#A()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}rforEach(t,e=this){for(let i of this.#F()){let s=this.#t[i],n=this.#e(s)?s.__staleWhileFetching:s;n!==void 0&&t.call(e,n,this.#i[i],this)}}purgeStale(){let t=!1;for(let e of this.#F({allowStale:!0}))this.#d(e)&&(this.#T(this.#i[e],"expire"),t=!0);return t}info(t){let e=this.#s.get(t);if(e===void 0)return;let i=this.#t[e],s=this.#e(i)?i.__staleWhileFetching:i;if(s===void 0)return;let n={value:s};if(this.#u&&this.#b){let h=this.#u[e],o=this.#b[e];if(h&&o){let r=h-(T.now()-o);n.ttl=r,n.start=Date.now()}}return this.#m&&(n.size=this.#m[e]),n}dump(){let t=[];for(let e of this.#A({allowStale:!0})){let i=this.#i[e],s=this.#t[e],n=this.#e(s)?s.__staleWhileFetching:s;if(n===void 0||i===void 0)continue;let h={value:n};if(this.#u&&this.#b){h.ttl=this.#u[e];let o=T.now()-this.#b[e];h.start=Math.floor(Date.now()-o)}this.#m&&(h.size=this.#m[e]),t.unshift([i,h])}return t}load(t){this.clear();for(let[e,i]of t){if(i.start){let s=Date.now()-i.start;i.start=T.now()-s}this.set(e,i.value,i)}}set(t,e,i={}){if(e===void 0)return this.delete(t),this;let{ttl:s=this.ttl,start:n,noDisposeOnSet:h=this.noDisposeOnSet,sizeCalculation:o=this.sizeCalculation,status:r}=i,{noUpdateTTL:g=this.noUpdateTTL}=i,m=this.#G(t,e,i.size||0,o);if(this.maxEntrySize&&m>this.maxEntrySize)return r&&(r.set="miss",r.maxEntrySizeExceeded=!0),this.#T(t,"set"),this;let f=this.#n===0?void 0:this.#s.get(t);if(f===void 0)f=this.#n===0?this.#h:this.#_.length!==0?this.#_.pop():this.#n===this.#g?this.#L(!1):this.#n,this.#i[f]=t,this.#t[f]=e,this.#s.set(t,f),this.#l[this.#h]=f,this.#c[f]=this.#h,this.#h=f,this.#n++,this.#D(f,m,r),r&&(r.set="add"),g=!1;else{this.#C(f);let u=this.#t[f];if(e!==u){if(this.#O&&this.#e(u)){u.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:c}=u;c!==void 0&&!h&&(this.#y&&this.#p?.(c,t,"set"),this.#a&&this.#r?.push([c,t,"set"]))}else h||(this.#y&&this.#p?.(u,t,"set"),this.#a&&this.#r?.push([u,t,"set"]));if(this.#v(f),this.#D(f,m,r),this.#t[f]=e,r){r.set="replace";let c=u&&this.#e(u)?u.__staleWhileFetching:u;c!==void 0&&(r.oldValue=c)}}else r&&(r.set="update")}if(s!==0&&!this.#u&&this.#M(),this.#u&&(g||this.#U(f,s,n),r&&this.#E(r,f)),!h&&this.#a&&this.#r){let u=this.#r,c;for(;c=u?.shift();)this.#w?.(...c)}return this}pop(){try{for(;this.#n;){let t=this.#t[this.#o];if(this.#L(!0),this.#e(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(t!==void 0)return t}}finally{if(this.#a&&this.#r){let t=this.#r,e;for(;e=t?.shift();)this.#w?.(...e)}}}#L(t){let e=this.#o,i=this.#i[e],s=this.#t[e];return this.#O&&this.#e(s)?s.__abortController.abort(new Error("evicted")):(this.#y||this.#a)&&(this.#y&&this.#p?.(s,i,"evict"),this.#a&&this.#r?.push([s,i,"evict"])),this.#v(e),t&&(this.#i[e]=void 0,this.#t[e]=void 0,this.#_.push(e)),this.#n===1?(this.#o=this.#h=0,this.#_.length=0):this.#o=this.#l[e],this.#s.delete(i),this.#n--,e}has(t,e={}){let{updateAgeOnHas:i=this.updateAgeOnHas,status:s}=e,n=this.#s.get(t);if(n!==void 0){let h=this.#t[n];if(this.#e(h)&&h.__staleWhileFetching===void 0)return!1;if(this.#d(n))s&&(s.has="stale",this.#E(s,n));else return i&&this.#z(n),s&&(s.has="hit",this.#E(s,n)),!0}else s&&(s.has="miss");return!1}peek(t,e={}){let{allowStale:i=this.allowStale}=e,s=this.#s.get(t);if(s===void 0||!i&&this.#d(s))return;let n=this.#t[s];return this.#e(n)?n.__staleWhileFetching:n}#x(t,e,i,s){let n=e===void 0?void 0:this.#t[e];if(this.#e(n))return n;let h=new W,{signal:o}=i;o?.addEventListener("abort",()=>h.abort(o.reason),{signal:h.signal});let r={signal:h.signal,options:i,context:s},g=(d,S=!1)=>{let{aborted:a}=h.signal,w=i.ignoreFetchAbort&&d!==void 0;if(i.status&&(a&&!S?(i.status.fetchAborted=!0,i.status.fetchError=h.signal.reason,w&&(i.status.fetchAbortIgnored=!0)):i.status.fetchResolved=!0),a&&!w&&!S)return f(h.signal.reason);let b=c;return this.#t[e]===c&&(d===void 0?b.__staleWhileFetching?this.#t[e]=b.__staleWhileFetching:this.#T(t,"fetch"):(i.status&&(i.status.fetchUpdated=!0),this.set(t,d,r.options))),d},m=d=>(i.status&&(i.status.fetchRejected=!0,i.status.fetchError=d),f(d)),f=d=>{let{aborted:S}=h.signal,a=S&&i.allowStaleOnFetchAbort,w=a||i.allowStaleOnFetchRejection,b=w||i.noDeleteOnFetchRejection,p=c;if(this.#t[e]===c&&(!b||p.__staleWhileFetching===void 0?this.#T(t,"fetch"):a||(this.#t[e]=p.__staleWhileFetching)),w)return i.status&&p.__staleWhileFetching!==void 0&&(i.status.returnedStale=!0),p.__staleWhileFetching;if(p.__returned===p)throw d},u=(d,S)=>{let a=this.#R?.(t,n,r);a&&a instanceof Promise&&a.then(w=>d(w===void 0?void 0:w),S),h.signal.addEventListener("abort",()=>{(!i.ignoreFetchAbort||i.allowStaleOnFetchAbort)&&(d(void 0),i.allowStaleOnFetchAbort&&(d=w=>g(w,!0)))})};i.status&&(i.status.fetchDispatched=!0);let c=new Promise(u).then(g,m),F=Object.assign(c,{__abortController:h,__staleWhileFetching:n,__returned:void 0});return e===void 0?(this.set(t,F,{...r.options,status:void 0}),e=this.#s.get(t)):this.#t[e]=F,F}#e(t){if(!this.#O)return!1;let e=t;return!!e&&e instanceof Promise&&e.hasOwnProperty("__staleWhileFetching")&&e.__abortController instanceof W}async fetch(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,ttl:h=this.ttl,noDisposeOnSet:o=this.noDisposeOnSet,size:r=0,sizeCalculation:g=this.sizeCalculation,noUpdateTTL:m=this.noUpdateTTL,noDeleteOnFetchRejection:f=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:u=this.allowStaleOnFetchRejection,ignoreFetchAbort:c=this.ignoreFetchAbort,allowStaleOnFetchAbort:F=this.allowStaleOnFetchAbort,context:d,forceRefresh:S=!1,status:a,signal:w}=e;if(!this.#O)return a&&(a.fetch="get"),this.get(t,{allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,status:a});let b={allowStale:i,updateAgeOnGet:s,noDeleteOnStaleGet:n,ttl:h,noDisposeOnSet:o,size:r,sizeCalculation:g,noUpdateTTL:m,noDeleteOnFetchRejection:f,allowStaleOnFetchRejection:u,allowStaleOnFetchAbort:F,ignoreFetchAbort:c,status:a,signal:w},p=this.#s.get(t);if(p===void 0){a&&(a.fetch="miss");let _=this.#x(t,p,b,d);return _.__returned=_}else{let _=this.#t[p];if(this.#e(_)){let U=i&&_.__staleWhileFetching!==void 0;return a&&(a.fetch="inflight",U&&(a.returnedStale=!0)),U?_.__staleWhileFetching:_.__returned=_}let v=this.#d(p);if(!S&&!v)return a&&(a.fetch="hit"),this.#C(p),s&&this.#z(p),a&&this.#E(a,p),_;let y=this.#x(t,p,b,d),L=y.__staleWhileFetching!==void 0&&i;return a&&(a.fetch=v?"stale":"refresh",L&&v&&(a.returnedStale=!0)),L?y.__staleWhileFetching:y.__returned=y}}async forceFetch(t,e={}){let i=await this.fetch(t,e);if(i===void 0)throw new Error("fetch() returned undefined");return i}memo(t,e={}){let i=this.#W;if(!i)throw new Error("no memoMethod provided to constructor");let{context:s,forceRefresh:n,...h}=e,o=this.get(t,h);if(!n&&o!==void 0)return o;let r=i(t,o,{options:h,context:s});return this.set(t,r,h),r}get(t,e={}){let{allowStale:i=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:n=this.noDeleteOnStaleGet,status:h}=e,o=this.#s.get(t);if(o!==void 0){let r=this.#t[o],g=this.#e(r);return h&&this.#E(h,o),this.#d(o)?(h&&(h.get="stale"),g?(h&&i&&r.__staleWhileFetching!==void 0&&(h.returnedStale=!0),i?r.__staleWhileFetching:void 0):(n||this.#T(t,"expire"),h&&i&&(h.returnedStale=!0),i?r:void 0)):(h&&(h.get="hit"),g?r.__staleWhileFetching:(this.#C(o),s&&this.#z(o),r))}else h&&(h.get="miss")}#j(t,e){this.#c[e]=t,this.#l[t]=e}#C(t){t!==this.#h&&(t===this.#o?this.#o=this.#l[t]:this.#j(this.#c[t],this.#l[t]),this.#j(this.#h,t),this.#h=t)}delete(t){return this.#T(t,"delete")}#T(t,e){let i=!1;if(this.#n!==0){let s=this.#s.get(t);if(s!==void 0)if(i=!0,this.#n===1)this.#N(e);else{this.#v(s);let n=this.#t[s];if(this.#e(n)?n.__abortController.abort(new Error("deleted")):(this.#y||this.#a)&&(this.#y&&this.#p?.(n,t,e),this.#a&&this.#r?.push([n,t,e])),this.#s.delete(t),this.#i[s]=void 0,this.#t[s]=void 0,s===this.#h)this.#h=this.#c[s];else if(s===this.#o)this.#o=this.#l[s];else{let h=this.#c[s];this.#l[h]=this.#l[s];let o=this.#l[s];this.#c[o]=this.#c[s]}this.#n--,this.#_.push(s)}}if(this.#a&&this.#r?.length){let s=this.#r,n;for(;n=s?.shift();)this.#w?.(...n)}return i}clear(){return this.#N("delete")}#N(t){for(let e of this.#F({allowStale:!0})){let i=this.#t[e];if(this.#e(i))i.__abortController.abort(new Error("deleted"));else{let s=this.#i[e];this.#y&&this.#p?.(i,s,t),this.#a&&this.#r?.push([i,s,t])}}if(this.#s.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#u&&this.#b&&(this.#u.fill(0),this.#b.fill(0)),this.#m&&this.#m.fill(0),this.#o=0,this.#h=0,this.#_.length=0,this.#S=0,this.#n=0,this.#a&&this.#r){let e=this.#r,i;for(;i=e?.shift();)this.#w?.(...i)}}};export{D as LRUCache};
+//# sourceMappingURL=index.min.js.map
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map
new file mode 100644
index 00000000..4d631fa5
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map
@@ -0,0 +1,7 @@
+{
+  "version": 3,
+  "sources": ["../../src/index.ts"],
+  "sourcesContent": ["/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst warned = new Set()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n  typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n  msg: string,\n  type: string,\n  code: string,\n  fn: ForC\n) => {\n  typeof PROCESS.emitWarning === 'function'\n    ? PROCESS.emitWarning(msg, type, code, fn)\n    : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n  //@ts-ignore\n  AS = class AbortSignal {\n    onabort?: (...a: any[]) => any\n    _onabort: ((...a: any[]) => any)[] = []\n    reason?: any\n    aborted: boolean = false\n    addEventListener(_: string, fn: (...a: any[]) => any) {\n      this._onabort.push(fn)\n    }\n  }\n  //@ts-ignore\n  AC = class AbortController {\n    constructor() {\n      warnACPolyfill()\n    }\n    signal = new AS()\n    abort(reason: any) {\n      if (this.signal.aborted) return\n      //@ts-ignore\n      this.signal.reason = reason\n      //@ts-ignore\n      this.signal.aborted = true\n      //@ts-ignore\n      for (const fn of this.signal._onabort) {\n        fn(reason)\n      }\n      this.signal.onabort?.(reason)\n    }\n  }\n  let printACPolyfillWarning =\n    PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n  const warnACPolyfill = () => {\n    if (!printACPolyfillWarning) return\n    printACPolyfillWarning = false\n    emitWarning(\n      'AbortController is not defined. If using lru-cache in ' +\n        'node 14, load an AbortController polyfill from the ' +\n        '`node-abort-controller` package. A minimal polyfill is ' +\n        'provided for use by LRUCache.fetch(), but it should not be ' +\n        'relied upon in other contexts (eg, passing it to other APIs that ' +\n        'use AbortController/AbortSignal might have undesirable effects). ' +\n        'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n      'NO_ABORT_CONTROLLER',\n      'ENOTSUP',\n      warnACPolyfill\n    )\n  }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\nexport type PosInt = number & { [TYPE]: 'Positive Integer' }\nexport type Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n  n && n === Math.floor(n) && n > 0 && isFinite(n)\n\nexport type UintArray = Uint8Array | Uint16Array | Uint32Array\nexport type NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array {\n  constructor(size: number) {\n    super(size)\n    this.fill(0)\n  }\n}\nexport type { ZeroArray }\nexport type { Stack }\n\nexport type StackLike = Stack | Index[]\nclass Stack {\n  heap: NumberArray\n  length: number\n  // private constructor\n  static #constructing: boolean = false\n  static create(max: number): StackLike {\n    const HeapCls = getUintArray(max)\n    if (!HeapCls) return []\n    Stack.#constructing = true\n    const s = new Stack(max, HeapCls)\n    Stack.#constructing = false\n    return s\n  }\n  constructor(\n    max: number,\n    HeapCls: { new (n: number): NumberArray }\n  ) {\n    /* c8 ignore start */\n    if (!Stack.#constructing) {\n      throw new TypeError('instantiate Stack using Stack.create(n)')\n    }\n    /* c8 ignore stop */\n    this.heap = new HeapCls(max)\n    this.length = 0\n  }\n  push(n: Index) {\n    this.heap[this.length++] = n\n  }\n  pop(): Index {\n    return this.heap[--this.length] as Index\n  }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch = Promise & {\n  __returned: BackgroundFetch | undefined\n  __abortController: AbortController\n  __staleWhileFetching: V | undefined\n}\n\nexport type DisposeTask = [\n  value: V,\n  key: K,\n  reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n  /**\n   * An integer greater than 0, reflecting the calculated size of items\n   */\n  export type Size = number\n\n  /**\n   * Integer greater than 0, representing some number of milliseconds, or the\n   * time at which a TTL started counting from.\n   */\n  export type Milliseconds = number\n\n  /**\n   * An integer greater than 0, reflecting a number of items\n   */\n  export type Count = number\n\n  /**\n   * The reason why an item was removed from the cache, passed\n   * to the {@link Disposer} methods.\n   *\n   * - `evict`: The item was evicted because it is the least recently used,\n   *   and the cache is full.\n   * - `set`: A new value was set, overwriting the old value being disposed.\n   * - `delete`: The item was explicitly deleted, either by calling\n   *   {@link LRUCache#delete}, {@link LRUCache#clear}, or\n   *   {@link LRUCache#set} with an undefined value.\n   * - `expire`: The item was removed due to exceeding its TTL.\n   * - `fetch`: A {@link OptionsBase#fetchMethod} operation returned\n   *   `undefined` or was aborted, causing the item to be deleted.\n   */\n  export type DisposeReason =\n    | 'evict'\n    | 'set'\n    | 'delete'\n    | 'expire'\n    | 'fetch'\n  /**\n   * A method called upon item removal, passed as the\n   * {@link OptionsBase.dispose} and/or\n   * {@link OptionsBase.disposeAfter} options.\n   */\n  export type Disposer = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n\n  /**\n   * A function that returns the effective calculated size\n   * of an entry in the cache.\n   */\n  export type SizeCalculator = (value: V, key: K) => Size\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.fetchMethod} function.\n   */\n  export interface FetcherOptions {\n    signal: AbortSignal\n    options: FetcherFetchOptions\n    /**\n     * Object provided in the {@link FetchOptions.context} option to\n     * {@link LRUCache#fetch}\n     */\n    context: FC\n  }\n\n  /**\n   * Occasionally, it may be useful to track the internal behavior of the\n   * cache, particularly for logging, debugging, or for behavior within the\n   * `fetchMethod`. To do this, you can pass a `status` object to the\n   * {@link LRUCache#fetch}, {@link LRUCache#get}, {@link LRUCache#set},\n   * {@link LRUCache#memo}, and {@link LRUCache#has} methods.\n   *\n   * The `status` option should be a plain JavaScript object. The following\n   * fields will be set on it appropriately, depending on the situation.\n   */\n  export interface Status {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: Milliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: Milliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: Milliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: Milliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    entrySize?: Size\n\n    /**\n     * The total calculated size of the cache, if sizes are used.\n     */\n    totalCalculatedSize?: Size\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link OptionsBase.maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link LRUCache#has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link LRUCache#fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no {@link OptionsBase.fetchMethod}, so\n     *   {@link LRUCache#get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link FetchOptions.forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link OptionsBase.fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to\n     * {@link OptionsBase.fetchMethod}\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link OptionsBase.fetchMethod}, or the reason for an\n     * AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link LRUCache#get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value\n     *   is present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#fetch}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link OptionsBase.noDeleteOnFetchRejection},\n   * {@link OptionsBase.allowStaleOnFetchRejection},\n   * {@link FetchOptions.forceRefresh}, and\n   * {@link FetcherOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the fetchMethod is called.\n   */\n  export interface FetcherFetchOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    status?: Status\n    size?: Size\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#fetch} method.\n   */\n  export interface FetchOptions\n    extends FetcherFetchOptions {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.fetchMethod} as\n     * the {@link FetcherOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    signal?: AbortSignal\n    status?: Status\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface FetchOptionsWithContext\n    extends FetchOptions {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface FetchOptionsNoContext\n    extends FetchOptions {\n    context?: undefined\n  }\n\n  export interface MemoOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.memoMethod} as\n     * the {@link MemoizerOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    status?: Status\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface MemoOptionsWithContext\n    extends MemoOptions {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#memo} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface MemoOptionsNoContext\n    extends MemoOptions {\n    context?: undefined\n  }\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.memoMethod} function.\n   */\n  export interface MemoizerOptions {\n    options: MemoizerMemoOptions\n    /**\n     * Object provided in the {@link MemoOptions.context} option to\n     * {@link LRUCache#memo}\n     */\n    context: FC\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#memo}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link MemoOptions.forceRefresh}, and\n   * {@link MemoerOptions.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.memoMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the memoMethod is called.\n   */\n  export interface MemoizerMemoOptions\n    extends Pick<\n      OptionsBase,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n    > {\n    status?: Status\n    size?: Size\n    start?: Milliseconds\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#has} method.\n   */\n  export interface HasOptions\n    extends Pick, 'updateAgeOnHas'> {\n    status?: Status\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#get} method.\n   */\n  export interface GetOptions\n    extends Pick<\n      OptionsBase,\n      'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n    > {\n    status?: Status\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#peek} method.\n   */\n  export interface PeekOptions\n    extends Pick, 'allowStale'> {}\n\n  /**\n   * Options that may be passed to the {@link LRUCache#set} method.\n   */\n  export interface SetOptions\n    extends Pick<\n      OptionsBase,\n      'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n    > {\n    /**\n     * If size tracking is enabled, then setting an explicit size\n     * in the {@link LRUCache#set} call will prevent calling the\n     * {@link OptionsBase.sizeCalculation} function.\n     */\n    size?: Size\n    /**\n     * If TTL tracking is enabled, then setting an explicit start\n     * time in the {@link LRUCache#set} call will override the\n     * default time from `performance.now()` or `Date.now()`.\n     *\n     * Note that it must be a valid value for whichever time-tracking\n     * method is in use.\n     */\n    start?: Milliseconds\n    status?: Status\n  }\n\n  /**\n   * The type signature for the {@link OptionsBase.fetchMethod} option.\n   */\n  export type Fetcher = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions\n  ) => Promise | V | undefined | void\n\n  /**\n   * the type signature for the {@link OptionsBase.memoMethod} option.\n   */\n  export type Memoizer = (\n    key: K,\n    staleValue: V | undefined,\n    options: MemoizerOptions\n  ) => V\n\n  /**\n   * Options which may be passed to the {@link LRUCache} constructor.\n   *\n   * Most of these may be overridden in the various options that use\n   * them.\n   *\n   * Despite all being technically optional, the constructor requires that\n   * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n   * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n   *\n   * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n   * (and in fact required by the type definitions here) that the cache\n   * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n   * unbounded storage.\n   *\n   * All options are also available on the {@link LRUCache} instance, making\n   * it safe to pass an LRUCache instance as the options argumemnt to\n   * make another empty cache of the same type.\n   *\n   * Some options are marked as read-only, because changing them after\n   * instantiation is not safe. Changing any of the other options will of\n   * course only have an effect on subsequent method calls.\n   */\n  export interface OptionsBase {\n    /**\n     * The maximum number of items to store in the cache before evicting\n     * old entries. This is read-only on the {@link LRUCache} instance,\n     * and may not be overridden.\n     *\n     * If set, then storage space will be pre-allocated at construction\n     * time, and the cache will perform significantly faster.\n     *\n     * Note that significantly fewer items may be stored, if\n     * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n     * set.\n     *\n     * **It is strongly recommended to set a `max` to prevent unbounded growth\n     * of the cache.**\n     */\n    max?: Count\n\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed by\n     * default, and MAY live in the cache, contributing to its LRU max, long\n     * after they have expired, unless {@link OptionsBase.ttlAutopurge} is\n     * set.\n     *\n     * If set to `0` (the default value), then that means \"do not track\n     * TTL\", not \"expire immediately\".\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * This is not primarily a TTL cache, and does not make strong TTL\n     * guarantees. There is no pre-emptive pruning of expired items, but you\n     * _may_ set a TTL on the cache, and it will treat expired items as missing\n     * when they are fetched, and delete them.\n     *\n     * Optional, but must be a non-negative integer in ms if specified.\n     *\n     * This may be overridden by passing an options object to `cache.set()`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if ttl tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * If ttl tracking is enabled, and `max` and `maxSize` are not set,\n     * and `ttlAutopurge` is not set, then a warning will be emitted\n     * cautioning about the potential for unbounded memory consumption.\n     * (The TypeScript definitions will also discourage this.)\n     */\n    ttl?: Milliseconds\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     */\n    ttlResolution?: Milliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     *\n     * Note that this may *significantly* degrade performance, especially if\n     * the cache is storing a large number of items. It is almost always best\n     * to just leave the stale items in the cache, and let them fall out as new\n     * items are added.\n     *\n     * Note that this means that {@link OptionsBase.allowStale} is a bit\n     * pointless, as stale items will be deleted almost as soon as they\n     * expire.\n     *\n     * Use with caution!\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever it is retrieved from cache with\n     * {@link LRUCache#get}, causing it to not expire. (It can still fall out\n     * of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * When using time-expiring entries with `ttl`, setting this to `true` will\n     * make each item's age reset to 0 whenever its presence in the cache is\n     * checked with {@link LRUCache#has}, causing it to not expire. (It can\n     * still fall out of cache based on recency of use, of course.)\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     */\n    updateAgeOnHas?: boolean\n\n    /**\n     * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n     * stale data, if available.\n     *\n     * By default, if you set `ttl`, stale items will only be deleted from the\n     * cache when you `get(key)`. That is, it's not preemptively pruning items,\n     * unless {@link OptionsBase.ttlAutopurge} is set.\n     *\n     * If you set `allowStale:true`, it'll return the stale value *as well as*\n     * deleting it. If you don't set this, then it'll return `undefined` when\n     * you try to get a stale entry.\n     *\n     * Note that when a stale entry is fetched, _even if it is returned due to\n     * `allowStale` being set_, it is removed from the cache immediately. You\n     * can suppress this behavior by setting\n     * {@link OptionsBase.noDeleteOnStaleGet}, either in the constructor, or in\n     * the options provided to {@link LRUCache#get}.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     * The `cache.has()` method will always return `false` for stale items.\n     *\n     * Only relevant if a ttl is set.\n     */\n    allowStale?: boolean\n\n    /**\n     * Function that is called on items when they are dropped from the\n     * cache, as `dispose(value, key, reason)`.\n     *\n     * This can be handy if you want to close file descriptors or do\n     * other cleanup tasks when items are no longer stored in the cache.\n     *\n     * **NOTE**: It is called _before_ the item has been fully removed\n     * from the cache, so if you want to put it right back in, you need\n     * to wait until the next tick. If you try to add it back in during\n     * the `dispose()` function call, it will break things in subtle and\n     * weird ways.\n     *\n     * Unlike several other options, this may _not_ be overridden by\n     * passing an option to `set()`, for performance reasons.\n     *\n     * The `reason` will be one of the following strings, corresponding\n     * to the reason for the item's deletion:\n     *\n     * - `evict` Item was evicted to make space for a new addition\n     * - `set` Item was overwritten by a new value\n     * - `expire` Item expired its TTL\n     * - `fetch` Item was deleted due to a failed or aborted fetch, or a\n     *   fetchMethod returning `undefined.\n     * - `delete` Item was removed by explicit `cache.delete(key)`,\n     *   `cache.clear()`, or `cache.set(key, undefined)`.\n     */\n    dispose?: Disposer\n\n    /**\n     * The same as {@link OptionsBase.dispose}, but called *after* the entry\n     * is completely removed and the cache is once again in a clean state.\n     *\n     * It is safe to add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     */\n    disposeAfter?: Disposer\n\n    /**\n     * Set to true to suppress calling the\n     * {@link OptionsBase.dispose} function if the entry key is\n     * still accessible within the cache.\n     *\n     * This may be overridden by passing an options object to\n     * {@link LRUCache#set}.\n     *\n     * Only relevant if `dispose` or `disposeAfter` are set.\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when setting a new\n     * value for an existing key (ie, when updating a value rather than\n     * inserting a new value).  Note that the TTL value is _always_ set (if\n     * provided) when adding a new entry into the cache.\n     *\n     * Has no effect if a {@link OptionsBase.ttl} is not set.\n     *\n     * May be passed as an option to {@link LRUCache#set}.\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * Set to a positive integer to track the sizes of items added to the\n     * cache, and automatically evict items in order to stay below this size.\n     * Note that this may result in fewer than `max` items being stored.\n     *\n     * Attempting to add an item to the cache whose calculated size is greater\n     * that this amount will be a no-op. The item will not be cached, and no\n     * other items will be evicted.\n     *\n     * Optional, must be a positive integer if provided.\n     *\n     * Sets `maxEntrySize` to the same value, unless a different value is\n     * provided for `maxEntrySize`.\n     *\n     * At least one of `max`, `maxSize`, or `TTL` is required. This must be a\n     * positive integer if set.\n     *\n     * Even if size tracking is enabled, **it is strongly recommended to set a\n     * `max` to prevent unbounded growth of the cache.**\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize?: Size\n\n    /**\n     * The maximum allowed size for any single item in the cache.\n     *\n     * If a larger item is passed to {@link LRUCache#set} or returned by a\n     * {@link OptionsBase.fetchMethod} or {@link OptionsBase.memoMethod}, then\n     * it will not be stored in the cache.\n     *\n     * Attempting to add an item whose calculated size is greater than\n     * this amount will not cache the item or evict any old items, but\n     * WILL delete an existing value if one is already present.\n     *\n     * Optional, must be a positive integer if provided. Defaults to\n     * the value of `maxSize` if provided.\n     */\n    maxEntrySize?: Size\n\n    /**\n     * A function that returns a number indicating the item's size.\n     *\n     * Requires {@link OptionsBase.maxSize} to be set.\n     *\n     * If not provided, and {@link OptionsBase.maxSize} or\n     * {@link OptionsBase.maxEntrySize} are set, then all\n     * {@link LRUCache#set} calls **must** provide an explicit\n     * {@link SetOptions.size} or sizeCalculation param.\n     */\n    sizeCalculation?: SizeCalculator\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#fetch}\n     *\n     * ```ts\n     * fetchMethod(key, staleValue, { signal, options, context })\n     * ```\n     *\n     * If `fetchMethod` is not provided, then `cache.fetch(key)` is equivalent\n     * to `Promise.resolve(cache.get(key))`.\n     *\n     * If at any time, `signal.aborted` is set to `true`, or if the\n     * `signal.onabort` method is called, or if it emits an `'abort'` event\n     * which you can listen to with `addEventListener`, then that means that\n     * the fetch should be abandoned. This may be passed along to async\n     * functions aware of AbortController/AbortSignal behavior.\n     *\n     * The `fetchMethod` should **only** return `undefined` or a Promise\n     * resolving to `undefined` if the AbortController signaled an `abort`\n     * event. In all other cases, it should return or resolve to a value\n     * suitable for adding to the cache.\n     *\n     * The `options` object is a union of the options that may be provided to\n     * `set()` and `get()`. If they are modified, then that will result in\n     * modifying the settings to `cache.set()` when the value is resolved, and\n     * in the case of\n     * {@link OptionsBase.noDeleteOnFetchRejection} and\n     * {@link OptionsBase.allowStaleOnFetchRejection}, the handling of\n     * `fetchMethod` failures.\n     *\n     * For example, a DNS cache may update the TTL based on the value returned\n     * from a remote DNS server by changing `options.ttl` in the `fetchMethod`.\n     */\n    fetchMethod?: Fetcher\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#memo}\n     */\n    memoMethod?: Memoizer\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link OptionsBase.fetchMethod} returns a rejected promise.\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with\n     * {@link LRUCache#get}.\n     *\n     * Note that the `get` return value will still be `undefined`\n     * unless {@link OptionsBase.allowStale} is true.\n     *\n     * When using time-expiring entries with `ttl`, by default stale\n     * items will be removed from the cache when the key is accessed\n     * with `cache.get()`.\n     *\n     * Setting this option will cause stale items to remain in the cache, until\n     * they are explicitly deleted with `cache.delete(key)`, or retrieved with\n     * `noDeleteOnStaleGet` set to `false`.\n     *\n     * This may be overridden by passing an options object to `cache.get()`.\n     *\n     * Only relevant if a ttl is used.\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a\n     * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n     * promise.\n     *\n     * This differs from using {@link OptionsBase.allowStale} in that stale\n     * data will ONLY be returned in the case that the {@link LRUCache#fetch}\n     * fails, not any other times.\n     *\n     * If a `fetchMethod` fails, and there is no stale value available, the\n     * `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` errors are\n     * suppressed.\n     *\n     * Implies `noDeleteOnFetchRejection`.\n     *\n     * This may be set in calls to `fetch()`, or defaulted on the constructor,\n     * or overridden by modifying the options object in the `fetchMethod`.\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches\n     * an `'abort'` event, whether user-triggered, or due to internal cache\n     * behavior.\n     *\n     * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n     * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n     * any value it returns will be ignored and not cached.\n     *\n     * Caveat: since fetches are aborted when a new value is explicitly\n     * set in the cache, this can lead to fetch returning a stale value,\n     * since that was the fallback value _at the moment the `fetch()` was\n     * initiated_, even though the new updated value is now present in\n     * the cache.\n     *\n     * For example:\n     *\n     * ```ts\n     * const cache = new LRUCache({\n     *   ttl: 100,\n     *   fetchMethod: async (url, oldValue, { signal }) =>  {\n     *     const res = await fetch(url, { signal })\n     *     return await res.json()\n     *   }\n     * })\n     * cache.set('https://example.com/', { some: 'data' })\n     * // 100ms go by...\n     * const result = cache.fetch('https://example.com/')\n     * cache.set('https://example.com/', { other: 'thing' })\n     * console.log(await result) // { some: 'data' }\n     * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n     * ```\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link LRUCache#fetch} calls\n     * are not immediately resolved or rejected when they are aborted, and\n     * instead take the full time to await.\n     *\n     * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n     * {@link LRUCache#fetch} calls will resolve immediately to their stale\n     * cached value or `undefined`, and will continue to process and eventually\n     * update the cache when they resolve, as long as the resulting value is\n     * not `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * For example:\n     *\n     * ```ts\n     * const c = new LRUCache({\n     *   ttl: 100,\n     *   ignoreFetchAbort: true,\n     *   allowStaleOnFetchAbort: true,\n     *   fetchMethod: async (key, oldValue, { signal }) => {\n     *     // note: do NOT pass the signal to fetch()!\n     *     // let's say this fetch can take a long time.\n     *     const res = await fetch(`https://slow-backend-server/${key}`)\n     *     return await res.json()\n     *   },\n     * })\n     *\n     * // this will return the stale value after 100ms, while still\n     * // updating in the background for next time.\n     * const val = await c.fetch('key', { signal: AbortSignal.timeout(100) })\n     * ```\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still\n     * emitted on the `AbortSignal` object_, so may result in invalid results\n     * when passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n     * call to {@link LRUCache#fetch}.\n     */\n    ignoreFetchAbort?: boolean\n  }\n\n  export interface OptionsMaxLimit\n    extends OptionsBase {\n    max: Count\n  }\n  export interface OptionsTTLLimit\n    extends OptionsBase {\n    ttl: Milliseconds\n    ttlAutopurge: boolean\n  }\n  export interface OptionsSizeLimit\n    extends OptionsBase {\n    maxSize: Size\n  }\n\n  /**\n   * The valid safe options for the {@link LRUCache} constructor\n   */\n  export type Options =\n    | OptionsMaxLimit\n    | OptionsSizeLimit\n    | OptionsTTLLimit\n\n  /**\n   * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump},\n   * and returned by {@link LRUCache#info}.\n   */\n  export interface Entry {\n    value: V\n    ttl?: Milliseconds\n    size?: Size\n    start?: Milliseconds\n  }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache {\n  // options that cannot be changed without disaster\n  readonly #max: LRUCache.Count\n  readonly #maxSize: LRUCache.Size\n  readonly #dispose?: LRUCache.Disposer\n  readonly #disposeAfter?: LRUCache.Disposer\n  readonly #fetchMethod?: LRUCache.Fetcher\n  readonly #memoMethod?: LRUCache.Memoizer\n\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl: LRUCache.Milliseconds\n\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution: LRUCache.Milliseconds\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale: boolean\n\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL: boolean\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize: LRUCache.Size\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation?: LRUCache.SizeCalculator\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort: boolean\n\n  // computed properties\n  #size: LRUCache.Count\n  #calculatedSize: LRUCache.Size\n  #keyMap: Map\n  #keyList: (K | undefined)[]\n  #valList: (V | BackgroundFetch | undefined)[]\n  #next: NumberArray\n  #prev: NumberArray\n  #head: Index\n  #tail: Index\n  #free: StackLike\n  #disposed?: DisposeTask[]\n  #sizes?: ZeroArray\n  #starts?: ZeroArray\n  #ttls?: ZeroArray\n\n  #hasDispose: boolean\n  #hasFetchMethod: boolean\n  #hasDisposeAfter: boolean\n\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals<\n    K extends {},\n    V extends {},\n    FC extends unknown = unknown\n  >(c: LRUCache) {\n    return {\n      // properties\n      starts: c.#starts,\n      ttls: c.#ttls,\n      sizes: c.#sizes,\n      keyMap: c.#keyMap as Map,\n      keyList: c.#keyList,\n      valList: c.#valList,\n      next: c.#next,\n      prev: c.#prev,\n      get head() {\n        return c.#head\n      },\n      get tail() {\n        return c.#tail\n      },\n      free: c.#free,\n      // methods\n      isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n      backgroundFetch: (\n        k: K,\n        index: number | undefined,\n        options: LRUCache.FetchOptions,\n        context: any\n      ): BackgroundFetch =>\n        c.#backgroundFetch(\n          k,\n          index as Index | undefined,\n          options,\n          context\n        ),\n      moveToTail: (index: number): void =>\n        c.#moveToTail(index as Index),\n      indexes: (options?: { allowStale: boolean }) =>\n        c.#indexes(options),\n      rindexes: (options?: { allowStale: boolean }) =>\n        c.#rindexes(options),\n      isStale: (index: number | undefined) =>\n        c.#isStale(index as Index),\n    }\n  }\n\n  // Protected read-only members\n\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max(): LRUCache.Count {\n    return this.#max\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize(): LRUCache.Count {\n    return this.#maxSize\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize(): LRUCache.Size {\n    return this.#calculatedSize\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size(): LRUCache.Count {\n    return this.#size\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod(): LRUCache.Fetcher | undefined {\n    return this.#fetchMethod\n  }\n  get memoMethod(): LRUCache.Memoizer | undefined {\n    return this.#memoMethod\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#dispose\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#disposeAfter\n  }\n\n  constructor(\n    options: LRUCache.Options | LRUCache\n  ) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      memoMethod,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.#max = max\n    this.#maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.#maxSize\n    this.sizeCalculation = sizeCalculation\n    if (this.sizeCalculation) {\n      if (!this.#maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    if (\n      memoMethod !== undefined &&\n      typeof memoMethod !== 'function'\n    ) {\n      throw new TypeError('memoMethod must be a function if defined')\n    }\n    this.#memoMethod = memoMethod\n\n    if (\n      fetchMethod !== undefined &&\n      typeof fetchMethod !== 'function'\n    ) {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n    this.#fetchMethod = fetchMethod\n    this.#hasFetchMethod = !!fetchMethod\n\n    this.#keyMap = new Map()\n    this.#keyList = new Array(max).fill(undefined)\n    this.#valList = new Array(max).fill(undefined)\n    this.#next = new UintArray(max)\n    this.#prev = new UintArray(max)\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free = Stack.create(max)\n    this.#size = 0\n    this.#calculatedSize = 0\n\n    if (typeof dispose === 'function') {\n      this.#dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.#disposeAfter = disposeAfter\n      this.#disposed = []\n    } else {\n      this.#disposeAfter = undefined\n      this.#disposed = undefined\n    }\n    this.#hasDispose = !!this.#dispose\n    this.#hasDisposeAfter = !!this.#disposeAfter\n\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.#maxSize !== 0) {\n        if (!isPosInt(this.#maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.#initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.#initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n  }\n\n  /**\n   * Return the number of ms left in the item's TTL. If item is not in cache,\n   * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n   */\n  getRemainingTTL(key: K) {\n    return this.#keyMap.has(key) ? Infinity : 0\n  }\n\n  #initializeTTLTracking() {\n    const ttls = new ZeroArray(this.#max)\n    const starts = new ZeroArray(this.#max)\n    this.#ttls = ttls\n    this.#starts = starts\n\n    this.#setItemTTL = (index, ttl, start = perf.now()) => {\n      starts[index] = ttl !== 0 ? start : 0\n      ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.#isStale(index)) {\n            this.#delete(this.#keyList[index] as K, 'expire')\n          }\n        }, ttl + 1)\n        // unref() not supported on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n    }\n\n    this.#updateItemAge = index => {\n      starts[index] = ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.#statusTTL = (status, index) => {\n      if (ttls[index]) {\n        const ttl = ttls[index]\n        const start = starts[index]\n        /* c8 ignore next */\n        if (!ttl || !start) return\n        status.ttl = ttl\n        status.start = start\n        status.now = cachedNow || getNow()\n        const age = status.now - start\n        status.remainingTTL = ttl - age\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        // not available on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.#keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      const ttl = ttls[index]\n      const start = starts[index]\n      if (!ttl || !start) {\n        return Infinity\n      }\n      const age = (cachedNow || getNow()) - start\n      return ttl - age\n    }\n\n    this.#isStale = index => {\n      const s = starts[index]\n      const t = ttls[index]\n      return !!t && !!s && (cachedNow || getNow()) - s > t\n    }\n  }\n\n  // conditionally set private methods related to TTL\n  #updateItemAge: (index: Index) => void = () => {}\n  #statusTTL: (status: LRUCache.Status, index: Index) => void =\n    () => {}\n  #setItemTTL: (\n    index: Index,\n    ttl: LRUCache.Milliseconds,\n    start?: LRUCache.Milliseconds\n    // ignore because we never call this if we're not already in TTL mode\n    /* c8 ignore start */\n  ) => void = () => {}\n  /* c8 ignore stop */\n\n  #isStale: (index: Index) => boolean = () => false\n\n  #initializeSizeTracking() {\n    const sizes = new ZeroArray(this.#max)\n    this.#calculatedSize = 0\n    this.#sizes = sizes\n    this.#removeItemSize = index => {\n      this.#calculatedSize -= sizes[index] as number\n      sizes[index] = 0\n    }\n    this.#requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.#isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation ' +\n              'or size must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.#addItemSize = (\n      index: Index,\n      size: LRUCache.Size,\n      status?: LRUCache.Status\n    ) => {\n      sizes[index] = size\n      if (this.#maxSize) {\n        const maxSize = this.#maxSize - (sizes[index] as number)\n        while (this.#calculatedSize > maxSize) {\n          this.#evict(true)\n        }\n      }\n      this.#calculatedSize += sizes[index] as number\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.#calculatedSize\n      }\n    }\n  }\n\n  #removeItemSize: (index: Index) => void = _i => {}\n  #addItemSize: (\n    index: Index,\n    size: LRUCache.Size,\n    status?: LRUCache.Status\n  ) => void = (_i, _s, _st) => {}\n  #requireSize: (\n    k: K,\n    v: V | BackgroundFetch,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator\n  ) => LRUCache.Size = (\n    _k: K,\n    _v: V | BackgroundFetch,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator\n  ) => {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n    return 0\n  };\n\n  *#indexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#tail; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#head) {\n          break\n        } else {\n          i = this.#prev[i] as Index\n        }\n      }\n    }\n  }\n\n  *#rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#head; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#tail) {\n          break\n        } else {\n          i = this.#next[i] as Index\n        }\n      }\n    }\n  }\n\n  #isValidIndex(index: Index) {\n    return (\n      index !== undefined &&\n      this.#keyMap.get(this.#keyList[index] as K) === index\n    )\n  }\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const i of this.#indexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]] as [K, V]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const i of this.#rindexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const i of this.#indexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const i of this.#rindexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i] as V\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  /**\n   * A String value that is used in the creation of the default string\n   * description of an object. Called by the built-in method\n   * `Object.prototype.toString`.\n   */\n  [Symbol.toStringTag] = 'LRUCache'\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n   */\n  find(\n    fn: (v: V, k: K, self: LRUCache) => boolean,\n    getOptions: LRUCache.GetOptions = {}\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.#keyList[i] as K, this)) {\n        return this.get(this.#keyList[i] as K, getOptions)\n      }\n    }\n  }\n\n  /**\n   * Call the supplied function on each item in the cache, in order from most\n   * recently used to least recently used.\n   *\n   * `fn` is called as `fn(value, key, cache)`.\n   *\n   * If `thisp` is provided, function will be called in the `this`-context of\n   * the provided object, or the cache if no `thisp` object is provided.\n   *\n   * Does not update age or recenty of use, or iterate over stale values.\n   */\n  forEach(\n    fn: (v: V, k: K, self: LRUCache) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(\n    fn: (v: V, k: K, self: LRUCache) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let deleted = false\n    for (const i of this.#rindexes({ allowStale: true })) {\n      if (this.#isStale(i)) {\n        this.#delete(this.#keyList[i] as K, 'expire')\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Get the extended info about a given entry, to get its value, size, and\n   * TTL info simultaneously. Returns `undefined` if the key is not present.\n   *\n   * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n   * serialization, the `start` value is always the current timestamp, and the\n   * `ttl` is a calculated remaining time to live (negative if expired).\n   *\n   * Always returns stale values, if their info is found in the cache, so be\n   * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n   * if relevant.\n   */\n  info(key: K): LRUCache.Entry | undefined {\n    const i = this.#keyMap.get(key)\n    if (i === undefined) return undefined\n    const v = this.#valList[i]\n    const value: V | undefined = this.#isBackgroundFetch(v)\n      ? v.__staleWhileFetching\n      : v\n    if (value === undefined) return undefined\n    const entry: LRUCache.Entry = { value }\n    if (this.#ttls && this.#starts) {\n      const ttl = this.#ttls[i]\n      const start = this.#starts[i]\n      if (ttl && start) {\n        const remain = ttl - (perf.now() - start)\n        entry.ttl = remain\n        entry.start = Date.now()\n      }\n    }\n    if (this.#sizes) {\n      entry.size = this.#sizes[i]\n    }\n    return entry\n  }\n\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to {@link LRLUCache#load}.\n   *\n   * The `start` fields are calculated relative to a portable `Date.now()`\n   * timestamp, even if `performance.now()` is available.\n   *\n   * Stale entries are always included in the `dump`, even if\n   * {@link LRUCache.OptionsBase.allowStale} is false.\n   *\n   * Note: this returns an actual array, not a generator, so it can be more\n   * easily passed around.\n   */\n  dump() {\n    const arr: [K, LRUCache.Entry][] = []\n    for (const i of this.#indexes({ allowStale: true })) {\n      const key = this.#keyList[i]\n      const v = this.#valList[i]\n      const value: V | undefined = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined || key === undefined) continue\n      const entry: LRUCache.Entry = { value }\n      if (this.#ttls && this.#starts) {\n        entry.ttl = this.#ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - (this.#starts[i] as number)\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.#sizes) {\n        entry.size = this.#sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   *\n   * The shape of the resulting cache may be different if the same options are\n   * not used in both caches.\n   *\n   * The `start` fields are assumed to be calculated relative to a portable\n   * `Date.now()` timestamp, even if `performance.now()` is available.\n   */\n  load(arr: [K, LRUCache.Entry][]) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset, so that\n        // we get the intended remaining TTL, no matter how long it's\n        // been on ice.\n        //\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   *\n   * Fields on the {@link LRUCache.SetOptions} options param will override\n   * their corresponding values in the constructor options for the scope\n   * of this single `set()` operation.\n   *\n   * If `start` is provided, then that will set the effective start\n   * time for the TTL calculation. Note that this must be a previous\n   * value of `performance.now()` if supported, or a previous value of\n   * `Date.now()` if not.\n   *\n   * Options object may also include `size`, which will prevent\n   * calling the `sizeCalculation` function and just use the specified\n   * number if it is a positive integer, and `noDisposeOnSet` which\n   * will prevent calling a `dispose` function in the case of\n   * overwrites.\n   *\n   * If the `size` (or return value of `sizeCalculation`) for a given\n   * entry is greater than `maxEntrySize`, then the item will not be\n   * added to the cache.\n   *\n   * Will update the recency of the entry.\n   *\n   * If the value is `undefined`, then this is an alias for\n   * `cache.delete(key)`. `undefined` is never stored in the cache.\n   */\n  set(\n    k: K,\n    v: V | BackgroundFetch | undefined,\n    setOptions: LRUCache.SetOptions = {}\n  ) {\n    if (v === undefined) {\n      this.delete(k)\n      return this\n    }\n    const {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      sizeCalculation = this.sizeCalculation,\n      status,\n    } = setOptions\n    let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n    const size = this.#requireSize(\n      k,\n      v,\n      setOptions.size || 0,\n      sizeCalculation\n    )\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case something is there already.\n      this.#delete(k, 'set')\n      return this\n    }\n    let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = (\n        this.#size === 0\n          ? this.#tail\n          : this.#free.length !== 0\n          ? this.#free.pop()\n          : this.#size === this.#max\n          ? this.#evict(false)\n          : this.#size\n      ) as Index\n      this.#keyList[index] = k\n      this.#valList[index] = v\n      this.#keyMap.set(k, index)\n      this.#next[this.#tail] = index\n      this.#prev[index] = this.#tail\n      this.#tail = index\n      this.#size++\n      this.#addItemSize(index, size, status)\n      if (status) status.set = 'add'\n      noUpdateTTL = false\n    } else {\n      // update\n      this.#moveToTail(index)\n      const oldVal = this.#valList[index] as V | BackgroundFetch\n      if (v !== oldVal) {\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n          const { __staleWhileFetching: s } = oldVal\n          if (s !== undefined && !noDisposeOnSet) {\n            if (this.#hasDispose) {\n              this.#dispose?.(s as V, k, 'set')\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([s as V, k, 'set'])\n            }\n          }\n        } else if (!noDisposeOnSet) {\n          if (this.#hasDispose) {\n            this.#dispose?.(oldVal as V, k, 'set')\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([oldVal as V, k, 'set'])\n          }\n        }\n        this.#removeItemSize(index)\n        this.#addItemSize(index, size, status)\n        this.#valList[index] = v\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.#isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && !this.#ttls) {\n      this.#initializeTTLTracking()\n    }\n    if (this.#ttls) {\n      if (!noUpdateTTL) {\n        this.#setItemTTL(index, ttl, start)\n      }\n      if (status) this.#statusTTL(status, index)\n    }\n    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop(): V | undefined {\n    try {\n      while (this.#size) {\n        const val = this.#valList[this.#head]\n        this.#evict(true)\n        if (this.#isBackgroundFetch(val)) {\n          if (val.__staleWhileFetching) {\n            return val.__staleWhileFetching\n          }\n        } else if (val !== undefined) {\n          return val\n        }\n      }\n    } finally {\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed\n        let task: DisposeTask | undefined\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task)\n        }\n      }\n    }\n  }\n\n  #evict(free: boolean) {\n    const head = this.#head\n    const k = this.#keyList[head] as K\n    const v = this.#valList[head] as V\n    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else if (this.#hasDispose || this.#hasDisposeAfter) {\n      if (this.#hasDispose) {\n        this.#dispose?.(v, k, 'evict')\n      }\n      if (this.#hasDisposeAfter) {\n        this.#disposed?.push([v, k, 'evict'])\n      }\n    }\n    this.#removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.#keyList[head] = undefined\n      this.#valList[head] = undefined\n      this.#free.push(head)\n    }\n    if (this.#size === 1) {\n      this.#head = this.#tail = 0 as Index\n      this.#free.length = 0\n    } else {\n      this.#head = this.#next[head] as Index\n    }\n    this.#keyMap.delete(k)\n    this.#size--\n    return head\n  }\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Check if a key is in the cache, without updating the recency of\n   * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n   * to `true` in either the options or the constructor.\n   *\n   * Will return `false` if the item is stale, even though it is technically in\n   * the cache. The difference can be determined (if it matters) by using a\n   * `status` argument, and inspecting the `has` field.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(k: K, hasOptions: LRUCache.HasOptions = {}) {\n    const { updateAgeOnHas = this.updateAgeOnHas, status } =\n      hasOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const v = this.#valList[index]\n      if (\n        this.#isBackgroundFetch(v) &&\n        v.__staleWhileFetching === undefined\n      ) {\n        return false\n      }\n      if (!this.#isStale(index)) {\n        if (updateAgeOnHas) {\n          this.#updateItemAge(index)\n        }\n        if (status) {\n          status.has = 'hit'\n          this.#statusTTL(status, index)\n        }\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.#statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(k: K, peekOptions: LRUCache.PeekOptions = {}) {\n    const { allowStale = this.allowStale } = peekOptions\n    const index = this.#keyMap.get(k)\n    if (\n      index === undefined ||\n      (!allowStale && this.#isStale(index))\n    ) {\n      return\n    }\n    const v = this.#valList[index]\n    // either stale and allowed, or forcing a refresh of non-stale value\n    return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n  }\n\n  #backgroundFetch(\n    k: K,\n    index: Index | undefined,\n    options: LRUCache.FetchOptions,\n    context: any\n  ): BackgroundFetch {\n    const v = index === undefined ? undefined : this.#valList[index]\n    if (this.#isBackgroundFetch(v)) {\n      return v\n    }\n\n    const ac = new AC()\n    const { signal } = options\n    // when/if our AC signals, then stop listening to theirs.\n    signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n      signal: ac.signal,\n    })\n\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n\n    const cb = (\n      v: V | undefined,\n      updateCache = false\n    ): V | undefined => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      const bf = p as BackgroundFetch\n      if (this.#valList[index as Index] === p) {\n        if (v === undefined) {\n          if (bf.__staleWhileFetching) {\n            this.#valList[index as Index] = bf.__staleWhileFetching\n          } else {\n            this.#delete(k, 'fetch')\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n\n    const eb = (er: any) => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n\n    const fetchFail = (er: any): V | undefined => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      const bf = p as BackgroundFetch\n      if (this.#valList[index as Index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || bf.__staleWhileFetching === undefined\n        if (del) {\n          this.#delete(k, 'fetch')\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.#valList[index as Index] = bf.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && bf.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return bf.__staleWhileFetching\n      } else if (bf.__returned === bf) {\n        throw er\n      }\n    }\n\n    const pcall = (\n      res: (v: V | undefined) => void,\n      rej: (e: any) => void\n    ) => {\n      const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n      if (fmp && fmp instanceof Promise) {\n        fmp.then(v => res(v === undefined ? undefined : v), rej)\n      }\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res(undefined)\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    const bf: BackgroundFetch = Object.assign(p, {\n      __abortController: ac,\n      __staleWhileFetching: v,\n      __returned: undefined,\n    })\n\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, bf, { ...fetchOpts.options, status: undefined })\n      index = this.#keyMap.get(k)\n    } else {\n      this.#valList[index] = bf\n    }\n    return bf\n  }\n\n  #isBackgroundFetch(p: any): p is BackgroundFetch {\n    if (!this.#hasFetchMethod) return false\n    const b = p as BackgroundFetch\n    return (\n      !!b &&\n      b instanceof Promise &&\n      b.hasOwnProperty('__staleWhileFetching') &&\n      b.__abortController instanceof AC\n    )\n  }\n\n  /**\n   * Make an asynchronous cached fetch using the\n   * {@link LRUCache.OptionsBase.fetchMethod} function.\n   *\n   * If the value is in the cache and not stale, then the returned\n   * Promise resolves to the value.\n   *\n   * If not in the cache, or beyond its TTL staleness, then\n   * `fetchMethod(key, staleValue, { options, signal, context })` is\n   * called, and the value returned will be added to the cache once\n   * resolved.\n   *\n   * If called with `allowStale`, and an asynchronous fetch is\n   * currently in progress to reload a stale value, then the former\n   * stale value will be returned.\n   *\n   * If called with `forceRefresh`, then the cached item will be\n   * re-fetched, even if it is not stale. However, if `allowStale` is also\n   * set, then the old value will still be returned. This is useful\n   * in cases where you want to force a reload of a cached value. If\n   * a background fetch is already in progress, then `forceRefresh`\n   * has no effect.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n   * {@link LRUCache.FetchOptions.signal},\n   * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n   * determined by the FIRST fetch() call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   *\n   * If {@link LRUCache.OptionsBase.fetchMethod} is not specified, then this is\n   * effectively an alias for `Promise.resolve(cache.get(key))`.\n   *\n   * When the fetch method resolves to a value, if the fetch has not\n   * been aborted due to deletion, eviction, or being overwritten,\n   * then it is added to the cache using the options provided.\n   *\n   * If the key is evicted or deleted before the `fetchMethod`\n   * resolves, then the AbortSignal passed to the `fetchMethod` will\n   * receive an `abort` event, and the promise returned by `fetch()`\n   * will reject with the reason for the abort.\n   *\n   * If a `signal` is passed to the `fetch()` call, then aborting the\n   * signal will abort the fetch and cause the `fetch()` promise to\n   * reject with the reason provided.\n   *\n   * **Setting `context`**\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the {@link LRUCache} constructor, then all\n   * calls to `cache.fetch()` _must_ provide a `context` option. If\n   * set to `undefined` or `void`, then calls to fetch _must not_\n   * provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that\n   * might be relevant in the course of fetching the data. It is only\n   * relevant for the course of a single `fetch()` operation, and\n   * discarded afterwards.\n   *\n   * **Note: `fetch()` calls are inflight-unique**\n   *\n   * If you call `fetch()` multiple times with the same key value,\n   * then every call after the first will resolve on the same\n   * promise1,\n   * _even if they have different settings that would otherwise change\n   * the behavior of the fetch_, such as `noDeleteOnFetchRejection`\n   * or `ignoreFetchAbort`.\n   *\n   * In most cases, this is not a problem (in fact, only fetching\n   * something once is what you probably want, if you're caching in\n   * the first place). If you are changing the fetch() options\n   * dramatically between runs, there's a good chance that you might\n   * be trying to fit divergent semantics into a single object, and\n   * would be better off with multiple cache instances.\n   *\n   * **1**: Ie, they're not the \"same Promise\", but they resolve at\n   * the same time, because they're both waiting on the same\n   * underlying fetchMethod response.\n   */\n\n  fetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : LRUCache.FetchOptionsWithContext\n  ): Promise\n\n  // this overload not allowed if context is required\n  fetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : never\n  ): Promise\n\n  async fetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions = {}\n  ): Promise {\n    const {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      context,\n      forceRefresh = false,\n      status,\n      signal,\n    } = fetchOptions\n\n    if (!this.#hasFetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.#keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.#backgroundFetch(k, index, options, context)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.#isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        if (status) this.#statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.#backgroundFetch(k, index, options, context)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  /**\n   * In some cases, `cache.fetch()` may resolve to `undefined`, either because\n   * a {@link LRUCache.OptionsBase#fetchMethod} was not provided (turning\n   * `cache.fetch(k)` into just an async wrapper around `cache.get(k)`) or\n   * because `ignoreFetchAbort` was specified (either to the constructor or\n   * in the {@link LRUCache.FetchOptions}). Also, the\n   * {@link OptionsBase.fetchMethod} may return `undefined` or `void`, making\n   * the test even more complicated.\n   *\n   * Because inferring the cases where `undefined` might be returned are so\n   * cumbersome, but testing for `undefined` can also be annoying, this method\n   * can be used, which will reject if `this.fetch()` resolves to undefined.\n   */\n  forceFetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : LRUCache.FetchOptionsWithContext\n  ): Promise\n  // this overload not allowed if context is required\n  forceFetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext\n      : never\n  ): Promise\n  async forceFetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions = {}\n  ): Promise {\n    const v = await this.fetch(\n      k,\n      fetchOptions as unknown extends FC\n        ? LRUCache.FetchOptions\n        : FC extends undefined | void\n        ? LRUCache.FetchOptionsNoContext\n        : LRUCache.FetchOptionsWithContext\n    )\n    if (v === undefined) throw new Error('fetch() returned undefined')\n    return v\n  }\n\n  /**\n   * If the key is found in the cache, then this is equivalent to\n   * {@link LRUCache#get}. If not, in the cache, then calculate the value using\n   * the {@link LRUCache.OptionsBase.memoMethod}, and add it to the cache.\n   *\n   * If an `FC` type is set to a type other than `unknown`, `void`, or\n   * `undefined` in the LRUCache constructor, then all calls to `cache.memo()`\n   * _must_ provide a `context` option. If set to `undefined` or `void`, then\n   * calls to memo _must not_ provide a `context` option.\n   *\n   * The `context` param allows you to provide arbitrary data that might be\n   * relevant in the course of fetching the data. It is only relevant for the\n   * course of a single `memo()` operation, and discarded afterwards.\n   */\n  memo(\n    k: K,\n    memoOptions: unknown extends FC\n      ? LRUCache.MemoOptions\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext\n      : LRUCache.MemoOptionsWithContext\n  ): V\n  // this overload not allowed if context is required\n  memo(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    memoOptions?: unknown extends FC\n      ? LRUCache.MemoOptions\n      : FC extends undefined | void\n      ? LRUCache.MemoOptionsNoContext\n      : never\n  ): V\n  memo(k: K, memoOptions: LRUCache.MemoOptions = {}) {\n    const memoMethod = this.#memoMethod\n    if (!memoMethod) {\n      throw new Error('no memoMethod provided to constructor')\n    }\n    const { context, forceRefresh, ...options } = memoOptions\n    const v = this.get(k, options)\n    if (!forceRefresh && v !== undefined) return v\n    const vv = memoMethod(k, v, {\n      options,\n      context,\n    } as LRUCache.MemoizerOptions)\n    this.set(k, vv, options)\n    return vv\n  }\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(k: K, getOptions: LRUCache.GetOptions = {}) {\n    const {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = getOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.#valList[index]\n      const fetching = this.#isBackgroundFetch(value)\n      if (status) this.#statusTTL(status, index)\n      if (this.#isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.#delete(k, 'expire')\n          }\n          if (status && allowStale) status.returnedStale = true\n          return allowStale ? value : undefined\n        } else {\n          if (\n            status &&\n            allowStale &&\n            value.__staleWhileFetching !== undefined\n          ) {\n            status.returnedStale = true\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  #connect(p: Index, n: Index) {\n    this.#prev[n] = p\n    this.#next[p] = n\n  }\n\n  #moveToTail(index: Index): void {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.#tail) {\n      if (index === this.#head) {\n        this.#head = this.#next[index] as Index\n      } else {\n        this.#connect(\n          this.#prev[index] as Index,\n          this.#next[index] as Index\n        )\n      }\n      this.#connect(this.#tail, index)\n      this.#tail = index\n    }\n  }\n\n  /**\n   * Deletes a key out of the cache.\n   *\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(k: K) {\n    return this.#delete(k, 'delete')\n  }\n\n  #delete(k: K, reason: LRUCache.DisposeReason) {\n    let deleted = false\n    if (this.#size !== 0) {\n      const index = this.#keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.#size === 1) {\n          this.#clear(reason)\n        } else {\n          this.#removeItemSize(index)\n          const v = this.#valList[index]\n          if (this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n              this.#dispose?.(v as V, k, reason)\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([v as V, k, reason])\n            }\n          }\n          this.#keyMap.delete(k)\n          this.#keyList[index] = undefined\n          this.#valList[index] = undefined\n          if (index === this.#tail) {\n            this.#tail = this.#prev[index] as Index\n          } else if (index === this.#head) {\n            this.#head = this.#next[index] as Index\n          } else {\n            const pi = this.#prev[index] as number\n            this.#next[pi] = this.#next[index] as number\n            const ni = this.#next[index] as number\n            this.#prev[ni] = this.#prev[index] as number\n          }\n          this.#size--\n          this.#free.push(index)\n        }\n      }\n    }\n    if (this.#hasDisposeAfter && this.#disposed?.length) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    return this.#clear('delete')\n  }\n  #clear(reason: LRUCache.DisposeReason) {\n    for (const index of this.#rindexes({ allowStale: true })) {\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.#keyList[index]\n        if (this.#hasDispose) {\n          this.#dispose?.(v as V, k as K, reason)\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v as V, k as K, reason])\n        }\n      }\n    }\n\n    this.#keyMap.clear()\n    this.#valList.fill(undefined)\n    this.#keyList.fill(undefined)\n    if (this.#ttls && this.#starts) {\n      this.#ttls.fill(0)\n      this.#starts.fill(0)\n    }\n    if (this.#sizes) {\n      this.#sizes.fill(0)\n    }\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free.length = 0\n    this.#calculatedSize = 0\n    this.#size = 0\n    if (this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n  }\n}\n"],
+  "mappings": "mVAMA,IAAMA,EACJ,OAAO,aAAgB,UACvB,aACA,OAAO,YAAY,KAAQ,WACvB,YACA,KAEAC,EAAS,IAAI,IAMbC,EACJ,OAAO,SAAY,UAAc,QAAU,QAAU,CAAA,EAIjDC,EAAc,CAClBC,EACAC,EACAC,EACAC,IACE,CACF,OAAOL,EAAQ,aAAgB,WAC3BA,EAAQ,YAAYE,EAAKC,EAAMC,EAAMC,CAAE,EACvC,QAAQ,MAAM,IAAID,MAASD,MAASD,GAAK,CAC/C,EAEII,EAAK,WAAW,gBAChBC,EAAK,WAAW,YAGpB,GAAI,OAAOD,EAAO,IAAa,CAE7BC,EAAK,KAAiB,CACpB,QACA,SAAqC,CAAA,EACrC,OACA,QAAmB,GACnB,iBAAiBC,EAAWH,EAAwB,CAClD,KAAK,SAAS,KAAKA,CAAE,CACvB,GAGFC,EAAK,KAAqB,CACxB,aAAA,CACEG,EAAc,CAChB,CACA,OAAS,IAAIF,EACb,MAAMG,EAAW,CACf,GAAI,MAAK,OAAO,QAEhB,MAAK,OAAO,OAASA,EAErB,KAAK,OAAO,QAAU,GAEtB,QAAWL,KAAM,KAAK,OAAO,SAC3BA,EAAGK,CAAM,EAEX,KAAK,OAAO,UAAUA,CAAM,EAC9B,GAEF,IAAIC,EACFX,EAAQ,KAAK,8BAAgC,IACzCS,EAAiB,IAAK,CACrBE,IACLA,EAAyB,GACzBV,EACE,maAOA,sBACA,UACAQ,CAAc,EAElB,EAIF,IAAMG,EAAcR,GAAiB,CAACL,EAAO,IAAIK,CAAI,EAE/CS,EAAO,OAAO,MAAM,EAIpBC,EAAYC,GAChBA,GAAKA,IAAM,KAAK,MAAMA,CAAC,GAAKA,EAAI,GAAK,SAASA,CAAC,EAc3CC,EAAgBC,GACnBH,EAASG,CAAG,EAETA,GAAO,KAAK,IAAI,EAAG,CAAC,EACpB,WACAA,GAAO,KAAK,IAAI,EAAG,EAAE,EACrB,YACAA,GAAO,KAAK,IAAI,EAAG,EAAE,EACrB,YACAA,GAAO,OAAO,iBACdC,EACA,KATA,KAYAA,EAAN,cAAwB,KAAa,CACnC,YAAYC,EAAY,CACtB,MAAMA,CAAI,EACV,KAAK,KAAK,CAAC,CACb,GAjIFC,EAuIMC,EAAN,KAAW,CACT,KACA,OAGA,OAAO,OAAOJ,EAAW,CACvB,IAAMK,EAAUN,EAAaC,CAAG,EAChC,GAAI,CAACK,EAAS,MAAO,CAAA,EACrBC,EAAAF,EAAMD,EAAgB,IACtB,IAAMI,EAAI,IAAIH,EAAMJ,EAAKK,CAAO,EAChC,OAAAC,EAAAF,EAAMD,EAAgB,IACfI,CACT,CACA,YACEP,EACAK,EAAyC,CAGzC,GAAI,CAACG,EAAAJ,EAAMD,GACT,MAAM,IAAI,UAAU,yCAAyC,EAG/D,KAAK,KAAO,IAAIE,EAAQL,CAAG,EAC3B,KAAK,OAAS,CAChB,CACA,KAAKF,EAAQ,CACX,KAAK,KAAK,KAAK,QAAQ,EAAIA,CAC7B,CACA,KAAG,CACD,OAAO,KAAK,KAAK,EAAE,KAAK,MAAM,CAChC,GA9BIW,EAANL,EAISD,EAAA,YAAPO,EAJID,EAIGN,EAAyB,IAi9B5B,IAAOQ,EAAP,KAAe,CAEVC,GACAC,GACAC,GACAC,GACAC,GACAC,GAKT,IAKA,cAIA,aAIA,eAIA,eAIA,WAKA,eAIA,YAIA,aAIA,gBAIA,yBAIA,mBAIA,uBAIA,2BAIA,iBAGAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAWA,OAAO,sBAILC,EAAqB,CACrB,MAAO,CAEL,OAAQA,EAAEL,GACV,KAAMK,EAAEJ,GACR,MAAOI,EAAEN,GACT,OAAQM,EAAEf,GACV,QAASe,EAAEd,GACX,QAASc,EAAEb,GACX,KAAMa,EAAEZ,GACR,KAAMY,EAAEX,GACR,IAAI,MAAI,CACN,OAAOW,EAAEV,EACX,EACA,IAAI,MAAI,CACN,OAAOU,EAAET,EACX,EACA,KAAMS,EAAER,GAER,kBAAoBS,GAAWD,EAAEE,GAAmBD,CAAC,EACrD,gBAAiB,CACfE,EACAC,EACAC,EACAC,IAEAN,EAAEO,GACAJ,EACAC,EACAC,EACAC,CAAO,EAEX,WAAaF,GACXJ,EAAEQ,GAAYJ,CAAc,EAC9B,QAAUC,GACRL,EAAES,GAASJ,CAAO,EACpB,SAAWA,GACTL,EAAEU,GAAUL,CAAO,EACrB,QAAUD,GACRJ,EAAEW,GAASP,CAAc,EAE/B,CAOA,IAAI,KAAG,CACL,OAAO,KAAK3B,EACd,CAIA,IAAI,SAAO,CACT,OAAO,KAAKC,EACd,CAIA,IAAI,gBAAc,CAChB,OAAO,KAAKM,EACd,CAIA,IAAI,MAAI,CACN,OAAO,KAAKD,EACd,CAIA,IAAI,aAAW,CACb,OAAO,KAAKF,EACd,CACA,IAAI,YAAU,CACZ,OAAO,KAAKC,EACd,CAIA,IAAI,SAAO,CACT,OAAO,KAAKH,EACd,CAIA,IAAI,cAAY,CACd,OAAO,KAAKC,EACd,CAEA,YACEyB,EAAwD,CAExD,GAAM,CACJ,IAAAxC,EAAM,EACN,IAAA+C,EACA,cAAAC,EAAgB,EAChB,aAAAC,EACA,eAAAC,EACA,eAAAC,EACA,WAAAC,EACA,QAAAC,EACA,aAAAC,EACA,eAAAC,EACA,YAAAC,EACA,QAAAC,EAAU,EACV,aAAAC,EAAe,EACf,gBAAAC,EACA,YAAAC,EACA,WAAAC,EACA,yBAAAC,EACA,mBAAAC,EACA,2BAAAC,EACA,uBAAAC,EACA,iBAAAC,CAAgB,EACd1B,EAEJ,GAAIxC,IAAQ,GAAK,CAACH,EAASG,CAAG,EAC5B,MAAM,IAAI,UAAU,0CAA0C,EAGhE,IAAMmE,EAAYnE,EAAMD,EAAaC,CAAG,EAAI,MAC5C,GAAI,CAACmE,EACH,MAAM,IAAI,MAAM,sBAAwBnE,CAAG,EAO7C,GAJA,KAAKY,GAAOZ,EACZ,KAAKa,GAAW4C,EAChB,KAAK,aAAeC,GAAgB,KAAK7C,GACzC,KAAK,gBAAkB8C,EACnB,KAAK,gBAAiB,CACxB,GAAI,CAAC,KAAK9C,IAAY,CAAC,KAAK,aAC1B,MAAM,IAAI,UACR,oEAAoE,EAGxE,GAAI,OAAO,KAAK,iBAAoB,WAClC,MAAM,IAAI,UAAU,qCAAqC,EAI7D,GACEgD,IAAe,QACf,OAAOA,GAAe,WAEtB,MAAM,IAAI,UAAU,0CAA0C,EAIhE,GAFA,KAAK5C,GAAc4C,EAGjBD,IAAgB,QAChB,OAAOA,GAAgB,WAEvB,MAAM,IAAI,UACR,6CAA6C,EAsCjD,GAnCA,KAAK5C,GAAe4C,EACpB,KAAK3B,GAAkB,CAAC,CAAC2B,EAEzB,KAAKxC,GAAU,IAAI,IACnB,KAAKC,GAAW,IAAI,MAAMrB,CAAG,EAAE,KAAK,MAAS,EAC7C,KAAKsB,GAAW,IAAI,MAAMtB,CAAG,EAAE,KAAK,MAAS,EAC7C,KAAKuB,GAAQ,IAAI4C,EAAUnE,CAAG,EAC9B,KAAKwB,GAAQ,IAAI2C,EAAUnE,CAAG,EAC9B,KAAKyB,GAAQ,EACb,KAAKC,GAAQ,EACb,KAAKC,GAAQlB,EAAM,OAAOT,CAAG,EAC7B,KAAKkB,GAAQ,EACb,KAAKC,GAAkB,EAEnB,OAAOkC,GAAY,aACrB,KAAKvC,GAAWuC,GAEd,OAAOC,GAAiB,YAC1B,KAAKvC,GAAgBuC,EACrB,KAAK1B,GAAY,CAAA,IAEjB,KAAKb,GAAgB,OACrB,KAAKa,GAAY,QAEnB,KAAKI,GAAc,CAAC,CAAC,KAAKlB,GAC1B,KAAKoB,GAAmB,CAAC,CAAC,KAAKnB,GAE/B,KAAK,eAAiB,CAAC,CAACwC,EACxB,KAAK,YAAc,CAAC,CAACC,EACrB,KAAK,yBAA2B,CAAC,CAACM,EAClC,KAAK,2BAA6B,CAAC,CAACE,EACpC,KAAK,uBAAyB,CAAC,CAACC,EAChC,KAAK,iBAAmB,CAAC,CAACC,EAGtB,KAAK,eAAiB,EAAG,CAC3B,GAAI,KAAKrD,KAAa,GAChB,CAAChB,EAAS,KAAKgB,EAAQ,EACzB,MAAM,IAAI,UACR,iDAAiD,EAIvD,GAAI,CAAChB,EAAS,KAAK,YAAY,EAC7B,MAAM,IAAI,UACR,sDAAsD,EAG1D,KAAKuE,GAAuB,EAa9B,GAVA,KAAK,WAAa,CAAC,CAAChB,EACpB,KAAK,mBAAqB,CAAC,CAACW,EAC5B,KAAK,eAAiB,CAAC,CAACb,EACxB,KAAK,eAAiB,CAAC,CAACC,EACxB,KAAK,cACHtD,EAASmD,CAAa,GAAKA,IAAkB,EACzCA,EACA,EACN,KAAK,aAAe,CAAC,CAACC,EACtB,KAAK,IAAMF,GAAO,EACd,KAAK,IAAK,CACZ,GAAI,CAAClD,EAAS,KAAK,GAAG,EACpB,MAAM,IAAI,UACR,6CAA6C,EAGjD,KAAKwE,GAAsB,EAI7B,GAAI,KAAKzD,KAAS,GAAK,KAAK,MAAQ,GAAK,KAAKC,KAAa,EACzD,MAAM,IAAI,UACR,kDAAkD,EAGtD,GAAI,CAAC,KAAK,cAAgB,CAAC,KAAKD,IAAQ,CAAC,KAAKC,GAAU,CACtD,IAAM1B,EAAO,sBACTQ,EAAWR,CAAI,IACjBL,EAAO,IAAIK,CAAI,EAIfH,EAFE,gGAEe,wBAAyBG,EAAMwB,CAAQ,GAG9D,CAMA,gBAAgB2D,EAAM,CACpB,OAAO,KAAKlD,GAAQ,IAAIkD,CAAG,EAAI,IAAW,CAC5C,CAEAD,IAAsB,CACpB,IAAME,EAAO,IAAItE,EAAU,KAAKW,EAAI,EAC9B4D,EAAS,IAAIvE,EAAU,KAAKW,EAAI,EACtC,KAAKmB,GAAQwC,EACb,KAAKzC,GAAU0C,EAEf,KAAKC,GAAc,CAAClC,EAAOQ,EAAK2B,EAAQ7F,EAAK,IAAG,IAAM,CAGpD,GAFA2F,EAAOjC,CAAK,EAAIQ,IAAQ,EAAI2B,EAAQ,EACpCH,EAAKhC,CAAK,EAAIQ,EACVA,IAAQ,GAAK,KAAK,aAAc,CAClC,IAAM4B,EAAI,WAAW,IAAK,CACpB,KAAK7B,GAASP,CAAK,GACrB,KAAKqC,GAAQ,KAAKvD,GAASkB,CAAK,EAAQ,QAAQ,CAEpD,EAAGQ,EAAM,CAAC,EAGN4B,EAAE,OACJA,EAAE,MAAK,EAIb,EAEA,KAAKE,GAAiBtC,GAAQ,CAC5BiC,EAAOjC,CAAK,EAAIgC,EAAKhC,CAAK,IAAM,EAAI1D,EAAK,IAAG,EAAK,CACnD,EAEA,KAAKiG,GAAa,CAACC,EAAQxC,IAAS,CAClC,GAAIgC,EAAKhC,CAAK,EAAG,CACf,IAAMQ,EAAMwB,EAAKhC,CAAK,EAChBmC,EAAQF,EAAOjC,CAAK,EAE1B,GAAI,CAACQ,GAAO,CAAC2B,EAAO,OACpBK,EAAO,IAAMhC,EACbgC,EAAO,MAAQL,EACfK,EAAO,IAAMC,GAAaC,EAAM,EAChC,IAAMC,EAAMH,EAAO,IAAML,EACzBK,EAAO,aAAehC,EAAMmC,EAEhC,EAIA,IAAIF,EAAY,EACVC,EAAS,IAAK,CAClB,IAAM,EAAIpG,EAAK,IAAG,EAClB,GAAI,KAAK,cAAgB,EAAG,CAC1BmG,EAAY,EACZ,IAAML,EAAI,WACR,IAAOK,EAAY,EACnB,KAAK,aAAa,EAIhBL,EAAE,OACJA,EAAE,MAAK,EAIX,OAAO,CACT,EAEA,KAAK,gBAAkBL,GAAM,CAC3B,IAAM/B,EAAQ,KAAKnB,GAAQ,IAAIkD,CAAG,EAClC,GAAI/B,IAAU,OACZ,MAAO,GAET,IAAMQ,EAAMwB,EAAKhC,CAAK,EAChBmC,EAAQF,EAAOjC,CAAK,EAC1B,GAAI,CAACQ,GAAO,CAAC2B,EACX,MAAO,KAET,IAAMQ,GAAOF,GAAaC,EAAM,GAAMP,EACtC,OAAO3B,EAAMmC,CACf,EAEA,KAAKpC,GAAWP,GAAQ,CACtB,IAAMhC,EAAIiE,EAAOjC,CAAK,EAChBoC,EAAIJ,EAAKhC,CAAK,EACpB,MAAO,CAAC,CAACoC,GAAK,CAAC,CAACpE,IAAMyE,GAAaC,EAAM,GAAM1E,EAAIoE,CACrD,CACF,CAGAE,GAAyC,IAAK,CAAE,EAChDC,GACE,IAAK,CAAE,EACTL,GAMY,IAAK,CAAE,EAGnB3B,GAAsC,IAAM,GAE5CsB,IAAuB,CACrB,IAAMe,EAAQ,IAAIlF,EAAU,KAAKW,EAAI,EACrC,KAAKO,GAAkB,EACvB,KAAKU,GAASsD,EACd,KAAKC,GAAkB7C,GAAQ,CAC7B,KAAKpB,IAAmBgE,EAAM5C,CAAK,EACnC4C,EAAM5C,CAAK,EAAI,CACjB,EACA,KAAK8C,GAAe,CAAC/C,EAAGgD,EAAGpF,EAAMyD,IAAmB,CAGlD,GAAI,KAAKtB,GAAmBiD,CAAC,EAC3B,MAAO,GAET,GAAI,CAACzF,EAASK,CAAI,EAChB,GAAIyD,EAAiB,CACnB,GAAI,OAAOA,GAAoB,WAC7B,MAAM,IAAI,UAAU,oCAAoC,EAG1D,GADAzD,EAAOyD,EAAgB2B,EAAGhD,CAAC,EACvB,CAACzC,EAASK,CAAI,EAChB,MAAM,IAAI,UACR,0DAA0D,MAI9D,OAAM,IAAI,UACR,2HAEwB,EAI9B,OAAOA,CACT,EACA,KAAKqF,GAAe,CAClBhD,EACArC,EACA6E,IACE,CAEF,GADAI,EAAM5C,CAAK,EAAIrC,EACX,KAAKW,GAAU,CACjB,IAAM4C,EAAU,KAAK5C,GAAYsE,EAAM5C,CAAK,EAC5C,KAAO,KAAKpB,GAAkBsC,GAC5B,KAAK+B,GAAO,EAAI,EAGpB,KAAKrE,IAAmBgE,EAAM5C,CAAK,EAC/BwC,IACFA,EAAO,UAAY7E,EACnB6E,EAAO,oBAAsB,KAAK5D,GAEtC,CACF,CAEAiE,GAA0CK,GAAK,CAAE,EACjDF,GAIY,CAACE,EAAIC,EAAIC,IAAO,CAAE,EAC9BN,GAKqB,CACnBO,EACAC,EACA3F,EACAyD,IACE,CACF,GAAIzD,GAAQyD,EACV,MAAM,IAAI,UACR,kEAAkE,EAGtE,MAAO,EACT,EAEA,CAACf,GAAS,CAAE,WAAAQ,EAAa,KAAK,UAAU,EAAK,CAAA,EAAE,CAC7C,GAAI,KAAKlC,GACP,QAAS4E,EAAI,KAAKpE,GACZ,GAAC,KAAKqE,GAAcD,CAAC,KAGrB1C,GAAc,CAAC,KAAKN,GAASgD,CAAC,KAChC,MAAMA,GAEJA,IAAM,KAAKrE,MAGbqE,EAAI,KAAKtE,GAAMsE,CAAC,CAIxB,CAEA,CAACjD,GAAU,CAAE,WAAAO,EAAa,KAAK,UAAU,EAAK,CAAA,EAAE,CAC9C,GAAI,KAAKlC,GACP,QAAS4E,EAAI,KAAKrE,GACZ,GAAC,KAAKsE,GAAcD,CAAC,KAGrB1C,GAAc,CAAC,KAAKN,GAASgD,CAAC,KAChC,MAAMA,GAEJA,IAAM,KAAKpE,MAGboE,EAAI,KAAKvE,GAAMuE,CAAC,CAIxB,CAEAC,GAAcxD,EAAY,CACxB,OACEA,IAAU,QACV,KAAKnB,GAAQ,IAAI,KAAKC,GAASkB,CAAK,CAAM,IAAMA,CAEpD,CAMA,CAAC,SAAO,CACN,QAAWuD,KAAK,KAAKlD,GAAQ,EAEzB,KAAKtB,GAASwE,CAAC,IAAM,QACrB,KAAKzE,GAASyE,CAAC,IAAM,QACrB,CAAC,KAAKzD,GAAmB,KAAKf,GAASwE,CAAC,CAAC,IAEzC,KAAM,CAAC,KAAKzE,GAASyE,CAAC,EAAG,KAAKxE,GAASwE,CAAC,CAAC,EAG/C,CAQA,CAAC,UAAQ,CACP,QAAWA,KAAK,KAAKjD,GAAS,EAE1B,KAAKvB,GAASwE,CAAC,IAAM,QACrB,KAAKzE,GAASyE,CAAC,IAAM,QACrB,CAAC,KAAKzD,GAAmB,KAAKf,GAASwE,CAAC,CAAC,IAEzC,KAAM,CAAC,KAAKzE,GAASyE,CAAC,EAAG,KAAKxE,GAASwE,CAAC,CAAC,EAG/C,CAMA,CAAC,MAAI,CACH,QAAWA,KAAK,KAAKlD,GAAQ,EAAI,CAC/B,IAAMN,EAAI,KAAKjB,GAASyE,CAAC,EAEvBxD,IAAM,QACN,CAAC,KAAKD,GAAmB,KAAKf,GAASwE,CAAC,CAAC,IAEzC,MAAMxD,GAGZ,CAQA,CAAC,OAAK,CACJ,QAAWwD,KAAK,KAAKjD,GAAS,EAAI,CAChC,IAAMP,EAAI,KAAKjB,GAASyE,CAAC,EAEvBxD,IAAM,QACN,CAAC,KAAKD,GAAmB,KAAKf,GAASwE,CAAC,CAAC,IAEzC,MAAMxD,GAGZ,CAMA,CAAC,QAAM,CACL,QAAWwD,KAAK,KAAKlD,GAAQ,EACjB,KAAKtB,GAASwE,CAAC,IAEjB,QACN,CAAC,KAAKzD,GAAmB,KAAKf,GAASwE,CAAC,CAAC,IAEzC,MAAM,KAAKxE,GAASwE,CAAC,EAG3B,CAQA,CAAC,SAAO,CACN,QAAWA,KAAK,KAAKjD,GAAS,EAClB,KAAKvB,GAASwE,CAAC,IAEjB,QACN,CAAC,KAAKzD,GAAmB,KAAKf,GAASwE,CAAC,CAAC,IAEzC,MAAM,KAAKxE,GAASwE,CAAC,EAG3B,CAMA,CAAC,OAAO,QAAQ,GAAC,CACf,OAAO,KAAK,QAAO,CACrB,CAOA,CAAC,OAAO,WAAW,EAAI,WAMvB,KACE1G,EACA4G,EAA4C,CAAA,EAAE,CAE9C,QAAW,KAAK,KAAKpD,GAAQ,EAAI,CAC/B,IAAM0C,EAAI,KAAKhE,GAAS,CAAC,EACnB2E,EAAQ,KAAK5D,GAAmBiD,CAAC,EACnCA,EAAE,qBACFA,EACJ,GAAIW,IAAU,QACV7G,EAAG6G,EAAO,KAAK5E,GAAS,CAAC,EAAQ,IAAI,EACvC,OAAO,KAAK,IAAI,KAAKA,GAAS,CAAC,EAAQ2E,CAAU,EAGvD,CAaA,QACE5G,EACA8G,EAAa,KAAI,CAEjB,QAAW,KAAK,KAAKtD,GAAQ,EAAI,CAC/B,IAAM0C,EAAI,KAAKhE,GAAS,CAAC,EACnB2E,EAAQ,KAAK5D,GAAmBiD,CAAC,EACnCA,EAAE,qBACFA,EACAW,IAAU,QACd7G,EAAG,KAAK8G,EAAOD,EAAO,KAAK5E,GAAS,CAAC,EAAQ,IAAI,EAErD,CAMA,SACEjC,EACA8G,EAAa,KAAI,CAEjB,QAAW,KAAK,KAAKrD,GAAS,EAAI,CAChC,IAAMyC,EAAI,KAAKhE,GAAS,CAAC,EACnB2E,EAAQ,KAAK5D,GAAmBiD,CAAC,EACnCA,EAAE,qBACFA,EACAW,IAAU,QACd7G,EAAG,KAAK8G,EAAOD,EAAO,KAAK5E,GAAS,CAAC,EAAQ,IAAI,EAErD,CAMA,YAAU,CACR,IAAI8E,EAAU,GACd,QAAWL,KAAK,KAAKjD,GAAU,CAAE,WAAY,EAAI,CAAE,EAC7C,KAAKC,GAASgD,CAAC,IACjB,KAAKlB,GAAQ,KAAKvD,GAASyE,CAAC,EAAQ,QAAQ,EAC5CK,EAAU,IAGd,OAAOA,CACT,CAcA,KAAK7B,EAAM,CACT,IAAMwB,EAAI,KAAK1E,GAAQ,IAAIkD,CAAG,EAC9B,GAAIwB,IAAM,OAAW,OACrB,IAAMR,EAAI,KAAKhE,GAASwE,CAAC,EACnBG,EAAuB,KAAK5D,GAAmBiD,CAAC,EAClDA,EAAE,qBACFA,EACJ,GAAIW,IAAU,OAAW,OACzB,IAAMG,EAA2B,CAAE,MAAAH,CAAK,EACxC,GAAI,KAAKlE,IAAS,KAAKD,GAAS,CAC9B,IAAMiB,EAAM,KAAKhB,GAAM+D,CAAC,EAClBpB,EAAQ,KAAK5C,GAAQgE,CAAC,EAC5B,GAAI/C,GAAO2B,EAAO,CAChB,IAAM2B,EAAStD,GAAOlE,EAAK,IAAG,EAAK6F,GACnC0B,EAAM,IAAMC,EACZD,EAAM,MAAQ,KAAK,IAAG,GAG1B,OAAI,KAAKvE,KACPuE,EAAM,KAAO,KAAKvE,GAAOiE,CAAC,GAErBM,CACT,CAeA,MAAI,CACF,IAAME,EAAgC,CAAA,EACtC,QAAWR,KAAK,KAAKlD,GAAS,CAAE,WAAY,EAAI,CAAE,EAAG,CACnD,IAAM0B,EAAM,KAAKjD,GAASyE,CAAC,EACrBR,EAAI,KAAKhE,GAASwE,CAAC,EACnBG,EAAuB,KAAK5D,GAAmBiD,CAAC,EAClDA,EAAE,qBACFA,EACJ,GAAIW,IAAU,QAAa3B,IAAQ,OAAW,SAC9C,IAAM8B,EAA2B,CAAE,MAAAH,CAAK,EACxC,GAAI,KAAKlE,IAAS,KAAKD,GAAS,CAC9BsE,EAAM,IAAM,KAAKrE,GAAM+D,CAAC,EAGxB,IAAMZ,EAAMrG,EAAK,IAAG,EAAM,KAAKiD,GAAQgE,CAAC,EACxCM,EAAM,MAAQ,KAAK,MAAM,KAAK,IAAG,EAAKlB,CAAG,EAEvC,KAAKrD,KACPuE,EAAM,KAAO,KAAKvE,GAAOiE,CAAC,GAE5BQ,EAAI,QAAQ,CAAChC,EAAK8B,CAAK,CAAC,EAE1B,OAAOE,CACT,CAWA,KAAKA,EAA6B,CAChC,KAAK,MAAK,EACV,OAAW,CAAChC,EAAK8B,CAAK,IAAKE,EAAK,CAC9B,GAAIF,EAAM,MAAO,CAOf,IAAMlB,EAAM,KAAK,IAAG,EAAKkB,EAAM,MAC/BA,EAAM,MAAQvH,EAAK,IAAG,EAAKqG,EAE7B,KAAK,IAAIZ,EAAK8B,EAAM,MAAOA,CAAK,EAEpC,CAgCA,IACE9D,EACAgD,EACAiB,EAA4C,CAAA,EAAE,CAE9C,GAAIjB,IAAM,OACR,YAAK,OAAOhD,CAAC,EACN,KAET,GAAM,CACJ,IAAAS,EAAM,KAAK,IACX,MAAA2B,EACA,eAAAnB,EAAiB,KAAK,eACtB,gBAAAI,EAAkB,KAAK,gBACvB,OAAAoB,CAAM,EACJwB,EACA,CAAE,YAAA/C,EAAc,KAAK,WAAW,EAAK+C,EAEnCrG,EAAO,KAAKmF,GAChB/C,EACAgD,EACAiB,EAAW,MAAQ,EACnB5C,CAAe,EAIjB,GAAI,KAAK,cAAgBzD,EAAO,KAAK,aACnC,OAAI6E,IACFA,EAAO,IAAM,OACbA,EAAO,qBAAuB,IAGhC,KAAKH,GAAQtC,EAAG,KAAK,EACd,KAET,IAAIC,EAAQ,KAAKrB,KAAU,EAAI,OAAY,KAAKE,GAAQ,IAAIkB,CAAC,EAC7D,GAAIC,IAAU,OAEZA,EACE,KAAKrB,KAAU,EACX,KAAKQ,GACL,KAAKC,GAAM,SAAW,EACtB,KAAKA,GAAM,IAAG,EACd,KAAKT,KAAU,KAAKN,GACpB,KAAK4E,GAAO,EAAK,EACjB,KAAKtE,GAEX,KAAKG,GAASkB,CAAK,EAAID,EACvB,KAAKhB,GAASiB,CAAK,EAAI+C,EACvB,KAAKlE,GAAQ,IAAIkB,EAAGC,CAAK,EACzB,KAAKhB,GAAM,KAAKG,EAAK,EAAIa,EACzB,KAAKf,GAAMe,CAAK,EAAI,KAAKb,GACzB,KAAKA,GAAQa,EACb,KAAKrB,KACL,KAAKqE,GAAahD,EAAOrC,EAAM6E,CAAM,EACjCA,IAAQA,EAAO,IAAM,OACzBvB,EAAc,OACT,CAEL,KAAKb,GAAYJ,CAAK,EACtB,IAAMiE,EAAS,KAAKlF,GAASiB,CAAK,EAClC,GAAI+C,IAAMkB,EAAQ,CAChB,GAAI,KAAKvE,IAAmB,KAAKI,GAAmBmE,CAAM,EAAG,CAC3DA,EAAO,kBAAkB,MAAM,IAAI,MAAM,UAAU,CAAC,EACpD,GAAM,CAAE,qBAAsBjG,CAAC,EAAKiG,EAChCjG,IAAM,QAAa,CAACgD,IAClB,KAAKvB,IACP,KAAKlB,KAAWP,EAAQ+B,EAAG,KAAK,EAE9B,KAAKJ,IACP,KAAKN,IAAW,KAAK,CAACrB,EAAQ+B,EAAG,KAAK,CAAC,QAGjCiB,IACN,KAAKvB,IACP,KAAKlB,KAAW0F,EAAalE,EAAG,KAAK,EAEnC,KAAKJ,IACP,KAAKN,IAAW,KAAK,CAAC4E,EAAalE,EAAG,KAAK,CAAC,GAMhD,GAHA,KAAK8C,GAAgB7C,CAAK,EAC1B,KAAKgD,GAAahD,EAAOrC,EAAM6E,CAAM,EACrC,KAAKzD,GAASiB,CAAK,EAAI+C,EACnBP,EAAQ,CACVA,EAAO,IAAM,UACb,IAAM0B,EACJD,GAAU,KAAKnE,GAAmBmE,CAAM,EACpCA,EAAO,qBACPA,EACFC,IAAa,SAAW1B,EAAO,SAAW0B,SAEvC1B,IACTA,EAAO,IAAM,UAYjB,GATIhC,IAAQ,GAAK,CAAC,KAAKhB,IACrB,KAAKsC,GAAsB,EAEzB,KAAKtC,KACFyB,GACH,KAAKiB,GAAYlC,EAAOQ,EAAK2B,CAAK,EAEhCK,GAAQ,KAAKD,GAAWC,EAAQxC,CAAK,GAEvC,CAACgB,GAAkB,KAAKrB,IAAoB,KAAKN,GAAW,CAC9D,IAAM8E,EAAK,KAAK9E,GACZ+E,EACJ,KAAQA,EAAOD,GAAI,MAAK,GACtB,KAAK3F,KAAgB,GAAG4F,CAAI,EAGhC,OAAO,IACT,CAMA,KAAG,CACD,GAAI,CACF,KAAO,KAAKzF,IAAO,CACjB,IAAM0F,EAAM,KAAKtF,GAAS,KAAKG,EAAK,EAEpC,GADA,KAAK+D,GAAO,EAAI,EACZ,KAAKnD,GAAmBuE,CAAG,GAC7B,GAAIA,EAAI,qBACN,OAAOA,EAAI,6BAEJA,IAAQ,OACjB,OAAOA,EAGb,SACE,GAAI,KAAK1E,IAAoB,KAAKN,GAAW,CAC3C,IAAM8E,EAAK,KAAK9E,GACZ+E,EACJ,KAAQA,EAAOD,GAAI,MAAK,GACtB,KAAK3F,KAAgB,GAAG4F,CAAI,EAGlC,CACF,CAEAnB,GAAOqB,EAAa,CAClB,IAAMC,EAAO,KAAKrF,GACZa,EAAI,KAAKjB,GAASyF,CAAI,EACtBxB,EAAI,KAAKhE,GAASwF,CAAI,EAC5B,OAAI,KAAK7E,IAAmB,KAAKI,GAAmBiD,CAAC,EACnDA,EAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC,GACrC,KAAKtD,IAAe,KAAKE,MAC9B,KAAKF,IACP,KAAKlB,KAAWwE,EAAGhD,EAAG,OAAO,EAE3B,KAAKJ,IACP,KAAKN,IAAW,KAAK,CAAC0D,EAAGhD,EAAG,OAAO,CAAC,GAGxC,KAAK8C,GAAgB0B,CAAI,EAErBD,IACF,KAAKxF,GAASyF,CAAI,EAAI,OACtB,KAAKxF,GAASwF,CAAI,EAAI,OACtB,KAAKnF,GAAM,KAAKmF,CAAI,GAElB,KAAK5F,KAAU,GACjB,KAAKO,GAAQ,KAAKC,GAAQ,EAC1B,KAAKC,GAAM,OAAS,GAEpB,KAAKF,GAAQ,KAAKF,GAAMuF,CAAI,EAE9B,KAAK1F,GAAQ,OAAOkB,CAAC,EACrB,KAAKpB,KACE4F,CACT,CAkBA,IAAIxE,EAAMyE,EAA4C,CAAA,EAAE,CACtD,GAAM,CAAE,eAAA5D,EAAiB,KAAK,eAAgB,OAAA4B,CAAM,EAClDgC,EACIxE,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAChC,GAAIC,IAAU,OAAW,CACvB,IAAM+C,EAAI,KAAKhE,GAASiB,CAAK,EAC7B,GACE,KAAKF,GAAmBiD,CAAC,GACzBA,EAAE,uBAAyB,OAE3B,MAAO,GAET,GAAK,KAAKxC,GAASP,CAAK,EASbwC,IACTA,EAAO,IAAM,QACb,KAAKD,GAAWC,EAAQxC,CAAK,OAV7B,QAAIY,GACF,KAAK0B,GAAetC,CAAK,EAEvBwC,IACFA,EAAO,IAAM,MACb,KAAKD,GAAWC,EAAQxC,CAAK,GAExB,QAKAwC,IACTA,EAAO,IAAM,QAEf,MAAO,EACT,CASA,KAAKzC,EAAM0E,EAA8C,CAAA,EAAE,CACzD,GAAM,CAAE,WAAA5D,EAAa,KAAK,UAAU,EAAK4D,EACnCzE,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAChC,GACEC,IAAU,QACT,CAACa,GAAc,KAAKN,GAASP,CAAK,EAEnC,OAEF,IAAM+C,EAAI,KAAKhE,GAASiB,CAAK,EAE7B,OAAO,KAAKF,GAAmBiD,CAAC,EAAIA,EAAE,qBAAuBA,CAC/D,CAEA5C,GACEJ,EACAC,EACAC,EACAC,EAAY,CAEZ,IAAM6C,EAAI/C,IAAU,OAAY,OAAY,KAAKjB,GAASiB,CAAK,EAC/D,GAAI,KAAKF,GAAmBiD,CAAC,EAC3B,OAAOA,EAGT,IAAM2B,EAAK,IAAI5H,EACT,CAAE,OAAA6H,CAAM,EAAK1E,EAEnB0E,GAAQ,iBAAiB,QAAS,IAAMD,EAAG,MAAMC,EAAO,MAAM,EAAG,CAC/D,OAAQD,EAAG,OACZ,EAED,IAAME,EAAY,CAChB,OAAQF,EAAG,OACX,QAAAzE,EACA,QAAAC,GAGI2E,EAAK,CACT9B,EACA+B,EAAc,KACG,CACjB,GAAM,CAAE,QAAAC,CAAO,EAAKL,EAAG,OACjBM,EAAc/E,EAAQ,kBAAoB8C,IAAM,OAUtD,GATI9C,EAAQ,SACN8E,GAAW,CAACD,GACd7E,EAAQ,OAAO,aAAe,GAC9BA,EAAQ,OAAO,WAAayE,EAAG,OAAO,OAClCM,IAAa/E,EAAQ,OAAO,kBAAoB,KAEpDA,EAAQ,OAAO,cAAgB,IAG/B8E,GAAW,CAACC,GAAe,CAACF,EAC9B,OAAOG,EAAUP,EAAG,OAAO,MAAM,EAGnC,IAAMQ,EAAKrF,EACX,OAAI,KAAKd,GAASiB,CAAc,IAAMH,IAChCkD,IAAM,OACJmC,EAAG,qBACL,KAAKnG,GAASiB,CAAc,EAAIkF,EAAG,qBAEnC,KAAK7C,GAAQtC,EAAG,OAAO,GAGrBE,EAAQ,SAAQA,EAAQ,OAAO,aAAe,IAClD,KAAK,IAAIF,EAAGgD,EAAG6B,EAAU,OAAO,IAG7B7B,CACT,EAEMoC,EAAMC,IACNnF,EAAQ,SACVA,EAAQ,OAAO,cAAgB,GAC/BA,EAAQ,OAAO,WAAamF,GAEvBH,EAAUG,CAAE,GAGfH,EAAaG,GAA0B,CAC3C,GAAM,CAAE,QAAAL,CAAO,EAAKL,EAAG,OACjBW,EACJN,GAAW9E,EAAQ,uBACfY,EACJwE,GAAqBpF,EAAQ,2BACzBqF,EAAWzE,GAAcZ,EAAQ,yBACjCiF,EAAKrF,EAeX,GAdI,KAAKd,GAASiB,CAAc,IAAMH,IAGxB,CAACyF,GAAYJ,EAAG,uBAAyB,OAEnD,KAAK7C,GAAQtC,EAAG,OAAO,EACbsF,IAKV,KAAKtG,GAASiB,CAAc,EAAIkF,EAAG,uBAGnCrE,EACF,OAAIZ,EAAQ,QAAUiF,EAAG,uBAAyB,SAChDjF,EAAQ,OAAO,cAAgB,IAE1BiF,EAAG,qBACL,GAAIA,EAAG,aAAeA,EAC3B,MAAME,CAEV,EAEMG,EAAQ,CACZC,EACAC,IACE,CACF,IAAMC,EAAM,KAAKjH,KAAesB,EAAGgD,EAAG6B,CAAS,EAC3Cc,GAAOA,aAAe,SACxBA,EAAI,KAAK3C,GAAKyC,EAAIzC,IAAM,OAAY,OAAYA,CAAC,EAAG0C,CAAG,EAKzDf,EAAG,OAAO,iBAAiB,QAAS,IAAK,EAErC,CAACzE,EAAQ,kBACTA,EAAQ,0BAERuF,EAAI,MAAS,EAETvF,EAAQ,yBACVuF,EAAMzC,GAAK8B,EAAG9B,EAAG,EAAI,GAG3B,CAAC,CACH,EAEI9C,EAAQ,SAAQA,EAAQ,OAAO,gBAAkB,IACrD,IAAMJ,EAAI,IAAI,QAAQ0F,CAAK,EAAE,KAAKV,EAAIM,CAAE,EAClCD,EAAyB,OAAO,OAAOrF,EAAG,CAC9C,kBAAmB6E,EACnB,qBAAsB3B,EACtB,WAAY,OACb,EAED,OAAI/C,IAAU,QAEZ,KAAK,IAAID,EAAGmF,EAAI,CAAE,GAAGN,EAAU,QAAS,OAAQ,MAAS,CAAE,EAC3D5E,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,GAE1B,KAAKhB,GAASiB,CAAK,EAAIkF,EAElBA,CACT,CAEApF,GAAmBD,EAAM,CACvB,GAAI,CAAC,KAAKH,GAAiB,MAAO,GAClC,IAAMiG,EAAI9F,EACV,MACE,CAAC,CAAC8F,GACFA,aAAa,SACbA,EAAE,eAAe,sBAAsB,GACvCA,EAAE,6BAA6B7I,CAEnC,CA+GA,MAAM,MACJiD,EACA6F,EAAgD,CAAA,EAAE,CAElD,GAAM,CAEJ,WAAA/E,EAAa,KAAK,WAClB,eAAAF,EAAiB,KAAK,eACtB,mBAAAa,EAAqB,KAAK,mBAE1B,IAAAhB,EAAM,KAAK,IACX,eAAAQ,EAAiB,KAAK,eACtB,KAAArD,EAAO,EACP,gBAAAyD,EAAkB,KAAK,gBACvB,YAAAH,EAAc,KAAK,YAEnB,yBAAAM,EAA2B,KAAK,yBAChC,2BAAAE,EAA6B,KAAK,2BAClC,iBAAAE,EAAmB,KAAK,iBACxB,uBAAAD,EAAyB,KAAK,uBAC9B,QAAAxB,EACA,aAAA2F,EAAe,GACf,OAAArD,EACA,OAAAmC,CAAM,EACJiB,EAEJ,GAAI,CAAC,KAAKlG,GACR,OAAI8C,IAAQA,EAAO,MAAQ,OACpB,KAAK,IAAIzC,EAAG,CACjB,WAAAc,EACA,eAAAF,EACA,mBAAAa,EACA,OAAAgB,EACD,EAGH,IAAMvC,EAAU,CACd,WAAAY,EACA,eAAAF,EACA,mBAAAa,EACA,IAAAhB,EACA,eAAAQ,EACA,KAAArD,EACA,gBAAAyD,EACA,YAAAH,EACA,yBAAAM,EACA,2BAAAE,EACA,uBAAAC,EACA,iBAAAC,EACA,OAAAa,EACA,OAAAmC,GAGE3E,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAC9B,GAAIC,IAAU,OAAW,CACnBwC,IAAQA,EAAO,MAAQ,QAC3B,IAAM3C,EAAI,KAAKM,GAAiBJ,EAAGC,EAAOC,EAASC,CAAO,EAC1D,OAAQL,EAAE,WAAaA,MAClB,CAEL,IAAMkD,EAAI,KAAKhE,GAASiB,CAAK,EAC7B,GAAI,KAAKF,GAAmBiD,CAAC,EAAG,CAC9B,IAAM+C,EACJjF,GAAckC,EAAE,uBAAyB,OAC3C,OAAIP,IACFA,EAAO,MAAQ,WACXsD,IAAOtD,EAAO,cAAgB,KAE7BsD,EAAQ/C,EAAE,qBAAwBA,EAAE,WAAaA,EAK1D,IAAMgD,EAAU,KAAKxF,GAASP,CAAK,EACnC,GAAI,CAAC6F,GAAgB,CAACE,EACpB,OAAIvD,IAAQA,EAAO,MAAQ,OAC3B,KAAKpC,GAAYJ,CAAK,EAClBW,GACF,KAAK2B,GAAetC,CAAK,EAEvBwC,GAAQ,KAAKD,GAAWC,EAAQxC,CAAK,EAClC+C,EAKT,IAAMlD,EAAI,KAAKM,GAAiBJ,EAAGC,EAAOC,EAASC,CAAO,EAEpD8F,EADWnG,EAAE,uBAAyB,QACfgB,EAC7B,OAAI2B,IACFA,EAAO,MAAQuD,EAAU,QAAU,UAC/BC,GAAYD,IAASvD,EAAO,cAAgB,KAE3CwD,EAAWnG,EAAE,qBAAwBA,EAAE,WAAaA,EAE/D,CAoCA,MAAM,WACJE,EACA6F,EAAgD,CAAA,EAAE,CAElD,IAAM7C,EAAI,MAAM,KAAK,MACnBhD,EACA6F,CAI8C,EAEhD,GAAI7C,IAAM,OAAW,MAAM,IAAI,MAAM,4BAA4B,EACjE,OAAOA,CACT,CAqCA,KAAKhD,EAAMkG,EAA8C,CAAA,EAAE,CACzD,IAAM3E,EAAa,KAAK5C,GACxB,GAAI,CAAC4C,EACH,MAAM,IAAI,MAAM,uCAAuC,EAEzD,GAAM,CAAE,QAAApB,EAAS,aAAA2F,EAAc,GAAG5F,CAAO,EAAKgG,EACxClD,EAAI,KAAK,IAAIhD,EAAGE,CAAO,EAC7B,GAAI,CAAC4F,GAAgB9C,IAAM,OAAW,OAAOA,EAC7C,IAAMmD,EAAK5E,EAAWvB,EAAGgD,EAAG,CAC1B,QAAA9C,EACA,QAAAC,EACqC,EACvC,YAAK,IAAIH,EAAGmG,EAAIjG,CAAO,EAChBiG,CACT,CAQA,IAAInG,EAAM0D,EAA4C,CAAA,EAAE,CACtD,GAAM,CACJ,WAAA5C,EAAa,KAAK,WAClB,eAAAF,EAAiB,KAAK,eACtB,mBAAAa,EAAqB,KAAK,mBAC1B,OAAAgB,CAAM,EACJiB,EACEzD,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAChC,GAAIC,IAAU,OAAW,CACvB,IAAM0D,EAAQ,KAAK3E,GAASiB,CAAK,EAC3BmG,EAAW,KAAKrG,GAAmB4D,CAAK,EAE9C,OADIlB,GAAQ,KAAKD,GAAWC,EAAQxC,CAAK,EACrC,KAAKO,GAASP,CAAK,GACjBwC,IAAQA,EAAO,IAAM,SAEpB2D,GAQD3D,GACA3B,GACA6C,EAAM,uBAAyB,SAE/BlB,EAAO,cAAgB,IAElB3B,EAAa6C,EAAM,qBAAuB,SAb5ClC,GACH,KAAKa,GAAQtC,EAAG,QAAQ,EAEtByC,GAAU3B,IAAY2B,EAAO,cAAgB,IAC1C3B,EAAa6C,EAAQ,UAY1BlB,IAAQA,EAAO,IAAM,OAMrB2D,EACKzC,EAAM,sBAEf,KAAKtD,GAAYJ,CAAK,EAClBW,GACF,KAAK2B,GAAetC,CAAK,EAEpB0D,SAEAlB,IACTA,EAAO,IAAM,OAEjB,CAEA4D,GAASvG,EAAUtC,EAAQ,CACzB,KAAK0B,GAAM1B,CAAC,EAAIsC,EAChB,KAAKb,GAAMa,CAAC,EAAItC,CAClB,CAEA6C,GAAYJ,EAAY,CASlBA,IAAU,KAAKb,KACba,IAAU,KAAKd,GACjB,KAAKA,GAAQ,KAAKF,GAAMgB,CAAK,EAE7B,KAAKoG,GACH,KAAKnH,GAAMe,CAAK,EAChB,KAAKhB,GAAMgB,CAAK,CAAU,EAG9B,KAAKoG,GAAS,KAAKjH,GAAOa,CAAK,EAC/B,KAAKb,GAAQa,EAEjB,CAOA,OAAOD,EAAI,CACT,OAAO,KAAKsC,GAAQtC,EAAG,QAAQ,CACjC,CAEAsC,GAAQtC,EAAM7C,EAA8B,CAC1C,IAAI0G,EAAU,GACd,GAAI,KAAKjF,KAAU,EAAG,CACpB,IAAMqB,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAChC,GAAIC,IAAU,OAEZ,GADA4D,EAAU,GACN,KAAKjF,KAAU,EACjB,KAAK0H,GAAOnJ,CAAM,MACb,CACL,KAAK2F,GAAgB7C,CAAK,EAC1B,IAAM+C,EAAI,KAAKhE,GAASiB,CAAK,EAc7B,GAbI,KAAKF,GAAmBiD,CAAC,EAC3BA,EAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC,GACrC,KAAKtD,IAAe,KAAKE,MAC9B,KAAKF,IACP,KAAKlB,KAAWwE,EAAQhD,EAAG7C,CAAM,EAE/B,KAAKyC,IACP,KAAKN,IAAW,KAAK,CAAC0D,EAAQhD,EAAG7C,CAAM,CAAC,GAG5C,KAAK2B,GAAQ,OAAOkB,CAAC,EACrB,KAAKjB,GAASkB,CAAK,EAAI,OACvB,KAAKjB,GAASiB,CAAK,EAAI,OACnBA,IAAU,KAAKb,GACjB,KAAKA,GAAQ,KAAKF,GAAMe,CAAK,UACpBA,IAAU,KAAKd,GACxB,KAAKA,GAAQ,KAAKF,GAAMgB,CAAK,MACxB,CACL,IAAMsG,EAAK,KAAKrH,GAAMe,CAAK,EAC3B,KAAKhB,GAAMsH,CAAE,EAAI,KAAKtH,GAAMgB,CAAK,EACjC,IAAMuG,EAAK,KAAKvH,GAAMgB,CAAK,EAC3B,KAAKf,GAAMsH,CAAE,EAAI,KAAKtH,GAAMe,CAAK,EAEnC,KAAKrB,KACL,KAAKS,GAAM,KAAKY,CAAK,GAI3B,GAAI,KAAKL,IAAoB,KAAKN,IAAW,OAAQ,CACnD,IAAM8E,EAAK,KAAK9E,GACZ+E,EACJ,KAAQA,EAAOD,GAAI,MAAK,GACtB,KAAK3F,KAAgB,GAAG4F,CAAI,EAGhC,OAAOR,CACT,CAKA,OAAK,CACH,OAAO,KAAKyC,GAAO,QAAQ,CAC7B,CACAA,GAAOnJ,EAA8B,CACnC,QAAW8C,KAAS,KAAKM,GAAU,CAAE,WAAY,EAAI,CAAE,EAAG,CACxD,IAAMyC,EAAI,KAAKhE,GAASiB,CAAK,EAC7B,GAAI,KAAKF,GAAmBiD,CAAC,EAC3BA,EAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC,MACzC,CACL,IAAMhD,EAAI,KAAKjB,GAASkB,CAAK,EACzB,KAAKP,IACP,KAAKlB,KAAWwE,EAAQhD,EAAQ7C,CAAM,EAEpC,KAAKyC,IACP,KAAKN,IAAW,KAAK,CAAC0D,EAAQhD,EAAQ7C,CAAM,CAAC,GAoBnD,GAfA,KAAK2B,GAAQ,MAAK,EAClB,KAAKE,GAAS,KAAK,MAAS,EAC5B,KAAKD,GAAS,KAAK,MAAS,EACxB,KAAKU,IAAS,KAAKD,KACrB,KAAKC,GAAM,KAAK,CAAC,EACjB,KAAKD,GAAQ,KAAK,CAAC,GAEjB,KAAKD,IACP,KAAKA,GAAO,KAAK,CAAC,EAEpB,KAAKJ,GAAQ,EACb,KAAKC,GAAQ,EACb,KAAKC,GAAM,OAAS,EACpB,KAAKR,GAAkB,EACvB,KAAKD,GAAQ,EACT,KAAKgB,IAAoB,KAAKN,GAAW,CAC3C,IAAM8E,EAAK,KAAK9E,GACZ+E,EACJ,KAAQA,EAAOD,GAAI,MAAK,GACtB,KAAK3F,KAAgB,GAAG4F,CAAI,EAGlC",
+  "names": ["perf", "warned", "PROCESS", "emitWarning", "msg", "type", "code", "fn", "AC", "AS", "_", "warnACPolyfill", "reason", "printACPolyfillWarning", "shouldWarn", "TYPE", "isPosInt", "n", "getUintArray", "max", "ZeroArray", "size", "_constructing", "_Stack", "HeapCls", "__privateSet", "s", "__privateGet", "Stack", "__privateAdd", "LRUCache", "#max", "#maxSize", "#dispose", "#disposeAfter", "#fetchMethod", "#memoMethod", "#size", "#calculatedSize", "#keyMap", "#keyList", "#valList", "#next", "#prev", "#head", "#tail", "#free", "#disposed", "#sizes", "#starts", "#ttls", "#hasDispose", "#hasFetchMethod", "#hasDisposeAfter", "c", "p", "#isBackgroundFetch", "k", "index", "options", "context", "#backgroundFetch", "#moveToTail", "#indexes", "#rindexes", "#isStale", "ttl", "ttlResolution", "ttlAutopurge", "updateAgeOnGet", "updateAgeOnHas", "allowStale", "dispose", "disposeAfter", "noDisposeOnSet", "noUpdateTTL", "maxSize", "maxEntrySize", "sizeCalculation", "fetchMethod", "memoMethod", "noDeleteOnFetchRejection", "noDeleteOnStaleGet", "allowStaleOnFetchRejection", "allowStaleOnFetchAbort", "ignoreFetchAbort", "UintArray", "#initializeSizeTracking", "#initializeTTLTracking", "key", "ttls", "starts", "#setItemTTL", "start", "t", "#delete", "#updateItemAge", "#statusTTL", "status", "cachedNow", "getNow", "age", "sizes", "#removeItemSize", "#requireSize", "v", "#addItemSize", "#evict", "_i", "_s", "_st", "_k", "_v", "i", "#isValidIndex", "getOptions", "value", "thisp", "deleted", "entry", "remain", "arr", "setOptions", "oldVal", "oldValue", "dt", "task", "val", "free", "head", "hasOptions", "peekOptions", "ac", "signal", "fetchOpts", "cb", "updateCache", "aborted", "ignoreAbort", "fetchFail", "bf", "eb", "er", "allowStaleAborted", "noDelete", "pcall", "res", "rej", "fmp", "b", "fetchOptions", "forceRefresh", "stale", "isStale", "staleVal", "memoOptions", "vv", "fetching", "#connect", "#clear", "pi", "ni"]
+}
diff --git a/node_modules/path-scurry/node_modules/lru-cache/dist/esm/package.json b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/package.json
new file mode 100644
index 00000000..3dbc1ca5
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/dist/esm/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "module"
+}
diff --git a/node_modules/path-scurry/node_modules/lru-cache/package.json b/node_modules/path-scurry/node_modules/lru-cache/package.json
new file mode 100644
index 00000000..87783026
--- /dev/null
+++ b/node_modules/path-scurry/node_modules/lru-cache/package.json
@@ -0,0 +1,115 @@
+{
+  "name": "lru-cache",
+  "description": "A cache object that deletes the least-recently-used items.",
+  "version": "11.0.1",
+  "author": "Isaac Z. Schlueter ",
+  "keywords": [
+    "mru",
+    "lru",
+    "cache"
+  ],
+  "sideEffects": false,
+  "scripts": {
+    "build": "npm run prepare",
+    "prepare": "tshy && bash fixup.sh",
+    "pretest": "npm run prepare",
+    "presnap": "npm run prepare",
+    "test": "tap",
+    "snap": "tap",
+    "preversion": "npm test",
+    "postversion": "npm publish",
+    "prepublishOnly": "git push origin --follow-tags",
+    "format": "prettier --write .",
+    "typedoc": "typedoc --tsconfig ./.tshy/esm.json ./src/*.ts",
+    "benchmark-results-typedoc": "bash scripts/benchmark-results-typedoc.sh",
+    "prebenchmark": "npm run prepare",
+    "benchmark": "make -C benchmark",
+    "preprofile": "npm run prepare",
+    "profile": "make -C benchmark profile"
+  },
+  "main": "./dist/commonjs/index.js",
+  "types": "./dist/commonjs/index.d.ts",
+  "tshy": {
+    "exports": {
+      ".": "./src/index.ts",
+      "./min": {
+        "import": {
+          "types": "./dist/esm/index.d.ts",
+          "default": "./dist/esm/index.min.js"
+        },
+        "require": {
+          "types": "./dist/commonjs/index.d.ts",
+          "default": "./dist/commonjs/index.min.js"
+        }
+      }
+    }
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/isaacs/node-lru-cache.git"
+  },
+  "devDependencies": {
+    "@types/node": "^22.5.4",
+    "@types/tap": "^15.0.6",
+    "benchmark": "^2.1.4",
+    "esbuild": "^0.17.11",
+    "eslint-config-prettier": "^8.5.0",
+    "marked": "^4.2.12",
+    "mkdirp": "^2.1.5",
+    "prettier": "^2.6.2",
+    "tap": "^21.0.1",
+    "tshy": "^3.0.2",
+    "tslib": "^2.4.0",
+    "typedoc": "^0.26.6"
+  },
+  "license": "ISC",
+  "files": [
+    "dist"
+  ],
+  "engines": {
+    "node": "20 || >=22"
+  },
+  "prettier": {
+    "semi": false,
+    "printWidth": 70,
+    "tabWidth": 2,
+    "useTabs": false,
+    "singleQuote": true,
+    "jsxSingleQuote": false,
+    "bracketSameLine": true,
+    "arrowParens": "avoid",
+    "endOfLine": "lf"
+  },
+  "tap": {
+    "node-arg": [
+      "--expose-gc"
+    ],
+    "plugin": [
+      "@tapjs/clock"
+    ]
+  },
+  "exports": {
+    ".": {
+      "import": {
+        "types": "./dist/esm/index.d.ts",
+        "default": "./dist/esm/index.js"
+      },
+      "require": {
+        "types": "./dist/commonjs/index.d.ts",
+        "default": "./dist/commonjs/index.js"
+      }
+    },
+    "./min": {
+      "import": {
+        "types": "./dist/esm/index.d.ts",
+        "default": "./dist/esm/index.min.js"
+      },
+      "require": {
+        "types": "./dist/commonjs/index.d.ts",
+        "default": "./dist/commonjs/index.min.js"
+      }
+    }
+  },
+  "type": "module",
+  "module": "./dist/esm/index.js"
+}
diff --git a/node_modules/path-scurry/package.json b/node_modules/path-scurry/package.json
new file mode 100644
index 00000000..c3cb39dc
--- /dev/null
+++ b/node_modules/path-scurry/package.json
@@ -0,0 +1,88 @@
+{
+  "name": "path-scurry",
+  "version": "2.0.0",
+  "description": "walk paths fast and efficiently",
+  "author": "Isaac Z. Schlueter  (https://blog.izs.me)",
+  "main": "./dist/commonjs/index.js",
+  "type": "module",
+  "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"
+      }
+    }
+  },
+  "files": [
+    "dist"
+  ],
+  "license": "BlueOak-1.0.0",
+  "scripts": {
+    "preversion": "npm test",
+    "postversion": "npm publish",
+    "prepublishOnly": "git push origin --follow-tags",
+    "prepare": "tshy",
+    "pretest": "npm run prepare",
+    "presnap": "npm run prepare",
+    "test": "tap",
+    "snap": "tap",
+    "format": "prettier --write . --log-level warn",
+    "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts",
+    "bench": "bash ./scripts/bench.sh"
+  },
+  "prettier": {
+    "experimentalTernaries": true,
+    "semi": false,
+    "printWidth": 75,
+    "tabWidth": 2,
+    "useTabs": false,
+    "singleQuote": true,
+    "jsxSingleQuote": false,
+    "bracketSameLine": true,
+    "arrowParens": "avoid",
+    "endOfLine": "lf"
+  },
+  "devDependencies": {
+    "@nodelib/fs.walk": "^2.0.0",
+    "@types/node": "^20.14.10",
+    "mkdirp": "^3.0.0",
+    "prettier": "^3.3.2",
+    "rimraf": "^5.0.8",
+    "tap": "^20.0.3",
+    "ts-node": "^10.9.2",
+    "tshy": "^2.0.1",
+    "typedoc": "^0.26.3",
+    "typescript": "^5.5.3"
+  },
+  "tap": {
+    "typecheck": true
+  },
+  "engines": {
+    "node": "20 || >=22"
+  },
+  "funding": {
+    "url": "https://github.com/sponsors/isaacs"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/isaacs/path-scurry"
+  },
+  "dependencies": {
+    "lru-cache": "^11.0.0",
+    "minipass": "^7.1.2"
+  },
+  "tshy": {
+    "selfLink": false,
+    "exports": {
+      "./package.json": "./package.json",
+      ".": "./src/index.ts"
+    }
+  },
+  "types": "./dist/commonjs/index.d.ts",
+  "module": "./dist/esm/index.js"
+}
diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt
new file mode 100644
index 00000000..954f2fa8
--- /dev/null
+++ b/node_modules/signal-exit/LICENSE.txt
@@ -0,0 +1,16 @@
+The ISC License
+
+Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors
+
+Permission to use, copy, modify, and/or distribute this software
+for any purpose with or without fee is hereby granted, provided
+that the above copyright notice and this permission notice
+appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md
new file mode 100644
index 00000000..c55cd45e
--- /dev/null
+++ b/node_modules/signal-exit/README.md
@@ -0,0 +1,74 @@
+# signal-exit
+
+When you want to fire an event no matter how a process exits:
+
+- reaching the end of execution.
+- explicitly having `process.exit(code)` called.
+- having `process.kill(pid, sig)` called.
+- receiving a fatal signal from outside the process
+
+Use `signal-exit`.
+
+```js
+// Hybrid module, either works
+import { onExit } from 'signal-exit'
+// or:
+// const { onExit } = require('signal-exit')
+
+onExit((code, signal) => {
+  console.log('process exited!', code, signal)
+})
+```
+
+## API
+
+`remove = onExit((code, signal) => {}, options)`
+
+The return value of the function is a function that will remove
+the handler.
+
+Note that the function _only_ fires for signals if the signal
+would cause the process to exit. That is, there are no other
+listeners, and it is a fatal signal.
+
+If the global `process` object is not suitable for this purpose
+(ie, it's unset, or doesn't have an `emit` method, etc.) then the
+`onExit` function is a no-op that returns a no-op `remove` method.
+
+### Options
+
+- `alwaysLast`: Run this handler after any other signal or exit
+  handlers. This causes `process.emit` to be monkeypatched.
+
+### Capturing Signal Exits
+
+If the handler returns an exact boolean `true`, and the exit is a
+due to signal, then the signal will be considered handled, and
+will _not_ trigger a synthetic `process.kill(process.pid,
+signal)` after firing the `onExit` handlers.
+
+In this case, it your responsibility as the caller to exit with a
+signal (for example, by calling `process.kill()`) if you wish to
+preserve the same exit status that would otherwise have occurred.
+If you do not, then the process will likely exit gracefully with
+status 0 at some point, assuming that no other terminating signal
+or other exit trigger occurs.
+
+Prior to calling handlers, the `onExit` machinery is unloaded, so
+any subsequent exits or signals will not be handled, even if the
+signal is captured and the exit is thus prevented.
+
+Note that numeric code exits may indicate that the process is
+already committed to exiting, for example due to a fatal
+exception or unhandled promise rejection, and so there is no way to
+prevent it safely.
+
+### Browser Fallback
+
+The `'signal-exit/browser'` module is the same fallback shim that
+just doesn't do anything, but presents the same function
+interface.
+
+Patches welcome to add something that hooks onto
+`window.onbeforeunload` or similar, but it might just not be a
+thing that makes sense there.
diff --git a/node_modules/signal-exit/dist/cjs/browser.d.ts b/node_modules/signal-exit/dist/cjs/browser.d.ts
new file mode 100644
index 00000000..90f2e3f1
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/browser.d.ts
@@ -0,0 +1,12 @@
+/**
+ * This is a browser shim that provides the same functional interface
+ * as the main node export, but it does nothing.
+ * @module
+ */
+import type { Handler } from './index.js';
+export declare const onExit: (cb: Handler, opts: {
+    alwaysLast?: boolean;
+}) => () => void;
+export declare const load: () => void;
+export declare const unload: () => void;
+//# sourceMappingURL=browser.d.ts.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/browser.d.ts.map b/node_modules/signal-exit/dist/cjs/browser.d.ts.map
new file mode 100644
index 00000000..aacc1d3b
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/browser.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,eAAO,MAAM,MAAM,EAAE,CACnB,EAAE,EAAE,OAAO,EACX,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,KAC3B,MAAM,IAAqB,CAAA;AAChC,eAAO,MAAM,IAAI,YAAW,CAAA;AAC5B,eAAO,MAAM,MAAM,YAAW,CAAA"}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/browser.js b/node_modules/signal-exit/dist/cjs/browser.js
new file mode 100644
index 00000000..614fbf01
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/browser.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.unload = exports.load = exports.onExit = void 0;
+const onExit = () => () => { };
+exports.onExit = onExit;
+const load = () => { };
+exports.load = load;
+const unload = () => { };
+exports.unload = unload;
+//# sourceMappingURL=browser.js.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/browser.js.map b/node_modules/signal-exit/dist/cjs/browser.js.map
new file mode 100644
index 00000000..342cf2e2
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/browser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":";;;AAMO,MAAM,MAAM,GAGD,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;AAHnB,QAAA,MAAM,UAGa;AACzB,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAAf,QAAA,IAAI,QAAW;AACrB,MAAM,MAAM,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAAjB,QAAA,MAAM,UAAW","sourcesContent":["/**\n * This is a browser shim that provides the same functional interface\n * as the main node export, but it does nothing.\n * @module\n */\nimport type { Handler } from './index.js'\nexport const onExit: (\n  cb: Handler,\n  opts: { alwaysLast?: boolean }\n) => () => void = () => () => {}\nexport const load = () => {}\nexport const unload = () => {}\n"]}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/index.d.ts b/node_modules/signal-exit/dist/cjs/index.d.ts
new file mode 100644
index 00000000..cabe9cfc
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/index.d.ts
@@ -0,0 +1,48 @@
+/// 
+import { signals } from './signals.js';
+export { signals };
+/**
+ * A function that takes an exit code and signal as arguments
+ *
+ * In the case of signal exits *only*, a return value of true
+ * will indicate that the signal is being handled, and we should
+ * not synthetically exit with the signal we received. Regardless
+ * of the handler return value, the handler is unloaded when an
+ * otherwise fatal signal is received, so you get exactly 1 shot
+ * at it, unless you add another onExit handler at that point.
+ *
+ * In the case of numeric code exits, we may already have committed
+ * to exiting the process, for example via a fatal exception or
+ * unhandled promise rejection, so it is impossible to stop safely.
+ */
+export type Handler = (code: number | null | undefined, signal: NodeJS.Signals | null) => true | void;
+export declare const 
+/**
+ * Called when the process is exiting, whether via signal, explicit
+ * exit, or running out of stuff to do.
+ *
+ * If the global process object is not suitable for instrumentation,
+ * then this will be a no-op.
+ *
+ * Returns a function that may be used to unload signal-exit.
+ */
+onExit: (cb: Handler, opts?: {
+    alwaysLast?: boolean | undefined;
+} | undefined) => () => void, 
+/**
+ * Load the listeners.  Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+load: () => void, 
+/**
+ * Unload the listeners.  Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+unload: () => void;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/index.d.ts.map b/node_modules/signal-exit/dist/cjs/index.d.ts.map
new file mode 100644
index 00000000..f84594e2
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,CAAA;AAuBlB;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,OAAO,GAAG,CACpB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAC1B,IAAI,GAAG,IAAI,CAAA;AA8QhB,eAAO;AACL;;;;;;;;GAQG;AACH,MAAM,OAzMO,OAAO;;wBAPiD,IAAI;AAkNzE;;;;;;GAMG;AACH,IAAI;AAEJ;;;;;;GAMG;AACH,MAAM,YAGP,CAAA"}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/index.js b/node_modules/signal-exit/dist/cjs/index.js
new file mode 100644
index 00000000..797e6743
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/index.js
@@ -0,0 +1,279 @@
+"use strict";
+var _a;
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.unload = exports.load = exports.onExit = exports.signals = void 0;
+// Note: since nyc uses this module to output coverage, any lines
+// that are in the direct sync flow of nyc's outputCoverage are
+// ignored, since we can never get coverage for them.
+// grab a reference to node's real process object right away
+const signals_js_1 = require("./signals.js");
+Object.defineProperty(exports, "signals", { enumerable: true, get: function () { return signals_js_1.signals; } });
+const processOk = (process) => !!process &&
+    typeof process === 'object' &&
+    typeof process.removeListener === 'function' &&
+    typeof process.emit === 'function' &&
+    typeof process.reallyExit === 'function' &&
+    typeof process.listeners === 'function' &&
+    typeof process.kill === 'function' &&
+    typeof process.pid === 'number' &&
+    typeof process.on === 'function';
+const kExitEmitter = Symbol.for('signal-exit emitter');
+const global = globalThis;
+const ObjectDefineProperty = Object.defineProperty.bind(Object);
+// teeny special purpose ee
+class Emitter {
+    emitted = {
+        afterExit: false,
+        exit: false,
+    };
+    listeners = {
+        afterExit: [],
+        exit: [],
+    };
+    count = 0;
+    id = Math.random();
+    constructor() {
+        if (global[kExitEmitter]) {
+            return global[kExitEmitter];
+        }
+        ObjectDefineProperty(global, kExitEmitter, {
+            value: this,
+            writable: false,
+            enumerable: false,
+            configurable: false,
+        });
+    }
+    on(ev, fn) {
+        this.listeners[ev].push(fn);
+    }
+    removeListener(ev, fn) {
+        const list = this.listeners[ev];
+        const i = list.indexOf(fn);
+        /* c8 ignore start */
+        if (i === -1) {
+            return;
+        }
+        /* c8 ignore stop */
+        if (i === 0 && list.length === 1) {
+            list.length = 0;
+        }
+        else {
+            list.splice(i, 1);
+        }
+    }
+    emit(ev, code, signal) {
+        if (this.emitted[ev]) {
+            return false;
+        }
+        this.emitted[ev] = true;
+        let ret = false;
+        for (const fn of this.listeners[ev]) {
+            ret = fn(code, signal) === true || ret;
+        }
+        if (ev === 'exit') {
+            ret = this.emit('afterExit', code, signal) || ret;
+        }
+        return ret;
+    }
+}
+class SignalExitBase {
+}
+const signalExitWrap = (handler) => {
+    return {
+        onExit(cb, opts) {
+            return handler.onExit(cb, opts);
+        },
+        load() {
+            return handler.load();
+        },
+        unload() {
+            return handler.unload();
+        },
+    };
+};
+class SignalExitFallback extends SignalExitBase {
+    onExit() {
+        return () => { };
+    }
+    load() { }
+    unload() { }
+}
+class SignalExit extends SignalExitBase {
+    // "SIGHUP" throws an `ENOSYS` error on Windows,
+    // so use a supported signal instead
+    /* c8 ignore start */
+    #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP';
+    /* c8 ignore stop */
+    #emitter = new Emitter();
+    #process;
+    #originalProcessEmit;
+    #originalProcessReallyExit;
+    #sigListeners = {};
+    #loaded = false;
+    constructor(process) {
+        super();
+        this.#process = process;
+        // { : , ... }
+        this.#sigListeners = {};
+        for (const sig of signals_js_1.signals) {
+            this.#sigListeners[sig] = () => {
+                // If there are no other listeners, an exit is coming!
+                // Simplest way: remove us and then re-send the signal.
+                // We know that this will kill the process, so we can
+                // safely emit now.
+                const listeners = this.#process.listeners(sig);
+                let { count } = this.#emitter;
+                // This is a workaround for the fact that signal-exit v3 and signal
+                // exit v4 are not aware of each other, and each will attempt to let
+                // the other handle it, so neither of them do. To correct this, we
+                // detect if we're the only handler *except* for previous versions
+                // of signal-exit, and increment by the count of listeners it has
+                // created.
+                /* c8 ignore start */
+                const p = process;
+                if (typeof p.__signal_exit_emitter__ === 'object' &&
+                    typeof p.__signal_exit_emitter__.count === 'number') {
+                    count += p.__signal_exit_emitter__.count;
+                }
+                /* c8 ignore stop */
+                if (listeners.length === count) {
+                    this.unload();
+                    const ret = this.#emitter.emit('exit', null, sig);
+                    /* c8 ignore start */
+                    const s = sig === 'SIGHUP' ? this.#hupSig : sig;
+                    if (!ret)
+                        process.kill(process.pid, s);
+                    /* c8 ignore stop */
+                }
+            };
+        }
+        this.#originalProcessReallyExit = process.reallyExit;
+        this.#originalProcessEmit = process.emit;
+    }
+    onExit(cb, opts) {
+        /* c8 ignore start */
+        if (!processOk(this.#process)) {
+            return () => { };
+        }
+        /* c8 ignore stop */
+        if (this.#loaded === false) {
+            this.load();
+        }
+        const ev = opts?.alwaysLast ? 'afterExit' : 'exit';
+        this.#emitter.on(ev, cb);
+        return () => {
+            this.#emitter.removeListener(ev, cb);
+            if (this.#emitter.listeners['exit'].length === 0 &&
+                this.#emitter.listeners['afterExit'].length === 0) {
+                this.unload();
+            }
+        };
+    }
+    load() {
+        if (this.#loaded) {
+            return;
+        }
+        this.#loaded = true;
+        // This is the number of onSignalExit's that are in play.
+        // It's important so that we can count the correct number of
+        // listeners on signals, and don't wait for the other one to
+        // handle it instead of us.
+        this.#emitter.count += 1;
+        for (const sig of signals_js_1.signals) {
+            try {
+                const fn = this.#sigListeners[sig];
+                if (fn)
+                    this.#process.on(sig, fn);
+            }
+            catch (_) { }
+        }
+        this.#process.emit = (ev, ...a) => {
+            return this.#processEmit(ev, ...a);
+        };
+        this.#process.reallyExit = (code) => {
+            return this.#processReallyExit(code);
+        };
+    }
+    unload() {
+        if (!this.#loaded) {
+            return;
+        }
+        this.#loaded = false;
+        signals_js_1.signals.forEach(sig => {
+            const listener = this.#sigListeners[sig];
+            /* c8 ignore start */
+            if (!listener) {
+                throw new Error('Listener not defined for signal: ' + sig);
+            }
+            /* c8 ignore stop */
+            try {
+                this.#process.removeListener(sig, listener);
+                /* c8 ignore start */
+            }
+            catch (_) { }
+            /* c8 ignore stop */
+        });
+        this.#process.emit = this.#originalProcessEmit;
+        this.#process.reallyExit = this.#originalProcessReallyExit;
+        this.#emitter.count -= 1;
+    }
+    #processReallyExit(code) {
+        /* c8 ignore start */
+        if (!processOk(this.#process)) {
+            return 0;
+        }
+        this.#process.exitCode = code || 0;
+        /* c8 ignore stop */
+        this.#emitter.emit('exit', this.#process.exitCode, null);
+        return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
+    }
+    #processEmit(ev, ...args) {
+        const og = this.#originalProcessEmit;
+        if (ev === 'exit' && processOk(this.#process)) {
+            if (typeof args[0] === 'number') {
+                this.#process.exitCode = args[0];
+                /* c8 ignore start */
+            }
+            /* c8 ignore start */
+            const ret = og.call(this.#process, ev, ...args);
+            /* c8 ignore start */
+            this.#emitter.emit('exit', this.#process.exitCode, null);
+            /* c8 ignore stop */
+            return ret;
+        }
+        else {
+            return og.call(this.#process, ev, ...args);
+        }
+    }
+}
+const process = globalThis.process;
+// wrap so that we call the method on the actual handler, without
+// exporting it directly.
+_a = signalExitWrap(processOk(process) ? new SignalExit(process) : new SignalExitFallback()), 
+/**
+ * Called when the process is exiting, whether via signal, explicit
+ * exit, or running out of stuff to do.
+ *
+ * If the global process object is not suitable for instrumentation,
+ * then this will be a no-op.
+ *
+ * Returns a function that may be used to unload signal-exit.
+ */
+exports.onExit = _a.onExit, 
+/**
+ * Load the listeners.  Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+exports.load = _a.load, 
+/**
+ * Unload the listeners.  Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+exports.unload = _a.unload;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/index.js.map b/node_modules/signal-exit/dist/cjs/index.js.map
new file mode 100644
index 00000000..528e3cc9
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js'\nexport { signals }\n\n// just a loosened process type so we can do some evil things\ntype ProcessRE = NodeJS.Process & {\n  reallyExit: (code?: number | undefined | null) => any\n  emit: (ev: string, ...a: any[]) => any\n}\n\nconst processOk = (process: any): process is ProcessRE =>\n  !!process &&\n  typeof process === 'object' &&\n  typeof process.removeListener === 'function' &&\n  typeof process.emit === 'function' &&\n  typeof process.reallyExit === 'function' &&\n  typeof process.listeners === 'function' &&\n  typeof process.kill === 'function' &&\n  typeof process.pid === 'number' &&\n  typeof process.on === 'function'\n\nconst kExitEmitter = Symbol.for('signal-exit emitter')\nconst global: typeof globalThis & { [kExitEmitter]?: Emitter } = globalThis\nconst ObjectDefineProperty = Object.defineProperty.bind(Object)\n\n/**\n * A function that takes an exit code and signal as arguments\n *\n * In the case of signal exits *only*, a return value of true\n * will indicate that the signal is being handled, and we should\n * not synthetically exit with the signal we received. Regardless\n * of the handler return value, the handler is unloaded when an\n * otherwise fatal signal is received, so you get exactly 1 shot\n * at it, unless you add another onExit handler at that point.\n *\n * In the case of numeric code exits, we may already have committed\n * to exiting the process, for example via a fatal exception or\n * unhandled promise rejection, so it is impossible to stop safely.\n */\nexport type Handler = (\n  code: number | null | undefined,\n  signal: NodeJS.Signals | null\n) => true | void\ntype ExitEvent = 'afterExit' | 'exit'\ntype Emitted = { [k in ExitEvent]: boolean }\ntype Listeners = { [k in ExitEvent]: Handler[] }\n\n// teeny special purpose ee\nclass Emitter {\n  emitted: Emitted = {\n    afterExit: false,\n    exit: false,\n  }\n\n  listeners: Listeners = {\n    afterExit: [],\n    exit: [],\n  }\n\n  count: number = 0\n  id: number = Math.random()\n\n  constructor() {\n    if (global[kExitEmitter]) {\n      return global[kExitEmitter]\n    }\n    ObjectDefineProperty(global, kExitEmitter, {\n      value: this,\n      writable: false,\n      enumerable: false,\n      configurable: false,\n    })\n  }\n\n  on(ev: ExitEvent, fn: Handler) {\n    this.listeners[ev].push(fn)\n  }\n\n  removeListener(ev: ExitEvent, fn: Handler) {\n    const list = this.listeners[ev]\n    const i = list.indexOf(fn)\n    /* c8 ignore start */\n    if (i === -1) {\n      return\n    }\n    /* c8 ignore stop */\n    if (i === 0 && list.length === 1) {\n      list.length = 0\n    } else {\n      list.splice(i, 1)\n    }\n  }\n\n  emit(\n    ev: ExitEvent,\n    code: number | null | undefined,\n    signal: NodeJS.Signals | null\n  ): boolean {\n    if (this.emitted[ev]) {\n      return false\n    }\n    this.emitted[ev] = true\n    let ret: boolean = false\n    for (const fn of this.listeners[ev]) {\n      ret = fn(code, signal) === true || ret\n    }\n    if (ev === 'exit') {\n      ret = this.emit('afterExit', code, signal) || ret\n    }\n    return ret\n  }\n}\n\nabstract class SignalExitBase {\n  abstract onExit(cb: Handler, opts?: { alwaysLast?: boolean }): () => void\n  abstract load(): void\n  abstract unload(): void\n}\n\nconst signalExitWrap = (handler: T) => {\n  return {\n    onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n      return handler.onExit(cb, opts)\n    },\n    load() {\n      return handler.load()\n    },\n    unload() {\n      return handler.unload()\n    },\n  }\n}\n\nclass SignalExitFallback extends SignalExitBase {\n  onExit() {\n    return () => {}\n  }\n  load() {}\n  unload() {}\n}\n\nclass SignalExit extends SignalExitBase {\n  // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n  // so use a supported signal instead\n  /* c8 ignore start */\n  #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP'\n  /* c8 ignore stop */\n  #emitter = new Emitter()\n  #process: ProcessRE\n  #originalProcessEmit: ProcessRE['emit']\n  #originalProcessReallyExit: ProcessRE['reallyExit']\n\n  #sigListeners: { [k in NodeJS.Signals]?: () => void } = {}\n  #loaded: boolean = false\n\n  constructor(process: ProcessRE) {\n    super()\n    this.#process = process\n    // { : , ... }\n    this.#sigListeners = {}\n    for (const sig of signals) {\n      this.#sigListeners[sig] = () => {\n        // If there are no other listeners, an exit is coming!\n        // Simplest way: remove us and then re-send the signal.\n        // We know that this will kill the process, so we can\n        // safely emit now.\n        const listeners = this.#process.listeners(sig)\n        let { count } = this.#emitter\n        // This is a workaround for the fact that signal-exit v3 and signal\n        // exit v4 are not aware of each other, and each will attempt to let\n        // the other handle it, so neither of them do. To correct this, we\n        // detect if we're the only handler *except* for previous versions\n        // of signal-exit, and increment by the count of listeners it has\n        // created.\n        /* c8 ignore start */\n        const p = process as unknown as {\n          __signal_exit_emitter__?: { count: number }\n        }\n        if (\n          typeof p.__signal_exit_emitter__ === 'object' &&\n          typeof p.__signal_exit_emitter__.count === 'number'\n        ) {\n          count += p.__signal_exit_emitter__.count\n        }\n        /* c8 ignore stop */\n        if (listeners.length === count) {\n          this.unload()\n          const ret = this.#emitter.emit('exit', null, sig)\n          /* c8 ignore start */\n          const s = sig === 'SIGHUP' ? this.#hupSig : sig\n          if (!ret) process.kill(process.pid, s)\n          /* c8 ignore stop */\n        }\n      }\n    }\n\n    this.#originalProcessReallyExit = process.reallyExit\n    this.#originalProcessEmit = process.emit\n  }\n\n  onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return () => {}\n    }\n    /* c8 ignore stop */\n\n    if (this.#loaded === false) {\n      this.load()\n    }\n\n    const ev = opts?.alwaysLast ? 'afterExit' : 'exit'\n    this.#emitter.on(ev, cb)\n    return () => {\n      this.#emitter.removeListener(ev, cb)\n      if (\n        this.#emitter.listeners['exit'].length === 0 &&\n        this.#emitter.listeners['afterExit'].length === 0\n      ) {\n        this.unload()\n      }\n    }\n  }\n\n  load() {\n    if (this.#loaded) {\n      return\n    }\n    this.#loaded = true\n\n    // This is the number of onSignalExit's that are in play.\n    // It's important so that we can count the correct number of\n    // listeners on signals, and don't wait for the other one to\n    // handle it instead of us.\n    this.#emitter.count += 1\n\n    for (const sig of signals) {\n      try {\n        const fn = this.#sigListeners[sig]\n        if (fn) this.#process.on(sig, fn)\n      } catch (_) {}\n    }\n\n    this.#process.emit = (ev: string, ...a: any[]) => {\n      return this.#processEmit(ev, ...a)\n    }\n    this.#process.reallyExit = (code?: number | null | undefined) => {\n      return this.#processReallyExit(code)\n    }\n  }\n\n  unload() {\n    if (!this.#loaded) {\n      return\n    }\n    this.#loaded = false\n\n    signals.forEach(sig => {\n      const listener = this.#sigListeners[sig]\n      /* c8 ignore start */\n      if (!listener) {\n        throw new Error('Listener not defined for signal: ' + sig)\n      }\n      /* c8 ignore stop */\n      try {\n        this.#process.removeListener(sig, listener)\n        /* c8 ignore start */\n      } catch (_) {}\n      /* c8 ignore stop */\n    })\n    this.#process.emit = this.#originalProcessEmit\n    this.#process.reallyExit = this.#originalProcessReallyExit\n    this.#emitter.count -= 1\n  }\n\n  #processReallyExit(code?: number | null | undefined) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return 0\n    }\n    this.#process.exitCode = code || 0\n    /* c8 ignore stop */\n\n    this.#emitter.emit('exit', this.#process.exitCode, null)\n    return this.#originalProcessReallyExit.call(\n      this.#process,\n      this.#process.exitCode\n    )\n  }\n\n  #processEmit(ev: string, ...args: any[]): any {\n    const og = this.#originalProcessEmit\n    if (ev === 'exit' && processOk(this.#process)) {\n      if (typeof args[0] === 'number') {\n        this.#process.exitCode = args[0]\n        /* c8 ignore start */\n      }\n      /* c8 ignore start */\n      const ret = og.call(this.#process, ev, ...args)\n      /* c8 ignore start */\n      this.#emitter.emit('exit', this.#process.exitCode, null)\n      /* c8 ignore stop */\n      return ret\n    } else {\n      return og.call(this.#process, ev, ...args)\n    }\n  }\n}\n\nconst process = globalThis.process\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const {\n  /**\n   * Called when the process is exiting, whether via signal, explicit\n   * exit, or running out of stuff to do.\n   *\n   * If the global process object is not suitable for instrumentation,\n   * then this will be a no-op.\n   *\n   * Returns a function that may be used to unload signal-exit.\n   */\n  onExit,\n\n  /**\n   * Load the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  load,\n\n  /**\n   * Unload the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  unload,\n} = signalExitWrap(\n  processOk(process) ? new SignalExit(process) : new SignalExitFallback()\n)\n"]}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/package.json b/node_modules/signal-exit/dist/cjs/package.json
new file mode 100644
index 00000000..5bbefffb
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
diff --git a/node_modules/signal-exit/dist/cjs/signals.d.ts b/node_modules/signal-exit/dist/cjs/signals.d.ts
new file mode 100644
index 00000000..3f01ef00
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/signals.d.ts
@@ -0,0 +1,29 @@
+/// 
+/**
+ * This is not the set of all possible signals.
+ *
+ * It IS, however, the set of all signals that trigger
+ * an exit on either Linux or BSD systems.  Linux is a
+ * superset of the signal names supported on BSD, and
+ * the unknown signals just fail to register, so we can
+ * catch that easily enough.
+ *
+ * Windows signals are a different set, since there are
+ * signals that terminate Windows processes, but don't
+ * terminate (or don't even exist) on Posix systems.
+ *
+ * Don't bother with SIGKILL.  It's uncatchable, which
+ * means that we can't fire any callbacks anyway.
+ *
+ * If a user does happen to register a handler on a non-
+ * fatal signal like SIGWINCH or something, and then
+ * exit, it'll end up firing `process.emit('exit')`, so
+ * the handler will be fired anyway.
+ *
+ * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
+ * artificially, inherently leave the process in a
+ * state from which it is not safe to try and enter JS
+ * listeners.
+ */
+export declare const signals: NodeJS.Signals[];
+//# sourceMappingURL=signals.d.ts.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/signals.d.ts.map b/node_modules/signal-exit/dist/cjs/signals.d.ts.map
new file mode 100644
index 00000000..891fe1e6
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/signals.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/signals.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO,EAAO,CAAA"}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/signals.js b/node_modules/signal-exit/dist/cjs/signals.js
new file mode 100644
index 00000000..28afc502
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/signals.js
@@ -0,0 +1,42 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.signals = void 0;
+/**
+ * This is not the set of all possible signals.
+ *
+ * It IS, however, the set of all signals that trigger
+ * an exit on either Linux or BSD systems.  Linux is a
+ * superset of the signal names supported on BSD, and
+ * the unknown signals just fail to register, so we can
+ * catch that easily enough.
+ *
+ * Windows signals are a different set, since there are
+ * signals that terminate Windows processes, but don't
+ * terminate (or don't even exist) on Posix systems.
+ *
+ * Don't bother with SIGKILL.  It's uncatchable, which
+ * means that we can't fire any callbacks anyway.
+ *
+ * If a user does happen to register a handler on a non-
+ * fatal signal like SIGWINCH or something, and then
+ * exit, it'll end up firing `process.emit('exit')`, so
+ * the handler will be fired anyway.
+ *
+ * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
+ * artificially, inherently leave the process in a
+ * state from which it is not safe to try and enter JS
+ * listeners.
+ */
+exports.signals = [];
+exports.signals.push('SIGHUP', 'SIGINT', 'SIGTERM');
+if (process.platform !== 'win32') {
+    exports.signals.push('SIGALRM', 'SIGABRT', 'SIGVTALRM', 'SIGXCPU', 'SIGXFSZ', 'SIGUSR2', 'SIGTRAP', 'SIGSYS', 'SIGQUIT', 'SIGIOT'
+    // should detect profiler and enable/disable accordingly.
+    // see #21
+    // 'SIGPROF'
+    );
+}
+if (process.platform === 'linux') {
+    exports.signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT');
+}
+//# sourceMappingURL=signals.js.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/cjs/signals.js.map b/node_modules/signal-exit/dist/cjs/signals.js.map
new file mode 100644
index 00000000..78c613f6
--- /dev/null
+++ b/node_modules/signal-exit/dist/cjs/signals.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/signals.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACU,QAAA,OAAO,GAAqB,EAAE,CAAA;AAC3C,eAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;AAE3C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;IAChC,eAAO,CAAC,IAAI,CACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ;IACR,yDAAyD;IACzD,UAAU;IACV,YAAY;KACb,CAAA;CACF;AAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;IAChC,eAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;CACxD","sourcesContent":["/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems.  Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL.  It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals: NodeJS.Signals[] = []\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM')\n\nif (process.platform !== 'win32') {\n  signals.push(\n    'SIGALRM',\n    'SIGABRT',\n    'SIGVTALRM',\n    'SIGXCPU',\n    'SIGXFSZ',\n    'SIGUSR2',\n    'SIGTRAP',\n    'SIGSYS',\n    'SIGQUIT',\n    'SIGIOT'\n    // should detect profiler and enable/disable accordingly.\n    // see #21\n    // 'SIGPROF'\n  )\n}\n\nif (process.platform === 'linux') {\n  signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT')\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/browser.d.ts b/node_modules/signal-exit/dist/mjs/browser.d.ts
new file mode 100644
index 00000000..90f2e3f1
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/browser.d.ts
@@ -0,0 +1,12 @@
+/**
+ * This is a browser shim that provides the same functional interface
+ * as the main node export, but it does nothing.
+ * @module
+ */
+import type { Handler } from './index.js';
+export declare const onExit: (cb: Handler, opts: {
+    alwaysLast?: boolean;
+}) => () => void;
+export declare const load: () => void;
+export declare const unload: () => void;
+//# sourceMappingURL=browser.d.ts.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/browser.d.ts.map b/node_modules/signal-exit/dist/mjs/browser.d.ts.map
new file mode 100644
index 00000000..aacc1d3b
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/browser.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,eAAO,MAAM,MAAM,EAAE,CACnB,EAAE,EAAE,OAAO,EACX,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,KAC3B,MAAM,IAAqB,CAAA;AAChC,eAAO,MAAM,IAAI,YAAW,CAAA;AAC5B,eAAO,MAAM,MAAM,YAAW,CAAA"}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/browser.js b/node_modules/signal-exit/dist/mjs/browser.js
new file mode 100644
index 00000000..9c5f9b9e
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/browser.js
@@ -0,0 +1,4 @@
+export const onExit = () => () => { };
+export const load = () => { };
+export const unload = () => { };
+//# sourceMappingURL=browser.js.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/browser.js.map b/node_modules/signal-exit/dist/mjs/browser.js.map
new file mode 100644
index 00000000..b3ff303a
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/browser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,MAAM,GAGD,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;AAChC,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAC5B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA","sourcesContent":["/**\n * This is a browser shim that provides the same functional interface\n * as the main node export, but it does nothing.\n * @module\n */\nimport type { Handler } from './index.js'\nexport const onExit: (\n  cb: Handler,\n  opts: { alwaysLast?: boolean }\n) => () => void = () => () => {}\nexport const load = () => {}\nexport const unload = () => {}\n"]}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/index.d.ts b/node_modules/signal-exit/dist/mjs/index.d.ts
new file mode 100644
index 00000000..cabe9cfc
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/index.d.ts
@@ -0,0 +1,48 @@
+/// 
+import { signals } from './signals.js';
+export { signals };
+/**
+ * A function that takes an exit code and signal as arguments
+ *
+ * In the case of signal exits *only*, a return value of true
+ * will indicate that the signal is being handled, and we should
+ * not synthetically exit with the signal we received. Regardless
+ * of the handler return value, the handler is unloaded when an
+ * otherwise fatal signal is received, so you get exactly 1 shot
+ * at it, unless you add another onExit handler at that point.
+ *
+ * In the case of numeric code exits, we may already have committed
+ * to exiting the process, for example via a fatal exception or
+ * unhandled promise rejection, so it is impossible to stop safely.
+ */
+export type Handler = (code: number | null | undefined, signal: NodeJS.Signals | null) => true | void;
+export declare const 
+/**
+ * Called when the process is exiting, whether via signal, explicit
+ * exit, or running out of stuff to do.
+ *
+ * If the global process object is not suitable for instrumentation,
+ * then this will be a no-op.
+ *
+ * Returns a function that may be used to unload signal-exit.
+ */
+onExit: (cb: Handler, opts?: {
+    alwaysLast?: boolean | undefined;
+} | undefined) => () => void, 
+/**
+ * Load the listeners.  Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+load: () => void, 
+/**
+ * Unload the listeners.  Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+unload: () => void;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/index.d.ts.map b/node_modules/signal-exit/dist/mjs/index.d.ts.map
new file mode 100644
index 00000000..f84594e2
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,CAAA;AAuBlB;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,OAAO,GAAG,CACpB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAC1B,IAAI,GAAG,IAAI,CAAA;AA8QhB,eAAO;AACL;;;;;;;;GAQG;AACH,MAAM,OAzMO,OAAO;;wBAPiD,IAAI;AAkNzE;;;;;;GAMG;AACH,IAAI;AAEJ;;;;;;GAMG;AACH,MAAM,YAGP,CAAA"}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/index.js b/node_modules/signal-exit/dist/mjs/index.js
new file mode 100644
index 00000000..4a78bad8
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/index.js
@@ -0,0 +1,275 @@
+// Note: since nyc uses this module to output coverage, any lines
+// that are in the direct sync flow of nyc's outputCoverage are
+// ignored, since we can never get coverage for them.
+// grab a reference to node's real process object right away
+import { signals } from './signals.js';
+export { signals };
+const processOk = (process) => !!process &&
+    typeof process === 'object' &&
+    typeof process.removeListener === 'function' &&
+    typeof process.emit === 'function' &&
+    typeof process.reallyExit === 'function' &&
+    typeof process.listeners === 'function' &&
+    typeof process.kill === 'function' &&
+    typeof process.pid === 'number' &&
+    typeof process.on === 'function';
+const kExitEmitter = Symbol.for('signal-exit emitter');
+const global = globalThis;
+const ObjectDefineProperty = Object.defineProperty.bind(Object);
+// teeny special purpose ee
+class Emitter {
+    emitted = {
+        afterExit: false,
+        exit: false,
+    };
+    listeners = {
+        afterExit: [],
+        exit: [],
+    };
+    count = 0;
+    id = Math.random();
+    constructor() {
+        if (global[kExitEmitter]) {
+            return global[kExitEmitter];
+        }
+        ObjectDefineProperty(global, kExitEmitter, {
+            value: this,
+            writable: false,
+            enumerable: false,
+            configurable: false,
+        });
+    }
+    on(ev, fn) {
+        this.listeners[ev].push(fn);
+    }
+    removeListener(ev, fn) {
+        const list = this.listeners[ev];
+        const i = list.indexOf(fn);
+        /* c8 ignore start */
+        if (i === -1) {
+            return;
+        }
+        /* c8 ignore stop */
+        if (i === 0 && list.length === 1) {
+            list.length = 0;
+        }
+        else {
+            list.splice(i, 1);
+        }
+    }
+    emit(ev, code, signal) {
+        if (this.emitted[ev]) {
+            return false;
+        }
+        this.emitted[ev] = true;
+        let ret = false;
+        for (const fn of this.listeners[ev]) {
+            ret = fn(code, signal) === true || ret;
+        }
+        if (ev === 'exit') {
+            ret = this.emit('afterExit', code, signal) || ret;
+        }
+        return ret;
+    }
+}
+class SignalExitBase {
+}
+const signalExitWrap = (handler) => {
+    return {
+        onExit(cb, opts) {
+            return handler.onExit(cb, opts);
+        },
+        load() {
+            return handler.load();
+        },
+        unload() {
+            return handler.unload();
+        },
+    };
+};
+class SignalExitFallback extends SignalExitBase {
+    onExit() {
+        return () => { };
+    }
+    load() { }
+    unload() { }
+}
+class SignalExit extends SignalExitBase {
+    // "SIGHUP" throws an `ENOSYS` error on Windows,
+    // so use a supported signal instead
+    /* c8 ignore start */
+    #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP';
+    /* c8 ignore stop */
+    #emitter = new Emitter();
+    #process;
+    #originalProcessEmit;
+    #originalProcessReallyExit;
+    #sigListeners = {};
+    #loaded = false;
+    constructor(process) {
+        super();
+        this.#process = process;
+        // { : , ... }
+        this.#sigListeners = {};
+        for (const sig of signals) {
+            this.#sigListeners[sig] = () => {
+                // If there are no other listeners, an exit is coming!
+                // Simplest way: remove us and then re-send the signal.
+                // We know that this will kill the process, so we can
+                // safely emit now.
+                const listeners = this.#process.listeners(sig);
+                let { count } = this.#emitter;
+                // This is a workaround for the fact that signal-exit v3 and signal
+                // exit v4 are not aware of each other, and each will attempt to let
+                // the other handle it, so neither of them do. To correct this, we
+                // detect if we're the only handler *except* for previous versions
+                // of signal-exit, and increment by the count of listeners it has
+                // created.
+                /* c8 ignore start */
+                const p = process;
+                if (typeof p.__signal_exit_emitter__ === 'object' &&
+                    typeof p.__signal_exit_emitter__.count === 'number') {
+                    count += p.__signal_exit_emitter__.count;
+                }
+                /* c8 ignore stop */
+                if (listeners.length === count) {
+                    this.unload();
+                    const ret = this.#emitter.emit('exit', null, sig);
+                    /* c8 ignore start */
+                    const s = sig === 'SIGHUP' ? this.#hupSig : sig;
+                    if (!ret)
+                        process.kill(process.pid, s);
+                    /* c8 ignore stop */
+                }
+            };
+        }
+        this.#originalProcessReallyExit = process.reallyExit;
+        this.#originalProcessEmit = process.emit;
+    }
+    onExit(cb, opts) {
+        /* c8 ignore start */
+        if (!processOk(this.#process)) {
+            return () => { };
+        }
+        /* c8 ignore stop */
+        if (this.#loaded === false) {
+            this.load();
+        }
+        const ev = opts?.alwaysLast ? 'afterExit' : 'exit';
+        this.#emitter.on(ev, cb);
+        return () => {
+            this.#emitter.removeListener(ev, cb);
+            if (this.#emitter.listeners['exit'].length === 0 &&
+                this.#emitter.listeners['afterExit'].length === 0) {
+                this.unload();
+            }
+        };
+    }
+    load() {
+        if (this.#loaded) {
+            return;
+        }
+        this.#loaded = true;
+        // This is the number of onSignalExit's that are in play.
+        // It's important so that we can count the correct number of
+        // listeners on signals, and don't wait for the other one to
+        // handle it instead of us.
+        this.#emitter.count += 1;
+        for (const sig of signals) {
+            try {
+                const fn = this.#sigListeners[sig];
+                if (fn)
+                    this.#process.on(sig, fn);
+            }
+            catch (_) { }
+        }
+        this.#process.emit = (ev, ...a) => {
+            return this.#processEmit(ev, ...a);
+        };
+        this.#process.reallyExit = (code) => {
+            return this.#processReallyExit(code);
+        };
+    }
+    unload() {
+        if (!this.#loaded) {
+            return;
+        }
+        this.#loaded = false;
+        signals.forEach(sig => {
+            const listener = this.#sigListeners[sig];
+            /* c8 ignore start */
+            if (!listener) {
+                throw new Error('Listener not defined for signal: ' + sig);
+            }
+            /* c8 ignore stop */
+            try {
+                this.#process.removeListener(sig, listener);
+                /* c8 ignore start */
+            }
+            catch (_) { }
+            /* c8 ignore stop */
+        });
+        this.#process.emit = this.#originalProcessEmit;
+        this.#process.reallyExit = this.#originalProcessReallyExit;
+        this.#emitter.count -= 1;
+    }
+    #processReallyExit(code) {
+        /* c8 ignore start */
+        if (!processOk(this.#process)) {
+            return 0;
+        }
+        this.#process.exitCode = code || 0;
+        /* c8 ignore stop */
+        this.#emitter.emit('exit', this.#process.exitCode, null);
+        return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
+    }
+    #processEmit(ev, ...args) {
+        const og = this.#originalProcessEmit;
+        if (ev === 'exit' && processOk(this.#process)) {
+            if (typeof args[0] === 'number') {
+                this.#process.exitCode = args[0];
+                /* c8 ignore start */
+            }
+            /* c8 ignore start */
+            const ret = og.call(this.#process, ev, ...args);
+            /* c8 ignore start */
+            this.#emitter.emit('exit', this.#process.exitCode, null);
+            /* c8 ignore stop */
+            return ret;
+        }
+        else {
+            return og.call(this.#process, ev, ...args);
+        }
+    }
+}
+const process = globalThis.process;
+// wrap so that we call the method on the actual handler, without
+// exporting it directly.
+export const { 
+/**
+ * Called when the process is exiting, whether via signal, explicit
+ * exit, or running out of stuff to do.
+ *
+ * If the global process object is not suitable for instrumentation,
+ * then this will be a no-op.
+ *
+ * Returns a function that may be used to unload signal-exit.
+ */
+onExit, 
+/**
+ * Load the listeners.  Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+load, 
+/**
+ * Unload the listeners.  Likely you never need to call this, unless
+ * doing a rather deep integration with signal-exit functionality.
+ * Mostly exposed for the benefit of testing.
+ *
+ * @internal
+ */
+unload, } = signalExitWrap(processOk(process) ? new SignalExit(process) : new SignalExitFallback());
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/index.js.map b/node_modules/signal-exit/dist/mjs/index.js.map
new file mode 100644
index 00000000..3a7b76d6
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js'\nexport { signals }\n\n// just a loosened process type so we can do some evil things\ntype ProcessRE = NodeJS.Process & {\n  reallyExit: (code?: number | undefined | null) => any\n  emit: (ev: string, ...a: any[]) => any\n}\n\nconst processOk = (process: any): process is ProcessRE =>\n  !!process &&\n  typeof process === 'object' &&\n  typeof process.removeListener === 'function' &&\n  typeof process.emit === 'function' &&\n  typeof process.reallyExit === 'function' &&\n  typeof process.listeners === 'function' &&\n  typeof process.kill === 'function' &&\n  typeof process.pid === 'number' &&\n  typeof process.on === 'function'\n\nconst kExitEmitter = Symbol.for('signal-exit emitter')\nconst global: typeof globalThis & { [kExitEmitter]?: Emitter } = globalThis\nconst ObjectDefineProperty = Object.defineProperty.bind(Object)\n\n/**\n * A function that takes an exit code and signal as arguments\n *\n * In the case of signal exits *only*, a return value of true\n * will indicate that the signal is being handled, and we should\n * not synthetically exit with the signal we received. Regardless\n * of the handler return value, the handler is unloaded when an\n * otherwise fatal signal is received, so you get exactly 1 shot\n * at it, unless you add another onExit handler at that point.\n *\n * In the case of numeric code exits, we may already have committed\n * to exiting the process, for example via a fatal exception or\n * unhandled promise rejection, so it is impossible to stop safely.\n */\nexport type Handler = (\n  code: number | null | undefined,\n  signal: NodeJS.Signals | null\n) => true | void\ntype ExitEvent = 'afterExit' | 'exit'\ntype Emitted = { [k in ExitEvent]: boolean }\ntype Listeners = { [k in ExitEvent]: Handler[] }\n\n// teeny special purpose ee\nclass Emitter {\n  emitted: Emitted = {\n    afterExit: false,\n    exit: false,\n  }\n\n  listeners: Listeners = {\n    afterExit: [],\n    exit: [],\n  }\n\n  count: number = 0\n  id: number = Math.random()\n\n  constructor() {\n    if (global[kExitEmitter]) {\n      return global[kExitEmitter]\n    }\n    ObjectDefineProperty(global, kExitEmitter, {\n      value: this,\n      writable: false,\n      enumerable: false,\n      configurable: false,\n    })\n  }\n\n  on(ev: ExitEvent, fn: Handler) {\n    this.listeners[ev].push(fn)\n  }\n\n  removeListener(ev: ExitEvent, fn: Handler) {\n    const list = this.listeners[ev]\n    const i = list.indexOf(fn)\n    /* c8 ignore start */\n    if (i === -1) {\n      return\n    }\n    /* c8 ignore stop */\n    if (i === 0 && list.length === 1) {\n      list.length = 0\n    } else {\n      list.splice(i, 1)\n    }\n  }\n\n  emit(\n    ev: ExitEvent,\n    code: number | null | undefined,\n    signal: NodeJS.Signals | null\n  ): boolean {\n    if (this.emitted[ev]) {\n      return false\n    }\n    this.emitted[ev] = true\n    let ret: boolean = false\n    for (const fn of this.listeners[ev]) {\n      ret = fn(code, signal) === true || ret\n    }\n    if (ev === 'exit') {\n      ret = this.emit('afterExit', code, signal) || ret\n    }\n    return ret\n  }\n}\n\nabstract class SignalExitBase {\n  abstract onExit(cb: Handler, opts?: { alwaysLast?: boolean }): () => void\n  abstract load(): void\n  abstract unload(): void\n}\n\nconst signalExitWrap = (handler: T) => {\n  return {\n    onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n      return handler.onExit(cb, opts)\n    },\n    load() {\n      return handler.load()\n    },\n    unload() {\n      return handler.unload()\n    },\n  }\n}\n\nclass SignalExitFallback extends SignalExitBase {\n  onExit() {\n    return () => {}\n  }\n  load() {}\n  unload() {}\n}\n\nclass SignalExit extends SignalExitBase {\n  // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n  // so use a supported signal instead\n  /* c8 ignore start */\n  #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP'\n  /* c8 ignore stop */\n  #emitter = new Emitter()\n  #process: ProcessRE\n  #originalProcessEmit: ProcessRE['emit']\n  #originalProcessReallyExit: ProcessRE['reallyExit']\n\n  #sigListeners: { [k in NodeJS.Signals]?: () => void } = {}\n  #loaded: boolean = false\n\n  constructor(process: ProcessRE) {\n    super()\n    this.#process = process\n    // { : , ... }\n    this.#sigListeners = {}\n    for (const sig of signals) {\n      this.#sigListeners[sig] = () => {\n        // If there are no other listeners, an exit is coming!\n        // Simplest way: remove us and then re-send the signal.\n        // We know that this will kill the process, so we can\n        // safely emit now.\n        const listeners = this.#process.listeners(sig)\n        let { count } = this.#emitter\n        // This is a workaround for the fact that signal-exit v3 and signal\n        // exit v4 are not aware of each other, and each will attempt to let\n        // the other handle it, so neither of them do. To correct this, we\n        // detect if we're the only handler *except* for previous versions\n        // of signal-exit, and increment by the count of listeners it has\n        // created.\n        /* c8 ignore start */\n        const p = process as unknown as {\n          __signal_exit_emitter__?: { count: number }\n        }\n        if (\n          typeof p.__signal_exit_emitter__ === 'object' &&\n          typeof p.__signal_exit_emitter__.count === 'number'\n        ) {\n          count += p.__signal_exit_emitter__.count\n        }\n        /* c8 ignore stop */\n        if (listeners.length === count) {\n          this.unload()\n          const ret = this.#emitter.emit('exit', null, sig)\n          /* c8 ignore start */\n          const s = sig === 'SIGHUP' ? this.#hupSig : sig\n          if (!ret) process.kill(process.pid, s)\n          /* c8 ignore stop */\n        }\n      }\n    }\n\n    this.#originalProcessReallyExit = process.reallyExit\n    this.#originalProcessEmit = process.emit\n  }\n\n  onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return () => {}\n    }\n    /* c8 ignore stop */\n\n    if (this.#loaded === false) {\n      this.load()\n    }\n\n    const ev = opts?.alwaysLast ? 'afterExit' : 'exit'\n    this.#emitter.on(ev, cb)\n    return () => {\n      this.#emitter.removeListener(ev, cb)\n      if (\n        this.#emitter.listeners['exit'].length === 0 &&\n        this.#emitter.listeners['afterExit'].length === 0\n      ) {\n        this.unload()\n      }\n    }\n  }\n\n  load() {\n    if (this.#loaded) {\n      return\n    }\n    this.#loaded = true\n\n    // This is the number of onSignalExit's that are in play.\n    // It's important so that we can count the correct number of\n    // listeners on signals, and don't wait for the other one to\n    // handle it instead of us.\n    this.#emitter.count += 1\n\n    for (const sig of signals) {\n      try {\n        const fn = this.#sigListeners[sig]\n        if (fn) this.#process.on(sig, fn)\n      } catch (_) {}\n    }\n\n    this.#process.emit = (ev: string, ...a: any[]) => {\n      return this.#processEmit(ev, ...a)\n    }\n    this.#process.reallyExit = (code?: number | null | undefined) => {\n      return this.#processReallyExit(code)\n    }\n  }\n\n  unload() {\n    if (!this.#loaded) {\n      return\n    }\n    this.#loaded = false\n\n    signals.forEach(sig => {\n      const listener = this.#sigListeners[sig]\n      /* c8 ignore start */\n      if (!listener) {\n        throw new Error('Listener not defined for signal: ' + sig)\n      }\n      /* c8 ignore stop */\n      try {\n        this.#process.removeListener(sig, listener)\n        /* c8 ignore start */\n      } catch (_) {}\n      /* c8 ignore stop */\n    })\n    this.#process.emit = this.#originalProcessEmit\n    this.#process.reallyExit = this.#originalProcessReallyExit\n    this.#emitter.count -= 1\n  }\n\n  #processReallyExit(code?: number | null | undefined) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return 0\n    }\n    this.#process.exitCode = code || 0\n    /* c8 ignore stop */\n\n    this.#emitter.emit('exit', this.#process.exitCode, null)\n    return this.#originalProcessReallyExit.call(\n      this.#process,\n      this.#process.exitCode\n    )\n  }\n\n  #processEmit(ev: string, ...args: any[]): any {\n    const og = this.#originalProcessEmit\n    if (ev === 'exit' && processOk(this.#process)) {\n      if (typeof args[0] === 'number') {\n        this.#process.exitCode = args[0]\n        /* c8 ignore start */\n      }\n      /* c8 ignore start */\n      const ret = og.call(this.#process, ev, ...args)\n      /* c8 ignore start */\n      this.#emitter.emit('exit', this.#process.exitCode, null)\n      /* c8 ignore stop */\n      return ret\n    } else {\n      return og.call(this.#process, ev, ...args)\n    }\n  }\n}\n\nconst process = globalThis.process\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const {\n  /**\n   * Called when the process is exiting, whether via signal, explicit\n   * exit, or running out of stuff to do.\n   *\n   * If the global process object is not suitable for instrumentation,\n   * then this will be a no-op.\n   *\n   * Returns a function that may be used to unload signal-exit.\n   */\n  onExit,\n\n  /**\n   * Load the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  load,\n\n  /**\n   * Unload the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  unload,\n} = signalExitWrap(\n  processOk(process) ? new SignalExit(process) : new SignalExitFallback()\n)\n"]}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/package.json b/node_modules/signal-exit/dist/mjs/package.json
new file mode 100644
index 00000000..3dbc1ca5
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "module"
+}
diff --git a/node_modules/signal-exit/dist/mjs/signals.d.ts b/node_modules/signal-exit/dist/mjs/signals.d.ts
new file mode 100644
index 00000000..3f01ef00
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/signals.d.ts
@@ -0,0 +1,29 @@
+/// 
+/**
+ * This is not the set of all possible signals.
+ *
+ * It IS, however, the set of all signals that trigger
+ * an exit on either Linux or BSD systems.  Linux is a
+ * superset of the signal names supported on BSD, and
+ * the unknown signals just fail to register, so we can
+ * catch that easily enough.
+ *
+ * Windows signals are a different set, since there are
+ * signals that terminate Windows processes, but don't
+ * terminate (or don't even exist) on Posix systems.
+ *
+ * Don't bother with SIGKILL.  It's uncatchable, which
+ * means that we can't fire any callbacks anyway.
+ *
+ * If a user does happen to register a handler on a non-
+ * fatal signal like SIGWINCH or something, and then
+ * exit, it'll end up firing `process.emit('exit')`, so
+ * the handler will be fired anyway.
+ *
+ * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
+ * artificially, inherently leave the process in a
+ * state from which it is not safe to try and enter JS
+ * listeners.
+ */
+export declare const signals: NodeJS.Signals[];
+//# sourceMappingURL=signals.d.ts.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/signals.d.ts.map b/node_modules/signal-exit/dist/mjs/signals.d.ts.map
new file mode 100644
index 00000000..891fe1e6
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/signals.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/signals.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO,EAAO,CAAA"}
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/signals.js b/node_modules/signal-exit/dist/mjs/signals.js
new file mode 100644
index 00000000..7dbf15a5
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/signals.js
@@ -0,0 +1,39 @@
+/**
+ * This is not the set of all possible signals.
+ *
+ * It IS, however, the set of all signals that trigger
+ * an exit on either Linux or BSD systems.  Linux is a
+ * superset of the signal names supported on BSD, and
+ * the unknown signals just fail to register, so we can
+ * catch that easily enough.
+ *
+ * Windows signals are a different set, since there are
+ * signals that terminate Windows processes, but don't
+ * terminate (or don't even exist) on Posix systems.
+ *
+ * Don't bother with SIGKILL.  It's uncatchable, which
+ * means that we can't fire any callbacks anyway.
+ *
+ * If a user does happen to register a handler on a non-
+ * fatal signal like SIGWINCH or something, and then
+ * exit, it'll end up firing `process.emit('exit')`, so
+ * the handler will be fired anyway.
+ *
+ * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
+ * artificially, inherently leave the process in a
+ * state from which it is not safe to try and enter JS
+ * listeners.
+ */
+export const signals = [];
+signals.push('SIGHUP', 'SIGINT', 'SIGTERM');
+if (process.platform !== 'win32') {
+    signals.push('SIGALRM', 'SIGABRT', 'SIGVTALRM', 'SIGXCPU', 'SIGXFSZ', 'SIGUSR2', 'SIGTRAP', 'SIGSYS', 'SIGQUIT', 'SIGIOT'
+    // should detect profiler and enable/disable accordingly.
+    // see #21
+    // 'SIGPROF'
+    );
+}
+if (process.platform === 'linux') {
+    signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT');
+}
+//# sourceMappingURL=signals.js.map
\ No newline at end of file
diff --git a/node_modules/signal-exit/dist/mjs/signals.js.map b/node_modules/signal-exit/dist/mjs/signals.js.map
new file mode 100644
index 00000000..91008c91
--- /dev/null
+++ b/node_modules/signal-exit/dist/mjs/signals.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/signals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAqB,EAAE,CAAA;AAC3C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;AAE3C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;IAChC,OAAO,CAAC,IAAI,CACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ;IACR,yDAAyD;IACzD,UAAU;IACV,YAAY;KACb,CAAA;CACF;AAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;IAChC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;CACxD","sourcesContent":["/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems.  Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL.  It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals: NodeJS.Signals[] = []\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM')\n\nif (process.platform !== 'win32') {\n  signals.push(\n    'SIGALRM',\n    'SIGABRT',\n    'SIGVTALRM',\n    'SIGXCPU',\n    'SIGXFSZ',\n    'SIGUSR2',\n    'SIGTRAP',\n    'SIGSYS',\n    'SIGQUIT',\n    'SIGIOT'\n    // should detect profiler and enable/disable accordingly.\n    // see #21\n    // 'SIGPROF'\n  )\n}\n\nif (process.platform === 'linux') {\n  signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT')\n}\n"]}
\ No newline at end of file
diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json
new file mode 100644
index 00000000..ac176cec
--- /dev/null
+++ b/node_modules/signal-exit/package.json
@@ -0,0 +1,106 @@
+{
+  "name": "signal-exit",
+  "version": "4.1.0",
+  "description": "when you want to fire an event no matter how a process exits.",
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/mjs/index.js",
+  "browser": "./dist/mjs/browser.js",
+  "types": "./dist/mjs/index.d.ts",
+  "exports": {
+    ".": {
+      "import": {
+        "types": "./dist/mjs/index.d.ts",
+        "default": "./dist/mjs/index.js"
+      },
+      "require": {
+        "types": "./dist/cjs/index.d.ts",
+        "default": "./dist/cjs/index.js"
+      }
+    },
+    "./signals": {
+      "import": {
+        "types": "./dist/mjs/signals.d.ts",
+        "default": "./dist/mjs/signals.js"
+      },
+      "require": {
+        "types": "./dist/cjs/signals.d.ts",
+        "default": "./dist/cjs/signals.js"
+      }
+    },
+    "./browser": {
+      "import": {
+        "types": "./dist/mjs/browser.d.ts",
+        "default": "./dist/mjs/browser.js"
+      },
+      "require": {
+        "types": "./dist/cjs/browser.d.ts",
+        "default": "./dist/cjs/browser.js"
+      }
+    }
+  },
+  "files": [
+    "dist"
+  ],
+  "engines": {
+    "node": ">=14"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/tapjs/signal-exit.git"
+  },
+  "keywords": [
+    "signal",
+    "exit"
+  ],
+  "author": "Ben Coe ",
+  "license": "ISC",
+  "devDependencies": {
+    "@types/cross-spawn": "^6.0.2",
+    "@types/node": "^18.15.11",
+    "@types/signal-exit": "^3.0.1",
+    "@types/tap": "^15.0.8",
+    "c8": "^7.13.0",
+    "prettier": "^2.8.6",
+    "tap": "^16.3.4",
+    "ts-node": "^10.9.1",
+    "typedoc": "^0.23.28",
+    "typescript": "^5.0.2"
+  },
+  "scripts": {
+    "preversion": "npm test",
+    "postversion": "npm publish",
+    "prepublishOnly": "git push origin --follow-tags",
+    "preprepare": "rm -rf dist",
+    "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json && bash ./scripts/fixup.sh",
+    "pretest": "npm run prepare",
+    "presnap": "npm run prepare",
+    "test": "c8 tap",
+    "snap": "c8 tap",
+    "format": "prettier --write . --loglevel warn",
+    "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
+  },
+  "prettier": {
+    "semi": false,
+    "printWidth": 75,
+    "tabWidth": 2,
+    "useTabs": false,
+    "singleQuote": true,
+    "jsxSingleQuote": false,
+    "bracketSameLine": true,
+    "arrowParens": "avoid",
+    "endOfLine": "lf"
+  },
+  "tap": {
+    "coverage": false,
+    "jobs": 1,
+    "node-arg": [
+      "--no-warnings",
+      "--loader",
+      "ts-node/esm"
+    ],
+    "ts": false
+  },
+  "funding": {
+    "url": "https://github.com/sponsors/isaacs"
+  }
+}
diff --git a/node_modules/string-width-cjs/index.d.ts b/node_modules/string-width-cjs/index.d.ts
new file mode 100644
index 00000000..12b53097
--- /dev/null
+++ b/node_modules/string-width-cjs/index.d.ts
@@ -0,0 +1,29 @@
+declare const stringWidth: {
+	/**
+	Get the visual width of a string - the number of columns required to display it.
+
+	Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width.
+
+	@example
+	```
+	import stringWidth = require('string-width');
+
+	stringWidth('a');
+	//=> 1
+
+	stringWidth('古');
+	//=> 2
+
+	stringWidth('\u001B[1m古\u001B[22m');
+	//=> 2
+	```
+	*/
+	(string: string): number;
+
+	// TODO: remove this in the next major version, refactor the whole definition to:
+	// declare function stringWidth(string: string): number;
+	// export = stringWidth;
+	default: typeof stringWidth;
+}
+
+export = stringWidth;
diff --git a/node_modules/string-width-cjs/index.js b/node_modules/string-width-cjs/index.js
new file mode 100644
index 00000000..f4d261a9
--- /dev/null
+++ b/node_modules/string-width-cjs/index.js
@@ -0,0 +1,47 @@
+'use strict';
+const stripAnsi = require('strip-ansi');
+const isFullwidthCodePoint = require('is-fullwidth-code-point');
+const emojiRegex = require('emoji-regex');
+
+const stringWidth = string => {
+	if (typeof string !== 'string' || string.length === 0) {
+		return 0;
+	}
+
+	string = stripAnsi(string);
+
+	if (string.length === 0) {
+		return 0;
+	}
+
+	string = string.replace(emojiRegex(), '  ');
+
+	let width = 0;
+
+	for (let i = 0; i < string.length; i++) {
+		const code = string.codePointAt(i);
+
+		// Ignore control characters
+		if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
+			continue;
+		}
+
+		// Ignore combining characters
+		if (code >= 0x300 && code <= 0x36F) {
+			continue;
+		}
+
+		// Surrogates
+		if (code > 0xFFFF) {
+			i++;
+		}
+
+		width += isFullwidthCodePoint(code) ? 2 : 1;
+	}
+
+	return width;
+};
+
+module.exports = stringWidth;
+// TODO: remove this in the next major version
+module.exports.default = stringWidth;
diff --git a/node_modules/string-width-cjs/license b/node_modules/string-width-cjs/license
new file mode 100644
index 00000000..e7af2f77
--- /dev/null
+++ b/node_modules/string-width-cjs/license
@@ -0,0 +1,9 @@
+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/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts
new file mode 100644
index 00000000..2dbf6af2
--- /dev/null
+++ b/node_modules/string-width-cjs/node_modules/ansi-regex/index.d.ts
@@ -0,0 +1,37 @@
+declare namespace ansiRegex {
+	interface Options {
+		/**
+		Match only the first ANSI escape.
+
+		@default false
+		*/
+		onlyFirst: boolean;
+	}
+}
+
+/**
+Regular expression for matching ANSI escape codes.
+
+@example
+```
+import ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001B[4mcake\u001B[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex());
+//=> ['\u001B[4m', '\u001B[0m']
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
+//=> ['\u001B[4m']
+
+'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
+//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
+```
+*/
+declare function ansiRegex(options?: ansiRegex.Options): RegExp;
+
+export = ansiRegex;
diff --git a/node_modules/string-width-cjs/node_modules/ansi-regex/index.js b/node_modules/string-width-cjs/node_modules/ansi-regex/index.js
new file mode 100644
index 00000000..616ff837
--- /dev/null
+++ b/node_modules/string-width-cjs/node_modules/ansi-regex/index.js
@@ -0,0 +1,10 @@
+'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/node_modules/string-width-cjs/node_modules/ansi-regex/license b/node_modules/string-width-cjs/node_modules/ansi-regex/license
new file mode 100644
index 00000000..e7af2f77
--- /dev/null
+++ b/node_modules/string-width-cjs/node_modules/ansi-regex/license
@@ -0,0 +1,9 @@
+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/node_modules/string-width-cjs/node_modules/ansi-regex/package.json b/node_modules/string-width-cjs/node_modules/ansi-regex/package.json
new file mode 100644
index 00000000..017f5311
--- /dev/null
+++ b/node_modules/string-width-cjs/node_modules/ansi-regex/package.json
@@ -0,0 +1,55 @@
+{
+	"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/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md b/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md
new file mode 100644
index 00000000..4d848bc3
--- /dev/null
+++ b/node_modules/string-width-cjs/node_modules/ansi-regex/readme.md
@@ -0,0 +1,78 @@
+# ansi-regex
+
+> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
+
+
+## Install
+
+```
+$ npm install ansi-regex
+```
+
+
+## Usage
+
+```js
+const ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001B[4mcake\u001B[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex());
+//=> ['\u001B[4m', '\u001B[0m']
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
+//=> ['\u001B[4m']
+
+'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
+//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
+```
+
+
+## API
+
+### ansiRegex(options?)
+
+Returns a regex for matching ANSI escape codes.
+
+#### options
+
+Type: `object`
+
+##### onlyFirst
+
+Type: `boolean`
+Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 00000000..a41e0a7e --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/README.md b/node_modules/string-width-cjs/node_modules/emoji-regex/README.md new file mode 100644 index 00000000..f10e1733 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/README.md @@ -0,0 +1,73 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: + +```js +const emojiRegex = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 00000000..b4cf3dcd --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 00000000..780309df --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts new file mode 100644 index 00000000..1955b470 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,23 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/index.js b/node_modules/string-width-cjs/node_modules/emoji-regex/index.js new file mode 100644 index 00000000..d993a3a9 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/package.json b/node_modules/string-width-cjs/node_modules/emoji-regex/package.json new file mode 100644 index 00000000..6d323528 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/package.json @@ -0,0 +1,50 @@ +{ + "name": "emoji-regex", + "version": "8.0.0", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "text.js", + "es2015/index.js", + "es2015/text.js" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.2.3", + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/preset-env": "^7.3.4", + "mocha": "^6.0.2", + "regexgen": "^1.3.0", + "unicode-12.0.0": "^0.7.9" + } +} diff --git a/node_modules/string-width-cjs/node_modules/emoji-regex/text.js b/node_modules/string-width-cjs/node_modules/emoji-regex/text.js new file mode 100644 index 00000000..0a55ce2f --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts new file mode 100644 index 00000000..907fccc2 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/index.js b/node_modules/string-width-cjs/node_modules/strip-ansi/index.js new file mode 100644 index 00000000..9a593dfc --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/string-width-cjs/node_modules/strip-ansi/license b/node_modules/string-width-cjs/node_modules/strip-ansi/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +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/node_modules/string-width-cjs/node_modules/strip-ansi/package.json b/node_modules/string-width-cjs/node_modules/strip-ansi/package.json new file mode 100644 index 00000000..1a41108d --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/package.json @@ -0,0 +1,54 @@ +{ + "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/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md b/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md new file mode 100644 index 00000000..7c4b56d4 --- /dev/null +++ b/node_modules/string-width-cjs/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/string-width-cjs/package.json b/node_modules/string-width-cjs/package.json new file mode 100644 index 00000000..28ba7b4c --- /dev/null +++ b/node_modules/string-width-cjs/package.json @@ -0,0 +1,56 @@ +{ + "name": "string-width", + "version": "4.2.3", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "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": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + } +} diff --git a/node_modules/string-width-cjs/readme.md b/node_modules/string-width-cjs/readme.md new file mode 100644 index 00000000..bdd31412 --- /dev/null +++ b/node_modules/string-width-cjs/readme.md @@ -0,0 +1,50 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/string-width/index.d.ts b/node_modules/string-width/index.d.ts new file mode 100644 index 00000000..aed9fdff --- /dev/null +++ b/node_modules/string-width/index.d.ts @@ -0,0 +1,29 @@ +export interface Options { + /** + Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). + + @default true + */ + readonly ambiguousIsNarrow: boolean; +} + +/** +Get the visual width of a string - the number of columns required to display it. + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +@example +``` +import stringWidth from 'string-width'; + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` +*/ +export default function stringWidth(string: string, options?: Options): number; diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js new file mode 100644 index 00000000..9294488f --- /dev/null +++ b/node_modules/string-width/index.js @@ -0,0 +1,54 @@ +import stripAnsi from 'strip-ansi'; +import eastAsianWidth from 'eastasianwidth'; +import emojiRegex from 'emoji-regex'; + +export default function stringWidth(string, options = {}) { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + options = { + ambiguousIsNarrow: true, + ...options + }; + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2; + let width = 0; + + for (const character of string) { + const codePoint = character.codePointAt(0); + + // Ignore control characters + if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (codePoint >= 0x300 && codePoint <= 0x36F) { + continue; + } + + const code = eastAsianWidth.eastAsianWidth(character); + switch (code) { + case 'F': + case 'W': + width += 2; + break; + case 'A': + width += ambiguousCharacterWidth; + break; + default: + width += 1; + } + } + + return width; +} diff --git a/node_modules/string-width/license b/node_modules/string-width/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/string-width/license @@ -0,0 +1,9 @@ +MIT License + +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: + +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/node_modules/string-width/package.json b/node_modules/string-width/package.json new file mode 100644 index 00000000..f46d6770 --- /dev/null +++ b/node_modules/string-width/package.json @@ -0,0 +1,59 @@ +{ + "name": "string-width", + "version": "5.1.2", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "tsd": "^0.14.0", + "xo": "^0.38.2" + } +} diff --git a/node_modules/string-width/readme.md b/node_modules/string-width/readme.md new file mode 100644 index 00000000..52910df1 --- /dev/null +++ b/node_modules/string-width/readme.md @@ -0,0 +1,67 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + +## Install + +``` +$ npm install string-width +``` + +## Usage + +```js +import stringWidth from 'string-width'; + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + +## API + +### stringWidth(string, options?) + +#### string + +Type: `string` + +The string to be counted. + +#### options + +Type: `object` + +##### ambiguousIsNarrow + +Type: `boolean`\ +Default: `false` + +Count [ambiguous width characters](https://www.unicode.org/reports/tr11/#Ambiguous) as having narrow width (count of 1) instead of wide width (count of 2). + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/strip-ansi-cjs/index.d.ts b/node_modules/strip-ansi-cjs/index.d.ts new file mode 100644 index 00000000..907fccc2 --- /dev/null +++ b/node_modules/strip-ansi-cjs/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/strip-ansi-cjs/index.js b/node_modules/strip-ansi-cjs/index.js new file mode 100644 index 00000000..9a593dfc --- /dev/null +++ b/node_modules/strip-ansi-cjs/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/strip-ansi-cjs/license b/node_modules/strip-ansi-cjs/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/strip-ansi-cjs/license @@ -0,0 +1,9 @@ +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/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts new file mode 100644 index 00000000..2dbf6af2 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js new file mode 100644 index 00000000..616ff837 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'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/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +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/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json new file mode 100644 index 00000000..017f5311 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/package.json @@ -0,0 +1,55 @@ +{ + "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/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md new file mode 100644 index 00000000..4d848bc3 --- /dev/null +++ b/node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
+Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/strip-ansi-cjs/package.json b/node_modules/strip-ansi-cjs/package.json new file mode 100644 index 00000000..1a41108d --- /dev/null +++ b/node_modules/strip-ansi-cjs/package.json @@ -0,0 +1,54 @@ +{ + "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/node_modules/strip-ansi-cjs/readme.md b/node_modules/strip-ansi-cjs/readme.md new file mode 100644 index 00000000..7c4b56d4 --- /dev/null +++ b/node_modules/strip-ansi-cjs/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/strip-ansi/index.d.ts b/node_modules/strip-ansi/index.d.ts new file mode 100644 index 00000000..44e954d0 --- /dev/null +++ b/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,15 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi from 'strip-ansi'; + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +export default function stripAnsi(string: string): string; diff --git a/node_modules/strip-ansi/index.js b/node_modules/strip-ansi/index.js new file mode 100644 index 00000000..ba19750e --- /dev/null +++ b/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/node_modules/strip-ansi/license b/node_modules/strip-ansi/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +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: + +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/node_modules/strip-ansi/package.json b/node_modules/strip-ansi/package.json new file mode 100644 index 00000000..e1f455c3 --- /dev/null +++ b/node_modules/strip-ansi/package.json @@ -0,0 +1,57 @@ +{ + "name": "strip-ansi", + "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": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "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": "^6.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "tsd": "^0.17.0", + "xo": "^0.44.0" + } +} diff --git a/node_modules/strip-ansi/readme.md b/node_modules/strip-ansi/readme.md new file mode 100644 index 00000000..56278510 --- /dev/null +++ b/node_modules/strip-ansi/readme.md @@ -0,0 +1,41 @@ +# strip-ansi + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + +## Install + +``` +$ npm install strip-ansi +``` + +## Usage + +```js +import stripAnsi from 'strip-ansi'; + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/wrap-ansi-cjs/index.js b/node_modules/wrap-ansi-cjs/index.js new file mode 100644 index 00000000..d502255b --- /dev/null +++ b/node_modules/wrap-ansi-cjs/index.js @@ -0,0 +1,216 @@ +'use strict'; +const stringWidth = require('string-width'); +const stripAnsi = require('strip-ansi'); +const ansiStyles = require('ansi-styles'); + +const ESCAPES = new Set([ + '\u001B', + '\u009B' +]); + +const END_CODE = 39; + +const ANSI_ESCAPE_BELL = '\u0007'; +const ANSI_CSI = '['; +const ANSI_OSC = ']'; +const ANSI_SGR_TERMINATOR = 'm'; +const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; + +const wrapAnsi = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; +const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let isInsideLinkEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); + } + + if (isInsideEscape) { + if (isInsideLinkEscape) { + if (character === ANSI_ESCAPE_BELL) { + isInsideEscape = false; + isInsideLinkEscape = false; + } + } else if (character === ANSI_SGR_TERMINATOR) { + isInsideEscape = false; + } + + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = string => { + const words = string.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return string; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let returnValue = ''; + let escapeCode; + let escapeUrl; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimStart(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(stringVisibleTrimSpacesRight); + } + + const pre = [...rows.join('\n')]; + + for (const [index, character] of pre.entries()) { + returnValue += character; + + if (ESCAPES.has(character)) { + const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; + if (groups.code !== undefined) { + const code = Number.parseFloat(groups.code); + escapeCode = code === END_CODE ? undefined : code; + } else if (groups.uri !== undefined) { + escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; + } + } + + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (pre[index + 1] === '\n') { + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(''); + } + + if (escapeCode && code) { + returnValue += wrapAnsi(code); + } + } else if (character === '\n') { + if (escapeCode && code) { + returnValue += wrapAnsi(escapeCode); + } + + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(escapeUrl); + } + } + } + + return returnValue; +}; + +// For each newline, invoke the method separately +module.exports = (string, columns, options) => { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +}; diff --git a/node_modules/wrap-ansi-cjs/license b/node_modules/wrap-ansi-cjs/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/license @@ -0,0 +1,9 @@ +MIT License + +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: + +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/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts new file mode 100644 index 00000000..2dbf6af2 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.d.ts @@ -0,0 +1,37 @@ +declare namespace ansiRegex { + interface Options { + /** + Match only the first ANSI escape. + + @default false + */ + onlyFirst: boolean; + } +} + +/** +Regular expression for matching ANSI escape codes. + +@example +``` +import ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` +*/ +declare function ansiRegex(options?: ansiRegex.Options): RegExp; + +export = ansiRegex; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js new file mode 100644 index 00000000..616ff837 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/index.js @@ -0,0 +1,10 @@ +'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/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/license @@ -0,0 +1,9 @@ +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/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json new file mode 100644 index 00000000..017f5311 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/package.json @@ -0,0 +1,55 @@ +{ + "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/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md new file mode 100644 index 00000000..4d848bc3 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md @@ -0,0 +1,78 @@ +# ansi-regex + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex(options?) + +Returns a regex for matching ANSI escape codes. + +#### options + +Type: `object` + +##### onlyFirst + +Type: `boolean`
+Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts new file mode 100644 index 00000000..44a907e5 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.d.ts @@ -0,0 +1,345 @@ +declare type CSSColor = + | 'aliceblue' + | 'antiquewhite' + | 'aqua' + | 'aquamarine' + | 'azure' + | 'beige' + | 'bisque' + | 'black' + | 'blanchedalmond' + | 'blue' + | 'blueviolet' + | 'brown' + | 'burlywood' + | 'cadetblue' + | 'chartreuse' + | 'chocolate' + | 'coral' + | 'cornflowerblue' + | 'cornsilk' + | 'crimson' + | 'cyan' + | 'darkblue' + | 'darkcyan' + | 'darkgoldenrod' + | 'darkgray' + | 'darkgreen' + | 'darkgrey' + | 'darkkhaki' + | 'darkmagenta' + | 'darkolivegreen' + | 'darkorange' + | 'darkorchid' + | 'darkred' + | 'darksalmon' + | 'darkseagreen' + | 'darkslateblue' + | 'darkslategray' + | 'darkslategrey' + | 'darkturquoise' + | 'darkviolet' + | 'deeppink' + | 'deepskyblue' + | 'dimgray' + | 'dimgrey' + | 'dodgerblue' + | 'firebrick' + | 'floralwhite' + | 'forestgreen' + | 'fuchsia' + | 'gainsboro' + | 'ghostwhite' + | 'gold' + | 'goldenrod' + | 'gray' + | 'green' + | 'greenyellow' + | 'grey' + | 'honeydew' + | 'hotpink' + | 'indianred' + | 'indigo' + | 'ivory' + | 'khaki' + | 'lavender' + | 'lavenderblush' + | 'lawngreen' + | 'lemonchiffon' + | 'lightblue' + | 'lightcoral' + | 'lightcyan' + | 'lightgoldenrodyellow' + | 'lightgray' + | 'lightgreen' + | 'lightgrey' + | 'lightpink' + | 'lightsalmon' + | 'lightseagreen' + | 'lightskyblue' + | 'lightslategray' + | 'lightslategrey' + | 'lightsteelblue' + | 'lightyellow' + | 'lime' + | 'limegreen' + | 'linen' + | 'magenta' + | 'maroon' + | 'mediumaquamarine' + | 'mediumblue' + | 'mediumorchid' + | 'mediumpurple' + | 'mediumseagreen' + | 'mediumslateblue' + | 'mediumspringgreen' + | 'mediumturquoise' + | 'mediumvioletred' + | 'midnightblue' + | 'mintcream' + | 'mistyrose' + | 'moccasin' + | 'navajowhite' + | 'navy' + | 'oldlace' + | 'olive' + | 'olivedrab' + | 'orange' + | 'orangered' + | 'orchid' + | 'palegoldenrod' + | 'palegreen' + | 'paleturquoise' + | 'palevioletred' + | 'papayawhip' + | 'peachpuff' + | 'peru' + | 'pink' + | 'plum' + | 'powderblue' + | 'purple' + | 'rebeccapurple' + | 'red' + | 'rosybrown' + | 'royalblue' + | 'saddlebrown' + | 'salmon' + | 'sandybrown' + | 'seagreen' + | 'seashell' + | 'sienna' + | 'silver' + | 'skyblue' + | 'slateblue' + | 'slategray' + | 'slategrey' + | 'snow' + | 'springgreen' + | 'steelblue' + | 'tan' + | 'teal' + | 'thistle' + | 'tomato' + | 'turquoise' + | 'violet' + | 'wheat' + | 'white' + | 'whitesmoke' + | 'yellow' + | 'yellowgreen'; + +declare namespace ansiStyles { + interface ColorConvert { + /** + The RGB color space. + + @param red - (`0`-`255`) + @param green - (`0`-`255`) + @param blue - (`0`-`255`) + */ + rgb(red: number, green: number, blue: number): string; + + /** + The RGB HEX color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hex(hex: string): string; + + /** + @param keyword - A CSS color name. + */ + keyword(keyword: CSSColor): string; + + /** + The HSL color space. + + @param hue - (`0`-`360`) + @param saturation - (`0`-`100`) + @param lightness - (`0`-`100`) + */ + hsl(hue: number, saturation: number, lightness: number): string; + + /** + The HSV color space. + + @param hue - (`0`-`360`) + @param saturation - (`0`-`100`) + @param value - (`0`-`100`) + */ + hsv(hue: number, saturation: number, value: number): string; + + /** + The HSV color space. + + @param hue - (`0`-`360`) + @param whiteness - (`0`-`100`) + @param blackness - (`0`-`100`) + */ + hwb(hue: number, whiteness: number, blackness: number): string; + + /** + Use a [4-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#3/4-bit) to set text color. + */ + ansi(ansi: number): string; + + /** + Use an [8-bit unsigned number](https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit) to set text color. + */ + ansi256(ansi: number): string; + } + + interface CSPair { + /** + The ANSI terminal control sequence for starting this style. + */ + readonly open: string; + + /** + The ANSI terminal control sequence for ending this style. + */ + readonly close: string; + } + + interface ColorBase { + readonly ansi: ColorConvert; + readonly ansi256: ColorConvert; + readonly ansi16m: ColorConvert; + + /** + The ANSI terminal control sequence for ending this color. + */ + readonly close: string; + } + + interface Modifier { + /** + Resets the current color chain. + */ + readonly reset: CSPair; + + /** + Make text bold. + */ + readonly bold: CSPair; + + /** + Emitting only a small amount of light. + */ + readonly dim: CSPair; + + /** + Make text italic. (Not widely supported) + */ + readonly italic: CSPair; + + /** + Make text underline. (Not widely supported) + */ + readonly underline: CSPair; + + /** + Inverse background and foreground colors. + */ + readonly inverse: CSPair; + + /** + Prints the text, but makes it invisible. + */ + readonly hidden: CSPair; + + /** + Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: CSPair; + } + + interface ForegroundColor { + readonly black: CSPair; + readonly red: CSPair; + readonly green: CSPair; + readonly yellow: CSPair; + readonly blue: CSPair; + readonly cyan: CSPair; + readonly magenta: CSPair; + readonly white: CSPair; + + /** + Alias for `blackBright`. + */ + readonly gray: CSPair; + + /** + Alias for `blackBright`. + */ + readonly grey: CSPair; + + readonly blackBright: CSPair; + readonly redBright: CSPair; + readonly greenBright: CSPair; + readonly yellowBright: CSPair; + readonly blueBright: CSPair; + readonly cyanBright: CSPair; + readonly magentaBright: CSPair; + readonly whiteBright: CSPair; + } + + interface BackgroundColor { + readonly bgBlack: CSPair; + readonly bgRed: CSPair; + readonly bgGreen: CSPair; + readonly bgYellow: CSPair; + readonly bgBlue: CSPair; + readonly bgCyan: CSPair; + readonly bgMagenta: CSPair; + readonly bgWhite: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGray: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGrey: CSPair; + + readonly bgBlackBright: CSPair; + readonly bgRedBright: CSPair; + readonly bgGreenBright: CSPair; + readonly bgYellowBright: CSPair; + readonly bgBlueBright: CSPair; + readonly bgCyanBright: CSPair; + readonly bgMagentaBright: CSPair; + readonly bgWhiteBright: CSPair; + } +} + +declare const ansiStyles: { + readonly modifier: ansiStyles.Modifier; + readonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase; + readonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase; + readonly codes: ReadonlyMap; +} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier; + +export = ansiStyles; diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js new file mode 100644 index 00000000..5d82581a --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js @@ -0,0 +1,163 @@ +'use strict'; + +const wrapAnsi16 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => (...args) => { + const code = fn(...args); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => (...args) => { + const rgb = fn(...args); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +const ansi2ansi = n => n; +const rgb2rgb = (r, g, b) => [r, g, b]; + +const setLazyProperty = (object, property, get) => { + Object.defineProperty(object, property, { + get: () => { + const value = get(); + + Object.defineProperty(object, property, { + value, + enumerable: true, + configurable: true + }); + + return value; + }, + enumerable: true, + configurable: true + }); +}; + +/** @type {typeof import('color-convert')} */ +let colorConvert; +const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { + if (colorConvert === undefined) { + colorConvert = require('color-convert'); + } + + const offset = isBackground ? 10 : 0; + const styles = {}; + + for (const [sourceSpace, suite] of Object.entries(colorConvert)) { + const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; + if (sourceSpace === targetSpace) { + styles[name] = wrap(identity, offset); + } else if (typeof suite === 'object') { + styles[name] = wrap(suite[targetSpace], offset); + } + } + + return styles; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + + // Bright color + blackBright: [90, 39], + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Alias bright black as gray (and grey) + styles.color.gray = styles.color.blackBright; + styles.bgColor.bgGray = styles.bgColor.bgBlackBright; + styles.color.grey = styles.color.blackBright; + styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; + + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + } + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); + setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); + setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); + setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); + + return styles; +} + +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license @@ -0,0 +1,9 @@ +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/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json new file mode 100644 index 00000000..75393284 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json @@ -0,0 +1,56 @@ +{ + "name": "ansi-styles", + "version": "4.3.0", + "description": "ANSI escape codes for styling strings in the terminal", + "license": "MIT", + "repository": "chalk/ansi-styles", + "funding": "https://github.com/chalk/ansi-styles?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd", + "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "color-convert": "^2.0.1" + }, + "devDependencies": { + "@types/color-convert": "^1.9.0", + "ava": "^2.3.0", + "svg-term-cli": "^2.1.1", + "tsd": "^0.11.0", + "xo": "^0.25.3" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md new file mode 100644 index 00000000..24883de8 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md @@ -0,0 +1,152 @@ +# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles) + +> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + + + +## Install + +``` +$ npm install ansi-styles +``` + +## Usage + +```js +const style = require('ansi-styles'); + +console.log(`${style.green.open}Hello world!${style.green.close}`); + + +// Color conversion between 16/256/truecolor +// NOTE: If conversion goes to 16 colors or 256 colors, the original color +// may be degraded to fit that color palette. This means terminals +// that do not support 16 million colors will best-match the +// original color. +console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close); +console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close); +console.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close); +``` + +## API + +Each style has an `open` and `close` property. + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(Not widely supported)* +- `underline` +- `inverse` +- `hidden` +- `strikethrough` *(Not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `blackBright` (alias: `gray`, `grey`) +- `redBright` +- `greenBright` +- `yellowBright` +- `blueBright` +- `magentaBright` +- `cyanBright` +- `whiteBright` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` +- `bgBlackBright` (alias: `bgGray`, `bgGrey`) +- `bgRedBright` +- `bgGreenBright` +- `bgYellowBright` +- `bgBlueBright` +- `bgMagentaBright` +- `bgCyanBright` +- `bgWhiteBright` + +## Advanced usage + +By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `style.modifier` +- `style.color` +- `style.bgColor` + +###### Example + +```js +console.log(style.color.green.open); +``` + +Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values. + +###### Example + +```js +console.log(style.codes.get(36)); +//=> 39 +``` + +## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728) + +`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors. + +The following color spaces from `color-convert` are supported: + +- `rgb` +- `hex` +- `keyword` +- `hsl` +- `hsv` +- `hwb` +- `ansi` +- `ansi256` + +To use these, call the associated conversion function with the intended output, for example: + +```js +style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code +style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code + +style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code +style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code + +style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code +style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code +``` + +## Related + +- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + +## For enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-convert/CHANGELOG.md b/node_modules/wrap-ansi-cjs/node_modules/color-convert/CHANGELOG.md new file mode 100644 index 00000000..0a7bce4f --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-convert/CHANGELOG.md @@ -0,0 +1,54 @@ +# 1.0.0 - 2016-01-07 + +- Removed: unused speed test +- Added: Automatic routing between previously unsupported conversions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `convert()` class +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: all functions to lookup dictionary +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: `ansi` to `ansi256` +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Fixed: argument grouping for functions requiring only one argument +([#27](https://github.com/Qix-/color-convert/pull/27)) + +# 0.6.0 - 2015-07-23 + +- Added: methods to handle +[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors: + - rgb2ansi16 + - rgb2ansi + - hsl2ansi16 + - hsl2ansi + - hsv2ansi16 + - hsv2ansi + - hwb2ansi16 + - hwb2ansi + - cmyk2ansi16 + - cmyk2ansi + - keyword2ansi16 + - keyword2ansi + - ansi162rgb + - ansi162hsl + - ansi162hsv + - ansi162hwb + - ansi162cmyk + - ansi162keyword + - ansi2rgb + - ansi2hsl + - ansi2hsv + - ansi2hwb + - ansi2cmyk + - ansi2keyword +([#18](https://github.com/harthur/color-convert/pull/18)) + +# 0.5.3 - 2015-06-02 + +- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]` +([#15](https://github.com/harthur/color-convert/issues/15)) + +--- + +Check out commit logs for older releases diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-convert/LICENSE b/node_modules/wrap-ansi-cjs/node_modules/color-convert/LICENSE new file mode 100644 index 00000000..5b4c386f --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-convert/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2011-2016 Heather Arthur + +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/node_modules/wrap-ansi-cjs/node_modules/color-convert/README.md b/node_modules/wrap-ansi-cjs/node_modules/color-convert/README.md new file mode 100644 index 00000000..d4b08fc3 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-convert/README.md @@ -0,0 +1,68 @@ +# color-convert + +[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert) + +Color-convert is a color conversion library for JavaScript and node. +It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest): + +```js +var convert = require('color-convert'); + +convert.rgb.hsl(140, 200, 100); // [96, 48, 59] +convert.keyword.rgb('blue'); // [0, 0, 255] + +var rgbChannels = convert.rgb.channels; // 3 +var cmykChannels = convert.cmyk.channels; // 4 +var ansiChannels = convert.ansi16.channels; // 1 +``` + +# Install + +```console +$ npm install color-convert +``` + +# API + +Simply get the property of the _from_ and _to_ conversion that you're looking for. + +All functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function. + +All 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha). + +```js +var convert = require('color-convert'); + +// Hex to LAB +convert.hex.lab('DEADBF'); // [ 76, 21, -2 ] +convert.hex.lab.raw('DEADBF'); // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ] + +// RGB to CMYK +convert.rgb.cmyk(167, 255, 4); // [ 35, 0, 98, 0 ] +convert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ] +``` + +### Arrays +All functions that accept multiple arguments also support passing an array. + +Note that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.) + +```js +var convert = require('color-convert'); + +convert.rgb.hex(123, 45, 67); // '7B2D43' +convert.rgb.hex([123, 45, 67]); // '7B2D43' +``` + +## Routing + +Conversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex). + +Keep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of "direct" (single-step) conversions, see [conversions.js](conversions.js). + +# Contribute + +If there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request. + +# License +Copyright © 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE). diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-convert/conversions.js b/node_modules/wrap-ansi-cjs/node_modules/color-convert/conversions.js new file mode 100644 index 00000000..2657f265 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-convert/conversions.js @@ -0,0 +1,839 @@ +/* MIT license */ +/* eslint-disable no-mixed-operators */ +const cssKeywords = require('color-name'); + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +const reverseKeywords = {}; +for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; +} + +const convert = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +module.exports = convert; + +// Hide .channels and .labels properties +for (const model of Object.keys(convert)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + const {channels, labels} = convert[model]; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); +} + +convert.rgb.hsl = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + const l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s; + + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = 0; + s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +function comparativeDistance(x, y) { + /* + See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + */ + return ( + ((x[0] - y[0]) ** 2) + + ((x[1] - y[1]) ** 2) + + ((x[2] - y[2]) ** 2) + ); +} + +convert.rgb.keyword = function (rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + let currentClosestDistance = Infinity; + let currentClosestKeyword; + + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; + + // Compute comparative distance + const distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; + + // Assume sRGB + r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); + g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); + b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); + + const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + const xyz = convert.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + const h = hsl[0] / 360; + const s = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + const t1 = 2 * l - t2; + + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + const h = hsl[0]; + let s = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s; + const lmin = Math.max(l, 0.01); + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s) / 2; + const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + const h = hsv[0] / 60; + const s = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + + const f = h - Math.floor(h); + const p = 255 * v * (1 - s); + const q = 255 * v * (1 - (s * f)); + const t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + const h = hsv[0]; + const s = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + + l = (2 - s) * v; + const lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + + // Wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + const n = wh + f * (v - wh); // Linear interpolation + + let r; + let g; + let b; + /* eslint-disable max-statements-per-line,no-multi-spaces */ + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + /* eslint-enable max-statements-per-line,no-multi-spaces */ + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // Assume sRGB + r = r > 0.0031308 + ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + const c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + let ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // Optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + const ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + let color = args % 10; + + // Handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + const mult = (~~(args > 50) + 1) * 0.5; + const r = ((color & 1) * mult) * 255; + const g = (((color >> 1) & 1) * mult) * 255; + const b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // Handle greyscale + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + const integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + let colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(char => { + return char + char; + }).join(''); + } + + const integer = parseInt(colorString, 16); + const r = (integer >> 16) & 0xFF; + const g = (integer >> 8) & 0xFF; + const b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = (max - min); + let grayscale; + let hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + const s = hsl[1] / 100; + const l = hsl[2] / 100; + + const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); + + let f = 0; + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + const s = hsv[1] / 100; + const v = hsv[2] / 100; + + const c = s * v; + let f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + const pure = [0, 0, 0]; + const hi = (h % 1) * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + + /* eslint-disable max-statements-per-line */ + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + /* eslint-enable max-statements-per-line */ + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const v = c + g * (1.0 - c); + let f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const l = g * (1.0 - c) + 0.5 * c; + let s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hsv = convert.gray.hsl; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + const val = Math.round(gray[0] / 100 * 255) & 0xFF; + const integer = (val << 16) + (val << 8) + val; + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-convert/index.js b/node_modules/wrap-ansi-cjs/node_modules/color-convert/index.js new file mode 100644 index 00000000..b648e573 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-convert/index.js @@ -0,0 +1,81 @@ +const conversions = require('./conversions'); +const route = require('./route'); + +const convert = {}; + +const models = Object.keys(conversions); + +function wrapRaw(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + return fn(args); + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + const result = fn(args); + + // We're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(fromModel => { + convert[fromModel] = {}; + + Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); + + const routes = route(fromModel); + const routeModels = Object.keys(routes); + + routeModels.forEach(toModel => { + const fn = routes[toModel]; + + convert[fromModel][toModel] = wrapRounded(fn); + convert[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +module.exports = convert; diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-convert/package.json b/node_modules/wrap-ansi-cjs/node_modules/color-convert/package.json new file mode 100644 index 00000000..6e48000c --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-convert/package.json @@ -0,0 +1,48 @@ +{ + "name": "color-convert", + "description": "Plain color conversion functions", + "version": "2.0.1", + "author": "Heather Arthur ", + "license": "MIT", + "repository": "Qix-/color-convert", + "scripts": { + "pretest": "xo", + "test": "node test/basic.js" + }, + "engines": { + "node": ">=7.0.0" + }, + "keywords": [ + "color", + "colour", + "convert", + "converter", + "conversion", + "rgb", + "hsl", + "hsv", + "hwb", + "cmyk", + "ansi", + "ansi16" + ], + "files": [ + "index.js", + "conversions.js", + "route.js" + ], + "xo": { + "rules": { + "default-case": 0, + "no-inline-comments": 0, + "operator-linebreak": 0 + } + }, + "devDependencies": { + "chalk": "^2.4.2", + "xo": "^0.24.0" + }, + "dependencies": { + "color-name": "~1.1.4" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-convert/route.js b/node_modules/wrap-ansi-cjs/node_modules/color-convert/route.js new file mode 100644 index 00000000..1a08521b --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-convert/route.js @@ -0,0 +1,97 @@ +const conversions = require('./conversions'); + +/* + This function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + const graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + const models = Object.keys(conversions); + + for (let len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; // Unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions[current]); + + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + const path = [graph[toModel].parent, toModel]; + let fn = conversions[graph[toModel].parent][toModel]; + + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +module.exports = function (fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + + const models = Object.keys(graph); + for (let len = models.length, i = 0; i < len; i++) { + const toModel = models[i]; + const node = graph[toModel]; + + if (node.parent === null) { + // No possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-name/LICENSE b/node_modules/wrap-ansi-cjs/node_modules/color-name/LICENSE new file mode 100644 index 00000000..4d9802a8 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-name/LICENSE @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright (c) 2015 Dmitry Ivanov + +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/node_modules/wrap-ansi-cjs/node_modules/color-name/README.md b/node_modules/wrap-ansi-cjs/node_modules/color-name/README.md new file mode 100644 index 00000000..3611a6b5 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-name/README.md @@ -0,0 +1,11 @@ +A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. + +[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) + + +```js +var colors = require('color-name'); +colors.red //[255,0,0] +``` + + diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-name/index.js b/node_modules/wrap-ansi-cjs/node_modules/color-name/index.js new file mode 100644 index 00000000..e42aa68a --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-name/index.js @@ -0,0 +1,152 @@ +'use strict' + +module.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/color-name/package.json b/node_modules/wrap-ansi-cjs/node_modules/color-name/package.json new file mode 100644 index 00000000..7acc9028 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/color-name/package.json @@ -0,0 +1,28 @@ +{ + "name": "color-name", + "version": "1.1.4", + "description": "A list of color names and its values", + "main": "index.js", + "files": [ + "index.js" + ], + "scripts": { + "test": "node test.js" + }, + "repository": { + "type": "git", + "url": "git@github.com:colorjs/color-name.git" + }, + "keywords": [ + "color-name", + "color", + "color-keyword", + "keyword" + ], + "author": "DY ", + "license": "MIT", + "bugs": { + "url": "https://github.com/colorjs/color-name/issues" + }, + "homepage": "https://github.com/colorjs/color-name" +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 00000000..a41e0a7e --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md new file mode 100644 index 00000000..f10e1733 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md @@ -0,0 +1,73 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: + +```js +const emojiRegex = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 00000000..b4cf3dcd --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 00000000..780309df --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts new file mode 100644 index 00000000..1955b470 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,23 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js new file mode 100644 index 00000000..d993a3a9 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json new file mode 100644 index 00000000..6d323528 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/package.json @@ -0,0 +1,50 @@ +{ + "name": "emoji-regex", + "version": "8.0.0", + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "homepage": "https://mths.be/emoji-regex", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "repository": { + "type": "git", + "url": "https://github.com/mathiasbynens/emoji-regex.git" + }, + "bugs": "https://github.com/mathiasbynens/emoji-regex/issues", + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "text.js", + "es2015/index.js", + "es2015/text.js" + ], + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "devDependencies": { + "@babel/cli": "^7.2.3", + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/preset-env": "^7.3.4", + "mocha": "^6.0.2", + "regexgen": "^1.3.0", + "unicode-12.0.0": "^0.7.9" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js new file mode 100644 index 00000000..0a55ce2f --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts new file mode 100644 index 00000000..12b53097 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.d.ts @@ -0,0 +1,29 @@ +declare const stringWidth: { + /** + Get the visual width of a string - the number of columns required to display it. + + Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + + @example + ``` + import stringWidth = require('string-width'); + + stringWidth('a'); + //=> 1 + + stringWidth('古'); + //=> 2 + + stringWidth('\u001B[1m古\u001B[22m'); + //=> 2 + ``` + */ + (string: string): number; + + // TODO: remove this in the next major version, refactor the whole definition to: + // declare function stringWidth(string: string): number; + // export = stringWidth; + default: typeof stringWidth; +} + +export = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js new file mode 100644 index 00000000..f4d261a9 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/index.js @@ -0,0 +1,47 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex'); + +const stringWidth = string => { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + let width = 0; + + for (let i = 0; i < string.length; i++) { + const code = string.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; + +module.exports = stringWidth; +// TODO: remove this in the next major version +module.exports.default = stringWidth; diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/license b/node_modules/wrap-ansi-cjs/node_modules/string-width/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/license @@ -0,0 +1,9 @@ +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/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json b/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json new file mode 100644 index 00000000..28ba7b4c --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/package.json @@ -0,0 +1,56 @@ +{ + "name": "string-width", + "version": "4.2.3", + "description": "Get the visual width of a string - the number of columns required to display it", + "license": "MIT", + "repository": "sindresorhus/string-width", + "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": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + } +} diff --git a/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md b/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md new file mode 100644 index 00000000..bdd31412 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md @@ -0,0 +1,50 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts new file mode 100644 index 00000000..907fccc2 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js new file mode 100644 index 00000000..9a593dfc --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +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/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json new file mode 100644 index 00000000..1a41108d --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/package.json @@ -0,0 +1,54 @@ +{ + "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/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md new file mode 100644 index 00000000..7c4b56d4 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/node_modules/wrap-ansi-cjs/package.json b/node_modules/wrap-ansi-cjs/package.json new file mode 100644 index 00000000..dfb2f4f1 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/package.json @@ -0,0 +1,62 @@ +{ + "name": "wrap-ansi", + "version": "7.0.0", + "description": "Wordwrap a string with ANSI escape codes", + "license": "MIT", + "repository": "chalk/wrap-ansi", + "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "files": [ + "index.js" + ], + "keywords": [ + "wrap", + "break", + "wordwrap", + "wordbreak", + "linewrap", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "devDependencies": { + "ava": "^2.1.0", + "chalk": "^4.0.0", + "coveralls": "^3.0.3", + "has-ansi": "^4.0.0", + "nyc": "^15.0.1", + "xo": "^0.29.1" + } +} diff --git a/node_modules/wrap-ansi-cjs/readme.md b/node_modules/wrap-ansi-cjs/readme.md new file mode 100644 index 00000000..68779ba5 --- /dev/null +++ b/node_modules/wrap-ansi-cjs/readme.md @@ -0,0 +1,91 @@ +# wrap-ansi [![Build Status](https://travis-ci.com/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.com/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) + +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) + +## Install + +``` +$ npm install wrap-ansi +``` + +## Usage + +```js +const chalk = require('chalk'); +const wrapAnsi = require('wrap-ansi'); + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` + + + +## API + +### wrapAnsi(string, columns, options?) + +Wrap words to the specified column width. + +#### string + +Type: `string` + +String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. + +#### columns + +Type: `number` + +Number of columns to wrap the text to. + +#### options + +Type: `object` + +##### hard + +Type: `boolean`\ +Default: `false` + +By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + +##### wordWrap + +Type: `boolean`\ +Default: `true` + +By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + +##### trim + +Type: `boolean`\ +Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + +## Related + +- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes +- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right +- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/node_modules/wrap-ansi/index.d.ts b/node_modules/wrap-ansi/index.d.ts new file mode 100644 index 00000000..95471cad --- /dev/null +++ b/node_modules/wrap-ansi/index.d.ts @@ -0,0 +1,41 @@ +export type Options = { + /** + By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + + @default false + */ + readonly hard?: boolean; + + /** + By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + + @default true + */ + readonly wordWrap?: boolean; + + /** + Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + + @default true + */ + readonly trim?: boolean; +}; + +/** +Wrap words to the specified column width. + +@param string - String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. +@param columns - Number of columns to wrap the text to. + +@example +``` +import chalk from 'chalk'; +import wrapAnsi from 'wrap-ansi'; + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` +*/ +export default function wrapAnsi(string: string, columns: number, options?: Options): string; diff --git a/node_modules/wrap-ansi/index.js b/node_modules/wrap-ansi/index.js new file mode 100644 index 00000000..d80c74c1 --- /dev/null +++ b/node_modules/wrap-ansi/index.js @@ -0,0 +1,214 @@ +import stringWidth from 'string-width'; +import stripAnsi from 'strip-ansi'; +import ansiStyles from 'ansi-styles'; + +const ESCAPES = new Set([ + '\u001B', + '\u009B', +]); + +const END_CODE = 39; +const ANSI_ESCAPE_BELL = '\u0007'; +const ANSI_CSI = '['; +const ANSI_OSC = ']'; +const ANSI_SGR_TERMINATOR = 'm'; +const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; + +const wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; +const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let isInsideLinkEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); + } + + if (isInsideEscape) { + if (isInsideLinkEscape) { + if (character === ANSI_ESCAPE_BELL) { + isInsideEscape = false; + isInsideLinkEscape = false; + } + } else if (character === ANSI_SGR_TERMINATOR) { + isInsideEscape = false; + } + + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = string => { + const words = string.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return string; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let returnValue = ''; + let escapeCode; + let escapeUrl; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimStart(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(row => stringVisibleTrimSpacesRight(row)); + } + + const pre = [...rows.join('\n')]; + + for (const [index, character] of pre.entries()) { + returnValue += character; + + if (ESCAPES.has(character)) { + const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; + if (groups.code !== undefined) { + const code = Number.parseFloat(groups.code); + escapeCode = code === END_CODE ? undefined : code; + } else if (groups.uri !== undefined) { + escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; + } + } + + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (pre[index + 1] === '\n') { + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(''); + } + + if (escapeCode && code) { + returnValue += wrapAnsiCode(code); + } + } else if (character === '\n') { + if (escapeCode && code) { + returnValue += wrapAnsiCode(escapeCode); + } + + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(escapeUrl); + } + } + } + + return returnValue; +}; + +// For each newline, invoke the method separately +export default function wrapAnsi(string, columns, options) { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +} diff --git a/node_modules/wrap-ansi/license b/node_modules/wrap-ansi/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/wrap-ansi/license @@ -0,0 +1,9 @@ +MIT License + +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: + +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/node_modules/wrap-ansi/node_modules/ansi-styles/index.d.ts b/node_modules/wrap-ansi/node_modules/ansi-styles/index.d.ts new file mode 100644 index 00000000..58f133ab --- /dev/null +++ b/node_modules/wrap-ansi/node_modules/ansi-styles/index.d.ts @@ -0,0 +1,236 @@ +export interface CSPair { // eslint-disable-line @typescript-eslint/naming-convention + /** + The ANSI terminal control sequence for starting this style. + */ + readonly open: string; + + /** + The ANSI terminal control sequence for ending this style. + */ + readonly close: string; +} + +export interface ColorBase { + /** + The ANSI terminal control sequence for ending this color. + */ + readonly close: string; + + ansi(code: number): string; + + ansi256(code: number): string; + + ansi16m(red: number, green: number, blue: number): string; +} + +export interface Modifier { + /** + Resets the current color chain. + */ + readonly reset: CSPair; + + /** + Make text bold. + */ + readonly bold: CSPair; + + /** + Emitting only a small amount of light. + */ + readonly dim: CSPair; + + /** + Make text italic. (Not widely supported) + */ + readonly italic: CSPair; + + /** + Make text underline. (Not widely supported) + */ + readonly underline: CSPair; + + /** + Make text overline. + + Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash. + */ + readonly overline: CSPair; + + /** + Inverse background and foreground colors. + */ + readonly inverse: CSPair; + + /** + Prints the text, but makes it invisible. + */ + readonly hidden: CSPair; + + /** + Puts a horizontal line through the center of the text. (Not widely supported) + */ + readonly strikethrough: CSPair; +} + +export interface ForegroundColor { + readonly black: CSPair; + readonly red: CSPair; + readonly green: CSPair; + readonly yellow: CSPair; + readonly blue: CSPair; + readonly cyan: CSPair; + readonly magenta: CSPair; + readonly white: CSPair; + + /** + Alias for `blackBright`. + */ + readonly gray: CSPair; + + /** + Alias for `blackBright`. + */ + readonly grey: CSPair; + + readonly blackBright: CSPair; + readonly redBright: CSPair; + readonly greenBright: CSPair; + readonly yellowBright: CSPair; + readonly blueBright: CSPair; + readonly cyanBright: CSPair; + readonly magentaBright: CSPair; + readonly whiteBright: CSPair; +} + +export interface BackgroundColor { + readonly bgBlack: CSPair; + readonly bgRed: CSPair; + readonly bgGreen: CSPair; + readonly bgYellow: CSPair; + readonly bgBlue: CSPair; + readonly bgCyan: CSPair; + readonly bgMagenta: CSPair; + readonly bgWhite: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGray: CSPair; + + /** + Alias for `bgBlackBright`. + */ + readonly bgGrey: CSPair; + + readonly bgBlackBright: CSPair; + readonly bgRedBright: CSPair; + readonly bgGreenBright: CSPair; + readonly bgYellowBright: CSPair; + readonly bgBlueBright: CSPair; + readonly bgCyanBright: CSPair; + readonly bgMagentaBright: CSPair; + readonly bgWhiteBright: CSPair; +} + +export interface ConvertColor { + /** + Convert from the RGB color space to the ANSI 256 color space. + + @param red - (`0...255`) + @param green - (`0...255`) + @param blue - (`0...255`) + */ + rgbToAnsi256(red: number, green: number, blue: number): number; + + /** + Convert from the RGB HEX color space to the RGB color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToRgb(hex: string): [red: number, green: number, blue: number]; + + /** + Convert from the RGB HEX color space to the ANSI 256 color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToAnsi256(hex: string): number; + + /** + Convert from the ANSI 256 color space to the ANSI 16 color space. + + @param code - A number representing the ANSI 256 color. + */ + ansi256ToAnsi(code: number): number; + + /** + Convert from the RGB color space to the ANSI 16 color space. + + @param red - (`0...255`) + @param green - (`0...255`) + @param blue - (`0...255`) + */ + rgbToAnsi(red: number, green: number, blue: number): number; + + /** + Convert from the RGB HEX color space to the ANSI 16 color space. + + @param hex - A hexadecimal string containing RGB data. + */ + hexToAnsi(hex: string): number; +} + +/** +Basic modifier names. +*/ +export type ModifierName = keyof Modifier; + +/** +Basic foreground color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type ForegroundColorName = keyof ForegroundColor; + +/** +Basic background color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type BackgroundColorName = keyof BackgroundColor; + +/** +Basic color names. The combination of foreground and background color names. + +[More colors here.](https://github.com/chalk/chalk/blob/main/readme.md#256-and-truecolor-color-support) +*/ +export type ColorName = ForegroundColorName | BackgroundColorName; + +/** +Basic modifier names. +*/ +export const modifierNames: readonly ModifierName[]; + +/** +Basic foreground color names. +*/ +export const foregroundColorNames: readonly ForegroundColorName[]; + +/** +Basic background color names. +*/ +export const backgroundColorNames: readonly BackgroundColorName[]; + +/* +Basic color names. The combination of foreground and background color names. +*/ +export const colorNames: readonly ColorName[]; + +declare const ansiStyles: { + readonly modifier: Modifier; + readonly color: ColorBase & ForegroundColor; + readonly bgColor: ColorBase & BackgroundColor; + readonly codes: ReadonlyMap; +} & ForegroundColor & BackgroundColor & Modifier & ConvertColor; + +export default ansiStyles; diff --git a/node_modules/wrap-ansi/node_modules/ansi-styles/index.js b/node_modules/wrap-ansi/node_modules/ansi-styles/index.js new file mode 100644 index 00000000..d7bede44 --- /dev/null +++ b/node_modules/wrap-ansi/node_modules/ansi-styles/index.js @@ -0,0 +1,223 @@ +const ANSI_BACKGROUND_OFFSET = 10; + +const wrapAnsi16 = (offset = 0) => code => `\u001B[${code + offset}m`; + +const wrapAnsi256 = (offset = 0) => code => `\u001B[${38 + offset};5;${code}m`; + +const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`; + +const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + overline: [53, 55], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29], + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + + // Bright color + blackBright: [90, 39], + gray: [90, 39], // Alias of `blackBright` + grey: [90, 39], // Alias of `blackBright` + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39], + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgGray: [100, 49], // Alias of `bgBlackBright` + bgGrey: [100, 49], // Alias of `bgBlackBright` + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49], + }, +}; + +export const modifierNames = Object.keys(styles.modifier); +export const foregroundColorNames = Object.keys(styles.color); +export const backgroundColorNames = Object.keys(styles.bgColor); +export const colorNames = [...foregroundColorNames, ...backgroundColorNames]; + +function assembleStyles() { + const codes = new Map(); + + for (const [groupName, group] of Object.entries(styles)) { + for (const [styleName, style] of Object.entries(group)) { + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m`, + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false, + }); + } + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false, + }); + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + styles.color.ansi = wrapAnsi16(); + styles.color.ansi256 = wrapAnsi256(); + styles.color.ansi16m = wrapAnsi16m(); + styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET); + styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET); + styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET); + + // From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js + Object.defineProperties(styles, { + rgbToAnsi256: { + value: (red, green, blue) => { + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (red === green && green === blue) { + if (red < 8) { + return 16; + } + + if (red > 248) { + return 231; + } + + return Math.round(((red - 8) / 247) * 24) + 232; + } + + return 16 + + (36 * Math.round(red / 255 * 5)) + + (6 * Math.round(green / 255 * 5)) + + Math.round(blue / 255 * 5); + }, + enumerable: false, + }, + hexToRgb: { + value: hex => { + const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16)); + if (!matches) { + return [0, 0, 0]; + } + + let [colorString] = matches; + + if (colorString.length === 3) { + colorString = [...colorString].map(character => character + character).join(''); + } + + const integer = Number.parseInt(colorString, 16); + + return [ + /* eslint-disable no-bitwise */ + (integer >> 16) & 0xFF, + (integer >> 8) & 0xFF, + integer & 0xFF, + /* eslint-enable no-bitwise */ + ]; + }, + enumerable: false, + }, + hexToAnsi256: { + value: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)), + enumerable: false, + }, + ansi256ToAnsi: { + value: code => { + if (code < 8) { + return 30 + code; + } + + if (code < 16) { + return 90 + (code - 8); + } + + let red; + let green; + let blue; + + if (code >= 232) { + red = (((code - 232) * 10) + 8) / 255; + green = red; + blue = red; + } else { + code -= 16; + + const remainder = code % 36; + + red = Math.floor(code / 36) / 5; + green = Math.floor(remainder / 6) / 5; + blue = (remainder % 6) / 5; + } + + const value = Math.max(red, green, blue) * 2; + + if (value === 0) { + return 30; + } + + // eslint-disable-next-line no-bitwise + let result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red)); + + if (value === 2) { + result += 60; + } + + return result; + }, + enumerable: false, + }, + rgbToAnsi: { + value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)), + enumerable: false, + }, + hexToAnsi: { + value: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)), + enumerable: false, + }, + }); + + return styles; +} + +const ansiStyles = assembleStyles(); + +export default ansiStyles; diff --git a/node_modules/wrap-ansi/node_modules/ansi-styles/license b/node_modules/wrap-ansi/node_modules/ansi-styles/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/wrap-ansi/node_modules/ansi-styles/license @@ -0,0 +1,9 @@ +MIT License + +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: + +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/node_modules/wrap-ansi/node_modules/ansi-styles/package.json b/node_modules/wrap-ansi/node_modules/ansi-styles/package.json new file mode 100644 index 00000000..6cd3ca5b --- /dev/null +++ b/node_modules/wrap-ansi/node_modules/ansi-styles/package.json @@ -0,0 +1,54 @@ +{ + "name": "ansi-styles", + "version": "6.2.1", + "description": "ANSI escape codes for styling strings in the terminal", + "license": "MIT", + "repository": "chalk/ansi-styles", + "funding": "https://github.com/chalk/ansi-styles?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd", + "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "devDependencies": { + "ava": "^3.15.0", + "svg-term-cli": "^2.1.1", + "tsd": "^0.19.0", + "xo": "^0.47.0" + } +} diff --git a/node_modules/wrap-ansi/node_modules/ansi-styles/readme.md b/node_modules/wrap-ansi/node_modules/ansi-styles/readme.md new file mode 100644 index 00000000..6d04183f --- /dev/null +++ b/node_modules/wrap-ansi/node_modules/ansi-styles/readme.md @@ -0,0 +1,173 @@ +# ansi-styles + +> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal + +You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings. + +![](screenshot.png) + +## Install + +```sh +npm install ansi-styles +``` + +## Usage + +```js +import styles from 'ansi-styles'; + +console.log(`${styles.green.open}Hello world!${styles.green.close}`); + + +// Color conversion between 256/truecolor +// NOTE: When converting from truecolor to 256 colors, the original color +// may be degraded to fit the new color palette. This means terminals +// that do not support 16 million colors will best-match the +// original color. +console.log(`${styles.color.ansi(styles.rgbToAnsi(199, 20, 250))}Hello World${styles.color.close}`) +console.log(`${styles.color.ansi256(styles.rgbToAnsi256(199, 20, 250))}Hello World${styles.color.close}`) +console.log(`${styles.color.ansi16m(...styles.hexToRgb('#abcdef'))}Hello World${styles.color.close}`) +``` + +## API + +### `open` and `close` + +Each style has an `open` and `close` property. + +### `modifierNames`, `foregroundColorNames`, `backgroundColorNames`, and `colorNames` + +All supported style strings are exposed as an array of strings for convenience. `colorNames` is the combination of `foregroundColorNames` and `backgroundColorNames`. + +This can be useful if you need to validate input: + +```js +import {modifierNames, foregroundColorNames} from 'ansi-styles'; + +console.log(modifierNames.includes('bold')); +//=> true + +console.log(foregroundColorNames.includes('pink')); +//=> false +``` + +## Styles + +### Modifiers + +- `reset` +- `bold` +- `dim` +- `italic` *(Not widely supported)* +- `underline` +- `overline` *Supported on VTE-based terminals, the GNOME terminal, mintty, and Git Bash.* +- `inverse` +- `hidden` +- `strikethrough` *(Not widely supported)* + +### Colors + +- `black` +- `red` +- `green` +- `yellow` +- `blue` +- `magenta` +- `cyan` +- `white` +- `blackBright` (alias: `gray`, `grey`) +- `redBright` +- `greenBright` +- `yellowBright` +- `blueBright` +- `magentaBright` +- `cyanBright` +- `whiteBright` + +### Background colors + +- `bgBlack` +- `bgRed` +- `bgGreen` +- `bgYellow` +- `bgBlue` +- `bgMagenta` +- `bgCyan` +- `bgWhite` +- `bgBlackBright` (alias: `bgGray`, `bgGrey`) +- `bgRedBright` +- `bgGreenBright` +- `bgYellowBright` +- `bgBlueBright` +- `bgMagentaBright` +- `bgCyanBright` +- `bgWhiteBright` + +## Advanced usage + +By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module. + +- `styles.modifier` +- `styles.color` +- `styles.bgColor` + +###### Example + +```js +import styles from 'ansi-styles'; + +console.log(styles.color.green.open); +``` + +Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `styles.codes`, which returns a `Map` with the open codes as keys and close codes as values. + +###### Example + +```js +import styles from 'ansi-styles'; + +console.log(styles.codes.get(36)); +//=> 39 +``` + +## 16 / 256 / 16 million (TrueColor) support + +`ansi-styles` allows converting between various color formats and ANSI escapes, with support for 16, 256 and [16 million colors](https://gist.github.com/XVilka/8346728). + +The following color spaces are supported: + +- `rgb` +- `hex` +- `ansi256` +- `ansi` + +To use these, call the associated conversion function with the intended output, for example: + +```js +import styles from 'ansi-styles'; + +styles.color.ansi(styles.rgbToAnsi(100, 200, 15)); // RGB to 16 color ansi foreground code +styles.bgColor.ansi(styles.hexToAnsi('#C0FFEE')); // HEX to 16 color ansi foreground code + +styles.color.ansi256(styles.rgbToAnsi256(100, 200, 15)); // RGB to 256 color ansi foreground code +styles.bgColor.ansi256(styles.hexToAnsi256('#C0FFEE')); // HEX to 256 color ansi foreground code + +styles.color.ansi16m(100, 200, 15); // RGB to 16 million color foreground code +styles.bgColor.ansi16m(...styles.hexToRgb('#C0FFEE')); // Hex (RGB) to 16 million color foreground code +``` + +## Related + +- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + +## For enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/wrap-ansi/package.json b/node_modules/wrap-ansi/package.json new file mode 100644 index 00000000..198a5dbc --- /dev/null +++ b/node_modules/wrap-ansi/package.json @@ -0,0 +1,69 @@ +{ + "name": "wrap-ansi", + "version": "8.1.0", + "description": "Wordwrap a string with ANSI escape codes", + "license": "MIT", + "repository": "chalk/wrap-ansi", + "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": { + "types": "./index.d.ts", + "default": "./index.js" + }, + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && nyc ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "wrap", + "break", + "wordwrap", + "wordbreak", + "linewrap", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "devDependencies": { + "ava": "^3.15.0", + "chalk": "^4.1.2", + "coveralls": "^3.1.1", + "has-ansi": "^5.0.1", + "nyc": "^15.1.0", + "tsd": "^0.25.0", + "xo": "^0.44.0" + } +} diff --git a/node_modules/wrap-ansi/readme.md b/node_modules/wrap-ansi/readme.md new file mode 100644 index 00000000..21f6fed7 --- /dev/null +++ b/node_modules/wrap-ansi/readme.md @@ -0,0 +1,91 @@ +# wrap-ansi + +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) + +## Install + +``` +$ npm install wrap-ansi +``` + +## Usage + +```js +import chalk from 'chalk'; +import wrapAnsi from 'wrap-ansi'; + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` + + + +## API + +### wrapAnsi(string, columns, options?) + +Wrap words to the specified column width. + +#### string + +Type: `string` + +String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. + +#### columns + +Type: `number` + +Number of columns to wrap the text to. + +#### options + +Type: `object` + +##### hard + +Type: `boolean`\ +Default: `false` + +By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + +##### wordWrap + +Type: `boolean`\ +Default: `true` + +By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + +##### trim + +Type: `boolean`\ +Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + +## Related + +- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes +- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right +- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/package-lock.json b/package-lock.json index 13724a55..5336a642 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@babel/preset-env": "^7.25.4", "babel-loader": "^9.1.3", "css-loader": "^7.1.2", + "glob": "^11.0.0", "mini-css-extract-plugin": "^2.9.1", "style-loader": "^4.0.0", "webpack": "^5.94.0", @@ -1743,6 +1744,23 @@ "node": ">=10.0.0" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -1801,6 +1819,16 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -2109,6 +2137,18 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -2239,6 +2279,21 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/browserslist": { "version": "4.23.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", @@ -2485,12 +2540,24 @@ } } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.5.18", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz", "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==", "dev": true }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -2751,6 +2818,22 @@ "flat": "cli.js" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -2769,6 +2852,29 @@ "node": ">=6.9.0" } }, + "node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -2866,6 +2972,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2893,6 +3008,24 @@ "node": ">=0.10.0" } }, + "node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -3094,6 +3227,30 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3166,6 +3323,12 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3190,6 +3353,31 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "dev": true, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", @@ -3554,6 +3742,18 @@ "node": ">=8" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3582,6 +3782,102 @@ "source-map": "^0.6.0" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", @@ -3943,6 +4239,127 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index c88de382..dcb42acc 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@babel/preset-env": "^7.25.4", "babel-loader": "^9.1.3", "css-loader": "^7.1.2", + "glob": "^11.0.0", "mini-css-extract-plugin": "^2.9.1", "style-loader": "^4.0.0", "webpack": "^5.94.0", diff --git a/static/css/main.css b/static/css/main.css index c6ed230b..2cc9dcd2 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1,15 +1,16 @@ -/* Base styles */ +/* +/* Base styles * @import 'lib/reset.css'; @import 'lib/typography.css'; @import 'lib/variables.css'; @import 'lib/utils.css'; -/* Layout styles */ +/* Layout styles * @import 'layouts/header.css'; @import 'layouts/footer.css'; -/* Component styles */ +/* Component styles * @import 'components/button.css'; @import 'components/card.css'; @import 'components/dialog.css'; @@ -18,7 +19,7 @@ @import 'components/navigation.css'; @import 'components/overlay.css'; -/* Section styles */ +/* Section styles * @import 'sections/store.css'; /* Page-specific styles * @@ -30,12 +31,15 @@ @import 'pages/page_store_home.css'; @import 'pages/page_store_product_permutations.css'; @import 'pages/page_store_stock_items.css'; -*/ +* /* Theme styles * @import 'themes/light.css'; -/* Uncomment the line below to enable dark theme */ -/* @import 'themes/dark.css'; */ +/* Uncomment the line below to enable dark theme * +/* @import 'themes/dark.css'; * + + +*/ /* Custom styles */ /* Add any custom styles or overrides here */ diff --git a/static/css/pages/core/home.css b/static/css/pages/core/home.css index 73a09151..1a67abe6 100644 --- a/static/css/pages/core/home.css +++ b/static/css/pages/core/home.css @@ -1,5 +1,5 @@ -.page-body > * { +#pageBody > * { height: 100%; } #pageBody > * :first-child{ @@ -22,4 +22,11 @@ img { background-image: url("/static/images/Tag_Molly1.png"); } -*/ \ No newline at end of file +*/ + +#pageBody h2 { + width: 100%; +} +#pageBody button.navContact { + width: fit-content; +} diff --git a/static/dist/css/admin_home.css b/static/dist/css/admin_home.css new file mode 100644 index 00000000..07007720 --- /dev/null +++ b/static/dist/css/admin_home.css @@ -0,0 +1,8 @@ + +#pageBody > .card:first-of-type { + width: 80%; +} + +.container.row { + width: auto; +} diff --git a/static/dist/css/contact.css b/static/dist/css/contact.css new file mode 100644 index 00000000..6c6200d9 --- /dev/null +++ b/static/dist/css/contact.css @@ -0,0 +1,27 @@ + + +#pageBody > .card:first-of-type{ + flex-grow: 1; +} +#pageBody > .card:last-of-type { +} +#pageBody > .card:not(:first-of-type) { +} + + +/* +.content > a { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + text-align: center; +} + +.content > a > img, .content > a > h4 { + flex: content; + margin: 0px; +} +*/ + + diff --git a/static/dist/css/core_admin_home.css b/static/dist/css/core_admin_home.css new file mode 100644 index 00000000..07007720 --- /dev/null +++ b/static/dist/css/core_admin_home.css @@ -0,0 +1,8 @@ + +#pageBody > .card:first-of-type { + width: 80%; +} + +.container.row { + width: auto; +} diff --git a/static/dist/css/core_contact.css b/static/dist/css/core_contact.css new file mode 100644 index 00000000..6c6200d9 --- /dev/null +++ b/static/dist/css/core_contact.css @@ -0,0 +1,27 @@ + + +#pageBody > .card:first-of-type{ + flex-grow: 1; +} +#pageBody > .card:last-of-type { +} +#pageBody > .card:not(:first-of-type) { +} + + +/* +.content > a { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + text-align: center; +} + +.content > a > img, .content > a > h4 { + flex: content; + margin: 0px; +} +*/ + + diff --git a/static/dist/css/core_home.css b/static/dist/css/core_home.css new file mode 100644 index 00000000..1e7c9010 --- /dev/null +++ b/static/dist/css/core_home.css @@ -0,0 +1,34 @@ + + +#pageBody > * { + height: 100%; +} +#pageBody > * :first-child{ + margin-top: 25vh; +} +#pageBody > * :last-child { + margin-bottom: 35vh; +} + +.img-demo { + max-width: 50%; + min-width: 500px; +} + +.img-featured { + width: 100%; +} + +/* +img { + background-image: url("/static/images/Tag_Molly1.png"); +} +*/ + +#pageBody h2 { + width: 100%; +} +#pageBody button.navContact { + width: fit-content; +} + diff --git a/static/dist/css/core_services.css b/static/dist/css/core_services.css new file mode 100644 index 00000000..e09e4c73 --- /dev/null +++ b/static/dist/css/core_services.css @@ -0,0 +1,38 @@ + +#pageBody > .card { + padding-left: 5vw; + padding-right: 5vw; + max-width: 80vw; +} +#pageBody > .card:first-of-type{ +} +#pageBody > .card:last-of-type { + padding-left: 5vw; + padding-right: 5vw; +} +#pageBody > .card:not(:first-of-type) { +} + +table { + left: 5vw; + max-width: 70vw; + width: fit-content !important; +} + +/* +tr th::after { + content: ""; + position: absolute; + top: 65px; + left: 4%; + width: 92%; + border-bottom: 2px solid var(--c_purple_dark); +} +*/ + +/* +img { + max-height: 5vh; + max-width: 10vw; +} +*/ diff --git a/static/dist/css/home.css b/static/dist/css/home.css new file mode 100644 index 00000000..cd418281 --- /dev/null +++ b/static/dist/css/home.css @@ -0,0 +1,26 @@ + + +.page-body > * { + height: 100%; +} +#pageBody > * :first-child{ + margin-top: 25vh; +} +#pageBody > * :last-child { + margin-bottom: 35vh; +} + +.img-demo { + max-width: 50%; + min-width: 500px; +} + +.img-featured { + width: 100%; +} + +/* +img { + background-image: url("/static/images/Tag_Molly1.png"); +} +*/ diff --git a/static/dist/css/legal_license.css b/static/dist/css/legal_license.css new file mode 100644 index 00000000..21efab32 --- /dev/null +++ b/static/dist/css/legal_license.css @@ -0,0 +1,9 @@ + + +.page-body > * { +} +#pageBody > * :first-child{ +} +#pageBody > * :last-child { +} + diff --git a/static/dist/css/license.css b/static/dist/css/license.css new file mode 100644 index 00000000..21efab32 --- /dev/null +++ b/static/dist/css/license.css @@ -0,0 +1,9 @@ + + +.page-body > * { +} +#pageBody > * :first-child{ +} +#pageBody > * :last-child { +} + diff --git a/static/dist/css/services.css b/static/dist/css/services.css new file mode 100644 index 00000000..e09e4c73 --- /dev/null +++ b/static/dist/css/services.css @@ -0,0 +1,38 @@ + +#pageBody > .card { + padding-left: 5vw; + padding-right: 5vw; + max-width: 80vw; +} +#pageBody > .card:first-of-type{ +} +#pageBody > .card:last-of-type { + padding-left: 5vw; + padding-right: 5vw; +} +#pageBody > .card:not(:first-of-type) { +} + +table { + left: 5vw; + max-width: 70vw; + width: fit-content !important; +} + +/* +tr th::after { + content: ""; + position: absolute; + top: 65px; + left: 4%; + width: 92%; + border-bottom: 2px solid var(--c_purple_dark); +} +*/ + +/* +img { + max-height: 5vh; + max-width: 10vw; +} +*/ diff --git a/static/dist/css/store_home.css b/static/dist/css/store_home.css new file mode 100644 index 00000000..139597f9 --- /dev/null +++ b/static/dist/css/store_home.css @@ -0,0 +1,2 @@ + + diff --git a/static/dist/css/store_product_categories.css b/static/dist/css/store_product_categories.css new file mode 100644 index 00000000..507cb55d --- /dev/null +++ b/static/dist/css/store_product_categories.css @@ -0,0 +1,63 @@ + + + +td.display-order, th.display-order { + width: 8% !important; +} +td.code, th.code { + width: 15% !important; +} +td.name, th.name { + width: 25% !important; +} +td.description, th.description { + width: 35% !important; +} +td.access_level, th.access_level { + width: 10% !important; +} +td.active, th.active { + width: 7% !important; +} + +/* +.row-new { + visibility: hidden; +} +*/ + +textarea { + width: 95% !important; +} + +select { + width: 100% !important; +} + +input { + width: 90% !important; +} + +td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea { + border: 2px solid var(--c_purple); + border-radius: 0.5vh; +} + +#tableMain tbody tr td button { + padding: 0; + border: 0; + margin: 0; + text-decoration: none; +} + +#tableMain tbody tr td table thead tr th.id_variation_type, #tableMain tbody tr td table tbody tr td.id_variation_type, #tableMain tbody tr td table thead tr th.id_variation, #tableMain tbody tr td table tbody tr td.id_variation { + width: 47.5%; +} + + +/* +select.id_variation, select.id_variation_type { + max-width: 40% !important; +} +*/ + diff --git a/static/dist/css/store_product_permutations.css b/static/dist/css/store_product_permutations.css new file mode 100644 index 00000000..dfdf0c82 --- /dev/null +++ b/static/dist/css/store_product_permutations.css @@ -0,0 +1,62 @@ + + + +td.category, th.category { + width: 16% !important; +} +td.product, th.product { + width: 23% !important; +} +td.variations, th.variations { + width: 19% !important; +} +td.quantity-stock, th.quantity-stock { + width: 10% !important; +} +td.quantity-min, th.quantity-min { + width: 10% !important; +} +td.quantity-max, th.quantity-max { + width: 10% !important; +} +td.cost-local-VAT-incl, th.cost-local-VAT-incl { + width: 6% !important; +} +td.detail, th.detail { + width: 6% !important; +} + +textarea { + width: 95% !important; +} + +select { + width: 100% !important; +} + +input { + width: 90% !important; +} + +td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea { + border: 2px solid var(--c_purple); + border-radius: 0.5vh; +} + +#tableMain tbody tr td button { + padding: 0; + border: 0; + margin: 0; + text-decoration: none; +} + +#tableMain tbody tr td table thead tr th.id_variation_type, #tableMain tbody tr td table tbody tr td.id_variation_type, #tableMain tbody tr td table thead tr th.id_variation, #tableMain tbody tr td table tbody tr td.id_variation { + width: 47.5%; +} + +/* +select.id_variation, select.id_variation_type { + max-width: 40% !important; +} +*/ + diff --git a/static/dist/css/store_stock_items.css b/static/dist/css/store_stock_items.css new file mode 100644 index 00000000..2835b2b3 --- /dev/null +++ b/static/dist/css/store_stock_items.css @@ -0,0 +1,41 @@ + + +th, td { + min-width: fit-content; +} + + + +.category { + width: 12%; +} +.product { + width: 12%; +} +.variations { + width: 12%; +} +.currency { + width: 12%; +} +.cost-local-VAT-incl { + width: 10%; +} +.date-puchased, .date-received, .date-unsealed, .date-expiration, .date-consumed { + width: 6%; +} +.storage-location { + width: 12%; +} +.active { + width: 5%; +} + +.row-new { + visibility: hidden; +} + +textarea, select, input { + width: 100% !important; +} + diff --git a/static/dist/js/admin_home.bundle.js b/static/dist/js/admin_home.bundle.js new file mode 100644 index 00000000..7a899e45 --- /dev/null +++ b/static/dist/js/admin_home.bundle.js @@ -0,0 +1,2 @@ +/*! For license information please see admin_home.bundle.js.LICENSE.txt */ +(()=>{var e={595:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(143);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(){a=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,i=Object.defineProperty||function(e,t,r){e[t]=r.value},l="function"==typeof Symbol?Symbol:{},u=l.iterator||"@@iterator",c=l.asyncIterator||"@@asyncIterator",s=l.toStringTag||"@@toStringTag";function f(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{f({},"")}catch(e){f=function(e,t,r){return e[t]=r}}function d(e,t,r,n){var o=t&&t.prototype instanceof b?t:b,a=Object.create(o.prototype),l=new q(n||[]);return i(a,"_invoke",{value:L(e,r,l)}),a}function y(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=d;var p="suspendedStart",v="suspendedYield",g="executing",h="completed",m={};function b(){}function k(){}function S(){}var P={};f(P,u,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(D([])));E&&E!==r&&n.call(E,u)&&(P=E);var A=S.prototype=b.prototype=Object.create(P);function C(e){["next","throw","return"].forEach((function(t){f(e,t,(function(e){return this._invoke(t,e)}))}))}function O(e,t){function r(a,i,l,u){var c=y(e[a],e,i);if("throw"!==c.type){var s=c.arg,f=s.value;return f&&"object"==o(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,l,u)}),(function(e){r("throw",e,l,u)})):t.resolve(f).then((function(e){s.value=e,l(s)}),(function(e){return r("throw",e,l,u)}))}u(c.arg)}var a;i(this,"_invoke",{value:function(e,n){function o(){return new t((function(t,o){r(e,n,t,o)}))}return a=a?a.then(o,o):o()}})}function L(t,r,n){var o=p;return function(a,i){if(o===g)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(n.method=a,n.arg=i;;){var l=n.delegate;if(l){var u=j(l,n);if(u){if(u===m)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===p)throw o=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=g;var c=y(t,r,n);if("normal"===c.type){if(o=n.done?h:v,c.arg===m)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(o=h,n.method="throw",n.arg=c.arg)}}}function j(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,j(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var a=y(o,t.iterator,r.arg);if("throw"===a.type)return r.method="throw",r.arg=a.arg,r.delegate=null,m;var i=a.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,m):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,m)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function T(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function q(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[u];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,i=function r(){for(;++a=0;--a){var i=this.tryEntries[a],l=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),T(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;T(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),m}},t}function i(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){return void r(e)}l.done?t(u):Promise.resolve(u).then(n,o)}function l(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function l(e){i(a,n,o,l,u,"next",e)}function u(e){i(a,n,o,l,u,"throw",e)}l(void 0)}))}}function u(e,t){for(var r=0;r1&&void 0!==s[1]?s[1]:"GET",o=s.length>2&&void 0!==s[2]?s[2]:null,i=s.length>3&&void 0!==s[3]?s[3]:null,l=e.getUrlFromHash(r,i),u={method:n,headers:{"Content-Type":"application/json","X-CSRFToken":e.getCsrfToken()}},!o||"POST"!==n&&"PUT"!==n&&"PATCH"!==n||(u.body=JSON.stringify(o)),console.log("API request:",n,l,o),t.prev=7,t.next=10,fetch(l,u);case 10:if((c=t.sent).ok){t.next=13;break}throw new Error("HTTP error! status: ".concat(c.status));case 13:return t.next=15,c.json();case 15:return t.abrupt("return",t.sent);case 18:throw t.prev=18,t.t0=t.catch(7),console.error("API request failed:",t.t0),t.t0;case 22:case"end":return t.stop()}}),t,null,[[7,18]])}))),function(e){return f.apply(this,arguments)})},{key:"getUrlFromHash",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;null==e&&(e=hashPageHome),console.log("getUrlFromHash:"),console.log("base url: "+_pathHost+"\nhash: "+e+"\nparams: "+t);var r=_pathHost+e;return t&&(r+="?"+new URLSearchParams(t).toString()),console.log("url: "+r),r}},{key:"goToUrl",value:function(e){window.location.href=e}},{key:"goToHash",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=e.getUrlFromHash(t,r);e.goToUrl(n)}},{key:"loginUser",value:(s=l(a().mark((function t(){var r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(r={})[keyCallback]=n.A.getHashPageCurrent(),t.next=4,e.request(hashPageUserLogin,"POST",r);case 4:return t.abrupt("return",t.sent);case 5:case"end":return t.stop()}}),t)}))),function(){return s.apply(this,arguments)})},{key:"getCategories",value:(c=l(a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request(hashGetStoreProductCategory);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)}))),function(){return c.apply(this,arguments)})},{key:"getCategoriesByFilters",value:(i=l(a().mark((function t(r){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.goToHash(hashPageStoreProductCategories,r);case 1:case"end":return t.stop()}}),t)}))),function(e){return i.apply(this,arguments)})},{key:"saveCategories",value:(o=l(a().mark((function t(r,o,i){var l;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(l={})[flagFormFilters]=n.A.convertForm2JSON(o),l[flagCategory]=r,l[flagComment]=i,t.next=6,e.request(hashSaveStoreProductCategory,"POST",l);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return o.apply(this,arguments)})}],r&&u(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,o,i,c,s,f}()},143:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(900);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(e,t){for(var r=0;r{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;ri});var i=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)},t=[{key:"initialiseEventHandler",value:function(e,t,r){document.querySelectorAll(e).forEach((function(e){e.classList.contains(t)||(e.classList.add(t),r(e))}))}}],null&&o(e.prototype,null),t&&o(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}()},322:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;ri});var i=function(){return e=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)},t=[{key:"getLocalStorage",value:function(e){return JSON.parse(localStorage.getItem(e))}},{key:"setLocalStorage",value:function(e,t){localStorage.setItem(e,JSON.stringify(t))}}],null&&o(e.prototype,null),t&&o(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}()},900:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;ri});var i=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return t=e,r=[{key:"isEmpty",value:function(e){var t=!0;if(null!==e&&"null"!==e&&void 0!==e&&"undefined"!==e)if(null==e.length)t=!1;else if("function"==typeof e)t=!1;else{var r="string"==typeof e;if(r&&(e=e.trim()),e.length>0)if(r)t=!1;else if("string"!=typeof e[0])t=!1;else for(var n=0;n0)}},{key:"getDataContentType",value:function(t){var r=null,n="";return e.isEmpty(t)||("string"==typeof t?(r=t,n="application/x-www-form-urlencoded; charset=UTF-8"):(r=JSON.stringify(t),n="application/json; charset=UTF-8")),{Data:r,ContentType:n}}},{key:"arrayContainsItem",value:function(t,r){var n=!1;if(!e.isEmpty(t)&&!e.isEmpty(r))if(t[0]instanceof jQuery){for(var o=0;o{"use strict";r.r(t),r.d(t,{BasePage:()=>m});var n=r(782),o=r(322),a=r(595),i=r(143);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(){u=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",s=a.toStringTag||"@@toStringTag";function f(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{f({},"")}catch(e){f=function(e,t,r){return e[t]=r}}function d(e,t,r,n){var a=t&&t.prototype instanceof b?t:b,i=Object.create(a.prototype),l=new q(n||[]);return o(i,"_invoke",{value:L(e,r,l)}),i}function y(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=d;var p="suspendedStart",v="suspendedYield",g="executing",h="completed",m={};function b(){}function k(){}function S(){}var P={};f(P,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(D([])));E&&E!==r&&n.call(E,i)&&(P=E);var A=S.prototype=b.prototype=Object.create(P);function C(e){["next","throw","return"].forEach((function(t){f(e,t,(function(e){return this._invoke(t,e)}))}))}function O(e,t){function r(o,a,i,u){var c=y(e[o],e,a);if("throw"!==c.type){var s=c.arg,f=s.value;return f&&"object"==l(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,i,u)}),(function(e){r("throw",e,i,u)})):t.resolve(f).then((function(e){s.value=e,i(s)}),(function(e){return r("throw",e,i,u)}))}u(c.arg)}var a;o(this,"_invoke",{value:function(e,n){function o(){return new t((function(t,o){r(e,n,t,o)}))}return a=a?a.then(o,o):o()}})}function L(t,r,n){var o=p;return function(a,i){if(o===g)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(n.method=a,n.arg=i;;){var l=n.delegate;if(l){var u=j(l,n);if(u){if(u===m)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===p)throw o=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=g;var c=y(t,r,n);if("normal"===c.type){if(o=n.done?h:v,c.arg===m)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(o=h,n.method="throw",n.arg=c.arg)}}}function j(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,j(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var a=y(o,t.iterator,r.arg);if("throw"===a.type)return r.method="throw",r.arg=a.arg,r.delegate=null,m;var i=a.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,m):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,m)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function T(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function q(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o=0;--a){var i=this.tryEntries[a],l=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),T(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;T(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),m}},t}function c(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){return void r(e)}l.done?t(u):Promise.resolve(u).then(n,o)}function s(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){c(a,n,o,i,l,"next",e)}function l(e){c(a,n,o,i,l,"throw",e)}i(void 0)}))}}function f(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageHome,e)},this.routes[hashPageContact]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageContact,e)},this.routes[hashPageServices]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageServices,e)},this.routes[hashPageAdminHome]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageAdminHome,e)},this.routes[hashPageAccessibilityStatement]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageAccessibilityStatement,e)},this.routes[hashPageLicense]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageLicense,e)},this.routes[hashPageStoreProductCategories]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreProductCategories,e)},this.routes[hashPageStoreProductPermutations]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreProductPermutations,e)},this.routes[hashPageStoreProducts]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreProducts,e)},this.initialize()},t=[{key:"loadPage",value:(l=s(u().mark((function e(t){var r,n,o=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=o.length>1&&void 0!==o[1]&&o[1],console.log("loadPage: "+t),e.next=4,this.getClassPageFromHash(t);case 4:n=e.sent,console.log("PageClass: ",n),this.currentPage=new n,console.log("this.currentPage: ",this.currentPage),this.currentPage.initialize(r);case 9:case"end":return e.stop()}}),e,this)}))),function(e){return l.apply(this,arguments)})},{key:"getClassPageFromHash",value:(o=s(u().mark((function e(t){var r,n;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.pages[t],console.log("pageJson: ",r),e.prev=2,e.next=5,y(r.pathModule);case 5:return n=e.sent,console.log("module: ",n),e.abrupt("return",n[r.name]);case 10:throw e.prev=10,e.t0=e.catch(2),console.error("Page not found:",t),e.t0;case 14:case"end":return e.stop()}}),e,this,[[2,10]])}))),function(e){return o.apply(this,arguments)})},{key:"initialize",value:function(){window.addEventListener("popstate",this.handlePopState.bind(this))}},{key:"handlePopState",value:function(e){this.loadPageCurrent()}},{key:"loadPageCurrent",value:function(){var e=i.A.getHashPageCurrent();this.loadPage(e)}},{key:"navigateToHash",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this.beforeLeave();var n=a.A.getUrlFromHash(e,r);history.pushState(t,"",n),a.A.goToUrl(n,t)}},{key:"beforeLeave",value:(n=s(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getClassPageFromHash(i.A.getHashPageCurrent());case 2:(new(0,e.sent)).leave();case 5:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})}],r=[{key:"loadPageBodyFromResponse",value:function(e){console.log(e.data),i.A.loadPageBody(e.data)}}],t&&f(e.prototype,t),r&&f(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,r,n,o,l}());function v(e){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},v(e)}function g(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;null==t&&(t=document.querySelector("form."+flagFilter+" button."+flagSave)),null==r&&(r=document.querySelector("form."+flagFilter+" button."+flagCancel)),e?(r.classList.remove(flagCollapsed),t.classList.remove(flagCollapsed)):(r.classList.add(flagCollapsed),t.classList.add(flagCollapsed))}}],l=[{key:"isDirtyFilter",value:function(e){var t=i.A.isElementDirty(e);return t&&document.querySelectorAll(idTableMain+" tbody tr").remove(),t}}],r&&g(t.prototype,r),l&&g(t,l),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,l}()},992:(e,t,r)=>{"use strict";r.r(t),r.d(t,{TableBasePage:()=>v});var n=r(782),o=r(900),a=r(255),i=r(143);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];if(this.constructor===t)throw new Error("Must implement initialize() method.");if(r){var n=this.getLocalStoragePage()[flagFormFilters],a=this.getFormFilters(),l=i.A.convertForm2JSON(a);o.A.areEqualDicts(n,l)}else this.sharedInitialize(),this.hookupFilters(),this.hookupButtonsAddSaveCancel(),this.hookupTableMain(),hookupOverlayConfirm((function(){e.leave(),e.saveRecordsTableDirty()}))}},{key:"hookupFilters",value:function(){if(this.constructor===t)throw new Error("Subclass of TableBasePage must implement method hookupFilters().");this.hookupButtonApplyFilters()}},{key:"hookupFilterActive",value:function(){n.A.initialiseEventHandler(idFormFilters+"."+flagActive,flagInitialised,(function(e){e.addEventListener("change",(function(r){t.isDirtyFilter(e)}))}))}},{key:"hookupButtonApplyFilters",value:function(){var e=this;n.A.initialiseEventHandler(idButtonApplyFilters,flagInitialised,(function(t){t.addEventListener("click",(function(t){t.stopPropagation(),e.getAndLoadFilteredTableContent()}))}))}},{key:"getAndLoadFilteredTableContent",value:function(){var e=this.getFormFilters(),t=i.A.convertForm2JSON(e);this.callFilterTableContent(t).catch((function(e){return console.error("Error:",e)}))}},{key:"getFormFilters",value:function(){return document.querySelector(idFormFilters)}},{key:"callbackLoadTableContent",value:function(e){this.getTableMain().querySelector("tbody").querySelectorAll("tr").forEach((function(e){e.remove()}));var t=e.data[flagRows];!o.A.isEmpty(t)&&t.every((function(e){return e.hasOwnProperty("display_order")}))&&(t=t.sort((function(e,t){return e.display_order-t.display_order}))),t.forEach(this.loadRowTable.bind(this)),this.hookupTableMain()}},{key:"getTableMain",value:function(){return document.querySelector(idTableMain)}},{key:"loadRowTable",value:function(e){throw new Error("Subclass of TableBasePage must implement method loadRowTable().")}},{key:"hookupButtonsAddSaveCancel",value:function(){this.hookupButtonSave(),this.hookupButtonCancel(),this.hookupButtonAddRowTable()}},{key:"saveRecordsTableDirty",value:function(){var e=this,t=this.getTableRecords(!0);if(0!=t.length){var r=this.getFormFilters(),n=i.A.getElementValueCurrent(document.querySelector(idTextareaConfirm));this.callSaveTableContent(t,r,n).then((function(t){t[flagStatus]==flagSuccess?(console.log("Data received:",t),e.callbackLoadTableContent(t),console.log("Records saved!")):showOverlayError(t[flagMessage])})).catch((function(e){return console.error("Error:",e)}))}else showOverlayError("No records to save")}},{key:"getTableRecords",value:function(){var e,t=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=this.getTableMain(),o=[];return n.querySelectorAll("tbody tr").forEach((function(n){r&&!n.classList.contains(flagDirty)||(e=t.getJsonRow(n),o.push(e))})),o}},{key:"getJsonRow",value:function(e){throw new Error("Subclass of TableBasePage must implement method getJsonRow().")}},{key:"hookupButtonCancel",value:function(){n.A.initialiseEventHandler(idFormFilters+" button."+flagCancel,flagInitialised,(function(e){e.addEventListener("click",(function(e){e.stopPropagation(),getAndLoadFilteredTableContent()})),e.classList.add(flagCollapsed)}))}},{key:"hookupButtonAddRowTable",value:function(){var e=this;n.A.initialiseEventHandler(idFormFilters+" button."+flagAdd,flagInitialised,(function(t){t.addEventListener("click",(function(t){t.stopPropagation();var r=document.querySelector(idTableMain+" tbody"),n=_rowBlank.cloneNode(!0);n.classList.remove(flagInitialised),n.querySelectorAll("."+flagInitialised).forEach((function(e){e.classList.remove(flagInitialised)}));var o=parseInt(r.querySelector("tr:last-child").querySelector("td."+flagDisplayOrder+" ."+flagSlider).getAttribute(attrValueCurrent))+1;r.appendChild(n);var a=r.querySelector("tr:last-child").querySelector("td."+flagDisplayOrder+" ."+flagSlider);a&&(a.setAttribute(attrValueCurrent,o),a.setAttribute(attrValuePrevious,o)),e.hookupTableMain()}))}))}},{key:"hookupTableMain",value:function(){if(this.constructor===t)throw new Error("Must implement hookupTableMain() method.");null==_rowBlank&&this.cacheRowBlank()}},{key:"cacheRowBlank",value:function(){var e=idTableMain+" tbody tr."+flagRowNew,t=document.querySelector(e);console.log("row blank temp: ",t),_rowBlank=t.cloneNode(!0),document.querySelectorAll(e).forEach((function(e){e.remove()}))}},{key:"hookupSlidersDisplayOrderTable",value:function(){var e=this,t=idTableMain+" tbody tr td."+flagDisplayOrder+" input."+flagSlider+"."+flagDisplayOrder;n.A.initialiseEventHandler(t,flagInitialised,(function(t){t.addEventListener("change",(function(r){console.log("slider change event"),e.handleChangeElementCellTable(t)}))}))}},{key:"hookupTextareasCodeTable",value:function(){var e=this,t=idTableMain+" tbody tr td."+flagCode+" textarea";n.A.initialiseEventHandler(t,flagInitialised,(function(t){t.addEventListener("change",(function(r){console.log("textarea change event"),e.handleChangeElementCellTable(t)}))}))}},{key:"handleChangeElementCellTable",value:function(e){var t=i.A.getRowFromElement(e),r=i.A.getCellFromElement(e);console.log("td: ",r);var n=this.isDirtyRow(t),o=e.classList.contains(flagDirty),a=i.A.isElementDirty(e);if(console.log("isDirtyElement: ",a),console.log("wasDirtyElement: ",o),a!=o){i.A.handleDirtyElement(r,a);var l=this.isDirtyRow(t);if(console.log("isNowDirtyRow: ",l),console.log("wasDirtyRow: ",n),l!=n){i.A.handleDirtyElement(t,l);var u=this.getTableRecords(!0),c=u.length>0;console.log("dirty records:",u),console.log("existsDirtyRecord:",c),this.toggleShowButtonsSaveCancel(c)}}}},{key:"isDirtyRow",value:function(e){throw new Error("Subclass of TableBasePage must implement method isDirtyRow().")}},{key:"toggleShowButtonsSaveCancel",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;null==t&&(t=document.querySelector(idFormFilters+" button."+flagSave)),null==r&&(r=document.querySelector(idFormFilters+" button."+flagCancel)),e?(r.classList.remove(flagCollapsed),t.classList.remove(flagCollapsed)):(r.classList.add(flagCollapsed),t.classList.add(flagCollapsed))}},{key:"handleChangeSelectCellTable",value:function(e){var t=i.A.getRowFromElement(e),r=i.A.getCellFromElement(e);console.log("td: ",r);var n=this.isDirtyRow(t),o=e.classList.contains(flagDirty),a=i.A.isElementDirty(e);if(console.log("isDirtyElement: ",a),console.log("wasDirtyElement: ",o),a!=o){i.A.handleDirtyElement(r,a);var l=e.options[e.selectedIndex];r.setAttribute(attrIdAccessLevel,l.value),r.setAttribute(flagAccessLevelRequired,l.textcontent);var u=this.isDirtyRow(t);if(console.log("isNowDirtyRow: ",u),console.log("wasDirtyRow: ",n),u!=n){i.A.handleDirtyElement(t,u);var c=this.getTableRecords(!0),s=c.length>0;console.log("dirty records:",c),console.log("existsDirtyRecord:",s),this.toggleShowButtonsSaveCancel(s)}}}},{key:"hookupTextareasNameTable",value:function(){var e=this,t=idTableMain+" tbody tr td."+flagName+" textarea";n.A.initialiseEventHandler(t,flagInitialised,(function(t){t.addEventListener("change",(function(r){console.log("textarea change event"),e.handleChangeElementCellTable(t)}))}))}},{key:"hookupTextareasDescriptionTable",value:function(){var e=this,t=idTableMain+" tbody tr td."+flagDescription+" textarea";n.A.initialiseEventHandler(t,flagInitialised,(function(t){t.addEventListener("change",(function(r){console.log("textarea change event"),e.handleChangeElementCellTable(t)}))}))}},{key:"hookupInputsActiveTable",value:function(){var e=this,t=idTableMain+" tbody tr td."+flagActive+' input[type="checkbox"]';n.A.initialiseEventHandler(t,flagInitialised,(function(t){t.addEventListener("change",(function(r){console.log("input change event"),e.handleChangeElementCellTable(t)}))}))}},{key:"hookupTdsAccessLevel",value:function(){var e=this;n.A.initialiseEventHandler(idTableMain+" tbody td."+flagAccessLevel,flagInitialised,(function(t){t.addEventListener("click",(function(t){e.handleClickTdAccessLevel(t)}))}))}},{key:"handleClickTdAccessLevel",value:function(e){console.log("tdAccessLevel clicked"),e.stopPropagation();var t=i.A.getCellFromElement(e.target);console.log("tdAccessLevel: ",t);var r=i.A.getRowFromElement(t),n=t.querySelector("div."+flagAccessLevel).getAttribute(attrIdAccessLevel),o=document.createElement("select");o.classList.add(flagAccessLevel),o.setAttribute(attrValueCurrent,n),o.setAttribute(attrValuePrevious,n),optionsAccessLevel.forEach((function(e){var t=document.createElement("option");t.value=e.value,t.textContent=e.text,e.value==n&&(t.selected=!0),o.appendChild(t)}));var a=t.cloneNode(!0);a.innerHTML="",a.appendChild(o),r.replaceChild(a,t),this.hookupDdlsAccessLevelTable()}},{key:"hookupDdlsAccessLevelTable",value:function(){var e=this;n.A.initialiseEventHandler(idTableMain+" tbody select."+flagAccessLevel,flagInitialised,(function(t){t.addEventListener("change",(function(r){r.stopPropagation(),e.handleChangeDdlAccessLevelTable(t)}))}))}},{key:"handleChangeDdlAccessLevelTable",value:function(e){var t=i.A.getRowFromElement(e),r=i.A.getCellFromElement(e);console.log("td: ",r);var n=this.isDirtyRow(t),o=e.classList.contains(flagDirty),a=i.A.isElementDirty(e);if(console.log("isDirtyElement: ",a),console.log("wasDirtyElement: ",o),a!=o){i.A.handleDirtyElement(r,a);var l=e.options[e.selectedIndex];r.setAttribute(attrIdAccessLevel,l.value),r.setAttribute(flagAccessLevelRequired,l.textcontent);var u=this.isDirtyRow(t);if(console.log("isNowDirtyRow: ",u),console.log("wasDirtyRow: ",n),u!=n){i.A.handleDirtyElement(t,u);var c=this.getTableRecords(!0),s=c.length>0;console.log("dirty records:",c),console.log("existsDirtyRecord:",s),this.toggleShowButtonsSaveCancel(s)}}}},{key:"leave",value:function(){if(this.constructor===t)throw new Error("Must implement leave() method.");var e,r,n;(e=t,r=this,"function"==typeof(n=d(y(1&3?e.prototype:e),"leave",r))?function(e){return n.apply(r,e)}:n)([]);var o=this.getFormFilters(),a={};a[flagFormFilters]=i.A.convertForm2JSON(o),this.setLocalStoragePage(a),_rowBlank=null}}],l=[{key:"isDirtyFilter",value:function(e){var t=i.A.isElementDirty(e);if(t){var r=document.querySelector(idTableMain+" tbody");r.querySelectorAll("tr").remove(),r.appendChild(document.createElement('
Press "Apply Filters" to refresh the table.
'))}return t}}],a&&u(r.prototype,a),l&&u(r,l),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,a,l}(a.BasePage)},623:(e,t,r)=>{"use strict";r.r(t),r.d(t,{PageAdminHome:()=>v});var n=r(782);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(e,t){for(var r=0;r{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;ry});var s,f,d,y=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),a(this,t)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}(t,e),r=t,(n=[{key:"initialize",value:function(){this.sharedInitialize()}}])&&o(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(r(255).BasePage);s=y,f="hash",d=hashPageContact,(f=c(f))in s?Object.defineProperty(s,f,{value:d,enumerable:!0,configurable:!0,writable:!0}):s[f]=d},835:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;rp});var f,d,y,p=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),a(this,t)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}(t,e),r=t,n=[{key:"initialize",value:function(){this.sharedInitialize(),this.hookupButtonNavContact()}},{key:"leave",value:function(){var e,r,n;(e=t,r=this,"function"==typeof(n=l(u(1&3?e.prototype:e),"leave",r))?function(e){return n.apply(r,e)}:n)([])}}],n&&o(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(r(255).BasePage);f=p,d="hash",y=hashPageHome,(d=s(d))in f?Object.defineProperty(f,d,{value:y,enumerable:!0,configurable:!0,writable:!0}):f[d]=y},312:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;rp});var f,d,y,p=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),a(this,t)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}(t,e),r=t,n=[{key:"initialize",value:function(){this.sharedInitialize()}},{key:"leave",value:function(){var e,r,n;(e=t,r=this,"function"==typeof(n=l(u(1&3?e.prototype:e),"leave",r))?function(e){return n.apply(r,e)}:n)([])}}],n&&o(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(r(255).BasePage);f=p,d="hash",y=hashPageServices,(d=s(d))in f?Object.defineProperty(f,d,{value:y,enumerable:!0,configurable:!0,writable:!0}):f[d]=y},916:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;rp});var f,d,y,p=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),a(this,t)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}(t,e),r=t,n=[{key:"initialize",value:function(){this.sharedInitialize()}},{key:"leave",value:function(){var e,r,n;(e=t,r=this,"function"==typeof(n=l(u(1&3?e.prototype:e),"leave",r))?function(e){return n.apply(r,e)}:n)([])}}],n&&o(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(r(255).BasePage);f=p,d="hash",y=hashPageAccessibilityStatement,(d=s(d))in f?Object.defineProperty(f,d,{value:y,enumerable:!0,configurable:!0,writable:!0}):f[d]=y},765:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;rp});var f,d,y,p=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),a(this,t)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}(t,e),r=t,n=[{key:"initialize",value:function(){this.sharedInitialize()}},{key:"leave",value:function(){var e,r,n;(e=t,r=this,"function"==typeof(n=l(u(1&3?e.prototype:e),"leave",r))?function(e){return n.apply(r,e)}:n)([])}}],n&&o(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(r(255).BasePage);f=p,d="hash",y=hashPageLicense,(d=s(d))in f?Object.defineProperty(f,d,{value:y,enumerable:!0,configurable:!0,writable:!0}):f[d]=y},173:(e,t,r)=>{"use strict";r.r(t),r.d(t,{StoreMixinPage:()=>s});var n=r(782),o=r(322),a=r(900),i=r(143);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(e,t){for(var r=0;r{"use strict";r.r(t),r.d(t,{PageStoreBasket:()=>g});var n=r(782),o=r(322);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function i(e,t){for(var r=0;r at "+r[keyPostcode]+"",document.querySelectorAll(idOverlayInfoBilling).css("display","none"),document.querySelectorAll(idOverlayInfoBilling).querySelector("form").classList.add(flagSubmitted)}else document.querySelectorAll(idContainerInfoDelivery).querySelector("div").innerHTML=""+r[keyNameFull]+" at "+r[keyPostcode]+"",document.querySelectorAll(idOverlayInfoDelivery).css("display","none"),document.querySelectorAll(idOverlayInfoDelivery).querySelector("form").classList.add(flagSubmitted)}},{key:"convertFormBilling2JSON",value:function(e,t){var r;r=document.querySelectorAll(t).querySelector("form"),r=document.querySelectorAll(idOverlayInfoDelivery).querySelector("form"),console.log("converting billing form to json\nform ID: "+r.id),e[keyForm]=convertForm2JSON(r);var n=[keyNameFull,keyPhoneNumber,keyPostcode,keyAddress1,keyAddress2,keyCity,keyCounty];for(var o in console.log("ajaxData:"),console.log(e),e[keyForm][keyInfoIdentical]=getElementCurrentValue(r.querySelector("#"+keyInfoIdentical)),n)t==idOverlayInfoBilling&&e[keyForm][keyInfoIdentical]?e[keyForm][n[o]]=getElementCurrentValue((void 0).querySelector("#"+n[o])):e[keyForm][n[o]]=getElementCurrentValue(r.querySelector("#"+n[o]));return console.log("ajaxData:"),console.log(e),e}},{key:"hookupButtonCheckoutSession",value:function(){var e=document.querySelectorAll(idButtonCheckout);e.classList.remove(flagInitialised),n.A.initialiseEventHandler(idButtonCheckout,flagInitialised,(function(){e.removeEventListener("click"),e.addEventListener("click",(function(e){var t=o.A.getLocalStorage(keyBasket),r={};r[keyBasket]=t,r=convertFormBilling2JSON(r,idOverlayInfoDelivery),(r=convertFormBilling2JSON(r,idOverlayInfoBilling))[key_code_currency]=getCurrencySelected(),ajaxJSONData("checkout session",mapHashToController(hashPageStoreCheckout),r,handleResponseCheckout,!1)}))}))}},{key:"handleResponseCheckout",value:function(e){window.location.href=e.data[keyUrlCheckout]}},{key:"hookupButtonFormBillingCopy",value:function(){n.A.initialiseEventHandler(idButtonFormBillingCopy,flagInitialised,(function(){document.querySelectorAll(idButtonFormBillingCopy).addEventListener("click",(function(e){var t=[keyNameFull,keyPhoneNumber,keyPostcode,keyAddress1,keyAddress2,keyCity,keyCounty],r=document.querySelectorAll(idOverlayInfoBilling).querySelector("form"),n=document.querySelectorAll(idOverlayInfoDelivery).querySelector("form");for(var o in t)r.querySelector("#"+t[o]).value=getElementCurrentValue(n.querySelector("#"+t[o]))}))}))}},{key:"leave",value:function(){var e,r,n;(e=t,r=this,"function"==typeof(n=c(s(1&3?e.prototype:e),"leave",r))?function(e){return n.apply(r,e)}:n)([])}}],a&&i(r.prototype,a),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,a}(r(255).BasePage);y=g,p="hash",v=hashPageStoreBasket,(p=d(p))in y?Object.defineProperty(y,p,{value:v,enumerable:!0,configurable:!0,writable:!0}):y[p]=v},771:(e,t,r)=>{"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var r=0;rp});var f,d,y,p=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),a(this,t)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c(e,t)}(t,e),r=t,n=[{key:"initialize",value:function(){this.sharedInitialize(),this.hookupFiltersStore(),this.hookupStoreHome()}},{key:"leave",value:function(){var e,r,n;(e=t,r=this,"function"==typeof(n=l(u(1&3?e.prototype:e),"leave",r))?function(e){return n.apply(r,e)}:n)([])}}],n&&o(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(r(255).BasePage);f=p,d="hash",y=hashPageStoreHome,(d=s(d))in f?Object.defineProperty(f,d,{value:y,enumerable:!0,configurable:!0,writable:!0}):f[d]=y},380:(e,t,r)=>{"use strict";r.r(t),r.d(t,{PageStoreProductCategories:()=>h});var n=r(782),o=r(992),a=r(595),i=r(143);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(e,t){for(var r=0;r{"use strict";r.r(t),r.d(t,{PageStoreProductPermutations:()=>v});var n=r(782),o=r(255),a=r(900);function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function l(e,t){for(var r=0;r",t))})),e.addEventListener("change",(function(e){loadPermutations()}))})),n.A.initialiseEventHandler(idFilterIsOutOfStock,flagInitialised,(function(e){e.addEventListener("change",(function(e){loadPermutations()}))})),n.A.initialiseEventHandler(idFilterQuantityMin,flagInitialised,(function(e){e.addEventListener("change",(function(e){loadPermutations()}))})),n.A.initialiseEventHandler(idFilterQuantityMax,flagInitialised,(function(e){e.addEventListener("change",(function(e){loadPermutations()}))}))}},{key:"loadPermutations",value:function(){var e=document.querySelectorAll(idFormFiltersPermutations),t={};t[keyForm]=convertForm2JSON(e),t.csrf_token=t[keyForm].csrf_token,console.log("ajaxData:"),console.log(t),ajaxJSONData("permutations",mapHashToController(hashPageStorePermutationsPost),t,callbackLoadPermutations,!1,{"X-CSRFToken":t.csrf_token})}},{key:"callbackLoadPermutations",value:function(e){console.log("ajax:"),console.log(e.data);var t,r,n,o=document.querySelectorAll(idTableMain);(t=o.querySelector("tbody")).querySelector("tr").remove(),e.data.forEach((function(e){r=_rowBlank.cloneNode(!0),(r=document.querySelectorAll(r)).classList.remove(flagRowNew),console.log("applying data row: ",e),r.querySelector("td."+flagCategory+" select").value=e[attrIdCategory],n=r.querySelector("td."+flagProduct+" select"),listProducts.forEach((function(t){t[attrIdCategory]==e[attrIdCategory]&&n.appendChild(document.createElement("