diff --git a/.gitignore b/.gitignore index 6161307aa..8a0103fe1 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* +.venv +.idea # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/.vscode/launch.json b/.vscode/launch.json index c7e3388fa..3793a31d2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,6 +1,16 @@ { "version": "0.2.0", "configurations": [ + + { + "name": "Attach by Process ID", + "processId": "${command:PickProcess}", + "request": "attach", + "skipFiles": [ + "/**" + ], + "type": "node" + }, { "name": "Pyright CLI", "type": "node", diff --git a/.vscode/settings.json b/.vscode/settings.json index d9091a02c..987ff083d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,7 +8,7 @@ "editor.formatOnSave": true }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" }, "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..79a9493b6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,43 @@ +# Start from a Node.js base image +FROM node:16-alpine + +# Install necessary dependencies for building Python +RUN apk add --no-cache \ + git \ + build-base \ + openssl-dev \ + zlib-dev \ + bzip2-dev \ + readline-dev \ + sqlite-dev \ + xz-dev \ + tk-dev \ + libffi-dev \ + ncurses-dev \ + linux-headers + +# Download, extract, and install Python 3.12 +RUN wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz && \ + tar -xf Python-3.12.0.tar.xz && \ + cd Python-3.12.0 && \ + ./configure --enable-optimizations && \ + make -j$(nproc) && \ + make install && \ + cd .. && \ + rm -rf Python-3.12.0 Python-3.12.0.tar.xz && \ + ln -sf /usr/local/bin/python3.12 /usr/local/bin/python && \ + ln -sf /usr/local/bin/pip3.12 /usr/local/bin/pip + +# Upgrade pip +RUN pip3.12 install --upgrade pip + +# Add your required files +ADD packages/pyright-scip/sourcegraph-scip-python-0.6.0.tgz / + +RUN npm --prefix /package install +COPY index.py / + +WORKDIR /projects/data + +# Set entrypoint +ENTRYPOINT ["python", "/index.py"] diff --git a/Dockerfile.autoindex b/Dockerfile.autoindex deleted file mode 100644 index 57be6461e..000000000 --- a/Dockerfile.autoindex +++ /dev/null @@ -1,6 +0,0 @@ -FROM nikolaik/python-nodejs:python3.10-nodejs16-alpine@sha256:fcbc543f7d4016679e2e6e8ec6345170f33426103dca9153068caaa9490d2fdd - -RUN apk add --no-cache git bash curl -RUN npm install -g @sourcegraph/scip-python @sourcegraph/src - -CMD ["/bin/sh"] diff --git a/index-old.py b/index-old.py new file mode 100644 index 000000000..aca81f2cb --- /dev/null +++ b/index-old.py @@ -0,0 +1,84 @@ +import argparse +import subprocess +from pathlib import Path +import tomllib # Use tomllib for Python 3.11+, or install toml for older versions + + +def matches_pattern(package, patterns): + """Check if a package matches any of the specified patterns.""" + return any(pattern.lower() in package.lower() for pattern in patterns) + + +def install_package(package_with_constraints): + """Attempt to install a package with constraints using pip.""" + print(f"Installing package: {package_with_constraints}") + try: + subprocess.run(["pip", "install", package_with_constraints], check=True) + except subprocess.CalledProcessError: + print(f"Failed to install {package_with_constraints}, continuing...") + + +def extract_dependencies(data, patterns): + """Recursively search for dependencies in nested data structures.""" + if isinstance(data, list): + for item in data: + # Match package names in a list + if isinstance(item, str): + package_name = item.split(" ", 1)[0] + if matches_pattern(package_name, patterns): + yield item + elif isinstance(data, dict): + for key, value in data.items(): + # Recurse into dictionaries + yield from extract_dependencies(value, patterns) + + +def process_pyproject_file(pyproject_file, patterns): + """Process a pyproject.toml file and install matching packages.""" + print(f"Processing pyproject.toml: {pyproject_file}") + with open(pyproject_file, "rb") as file: + pyproject_data = tomllib.load(file) + + # Extract all dependencies recursively + for dependency in extract_dependencies(pyproject_data, patterns): + install_package(dependency) + + +def process_requirements_file(req_file, patterns): + """Process a requirements file and install matching packages.""" + print(f"Processing file: {req_file}") + with open(req_file, "r") as file: + for line in file: + package = line.strip() + # Ignore comments and empty lines + if not package or package.startswith("#"): + continue + # Install only if package matches any of the patterns + if matches_pattern(package, patterns): + install_package(package) + + +def main(index_name, patterns): + """Main function to process files and run SCIP indexing command.""" + # Process requirements-like files + for req_file in Path(".").rglob("requirements*.txt"): + process_requirements_file(req_file, patterns) + + # Process pyproject.toml files + for pyproject_file in Path(".").rglob("pyproject.toml"): + process_pyproject_file(pyproject_file, patterns) + + # Run the SCIP indexing command + print("Running SCIP indexing command...") + subprocess.run(["node", "/package/index.js", "index", ".", + "--project-version=0.1.0", f"--output={index_name}"], check=True) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Install specific packages from requirements and pyproject.toml files") + parser.add_argument("index_name", help="The index name for SCIP indexing command") + parser.add_argument("patterns", nargs="+", help="Patterns to match package names (e.g., 'flask')") + args = parser.parse_args() + + # Run main with index name and patterns + main(args.index_name, args.patterns) diff --git a/index.py b/index.py new file mode 100644 index 000000000..3685bcd8e --- /dev/null +++ b/index.py @@ -0,0 +1,195 @@ +import argparse +import subprocess +import os +import venv +from pathlib import Path +import tomllib # Use tomllib for Python 3.11+, or install toml for older versions + + +def matches_pattern(package, patterns): + """Check if a package matches any of the specified patterns.""" + return any(pattern.lower() in package.lower() for pattern in patterns) + + + +def setup_virtual_environment(project_path): + """Create a virtual environment in the specified directory.""" + venv_path = project_path / '.venv' + print(f"Creating virtual environment at: {venv_path}") + venv.create(venv_path, with_pip=True) + # subprocess.run([sys.executable, '-m', 'venv', str(venv_path)], check=True) + return venv_path + +def activate_virtual_environment(venv_path): + """Activate the virtual environment by adjusting the environment variables.""" + venv_bin = venv_path / 'bin' + os.environ['VIRTUAL_ENV'] = str(venv_path) + os.environ['PATH'] = f"{venv_bin}:{os.environ['PATH']}" + print(f"Virtual environment activated: {os.environ['VIRTUAL_ENV']}") + print(f"Updated PATH: {os.environ['PATH']}") + return venv_bin / 'python' + +def install_package(package_with_constraints, venv_python): + """Attempt to install a package with constraints using pip within the virtual environment.""" + print(f"Installing package: {package_with_constraints}") + try: + result = subprocess.run( + [venv_python, "-m", "pip", "install", package_with_constraints], + check=True, + capture_output=True, + text=True, + ) + print(result.stdout) + print(result.stderr) + except subprocess.CalledProcessError as e: + print(f"Failed to install {package_with_constraints}. Error: {e.stderr}") + + +def extract_dependencies(data, patterns): + """Recursively search for dependencies in nested data structures.""" + if isinstance(data, list): + for item in data: + # Match package names in a list + if isinstance(item, str): + if matches_pattern(item, patterns): + yield item + elif isinstance(data, dict): + for key, value in data.items(): + yield from extract_dependencies(key, patterns) + # Recurse into dictionaries + yield from extract_dependencies(value, patterns) + elif isinstance(data, str): + if matches_pattern(data, patterns): + yield data + + +def process_pyproject_file(pyproject_file, patterns, venv_python): + """Process a pyproject.toml file and install matching packages.""" + print(f"Processing pyproject.toml: {pyproject_file}") + with open(pyproject_file, "rb") as file: + pyproject_data = tomllib.load(file) + + # Extract all dependencies recursively + for dependency in extract_dependencies(pyproject_data, patterns): + install_package(dependency, venv_python) + + +def _iter_requirements_lines(req_file: Path, visited: set[Path]): + req_file = req_file.resolve() + if req_file in visited: + return + visited.add(req_file) + + print(f"Processing file: {req_file}") + + try: + # Try UTF-8 first, fallback to latin-1 to avoid crash + try: + data = req_file.read_text(encoding="utf-8") + except UnicodeDecodeError: + print(f"⚠️ {req_file} is not UTF-8. Falling back to latin-1.") + data = req_file.read_text(encoding="latin-1") + + for raw in data.splitlines(): + line = raw.strip() + if not line or line.startswith("#"): + continue + + # Remove inline comments unless it's part of a URL + if "#" in line and not line.lower().startswith(("http://", "https://")): + line = line.split("#", 1)[0].strip() + if not line: + continue + + # -r / --requirement include + if line.startswith("-r ") or line.startswith("--requirement "): + parts = line.split(maxsplit=1) + if len(parts) == 2: + include_path = parts[1].strip().strip("'\"") + include_file = (req_file.parent / include_path).resolve() + if include_file.exists(): + yield from _iter_requirements_lines(include_file, visited) + else: + print(f"Included file not found: {include_file}") + continue + + # Skip constraints + if line.startswith("-c ") or line.startswith("--constraint "): + continue + + yield line + + except FileNotFoundError: + print(f"⚠️ Requirements file not found: {req_file}") + + + +def process_requirements_file(req_file: Path, patterns, venv_python): + """ + Process a requirements file, following -r includes recursively. + Only install specs that match any of the provided patterns. + """ + visited: set[Path] = set() + for spec in _iter_requirements_lines(req_file, visited): + if matches_pattern(spec, patterns): + install_package(spec, venv_python) + + +def process_project(path, patterns): + """Process the project: set up venv, install packages, and run Node.js script.""" + project_path = Path(path).resolve() + venv_path = setup_virtual_environment(project_path) + venv_python = activate_virtual_environment(venv_path) + + # Copy the current environment and update it for the virtual environment + env = os.environ.copy() + + try: + # Install a test package or requirement to verify pip functionality + print("Verifying pip functionality in the virtual environment...") + subprocess.run( + [venv_python, "-m", "pip", "--version"], + check=True, + capture_output=True, + env=env, + ) + + # Process requirements-like files + for req_file in Path(path).rglob("requirements*.txt"): + process_requirements_file(req_file, patterns, venv_python) + + # Process pyproject.toml files + for pyproject_file in Path(path).rglob("pyproject.toml"): + process_pyproject_file(pyproject_file, patterns, venv_python) + + # Run the indexer + print("Running SCIP indexing command...") + result = subprocess.run( + ["node", "/package/index.js", "index", ".", "--project-version=0.1.0", "--output=python.scip"], + cwd=path, + env=env, + check=True, + capture_output=True, + text=True, + ) + print("Indexer output:") + print(result.stdout) + print(result.stderr) + except subprocess.CalledProcessError as e: + print(f"Command '{e.cmd}' failed with exit code {e.returncode}. Error output:\n{e.stderr}\nStandard output:\n{e.stdout}") + except Exception as e: + print(f"An error occurred: {e}") + finally: + print("Deactivating virtual environment.") + os.environ.pop('VIRTUAL_ENV', None) + os.environ['PATH'] = os.environ['PATH'].split(":", 1)[1] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Install specific packages from requirements and pyproject.toml files") + parser.add_argument("path", help="Relative path to project") + parser.add_argument("patterns", nargs="+", help="Patterns to match package names (e.g., 'flask')") + args = parser.parse_args() + + # Run main with index name and patterns + process_project(args.path, args.patterns) diff --git a/index.scip b/index.scip new file mode 100644 index 000000000..2d530493f --- /dev/null +++ b/index.scip @@ -0,0 +1,3 @@ + +C + scip-python0.6.0)file:///Users/oinger/Projects/scip-python  \ No newline at end of file diff --git a/packages/pyright-internal/package-lock.json b/packages/pyright-internal/package-lock.json index 2ea1038bf..40486c21b 100644 --- a/packages/pyright-internal/package-lock.json +++ b/packages/pyright-internal/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "pyright-internal", "version": "1.1.301", "license": "MIT", "dependencies": { diff --git a/packages/pyright-internal/package.json b/packages/pyright-internal/package.json index 6ef8e546a..3c571893d 100644 --- a/packages/pyright-internal/package.json +++ b/packages/pyright-internal/package.json @@ -12,6 +12,7 @@ "build": "tsc", "clean": "shx rm -rf ./dist ./out", "test": "jest --forceExit", + "typecheck": "tsc --noEmit", "test:coverage": "jest --forceExit --reporters=jest-junit --reporters=default --coverage --coverageReporters=cobertura --coverageReporters=html --coverageReporters=json" }, "dependencies": { diff --git a/packages/pyright-internal/src/analyzer/codeFlowEngine.ts b/packages/pyright-internal/src/analyzer/codeFlowEngine.ts index 8bea7ae3f..fd868f13f 100644 --- a/packages/pyright-internal/src/analyzer/codeFlowEngine.ts +++ b/packages/pyright-internal/src/analyzer/codeFlowEngine.ts @@ -1646,7 +1646,12 @@ export function getCodeFlowEngine( function getTypeFromWildcardImport(flowNode: FlowWildcardImport, name: string): Type { const importInfo = getImportInfo(flowNode.node.module); - assert(importInfo !== undefined && importInfo.isImportFound); + // If the module couldn't be resolved (for example, workspace layout + // doesn't include the package), don't throw a debug assertion here. + // Instead, fall back to Unknown so analysis can continue for other files. + if (importInfo === undefined || !importInfo.isImportFound) { + return UnknownType.create(); + } assert(flowNode.node.isWildcardImport); const symbolWithScope = evaluator.lookUpSymbolRecursive(flowNode.node, name, /* honorCodeFlow */ false); diff --git a/packages/pyright-internal/src/commands/dumpFileDebugInfoCommand.ts b/packages/pyright-internal/src/commands/dumpFileDebugInfoCommand.ts index 02e2628b3..a46a39beb 100644 --- a/packages/pyright-internal/src/commands/dumpFileDebugInfoCommand.ts +++ b/packages/pyright-internal/src/commands/dumpFileDebugInfoCommand.ts @@ -549,7 +549,8 @@ function getTypeCategoryString(typeCategory: TypeCategory, type: any) { } } -class TreeDumper extends ParseTreeWalker { +// NOTE(scip-python): Exported for use in scip-python debugging +export class TreeDumper extends ParseTreeWalker { private _indentation = ''; private _output = ''; diff --git a/packages/pyright-scip/LICENSE.txt b/packages/pyright-scip/LICENSE.txt new file mode 100644 index 000000000..0c5379779 --- /dev/null +++ b/packages/pyright-scip/LICENSE.txt @@ -0,0 +1,22 @@ +MIT License + +Pyright - A static type checker for the Python language +Copyright (c) Microsoft Corporation. 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 diff --git a/packages/pyright-scip/README.md b/packages/pyright-scip/README.md new file mode 100644 index 000000000..646e24d12 --- /dev/null +++ b/packages/pyright-scip/README.md @@ -0,0 +1,144 @@ +# scip-python + +Sourcegraph fork of [pyright](https://github.com/microsoft/pyright) focused on generating [SCIP](https://github.com/sourcegraph/scip) for python projects. + +Project is primarily an addition to Pyright. At this time, there are no substantial changes to the `pyright` library. + +## Pre-requisites + +``` +$ # Install scip-python +$ npm install -g @sourcegraph/scip-python +``` + +scip-python requires Node v16 or newer. See the [Dockerfile](https://github.com/sourcegraph/scip-python/blob/scip/Dockerfile.autoindex) for an exact SHA that is tested. + +scip-python uses `pip` to attempt to determine the versions and names of the packages available in your environment. If you do not use pip to install the packages, you can instead use the `--environment` flag to supply a list of packages to use as the environment. This will skip any calls out to pip to determine the state of your env. See [Environment](##-environment) for more information. + + +## Usage + +``` +$ npm install @sourcegraph/scip-python + +$ # NOTE: make sure to activate your virtual environment before running +$ scip-python index . --project-name=$MY_PROJECT + +$ # Make sure to point towards the sourcegraph instance you're interested in uploading to. +$ # more information at https://github.com/sourcegraph/src-cli +$ src code-intel upload +``` + +### target-only + +To run scip-python over only a particular directory, you can use the `--target-only` flag. Example: + +``` +$ scip-python index . --project-name=$MY_PROJECT --target-only=src/subdir +``` + +### project-namespace + +Additionally, if your project is loaded with some prefix, you can use the `--project-namespace` to put a namespace before all the generated symbols for this project. + +``` +$ scip-python index . --project-name=$MY_PROJECT --project-namespace=implicit.namespace +``` + +Now all symbols will have `implicit.namespace` prepended to their symbol, so that you can use it for cross repository navigation, even if the directory structure in your current project does not explicitly show `implicit/namespace/myproject/__init__.py`. + +## Environment + +The environment file format is a JSON list of `PythonPackage`s. The `PythonPackage` has the following form: + +```json +{ + "name": "PyYAML", + "version": "6.0", + "files": [ + "PyYAML-6.0.dist-info/INSTALLER", + ... + "yaml/__init__.py", + "yaml/composer.py", + "yaml/tokens.py", + ... + ] +}, +``` + +Where: +- `name`: + - The name of the package. Often times this is the same as the module, but is not always the case. + - For example, `PyYAML` is the name of the package, but the module is `yaml` (i.e. `import yaml`). +- `version`: + - The vesion of the package. This is used to generate stable references to external packages. +- `files`: + - A list of all the files that are a member of this package. + - Some packages declare multiple modules, so these should all be included. + +The environment file should be a list of these packages: + +```json +[ + { "name": "PyYAML", "version": "6.0", "files": [...] }, + { "name": "pytorch", "version": "3.0", "files": [..] }, + ... +] +``` + +To use the environment file, you should call scip-python like so: + +``` +$ scip-python index --project-name=$MY_PROJECT --environment=path/to/env.json +``` + +If you're just using pip, this should not be required. We should calculate this from the pip environment. If you experience any bugs, please report them. The goal is that we support standard pip installation without additional configuration. If there is other python tooling that can generate this information, you can file an issue and we'll see if we can support it as well. + +## Sourcegraph Example Configuration + +Using the usage example above may be quite simple to add a CI pipeline (perhaps using the `sourcegraph/scip-python:autoindex`) image +and uploading the corresponding index.scip file to Sourcegraph only for commits that you are intersted in (whether that's only HEAD +or every branch). + +However, if you're interested in using the Auto-Indexing feature, an example configuration skeleton can be found below: + +``` +{ + "index_jobs": [ + { + "indexer": "sourcegraph/scip-python:autoindex", + "local_steps": [ + "pip install . || true", + ], + "indexer_args": [ + "scip-python", "index", ".", + "--project-name", "", + "--project-version", "_" + ], + "steps": [], + "outfile": "", + "root": "" + } + ], + "shared_steps": [] +} +``` + +## To compare upstream from pyright + +You can go to the following [Sourcegraph +link](https://sourcegraph.com/github.com/sourcegraph/scip-python/-/compare/pyright-mirror...scip) +to compare the changes we've made from pyright. + +The changes are almost exclusively in the folder `packages/pyright-scip/` and various `package.json` files +due to adding some additional dependencies. + +In general, we've tried to make very little changes to anything inside of the pyright packages. +The only changes that are inside there at this point are: +- Not bail out of indexing if it's taking a long time +- Not throw away indexed files if memory usage gets high +- Allow parsing of some additional files + +## Contributing + +See [pyright-scip/CONTRIBUTING.md](./packages/pyright-scip/CONTRIBUTING.md). diff --git a/packages/pyright-scip/package-lock.json b/packages/pyright-scip/package-lock.json index ae15f319f..a5d52d5a7 100644 --- a/packages/pyright-scip/package-lock.json +++ b/packages/pyright-scip/package-lock.json @@ -15,6 +15,7 @@ "diff": "^5.0.0", "glob": "^7.2.0", "google-protobuf": "^3.19.3", + "pyright-internal": "file:/../pyright-internal", "ts-node": "^10.5.0", "vscode-languageserver": "^7.0.0" }, @@ -44,6 +45,39 @@ "webpack-cli": "^4.9.1" } }, + "../pyright-internal": { + "version": "1.1.301", + "license": "MIT", + "dependencies": { + "@iarna/toml": "2.2.5", + "@yarnpkg/fslib": "2.10.1", + "@yarnpkg/libzip": "2.2.4", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "command-line-args": "^5.2.1", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "source-map-support": "^0.5.21", + "tmp": "^0.2.1", + "typescript-char": "^0.0.0", + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver": "8.1.0", + "vscode-languageserver-textdocument": "^1.0.9", + "vscode-languageserver-types": "3.17.3", + "vscode-uri": "^3.0.7" + }, + "devDependencies": { + "@types/command-line-args": "^5.2.0", + "@types/jest": "^27.5.2", + "@types/node": "^17.0.45", + "@types/tmp": "^0.2.3", + "jest": "^27.5.1", + "jest-junit": "^13.2.0", + "shx": "^0.3.4", + "ts-jest": "^27.1.5", + "typescript": "~4.4.4" + } + }, "node_modules/@ampproject/remapping": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", @@ -105,22 +139,26 @@ } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -144,10 +182,11 @@ } }, "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -185,10 +224,11 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -295,10 +335,11 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -378,14 +419,16 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -393,8 +436,9 @@ "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -625,12 +669,15 @@ } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -658,12 +705,15 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -921,10 +971,11 @@ } }, "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -993,10 +1044,11 @@ } }, "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1033,10 +1085,11 @@ } }, "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1075,10 +1128,11 @@ } }, "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1114,10 +1168,11 @@ } }, "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1183,10 +1238,11 @@ } }, "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1255,10 +1311,11 @@ } }, "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1321,10 +1378,11 @@ } }, "node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1355,10 +1413,11 @@ } }, "node_modules/@jest/types/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1758,10 +1817,11 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -2171,9 +2231,25 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk/node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, "engines": { "node": ">=0.4.0" } @@ -2224,15 +2300,16 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -2495,10 +2572,11 @@ } }, "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -2847,8 +2925,9 @@ "node_modules/clean-regexp/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2981,9 +3060,10 @@ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "node_modules/commander": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", - "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } @@ -3163,12 +3243,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3262,9 +3343,10 @@ } }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -3514,8 +3596,9 @@ "node_modules/escodegen/node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -3544,7 +3627,7 @@ "node_modules/escodegen/node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -3563,8 +3646,9 @@ "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -3798,8 +3882,9 @@ "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" }, "node_modules/eslint-plugin-jest-dom": { "version": "3.9.4", @@ -3920,23 +4005,29 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -4316,10 +4407,11 @@ } }, "node_modules/expect/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -4370,6 +4462,13 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -4422,8 +4521,9 @@ "node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -4486,10 +4586,14 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/functional-red-black-tree": { "version": "1.0.1", @@ -4622,10 +4726,11 @@ "dev": true }, "node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "type-fest": "^0.20.2" @@ -4737,6 +4842,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -4830,10 +4948,11 @@ ] }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -4979,12 +5098,16 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5251,10 +5374,11 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5365,10 +5489,11 @@ } }, "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -5420,10 +5545,11 @@ } }, "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -5505,10 +5631,11 @@ } }, "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -5600,10 +5727,11 @@ } }, "node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -5621,10 +5749,20 @@ } }, "node_modules/jest-config/node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/jest-config/node_modules/pretty-format": { "version": "27.5.1", @@ -5726,10 +5864,11 @@ } }, "node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -5795,10 +5934,11 @@ } }, "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -5837,10 +5977,11 @@ } }, "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -5897,10 +6038,11 @@ } }, "node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -5950,10 +6092,11 @@ } }, "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6100,12 +6243,15 @@ } }, "node_modules/jest-message-util/node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -6128,10 +6274,11 @@ } }, "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6192,10 +6339,11 @@ } }, "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6278,10 +6426,11 @@ } }, "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6303,10 +6452,11 @@ } }, "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6360,10 +6510,11 @@ } }, "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6418,10 +6569,11 @@ } }, "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6498,10 +6650,11 @@ } }, "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6566,19 +6719,30 @@ } }, "node_modules/jest-util/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/jest-util/node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/jest-validate": { "version": "27.5.1", @@ -6614,10 +6778,11 @@ } }, "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6695,10 +6860,11 @@ } }, "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6810,10 +6976,11 @@ } }, "node_modules/jsdom/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -6859,10 +7026,11 @@ "peer": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -6957,8 +7125,9 @@ "node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -7022,10 +7191,11 @@ } }, "node_modules/log-symbols/node_modules/chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -7045,18 +7215,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/lz-string": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", @@ -7082,10 +7240,11 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -7192,10 +7351,11 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/multimap": { "version": "1.1.0", @@ -7240,10 +7400,11 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -7405,10 +7566,11 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "deep-is": "^0.1.3", @@ -7416,7 +7578,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -7446,10 +7608,11 @@ } }, "node_modules/ora/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7458,10 +7621,11 @@ } }, "node_modules/ora/node_modules/chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -7470,10 +7634,11 @@ } }, "node_modules/ora/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -7499,8 +7664,9 @@ "node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -7511,8 +7677,9 @@ "node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7557,8 +7724,9 @@ "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7793,6 +7961,10 @@ "node": ">=6" } }, + "node_modules/pyright-internal": { + "resolved": "../pyright-internal", + "link": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7965,7 +8137,7 @@ "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { "resolve": "^1.1.6" @@ -8061,12 +8233,13 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -8233,15 +8406,16 @@ } }, "node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -8252,15 +8426,16 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -8286,13 +8461,11 @@ "dev": true }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -8431,8 +8604,9 @@ "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -8637,8 +8811,9 @@ "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -8725,16 +8900,17 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -8826,10 +9002,11 @@ } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -8853,10 +9030,11 @@ } }, "node_modules/terser/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -8871,10 +9049,11 @@ "dev": true }, "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -9073,9 +9252,10 @@ } }, "node_modules/ts-node/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -9115,10 +9295,11 @@ } }, "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -9127,10 +9308,11 @@ } }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "dev": true, + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -9302,10 +9484,11 @@ } }, "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -9557,10 +9740,11 @@ } }, "node_modules/webpack/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -9578,10 +9762,11 @@ } }, "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -9662,10 +9847,11 @@ "dev": true }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9752,35 +9938,46 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { "node": ">=12" } @@ -9843,18 +10040,20 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -9871,9 +10070,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -9902,9 +10101,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -9987,9 +10186,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true }, "@babel/helper-validator-option": { @@ -10052,19 +10251,19 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { @@ -10232,12 +10431,14 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } } } @@ -10261,12 +10462,14 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "globals": { @@ -10467,9 +10670,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -10527,9 +10730,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -10563,9 +10766,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -10601,9 +10804,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -10636,9 +10839,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -10693,9 +10896,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -10754,9 +10957,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -10813,9 +11016,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -10843,9 +11046,9 @@ }, "dependencies": { "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -11219,9 +11422,9 @@ "dev": true }, "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -11536,9 +11739,19 @@ "requires": {} }, "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "requires": { + "acorn": "^8.11.0" + }, + "dependencies": { + "acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==" + } + } }, "agent-base": { "version": "6.0.2", @@ -11571,15 +11784,15 @@ }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, "json-schema-traverse": { @@ -11774,9 +11987,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -12029,7 +12242,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true } } @@ -12132,9 +12345,9 @@ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "commander": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", - "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==" + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" }, "comment-parser": { "version": "0.7.6", @@ -12267,12 +12480,12 @@ } }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "decamelize": { @@ -12337,9 +12550,9 @@ "dev": true }, "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==" }, "diff-sequences": { "version": "27.5.1", @@ -12525,7 +12738,7 @@ "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "requires": { "prelude-ls": "~1.1.2", @@ -12549,7 +12762,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, "source-map": { @@ -12562,7 +12775,7 @@ "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "requires": { "prelude-ls": "~1.1.2" @@ -12794,7 +13007,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } @@ -12877,19 +13090,20 @@ } }, "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -13129,9 +13343,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -13181,6 +13395,12 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true + }, "fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -13227,7 +13447,7 @@ "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "requires": { "locate-path": "^2.0.0" @@ -13275,9 +13495,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "functional-red-black-tree": { @@ -13372,9 +13592,9 @@ "dev": true }, "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "peer": true, "requires": { @@ -13451,6 +13671,15 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -13515,9 +13744,9 @@ "dev": true }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true }, "import-fresh": { @@ -13616,12 +13845,12 @@ "dev": true }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.2" } }, "is-date-object": { @@ -13798,9 +14027,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -13881,9 +14110,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -13932,9 +14161,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -13993,9 +14222,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14070,9 +14299,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14085,9 +14314,9 @@ "dev": true }, "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true }, "pretty-format": { @@ -14170,9 +14399,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14226,9 +14455,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14264,9 +14493,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14315,9 +14544,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14364,9 +14593,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14481,12 +14710,14 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "@jest/types": { @@ -14503,9 +14734,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14554,9 +14785,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14609,9 +14840,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14644,9 +14875,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14697,9 +14928,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14751,9 +14982,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14821,9 +15052,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14876,18 +15107,18 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true } } @@ -14920,9 +15151,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -14982,9 +15213,9 @@ } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -15072,9 +15303,9 @@ }, "dependencies": { "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true } } @@ -15111,9 +15342,9 @@ "peer": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsx-ast-utils": { @@ -15185,7 +15416,7 @@ "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "requires": { "p-locate": "^2.0.0", @@ -15241,9 +15472,9 @@ }, "dependencies": { "chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true } } @@ -15257,15 +15488,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "lz-string": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", @@ -15282,9 +15504,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -15367,9 +15589,9 @@ "dev": true }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "multimap": { @@ -15415,9 +15637,9 @@ }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true } } @@ -15534,9 +15756,9 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "peer": true, "requires": { @@ -15545,7 +15767,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" } }, "ora": { @@ -15566,21 +15788,21 @@ }, "dependencies": { "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true }, "chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true }, "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" @@ -15600,7 +15822,7 @@ "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "requires": { "p-limit": "^1.1.0" @@ -15609,7 +15831,7 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true }, "parent-module": { @@ -15643,7 +15865,7 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true }, "path-is-absolute": { @@ -15820,6 +16042,36 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "pyright-internal": { + "version": "file:../pyright-internal", + "requires": { + "@iarna/toml": "2.2.5", + "@types/command-line-args": "^5.2.0", + "@types/jest": "^27.5.2", + "@types/node": "^17.0.45", + "@types/tmp": "^0.2.3", + "@yarnpkg/fslib": "2.10.1", + "@yarnpkg/libzip": "2.2.4", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "command-line-args": "^5.2.1", + "jest": "^27.5.1", + "jest-junit": "^13.2.0", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "shx": "^0.3.4", + "source-map-support": "^0.5.21", + "tmp": "^0.2.1", + "ts-jest": "^27.1.5", + "typescript": "~4.4.4", + "typescript-char": "^0.0.0", + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver": "8.1.0", + "vscode-languageserver-textdocument": "^1.0.9", + "vscode-languageserver-types": "3.17.3", + "vscode-uri": "^3.0.7" + } + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -15943,7 +16195,7 @@ "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "requires": { "resolve": "^1.1.6" @@ -16009,12 +16261,12 @@ "dev": true }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -16129,27 +16381,27 @@ } }, "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, "ajv-keywords": { @@ -16170,13 +16422,10 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true }, "serialize-javascript": { "version": "6.0.0", @@ -16276,7 +16525,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true }, "source-map-support": { @@ -16446,7 +16695,7 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-final-newline": { @@ -16507,16 +16756,16 @@ }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "peer": true, "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, "json-schema-traverse": { @@ -16557,9 +16806,9 @@ }, "dependencies": { "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true }, "commander": { @@ -16569,9 +16818,9 @@ "dev": true }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true } } @@ -16590,9 +16839,9 @@ }, "dependencies": { "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -16730,9 +16979,9 @@ }, "dependencies": { "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==" }, "diff": { "version": "4.0.2", @@ -16754,9 +17003,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -16776,9 +17025,9 @@ } }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", "dev": true }, "tsutils": { @@ -16908,9 +17157,9 @@ }, "dependencies": { "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true } } @@ -17037,9 +17286,9 @@ }, "dependencies": { "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true }, "acorn-import-assertions": { @@ -17050,9 +17299,9 @@ "requires": {} }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -17176,9 +17425,9 @@ "dev": true }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true }, "wrap-ansi": { @@ -17240,31 +17489,38 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + } } }, "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, "yn": { diff --git a/packages/pyright-scip/package.json b/packages/pyright-scip/package.json index 048aaeb44..c586b9b58 100644 --- a/packages/pyright-scip/package.json +++ b/packages/pyright-scip/package.json @@ -11,7 +11,8 @@ "update-snapshots": "node --enable-source-maps ./index-test.js", "test": "jest --forceExit --detectOpenHandles", "webpack": "webpack --mode development --progress", - "watch": "webpack --mode development --progress --watch" + "watch": "webpack --mode development --progress --watch", + "debug": "ts-node src/main.ts index ." }, "author": "Sourcegraph", "repository": { @@ -50,7 +51,8 @@ "glob": "^7.2.0", "google-protobuf": "^3.19.3", "ts-node": "^10.5.0", - "vscode-languageserver": "^7.0.0" + "vscode-languageserver": "^7.0.0", + "pyright-internal": "file:/../pyright-internal" }, "files": [ "/dist", diff --git a/packages/pyright-scip/package/LICENSE.txt b/packages/pyright-scip/package/LICENSE.txt new file mode 100644 index 000000000..0c5379779 --- /dev/null +++ b/packages/pyright-scip/package/LICENSE.txt @@ -0,0 +1,22 @@ +MIT License + +Pyright - A static type checker for the Python language +Copyright (c) Microsoft Corporation. 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 diff --git a/packages/pyright-scip/package/README.md b/packages/pyright-scip/package/README.md new file mode 100644 index 000000000..646e24d12 --- /dev/null +++ b/packages/pyright-scip/package/README.md @@ -0,0 +1,144 @@ +# scip-python + +Sourcegraph fork of [pyright](https://github.com/microsoft/pyright) focused on generating [SCIP](https://github.com/sourcegraph/scip) for python projects. + +Project is primarily an addition to Pyright. At this time, there are no substantial changes to the `pyright` library. + +## Pre-requisites + +``` +$ # Install scip-python +$ npm install -g @sourcegraph/scip-python +``` + +scip-python requires Node v16 or newer. See the [Dockerfile](https://github.com/sourcegraph/scip-python/blob/scip/Dockerfile.autoindex) for an exact SHA that is tested. + +scip-python uses `pip` to attempt to determine the versions and names of the packages available in your environment. If you do not use pip to install the packages, you can instead use the `--environment` flag to supply a list of packages to use as the environment. This will skip any calls out to pip to determine the state of your env. See [Environment](##-environment) for more information. + + +## Usage + +``` +$ npm install @sourcegraph/scip-python + +$ # NOTE: make sure to activate your virtual environment before running +$ scip-python index . --project-name=$MY_PROJECT + +$ # Make sure to point towards the sourcegraph instance you're interested in uploading to. +$ # more information at https://github.com/sourcegraph/src-cli +$ src code-intel upload +``` + +### target-only + +To run scip-python over only a particular directory, you can use the `--target-only` flag. Example: + +``` +$ scip-python index . --project-name=$MY_PROJECT --target-only=src/subdir +``` + +### project-namespace + +Additionally, if your project is loaded with some prefix, you can use the `--project-namespace` to put a namespace before all the generated symbols for this project. + +``` +$ scip-python index . --project-name=$MY_PROJECT --project-namespace=implicit.namespace +``` + +Now all symbols will have `implicit.namespace` prepended to their symbol, so that you can use it for cross repository navigation, even if the directory structure in your current project does not explicitly show `implicit/namespace/myproject/__init__.py`. + +## Environment + +The environment file format is a JSON list of `PythonPackage`s. The `PythonPackage` has the following form: + +```json +{ + "name": "PyYAML", + "version": "6.0", + "files": [ + "PyYAML-6.0.dist-info/INSTALLER", + ... + "yaml/__init__.py", + "yaml/composer.py", + "yaml/tokens.py", + ... + ] +}, +``` + +Where: +- `name`: + - The name of the package. Often times this is the same as the module, but is not always the case. + - For example, `PyYAML` is the name of the package, but the module is `yaml` (i.e. `import yaml`). +- `version`: + - The vesion of the package. This is used to generate stable references to external packages. +- `files`: + - A list of all the files that are a member of this package. + - Some packages declare multiple modules, so these should all be included. + +The environment file should be a list of these packages: + +```json +[ + { "name": "PyYAML", "version": "6.0", "files": [...] }, + { "name": "pytorch", "version": "3.0", "files": [..] }, + ... +] +``` + +To use the environment file, you should call scip-python like so: + +``` +$ scip-python index --project-name=$MY_PROJECT --environment=path/to/env.json +``` + +If you're just using pip, this should not be required. We should calculate this from the pip environment. If you experience any bugs, please report them. The goal is that we support standard pip installation without additional configuration. If there is other python tooling that can generate this information, you can file an issue and we'll see if we can support it as well. + +## Sourcegraph Example Configuration + +Using the usage example above may be quite simple to add a CI pipeline (perhaps using the `sourcegraph/scip-python:autoindex`) image +and uploading the corresponding index.scip file to Sourcegraph only for commits that you are intersted in (whether that's only HEAD +or every branch). + +However, if you're interested in using the Auto-Indexing feature, an example configuration skeleton can be found below: + +``` +{ + "index_jobs": [ + { + "indexer": "sourcegraph/scip-python:autoindex", + "local_steps": [ + "pip install . || true", + ], + "indexer_args": [ + "scip-python", "index", ".", + "--project-name", "", + "--project-version", "_" + ], + "steps": [], + "outfile": "", + "root": "" + } + ], + "shared_steps": [] +} +``` + +## To compare upstream from pyright + +You can go to the following [Sourcegraph +link](https://sourcegraph.com/github.com/sourcegraph/scip-python/-/compare/pyright-mirror...scip) +to compare the changes we've made from pyright. + +The changes are almost exclusively in the folder `packages/pyright-scip/` and various `package.json` files +due to adding some additional dependencies. + +In general, we've tried to make very little changes to anything inside of the pyright packages. +The only changes that are inside there at this point are: +- Not bail out of indexing if it's taking a long time +- Not throw away indexed files if memory usage gets high +- Allow parsing of some additional files + +## Contributing + +See [pyright-scip/CONTRIBUTING.md](./packages/pyright-scip/CONTRIBUTING.md). diff --git a/packages/pyright-scip/package/index.js b/packages/pyright-scip/package/index.js new file mode 100755 index 000000000..995ef7289 --- /dev/null +++ b/packages/pyright-scip/package/index.js @@ -0,0 +1,8 @@ +#!/usr/bin/env node +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// @ts-nocheck + +// Stash the base directory into a global variable. +global.__rootDirectory = __dirname + '/dist/'; + +require('./dist/scip-python'); diff --git a/packages/pyright-scip/package/package.json b/packages/pyright-scip/package/package.json new file mode 100644 index 000000000..c586b9b58 --- /dev/null +++ b/packages/pyright-scip/package/package.json @@ -0,0 +1,64 @@ +{ + "name": "@sourcegraph/scip-python", + "version": "0.6.0", + "description": "SCIP indexer for Python", + "main": "index.js", + "scripts": { + "build": "webpack --mode production --progress", + "clean": "shx rm -rf ./dist ./out README.md LICENSE.txt", + "prepack": "npm run clean && shx cp ../../README.md . && shx cp ../../LICENSE.txt . && npm run build", + "check-snapshots": "npm run update-snapshots -- --check", + "update-snapshots": "node --enable-source-maps ./index-test.js", + "test": "jest --forceExit --detectOpenHandles", + "webpack": "webpack --mode development --progress", + "watch": "webpack --mode development --progress --watch", + "debug": "ts-node src/main.ts index ." + }, + "author": "Sourcegraph", + "repository": { + "type": "git", + "url": "https://github.com/sourcegraph/scip-python", + "directory": "packages/pyright-scip/" + }, + "license": "MIT", + "devDependencies": { + "@sourcegraph/eslint-config": "0.26.0", + "@sourcegraph/prettierrc": "3.0.3", + "@sourcegraph/tsconfig": "4.0.1", + "@types/command-exists": "^1.2.0", + "@types/diff": "^5.0.2", + "@types/glob": "^7.2.0", + "@types/google-protobuf": "^3.15.5", + "@types/jest": "^27.5.0", + "@types/ora": "^3.2.0", + "clean-terminal-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^10.2.0", + "jest": "^27.4.7", + "jest-junit": "^13.0.0", + "shx": "^0.3.3", + "ts-jest": "^27.1.3", + "ts-loader": "^9.2.6", + "tsconfig-paths-webpack-plugin": "^3.5.2", + "typescript": "^4.5.4", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1" + }, + "dependencies": { + "@iarna/toml": "^2.2.5", + "command-exists": "^1.2.9", + "commander": "^9.2.0", + "diff": "^5.0.0", + "glob": "^7.2.0", + "google-protobuf": "^3.19.3", + "ts-node": "^10.5.0", + "vscode-languageserver": "^7.0.0", + "pyright-internal": "file:/../pyright-internal" + }, + "files": [ + "/dist", + "LICENSE.txt" + ], + "bin": { + "scip-python": "index.js" + } +} diff --git a/packages/pyright-scip/run.sh b/packages/pyright-scip/run.sh new file mode 100644 index 000000000..c813e042a --- /dev/null +++ b/packages/pyright-scip/run.sh @@ -0,0 +1,11 @@ +#!/bin/bash +#source ~/Projects/scip-python/.venv/bin/activate +#cd ~/Projects/source_code_analysis_llm/example_projects/23 +#node ~/Projects/scip-python/packages/pyright-scip/index.js index . + + +source ~/Projects/scip-python/.venv/bin/activate +cd ~/Projects/source_code_analysis_llm/example_projects/23 +cat requirements.txt | xargs -n 1 pip install + +node ~/Projects/scip-python/packages/pyright-scip/index.js index . diff --git a/packages/pyright-scip/snapshots/input/graph_1278/mwe.py b/packages/pyright-scip/snapshots/input/graph_1278/mwe.py new file mode 100644 index 000000000..bdafcec6b --- /dev/null +++ b/packages/pyright-scip/snapshots/input/graph_1278/mwe.py @@ -0,0 +1,21 @@ +from typing import TypeVar, Generic, Callable, Iterator, ParamSpec + +_T_co = TypeVar("_T_co") +_P = ParamSpec("_P") + +class X(Generic[_T_co]): + pass + +def decorate(func: Callable[_P, Iterator[_T_co]]) -> Callable[_P, X[_T_co]]: ... + +class Foo: + @decorate + def foo(self) -> Iterator[None]: ... + +@decorate +def noop(): + yield + +class FooImpl(Foo): + def foo(self): + return noop() \ No newline at end of file diff --git a/packages/pyright-scip/snapshots/input/unique/inherits_class.py b/packages/pyright-scip/snapshots/input/unique/inherits_class.py index ad5d43695..0c2707555 100644 --- a/packages/pyright-scip/snapshots/input/unique/inherits_class.py +++ b/packages/pyright-scip/snapshots/input/unique/inherits_class.py @@ -2,14 +2,14 @@ class A: def x(self) -> int: raise NotImplemented - def unmatched(self, x: int): + def matched_despite_different_type(self, x: int): pass class B(A): def x(self) -> int: return 5 - def unmatched(self, x: int, y: int): + def matched_despite_different_type(self, x: int, y: int): pass def unrelated(self): diff --git a/packages/pyright-scip/snapshots/output/graph_1278/mwe.py b/packages/pyright-scip/snapshots/output/graph_1278/mwe.py new file mode 100644 index 000000000..dede5734e --- /dev/null +++ b/packages/pyright-scip/snapshots/output/graph_1278/mwe.py @@ -0,0 +1,61 @@ +# < definition scip-python python snapshot-util 0.1 mwe/__init__: + +from typing import TypeVar, Generic, Callable, Iterator, ParamSpec +# ^^^^^^ reference python-stdlib 3.11 typing/__init__: +# ^^^^^^^ reference python-stdlib 3.11 typing/TypeVar# +# ^^^^^^^ reference python-stdlib 3.11 typing/Generic. +# ^^^^^^^^ reference python-stdlib 3.11 typing/Callable. +# ^^^^^^^^ reference python-stdlib 3.11 typing/Iterator# +# ^^^^^^^^^ reference python-stdlib 3.11 typing/ParamSpec# + +_T_co = TypeVar("_T_co") +#^^^^ definition snapshot-util 0.1 mwe/_T_co. +# ^^^^^^^ reference python-stdlib 3.11 typing/TypeVar# +_P = ParamSpec("_P") +#^ definition snapshot-util 0.1 mwe/_P. +# ^^^^^^^^^ reference python-stdlib 3.11 typing/ParamSpec# + +class X(Generic[_T_co]): +# ^ definition snapshot-util 0.1 mwe/X# +# relationship implementation scip-python python python-stdlib 3.11 typing/Generic# +# ^^^^^^^ reference python-stdlib 3.11 typing/Generic. +# ^^^^^ reference snapshot-util 0.1 mwe/_T_co. + pass + +def decorate(func: Callable[_P, Iterator[_T_co]]) -> Callable[_P, X[_T_co]]: ... +# ^^^^^^^^ definition snapshot-util 0.1 mwe/decorate(). +# ^^^^ definition snapshot-util 0.1 mwe/decorate().(func) +# ^^^^^^^^ reference python-stdlib 3.11 typing/Callable. +# ^^ reference snapshot-util 0.1 mwe/_P. +# ^^^^^^^^ reference python-stdlib 3.11 typing/Iterator# +# ^^^^^ reference snapshot-util 0.1 mwe/_T_co. +# ^^^^^^^^ reference python-stdlib 3.11 typing/Callable. +# ^^ reference snapshot-util 0.1 mwe/_P. +# ^ reference snapshot-util 0.1 mwe/X# +# ^^^^^ reference snapshot-util 0.1 mwe/_T_co. + +class Foo: +# ^^^ definition snapshot-util 0.1 mwe/Foo# + @decorate +# ^^^^^^^^ reference snapshot-util 0.1 mwe/decorate(). + def foo(self) -> Iterator[None]: ... +# ^^^ definition snapshot-util 0.1 mwe/Foo#foo(). +# ^^^^ definition snapshot-util 0.1 mwe/Foo#foo().(self) +# ^^^^^^^^ reference python-stdlib 3.11 typing/Iterator# + +@decorate +#^^^^^^^^ reference snapshot-util 0.1 mwe/decorate(). +def noop(): +# ^^^^ definition snapshot-util 0.1 mwe/noop(). + yield + +class FooImpl(Foo): +# ^^^^^^^ definition snapshot-util 0.1 mwe/FooImpl# +# relationship implementation scip-python python snapshot-util 0.1 mwe/Foo# +# ^^^ reference snapshot-util 0.1 mwe/Foo# + def foo(self): +# ^^^ definition snapshot-util 0.1 mwe/FooImpl#foo(). +# relationship implementation scip-python python snapshot-util 0.1 mwe/Foo#foo(). +# ^^^^ definition snapshot-util 0.1 mwe/FooImpl#foo().(self) + return noop() +# ^^^^ reference snapshot-util 0.1 mwe/noop(). diff --git a/packages/pyright-scip/snapshots/output/unique/inherits_class.py b/packages/pyright-scip/snapshots/output/unique/inherits_class.py index 54efa385c..1a83d316e 100644 --- a/packages/pyright-scip/snapshots/output/unique/inherits_class.py +++ b/packages/pyright-scip/snapshots/output/unique/inherits_class.py @@ -9,11 +9,11 @@ def x(self) -> int: raise NotImplemented # ^^^^^^^^^^^^^^ reference python-stdlib 3.11 builtins/NotImplemented# - def unmatched(self, x: int): -# ^^^^^^^^^ definition snapshot-util 0.1 inherits_class/A#unmatched(). -# ^^^^ definition snapshot-util 0.1 inherits_class/A#unmatched().(self) -# ^ definition snapshot-util 0.1 inherits_class/A#unmatched().(x) -# ^^^ reference python-stdlib 3.11 builtins/int# + def matched_despite_different_type(self, x: int): +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition snapshot-util 0.1 inherits_class/A#matched_despite_different_type(). +# ^^^^ definition snapshot-util 0.1 inherits_class/A#matched_despite_different_type().(self) +# ^ definition snapshot-util 0.1 inherits_class/A#matched_despite_different_type().(x) +# ^^^ reference python-stdlib 3.11 builtins/int# pass class B(A): @@ -27,13 +27,14 @@ def x(self) -> int: # ^^^ reference python-stdlib 3.11 builtins/int# return 5 - def unmatched(self, x: int, y: int): -# ^^^^^^^^^ definition snapshot-util 0.1 inherits_class/B#unmatched(). -# ^^^^ definition snapshot-util 0.1 inherits_class/B#unmatched().(self) -# ^ definition snapshot-util 0.1 inherits_class/B#unmatched().(x) -# ^^^ reference python-stdlib 3.11 builtins/int# -# ^ definition snapshot-util 0.1 inherits_class/B#unmatched().(y) -# ^^^ reference python-stdlib 3.11 builtins/int# + def matched_despite_different_type(self, x: int, y: int): +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ definition snapshot-util 0.1 inherits_class/B#matched_despite_different_type(). +# relationship implementation scip-python python snapshot-util 0.1 inherits_class/A#matched_despite_different_type(). +# ^^^^ definition snapshot-util 0.1 inherits_class/B#matched_despite_different_type().(self) +# ^ definition snapshot-util 0.1 inherits_class/B#matched_despite_different_type().(x) +# ^^^ reference python-stdlib 3.11 builtins/int# +# ^ definition snapshot-util 0.1 inherits_class/B#matched_despite_different_type().(y) +# ^^^ reference python-stdlib 3.11 builtins/int# pass def unrelated(self): diff --git a/packages/pyright-scip/snapshots/output/unique/multiinherits_test.py b/packages/pyright-scip/snapshots/output/unique/multiinherits_test.py index 8901f3999..38ce5a4ae 100644 --- a/packages/pyright-scip/snapshots/output/unique/multiinherits_test.py +++ b/packages/pyright-scip/snapshots/output/unique/multiinherits_test.py @@ -54,7 +54,6 @@ def three(self): def shared(self) -> bool: # ^^^^^^ definition snapshot-util 0.1 multiinherits_test/Multi#shared(). # relationship implementation scip-python python snapshot-util 0.1 multiinherits_test/Left#shared(). -# relationship implementation scip-python python snapshot-util 0.1 multiinherits_test/Right#shared(). # ^^^^ definition snapshot-util 0.1 multiinherits_test/Multi#shared().(self) # ^^^^ reference python-stdlib 3.11 builtins/bool# return True diff --git a/packages/pyright-scip/src/TypeStubExtendedWriter.ts b/packages/pyright-scip/src/TypeStubExtendedWriter.ts index 68423cd0f..7c4bc7d3c 100644 --- a/packages/pyright-scip/src/TypeStubExtendedWriter.ts +++ b/packages/pyright-scip/src/TypeStubExtendedWriter.ts @@ -19,6 +19,7 @@ import { ParameterCategory, ParameterNode, ParseNodeType, + TypeAnnotationNode, } from 'pyright-internal/parser/parseNodes'; import * as TypeUtils from 'pyright-internal/analyzer/typeUtils'; import * as ParseTreeUtils from 'pyright-internal/analyzer/parseTreeUtils'; @@ -143,6 +144,62 @@ export class TypeStubExtendedWriter extends TypeStubWriter { return true; } + override visitTypeAnnotation(node: TypeAnnotationNode): boolean { + let isTypeAlias = false; + let line = ''; + + // Handle cases where left expression is a simple name assignment (e.g., "a = 1"). + if (node.valueExpression.nodeType === ParseNodeType.Name && node.parent?.nodeType === ParseNodeType.Assignment) { + // TODO: Handle "__all__" as a special case. + // if (leftExpr.value === '__all__') { + // if (this._functionNestCount === 0 && this._ifNestCount === 0) { + // this._emittedSuite = true; + // + // line = this._printExpression(leftExpr); + // line += ' = '; + // line += this._printExpression(node.rightExpression); + // this._emitLine(line); + // } + // + // return false; + // } + + const valueType = this.evaluator.getType(node.valueExpression); + + if (node.parent.typeAnnotationComment) { + line += this._printExpression(node.parent.typeAnnotationComment, /* treatStringsAsSymbols */ true); + } else if (valueType) { + line += TypeUtils.getFullNameOfType(valueType); + } + + if (valueType?.typeAliasInfo) { + isTypeAlias = true; + } else if (node.parent.rightExpression.nodeType === ParseNodeType.Call) { + // Special-case TypeVar, TypeVarTuple, ParamSpec and NewType calls. + // Treat them like type aliases. + const callBaseType = this.evaluator.getType(node.parent.rightExpression.leftExpression); + if ( + callBaseType && + isInstantiableClass(callBaseType) && + ClassType.isBuiltIn(callBaseType, ['TypeVar', 'TypeVarTuple', 'ParamSpec', 'NewType']) + ) { + isTypeAlias = true; + } + } + + if (line && isTypeAlias) { + line += ' = '; + line += this._printExpression(node.parent.rightExpression); + } + } + + if (line) { + this.docstrings.set(node.id, [line]); + } + + return true; + } + override visitAssignment(node: AssignmentNode): boolean { let isTypeAlias = false; let line = ''; diff --git a/packages/pyright-scip/src/assertions.ts b/packages/pyright-scip/src/assertions.ts new file mode 100644 index 000000000..f58ba2702 --- /dev/null +++ b/packages/pyright-scip/src/assertions.ts @@ -0,0 +1,126 @@ +import { normalizePathCase, isFileSystemCaseSensitive } from 'pyright-internal/common/pathUtils'; +import { PyrightFileSystem } from 'pyright-internal/pyrightFileSystem'; +import { createFromRealFileSystem } from 'pyright-internal/common/realFileSystem'; + +export enum SeenCondition { + AlwaysFalse = 'always-false', + AlwaysTrue = 'always-true', + Mixed = 'mixed', +} + +export class AssertionError extends Error { + constructor(message: string) { + super(message); + this.name = 'AssertionError'; + } +} + +// Private global state - never export directly +let _assertionFlags = { + pathNormalizationChecks: false, + otherChecks: false, +}; +let _context = ''; +const _sometimesResults = new Map>(); + +export function setGlobalAssertionFlags(pathNormalizationChecks: boolean, otherChecks: boolean): void { + _assertionFlags.pathNormalizationChecks = pathNormalizationChecks; + _assertionFlags.otherChecks = otherChecks; +} + +export function setGlobalContext(context: string): void { + _context = context; +} + +// Internal implementation functions +function assertAlwaysImpl(enableFlag: boolean, check: () => boolean, message: () => string): void { + if (!enableFlag) return; + + if (!check()) { + throw new AssertionError(message()); + } +} + +function assertSometimesImpl(enableFlag: boolean, check: () => boolean, key: string): void { + if (!enableFlag) return; + + const ctx = _context; + if (ctx === '') { + throw new AssertionError('Context must be set before calling assertSometimes'); + } + + let ctxMap = _sometimesResults.get(key); + if (!ctxMap) { + ctxMap = new Map(); + _sometimesResults.set(key, ctxMap); + } + + const result = check() ? SeenCondition.AlwaysTrue : SeenCondition.AlwaysFalse; + const prev = ctxMap.get(ctx); + + if (prev === undefined) { + ctxMap.set(ctx, result); + } else if (prev !== result) { + ctxMap.set(ctx, SeenCondition.Mixed); + } +} + +const _fs = new PyrightFileSystem(createFromRealFileSystem()); + +export function assertAlways(check: () => boolean, message: () => string): void { + assertAlwaysImpl(_assertionFlags.otherChecks, check, message); +} + +export function assertSometimes(check: () => boolean, key: string): void { + assertSometimesImpl(_assertionFlags.otherChecks, check, key); +} + +export function assertNeverNormalized(path: string): void { + const normalized = normalizePathCase(_fs, path); + assertAlwaysImpl( + _assertionFlags.pathNormalizationChecks, + () => normalized !== path, + () => `Path should not be normalized but was: ${path}` + ); +} + +export function assertAlwaysNormalized(path: string): void { + const normalized = normalizePathCase(_fs, path); + assertAlwaysImpl( + _assertionFlags.pathNormalizationChecks, + () => normalized === path, + () => `Path should be normalized but was not: ${path} -> ${normalized}` + ); +} + +export function assertSometimesNormalized(path: string, key: string): void { + const normalized = normalizePathCase(_fs, path); + assertSometimesImpl(_assertionFlags.pathNormalizationChecks, () => normalized === path, key); +} + +// Monoidal combination logic +function combine(a: SeenCondition, b: SeenCondition): SeenCondition { + if (a === b) return a; + if (a === SeenCondition.Mixed || b === SeenCondition.Mixed) { + return SeenCondition.Mixed; + } + // AlwaysTrue + AlwaysFalse = Mixed + return SeenCondition.Mixed; +} + +export function checkSometimesAssertions(): Map { + const summary = new Map(); + + for (const [key, ctxMap] of _sometimesResults) { + let agg: SeenCondition | undefined; + for (const state of ctxMap.values()) { + agg = agg === undefined ? state : combine(agg, state); + if (agg === SeenCondition.Mixed) break; + } + if (agg !== undefined) { + summary.set(key, agg); + } + } + + return summary; +} \ No newline at end of file diff --git a/packages/pyright-scip/src/symbols.ts b/packages/pyright-scip/src/symbols.ts index a3b3d5b15..d4fc12113 100644 --- a/packages/pyright-scip/src/symbols.ts +++ b/packages/pyright-scip/src/symbols.ts @@ -22,6 +22,12 @@ export function makePackage(pythonPackage: PythonPackage): ScipSymbol { } export function makeModule(pythonPackage: PythonPackage, moduleName: string): ScipSymbol { + if (!pythonPackage) { + return ScipSymbol.global( + ScipSymbol.package('', '0.0.0'), + packageDescriptor(moduleName) + ); + } let ns = namespaces.get(pythonPackage.name); if (ns) { moduleName = ns + '.' + moduleName; diff --git a/packages/pyright-scip/src/treeVisitor.ts b/packages/pyright-scip/src/treeVisitor.ts index 69115d90e..93a0bb4e8 100644 --- a/packages/pyright-scip/src/treeVisitor.ts +++ b/packages/pyright-scip/src/treeVisitor.ts @@ -6,8 +6,12 @@ import { TypeEvaluator } from 'pyright-internal/analyzer/typeEvaluatorTypes'; import { convertOffsetToPosition } from 'pyright-internal/common/positionUtils'; import { TextRange } from 'pyright-internal/common/textRange'; import { TextRangeCollection } from 'pyright-internal/common/textRangeCollection'; +import { printParseNodeType } from 'pyright-internal/analyzer/parseTreeUtils'; +import { TreeDumper } from 'pyright-internal/commands/dumpFileDebugInfoCommand'; import { AssignmentNode, + CallNode, + MemberAccessNode, ClassNode, FunctionNode, ImportAsNode, @@ -38,7 +42,7 @@ import { SourceFile } from 'pyright-internal/analyzer/sourceFile'; import { extractParameterDocumentation } from 'pyright-internal/analyzer/docStringUtils'; import { Declaration, - DeclarationType, + DeclarationType, FunctionDeclaration, isAliasDeclaration, isIntrinsicDeclaration, } from 'pyright-internal/analyzer/declaration'; @@ -53,7 +57,11 @@ import { Event } from 'vscode-languageserver'; import { HoverResults } from 'pyright-internal/languageService/hoverProvider'; import { convertDocStringToMarkdown } from 'pyright-internal/analyzer/docStringConversion'; import { assert } from 'pyright-internal/common/debug'; -import { getClassFieldsRecursive } from 'pyright-internal/analyzer/typeUtils'; +import { assertNeverNormalized, assertSometimesNormalized } from './assertions'; +import { normalizePathCase } from 'pyright-internal/common/pathUtils'; +import { PyrightFileSystem } from 'pyright-internal/pyrightFileSystem'; +import { createFromRealFileSystem } from 'pyright-internal/common/realFileSystem'; +import { ClassMemberLookupFlags, lookUpClassMember } from 'pyright-internal/analyzer/typeUtils'; // Useful functions for later, but haven't gotten far enough yet to use them. // extractParameterDocumentation @@ -174,6 +182,12 @@ export class TreeVisitor extends ParseTreeWalker { public evaluator: TypeEvaluator; public program: Program; + /** Stack of variable-to-class mappings; one frame per scope. */ + private readonly scopeVarTypes: Map[] = [new Map()]; + /** Convenience getter for the current (innermost) frame. */ + private get varTypes() { return this.scopeVarTypes[this.scopeVarTypes.length - 1]; } + + constructor(public config: TreeVisitorConfig) { super(); @@ -214,6 +228,8 @@ export class TreeVisitor extends ParseTreeWalker { const fileInfo = getFileInfo(node); this.fileInfo = fileInfo; + // Pro tip: Use this.debugDumpAST(node, fileInfo) to see AST for debugging + // Insert definition at the top of the file const pythonPackage = this.getPackageInfo(node, fileInfo.moduleName); if (pythonPackage) { @@ -252,7 +268,30 @@ export class TreeVisitor extends ParseTreeWalker { } override visitClass(node: ClassNode): boolean { + // Before walking children, open a new type-map frame + const parentFrame = this.scopeVarTypes[this.scopeVarTypes.length - 1]; + this.scopeVarTypes.push(new Map(parentFrame)); // shallow copy + this._docstringWriter.visitClass(node); + + const clsSym = this.getScipSymbol(node); + if (!this.symbolInformationForNode.has(clsSym.value)) { + const docs: string[] = []; + + const stub = this._docstringWriter.docstrings.get(node.id); + if (stub) docs.push("```python\n" + stub.join("\n") + "\n```"); + + const doc = ParseTreeUtils.getDocString(node.suite.statements)?.trim(); + if (doc) docs.push(convertDocStringToMarkdown(doc)); + + this.document.symbols.push( + new scip.SymbolInformation({ symbol: clsSym.value, documentation: docs }) + ); + this.symbolInformationForNode.add(clsSym.value); + } + + // Close the frame we opened at the start of this scope + this.scopeVarTypes.pop(); return true; } @@ -279,6 +318,24 @@ export class TreeVisitor extends ParseTreeWalker { documentation: _formatHover(hoverResult!), }) ); + } + else if (node.parent?.nodeType == ParseNodeType.Assignment && node.valueExpression.nodeType === ParseNodeType.Name) { + this._docstringWriter.visitTypeAnnotation(node); + + let documentation = []; + + let assignmentDoc = this._docstringWriter.docstrings.get(node.id); + if (assignmentDoc) { + documentation.push('```python\n' + assignmentDoc.join('\n') + '\n```'); + } + + // node.typeAnnotationComment + this.document.symbols.push( + new scip.SymbolInformation({ + symbol: this.getScipSymbol(node).value, + documentation, + }) + ); } return true; @@ -313,6 +370,59 @@ export class TreeVisitor extends ParseTreeWalker { } } + if (node.leftExpression.nodeType === ParseNodeType.MemberAccess && + node.rightExpression?.nodeType === ParseNodeType.Call) { + const lhs = node.leftExpression as MemberAccessNode; + const attrName = lhs.memberName.value; + + const calleeTok = (node.rightExpression as CallNode).leftExpression; + const calleeNm = + calleeTok.nodeType === ParseNodeType.Name + ? calleeTok as NameNode + : calleeTok.nodeType === ParseNodeType.MemberAccess + ? (calleeTok as MemberAccessNode).memberName + : undefined; + + const classSym = calleeNm && this.resolveCtorClass(calleeNm); + if (classSym) { + // store mapping in the *enclosing* frame (i.e. the class scope) + const parentFrameIdx = this.scopeVarTypes.length - 2; + const targetFrame = + parentFrameIdx >= 0 ? this.scopeVarTypes[parentFrameIdx] + : this.varTypes; + targetFrame.set(attrName, classSym); + } + } + + if (node.leftExpression.nodeType === ParseNodeType.Name && + node.rightExpression?.nodeType === ParseNodeType.Call) { + const varTok = node.leftExpression as NameNode; + const call = node.rightExpression as CallNode; + + const calleeTok = + call.leftExpression.nodeType === ParseNodeType.Name + ? call.leftExpression as NameNode + : call.leftExpression.nodeType === ParseNodeType.MemberAccess + ? (call.leftExpression as MemberAccessNode).memberName + : undefined; + + const classSym = calleeTok && this.resolveCtorClass(calleeTok); + if (classSym) { + this.varTypes.set(varTok.value, classSym); + } + } + + //--------------------------------------------------------------------- + // ❷ *Optional* clean-up: if the assignment is NOT a constructor call, + // remove any previous mapping so future member accesses don’t + // pretend the variable is still a TTLDict (or whatever). + //--------------------------------------------------------------------- + if (node.leftExpression.nodeType === ParseNodeType.Name && + node.rightExpression?.nodeType !== ParseNodeType.Call) { + + this.varTypes.delete((node.leftExpression as NameNode).value); + } + return true; } @@ -338,54 +448,26 @@ export class TreeVisitor extends ParseTreeWalker { let relationshipMap: Map = new Map(); let classType = enclosingClassType.classType; - // Use: getClassMemberIterator - // Could use this to handle each of the fields with the same name - // but it's a bit weird if you have A -> B -> C, and then you say - // that C implements A's & B's... that seems perhaps a bit too verbose. - // - // See: https://github.com/sourcegraph/scip-python/issues/50 - for (const base of classType.details.baseClasses) { - if (base.category !== TypeCategory.Class) { - continue; - } - - let parentMethod = base.details.fields.get(node.name.value); - if (!parentMethod) { - let fieldLookup = getClassFieldsRecursive(base).get(node.name.value); - if (fieldLookup && fieldLookup.classType.category !== TypeCategory.Unknown) { - parentMethod = fieldLookup.classType.details.fields.get(node.name.value)!; - } else { - continue; - } - } + let classMember = lookUpClassMember(classType, node.name.value, ClassMemberLookupFlags.SkipOriginalClass); + if (!classMember) { + return undefined; + } - let parentMethodType = this.evaluator.getEffectiveTypeOfSymbol(parentMethod); - if (parentMethodType.category !== TypeCategory.Function) { + const superDecls = classMember.symbol.getDeclarations(); + for (const superDecl of superDecls) { + if (superDecl.type !== DeclarationType.Function) { continue; } - - if ( - !ModifiedTypeUtils.isTypeImplementable( - functionType.functionType, - parentMethodType, - false, - true, - 0, - true - ) - ) { - continue; + let symbol = this.getFunctionSymbol(superDecl); + if (!symbol.isLocal()) { + relationshipMap.set( + symbol.value, + new scip.Relationship({ + symbol: symbol.value, + is_implementation: true, + }) + ); } - - let decl = parentMethodType.details.declaration!; - let symbol = this.typeToSymbol(decl.node.name, decl.node, parentMethodType); - relationshipMap.set( - symbol.value, - new scip.Relationship({ - symbol: symbol.value, - is_implementation: true, - }) - ); } let relationships = Array.from(relationshipMap.values()); @@ -393,6 +475,9 @@ export class TreeVisitor extends ParseTreeWalker { } override visitFunction(node: FunctionNode): boolean { + // Before walking children, open a new type-map frame + const parentFrame = this.scopeVarTypes[this.scopeVarTypes.length - 1]; + this.scopeVarTypes.push(new Map(parentFrame)); // shallow copy this._docstringWriter.visitFunction(node); // does this do return types? @@ -451,6 +536,8 @@ export class TreeVisitor extends ParseTreeWalker { // Walk the function definition this.walk(node.suite); + // Close the frame we opened at the start of this scope + this.scopeVarTypes.pop(); return false; } @@ -503,7 +590,17 @@ export class TreeVisitor extends ParseTreeWalker { if ( importInfo && importInfo.resolvedPaths[0] && - path.resolve(importInfo.resolvedPaths[0]).startsWith(this.cwd) + ((): boolean => { + // HACK(id: inconsistent-casing-of-resolved-paths): + // Sometimes the resolvedPath is normalized and sometimes it is not. + // If we remove one of the two checks below, existing tests start failing + // (aliased_import and nested_items tests). So do both checks. + const resolvedPath = path.resolve(importInfo.resolvedPaths[0]) + assertSometimesNormalized(resolvedPath, 'visitImportAs.resolvedPath') + return resolvedPath.startsWith(this.cwd) || + resolvedPath.startsWith( + normalizePathCase(new PyrightFileSystem(createFromRealFileSystem()), this.cwd)) + })() ) { const symbol = Symbols.makeModuleInit(this.projectPackage, moduleName); this.pushNewOccurrence(node.module, symbol); @@ -845,15 +942,24 @@ export class TreeVisitor extends ParseTreeWalker { softAssert(false, "I don't think that this should be possible"); break; - // Without a declaration, it doesn't seem useful to try and add member accesses - // with locals. You'll just get a new local for every reference because we can't construct - // what these are. - // - // In the future, it could be possible that we could store what locals we have generated for a file - // (for example `unknown_module.access`, and then use the same local for all of them, but it would be quite - // difficult in my mind). - case ParseNodeType.MemberAccess: + case ParseNodeType.MemberAccess: { + const ma = parent as MemberAccessNode; + const base = ma.leftExpression; + + // only handle "baseName.memberName" + if (base.nodeType === ParseNodeType.Name) { + const baseSym = this.lookupVar(base.value); + if (baseSym) { + const methSym = Symbols.makeMethod(baseSym, node.value); + this.pushNewOccurrence(node, methSym, scip.SymbolRole.ReadAccess); + return true; + } + } + + // fallback: old behaviour (local symbol) + this.pushNewOccurrence(node, this.getLocalForDeclaration(node)); return true; + } } log.debug(' NO DECL:', ParseTreeUtils.printParseNodeType, parent.nodeType); @@ -866,6 +972,43 @@ export class TreeVisitor extends ParseTreeWalker { throw `No parent for named node: ${node.token.value}`; } + if (node.parent.nodeType === ParseNodeType.MemberAccess) { + const ma = node.parent as MemberAccessNode; + + if (node === ma.memberName) { + const base = ma.leftExpression; + let baseSym: ScipSymbol | undefined; + + if (base.nodeType === ParseNodeType.Name) { + baseSym = this.lookupVar((base as NameNode).value); + } else if (base.nodeType === ParseNodeType.MemberAccess) { + baseSym = this.lookupVar((base as MemberAccessNode).memberName.value); + } + + if (baseSym) { + const isCall = ma.parent?.nodeType === ParseNodeType.Call && (ma.parent as CallNode).leftExpression === ma; + const sym = isCall + ? Symbols.makeMethod(baseSym, node.value) + : Symbols.makeTerm(baseSym, node.value); + + this.pushNewOccurrence(node, sym, scip.SymbolRole.ReadAccess); + return true; + } + } + } + + + // ── Class-field fast-path ────────────────────────────────────────────── + const cls = ParseTreeUtils.getEnclosingClass(node, /*includeNested*/ true); + if (cls && isClassFieldTarget(node)) { + const fieldSym = Symbols.makeTerm(this.getScipSymbol(cls), node.value); + this.rawSetLsifSymbol(node, fieldSym, /*isLocal*/ true); // seed cache + this.pushNewOccurrence(node, fieldSym, scip.SymbolRole.Definition); + return true; // skip builtin fallback + } + // ─────────────────────────────────────────────────────────────────────── + + if (node.token.value === '_') { return true; } @@ -885,6 +1028,49 @@ export class TreeVisitor extends ParseTreeWalker { return this.emitDeclaration(node, decl); } + override visitCall(node: CallNode): boolean { + // Walk the callee first so that any prerequisite symbols exist + this.walk(node.leftExpression); + + // ── Locate the token that names the class ─────────────── + let classToken: NameNode | undefined; + + if (node.leftExpression.nodeType === ParseNodeType.Name) { + // Simple call: Foo() + classToken = node.leftExpression as NameNode; + + } else if (node.leftExpression.nodeType === ParseNodeType.MemberAccess) { + // Qualified call: pkg.mod.Foo() + classToken = (node.leftExpression as MemberAccessNode).memberName; + } + + // ── Resolve and emit the constructor reference ────────── + if (classToken) { + const classSym = this.resolveCtorClass(classToken); + if (classSym) { + this.pushNewOccurrence( + classToken, + classSym, + scip.SymbolRole.ReadAccess + ); + + const ctorSym = Symbols.makeMethod(classSym, "__init__"); + this.document.occurrences.push( + new scip.Occurrence({ + symbol_roles: scip.SymbolRole.ReadAccess, + symbol: ctorSym.value, + range: zeroWidthAfter(classToken, this.fileInfo!.lines).toLsif(), + enclosing_range: parseNodeToRange(node, this.fileInfo!.lines).toLsif() + }) + ); + } + } + + // Finally visit arguments + node.arguments.forEach(arg => this.walk(arg)); + return false; // we handled the children ourselves + } + private rawGetLsifSymbol(node: ParseNode): ScipSymbol | undefined { return this.globalSymbols.get(node.id) || this.documentSymbols.get(node.id); } @@ -1048,6 +1234,14 @@ export class TreeVisitor extends ParseTreeWalker { return this.makeScipSymbol(this.stdlibPackage, 'builtins', node); } + private lookupVar(name: string): ScipSymbol | undefined { + for (let i = this.scopeVarTypes.length - 1; i >= 0; i--) { + const hit = this.scopeVarTypes[i].get(name); + if (hit) return hit; + } + return undefined; + } + private makeScipSymbol(pythonPackage: PythonPackage, moduleName: string, node: ParseNode): ScipSymbol { switch (node.nodeType) { case ParseNodeType.Module: { @@ -1164,8 +1358,27 @@ export class TreeVisitor extends ParseTreeWalker { return ScipSymbol.local(this.counter.next()); } } - - return Symbols.makeTerm(this.getScipSymbol(enclosingSuite || parent), (node as NameNode).value); + + let symbol = null; + if (parent.nodeType === ParseNodeType.TypeAnnotation) { + const enclosingClass = ParseTreeUtils.getEnclosingClass(node, /* includeNested */ true); + if (enclosingClass) { + const classSymbol = this.getScipSymbol(enclosingClass); + symbol = Symbols.makeTerm(classSymbol, node.value); + } else { + const enclosingModule = ParseTreeUtils.getEnclosingModule(node); + if (enclosingModule) { + const moduleSymbol = this.getScipSymbol(enclosingModule); + symbol = Symbols.makeTerm(moduleSymbol, node.value); + } else { + symbol = ScipSymbol.local(this.counter.next()); + } + } + } + else + symbol = Symbols.makeTerm(this.getScipSymbol(enclosingSuite || parent), (node as NameNode).value); + + return symbol; } case ParseNodeType.TypeAnnotation: { switch (node.valueExpression.nodeType) { @@ -1304,44 +1517,49 @@ export class TreeVisitor extends ParseTreeWalker { } } + private getFunctionSymbol(decl: FunctionDeclaration): ScipSymbol { + const declModuleName = decl.moduleName; + let pythonPackage = this.guessPackage(declModuleName, decl.path); + if (!pythonPackage) { + return ScipSymbol.local(this.counter.next()); + } + + const enclosingClass = ParseTreeUtils.getEnclosingClass(decl.node); + if (enclosingClass) { + const enclosingClassType = this.evaluator.getTypeOfClass(enclosingClass); + if (enclosingClassType) { + let classType = enclosingClassType.classType; + const pythonPackage = this.guessPackage(classType.details.moduleName, classType.details.filePath)!; + const symbol = Symbols.makeClass(pythonPackage, classType.details.moduleName, classType.details.name); + return Symbols.makeMethod(symbol, decl.node.name.value); + } + return ScipSymbol.local(this.counter.next()); + } else { + return Symbols.makeMethod(Symbols.makeModule(pythonPackage, declModuleName), decl.node.name.value); + } + } + + // NOTE(tech-debt): typeToSymbol's signature doesn't make sense. It returns the + // symbol for a _function_ (not the function's _type_) despite the name being + // 'typeToSymbol'. More generally, we should have dedicated functions to get + // the symbol based on the specific declarations, like getFunctionSymbol. + // There can be a general function which gets the symbol for a variety of kinds + // of _declarations_, but it must not take a _Type_ as an argument + // (Python mostly doesn't use structural types, so ~only declarations should + // have symbols). + // Take a `Type` from pyright and turn that into an LSIF symbol. private typeToSymbol(node: NameNode, declNode: ParseNode, typeObj: Type): ScipSymbol { if (Types.isFunction(typeObj)) { // TODO: Possibly worth checking for parent declarations. // I'm not sure if that will actually work though for types. - const decl = typeObj.details.declaration; if (!decl) { // throw 'Unhandled missing declaration for type: function'; // console.warn('Missing Function Decl:', node.token.value, typeObj); return ScipSymbol.local(this.counter.next()); } - - const declModuleName = decl.moduleName; - let pythonPackage = this.guessPackage(declModuleName, decl.path); - if (!pythonPackage) { - return ScipSymbol.local(this.counter.next()); - } - - const enclosingClass = ParseTreeUtils.getEnclosingClass(declNode); - if (enclosingClass) { - const enclosingClassType = this.evaluator.getTypeOfClass(enclosingClass); - if (enclosingClassType) { - let classType = enclosingClassType.classType; - const pythonPackage = this.guessPackage(classType.details.moduleName, classType.details.filePath)!; - const symbol = Symbols.makeClass( - pythonPackage, - classType.details.moduleName, - classType.details.name - ); - - return Symbols.makeMethod(symbol, node.value); - } - - return ScipSymbol.local(this.counter.next()); - } else { - return Symbols.makeMethod(Symbols.makeModule(pythonPackage, typeObj.details.moduleName), node.value); - } + return this.getFunctionSymbol(decl); } else if (Types.isClass(typeObj)) { const pythonPackage = this.getPackageInfo(node, typeObj.details.moduleName)!; return Symbols.makeClass(pythonPackage, typeObj.details.moduleName, node.value); @@ -1672,6 +1890,56 @@ export class TreeVisitor extends ParseTreeWalker { this.rawSetLsifSymbol(node, symbol, symbol.isLocal()); return symbol; } + + private emitMethod(nameTok: NameNode, classSym: ScipSymbol) { + this.pushNewOccurrence( + nameTok, + Symbols.makeMethod(classSym, nameTok.value), + scip.SymbolRole.ReadAccess + ); + } + + /** Return the class-symbol that a constructor call token refers to, + * resolving import aliases if necessary. */ + private resolveCtorClass(tok: NameNode): ScipSymbol | undefined { + const decls = this.evaluator.getDeclarationsForNameNode(tok) || []; + if (!decls.length) return undefined; + + let decl = decls[0]; + + // ── follow “from … import X” and other aliases ─────────────── + if (isAliasDeclaration(decl)) { + const resolved = + this.evaluator.resolveAliasDeclaration(decl, /*exec*/ true, /*imported*/ true); + if (resolved) decl = resolved; + } + + // a) we finally reached the real `class` definition + if (decl.node?.nodeType === ParseNodeType.Class) { + return this.getScipSymbol(decl.node); + } + + // b) fallback: ask Pyright for the expression’s type + const info = this.evaluator.getTypeOfExpression(tok); + const t = info?.type; + if (t && Types.isClass(t)) { + const pkg = this.getPackageInfo(tok, t.details.moduleName) + ?? this.projectPackage; + return Symbols.makeClass(pkg, + t.details.moduleName, + t.details.name); + } + return undefined; + } + + private debugDumpAST(node: ModuleNode, fileInfo: AnalyzerFileInfo): void { + console.log("\n=== AST DUMP ==="); + const dumper = new TreeDumper("", fileInfo.lines); + dumper.walk(node); + console.log(dumper.output); + console.log("=== END AST DUMP ===\n"); + } + } function _formatModuleName(node: ModuleNameNode): string { @@ -1723,3 +1991,29 @@ function isBuiltinModuleName(moduleName: string): boolean { return false; } + + +function isClassFieldTarget(n: NameNode): boolean { + const p = n.parent; + if (n.value === "type") { + console.log("Type Annotation - ", (p as TypeAnnotationNode).typeAnnotation); + console.log("Value Expression - ", (p as TypeAnnotationNode).valueExpression); + } + if (!p) return false; + + return ( + (p.nodeType === ParseNodeType.Assignment && + (p as AssignmentNode).leftExpression === n) || + (p.nodeType === ParseNodeType.TypeAnnotation && + (p as TypeAnnotationNode).valueExpression === n) // lhs of “name: T” + ); +} + +function zeroWidthAfter(tok: NameNode, + lines: TextRangeCollection): Range { + const pos = convertOffsetToPosition(tok.start + tok.length, lines); + return new Range( + /*start*/ new Position(pos.line, pos.character), + /*end */ new Position(pos.line, pos.character) // zero-length + ); +} \ No newline at end of file diff --git a/packages/pyright-scip/src/virtualenv/environment.ts b/packages/pyright-scip/src/virtualenv/environment.ts index 802ba9f8d..6883280c4 100644 --- a/packages/pyright-scip/src/virtualenv/environment.ts +++ b/packages/pyright-scip/src/virtualenv/environment.ts @@ -1,5 +1,7 @@ import * as fs from 'fs'; import * as child_process from 'child_process'; +import * as os from 'os'; +import * as path from 'path'; import PythonPackage from './PythonPackage'; import PythonEnvironment from './PythonEnvironment'; import { withStatus } from 'src/status'; @@ -13,6 +15,11 @@ interface PipInformation { version: string; } +type PipBulkShowResult = + | { success: true; data: string[] } + | { success: false; error: 'timeout'; message: string } + | { success: false; error: 'other'; message: string; code?: number }; + let pipCommand: string | undefined; let getPipCommand = () => { if (pipCommand === undefined) { @@ -21,23 +28,200 @@ let getPipCommand = () => { } else if (commandExistsSync('pip')) { pipCommand = 'pip'; } else { - throw new Error('Could not find valid pip command'); + throw new Error(`Could not find valid pip command. Searched PATH: ${process.env.PATH}`); } } return pipCommand; }; +let pythonCommand: string | undefined; +let getPythonCommand = () => { + if (pythonCommand === undefined) { + if (commandExistsSync('python3')) { + pythonCommand = 'python3'; + } else if (commandExistsSync('python')) { + pythonCommand = 'python'; + } else { + throw new Error(`Could not find valid python command. Searched PATH: ${process.env.PATH}`); + } + } + + return pythonCommand; +}; + +function spawnSyncWithRetry(command: string, args: string[], timeout?: number): child_process.SpawnSyncReturns { + let maxBuffer = 1 * 1024 * 1024; // Start with 1MB (original default) + const maxMemory = os.totalmem() * 0.1; // Don't use more than 10% of total system memory + + while (true) { + const result = child_process.spawnSync(command, args, { + encoding: 'utf8', + maxBuffer: maxBuffer, + timeout: timeout, // Will be undefined if not provided, which is fine + }); + + const error = result.error as NodeJS.ErrnoException | null; + if (error && error.code === 'ENOBUFS') { + const nextBuffer = maxBuffer * 10; + if (nextBuffer > maxMemory) { + throw new Error( + `Command output too large: final attempt maxBuffer ${(maxBuffer / 1024 / 1024).toFixed( + 1 + )}MB (total memory: ${(maxMemory / 1024 / 1024).toFixed(1)}MB)` + ); + } + maxBuffer = nextBuffer; + continue; // Retry with larger buffer + } + + return result; + } +} + +// Utility function for temporary directory cleanup +function cleanupTempDirectory(tempDir: string): void { + try { + fs.rmSync(tempDir, { recursive: true, force: true }); + } catch (error) { + console.warn(`Warning: Failed to cleanup temp directory ${tempDir}: ${error}`); + } +} + +// Helper function to validate and warn about missing packages +function validatePackageResults(results: PythonPackage[], requestedNames: string[]): PythonPackage[] { + if (results.length !== requestedNames.length) { + const foundNames = new Set(results.map((pkg) => pkg.name)); + const missingNames = requestedNames.filter((name) => !foundNames.has(name)); + console.warn(`Warning: Could not find package information for: ${missingNames.join(', ')}`); + } + return results; +} + +function generatePackageInfoScript(): string { + return `#!/usr/bin/env python3 +import sys +import json +import importlib.metadata + +def get_package_info(package_names): + results = [] + package_set = set(package_names) # Use set for faster lookup + + for dist in importlib.metadata.distributions(): + if dist.name in package_set: + files = [] + + # Get files for this package + if dist.files: + for file_path in dist.files: + file_str = str(file_path) + + # Skip cached or out-of-project files + if file_str.startswith('..') or '__pycache__' in file_str: + continue + + # Only include .py and .pyi files + if file_str.endswith(('.py', '.pyi')): + files.append(file_str) + + results.append({ + 'name': dist.name, + 'version': dist.version, + 'files': files + }) + + return results + +if __name__ == '__main__': + package_names = set(sys.argv[1:]) + package_info = get_package_info(package_names) + json.dump(package_info, sys.stdout) +`; +} + function pipList(): PipInformation[] { - return JSON.parse(child_process.execSync(`${getPipCommand()} list --format=json`).toString()) as PipInformation[]; + const result = spawnSyncWithRetry(getPipCommand(), ['list', '--format=json']); + + if (result.status !== 0) { + throw new Error(`pip list failed with code ${result.status}: ${result.stderr}`); + } + + return JSON.parse(result.stdout) as PipInformation[]; +} + +// pipBulkShow returns the results of 'pip show', one for each package. +// +// It doesn't cross-check if the length of the output matches that of the input. +function pipBulkShow(names: string[]): PipBulkShowResult { + // FIXME: The performance of this scales with the number of packages that + // are installed in the Python distribution, not just the number of packages + // that are requested. If 10K packages are installed, this can take several + // minutes. However, it's not super obvious if there is a more performant + // way to do this without hand-rolling the functionality ourselves. + const result = spawnSyncWithRetry(getPipCommand(), ['show', '-f', ...names], 60000); // 1 minute timeout + + if (result.status !== 0) { + const error = result.error as NodeJS.ErrnoException | null; + if (result.signal === 'SIGTERM' || (error && error.code === 'ETIMEDOUT')) { + return { + success: false, + error: 'timeout', + message: 'pip show timed out after 1 minute.', + }; + } + return { + success: false, + error: 'other', + message: `pip show failed: ${result.stderr}`, + code: result.status ?? undefined, + }; + } + + return { + success: true, + data: result.stdout.split('\n---').filter((pkg) => pkg.trim()), + }; } -function pipBulkShow(names: string[]): string[] { - // TODO: This probably breaks with enough names. Should batch them into 512 or whatever the max for bash would be - return child_process - .execSync(`${getPipCommand()} show -f ${names.join(' ')}`) - .toString() - .split('\n---'); +// Get package information by running a short Python script. +// If we fail to run that, attempt to use `pip show`. +function gatherPackageData(packageNames: string[]): PythonPackage[] { + // First try the new importlib.metadata approach + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scip-python-')); + try { + const scriptPath = path.join(tempDir, 'get_packages.py'); + const scriptContent = generatePackageInfoScript(); + + fs.writeFileSync(scriptPath, scriptContent, { mode: 0o755 }); + + const result = spawnSyncWithRetry(getPythonCommand(), [scriptPath, ...packageNames]); + + if (result.status === 0) { + const packageData = JSON.parse(result.stdout); + const packages = packageData.map((pkg: any) => new PythonPackage(pkg.name, pkg.version, pkg.files)); + return validatePackageResults(packages, packageNames); + } else { + console.warn(`Python script failed with code ${result.status}: ${result.stderr}`); + console.warn('Falling back to pip show approach'); + } + } catch (error) { + console.warn(`Failed to use importlib.metadata approach: ${error}`); + console.warn('Falling back to pip show approach'); + } finally { + cleanupTempDirectory(tempDir); + } + + // Fallback to original pip show approach + const bulkResult = pipBulkShow(packageNames); + if (!bulkResult.success) { + console.warn(`Warning: Package discovery failed - ${bulkResult.message}`); + console.warn('Navigation to external packages may not work correctly.'); + return []; + } + + const pipResults = bulkResult.data.map((shown) => PythonPackage.fromPipShow(shown)); + return validatePackageResults(pipResults, packageNames); } export default function getEnvironment( @@ -56,13 +240,13 @@ export default function getEnvironment( return withStatus('Evaluating python environment dependencies', (progress) => { const listed = pipList(); - progress.message('Gathering environment information from `pip`'); - const bulk = pipBulkShow(listed.map((item) => item.name)); + progress.message('Gathering environment information'); + const packageNames = listed.map((item) => item.name); + const info = gatherPackageData(packageNames); - progress.message('Analyzing dependencies'); - const info = bulk.map((shown) => { - return PythonPackage.fromPipShow(shown); - }); return new PythonEnvironment(projectFiles, projectVersion, info); }); } + +// Export for testing purposes +export { gatherPackageData }; \ No newline at end of file diff --git a/packages/pyright/package-lock.json b/packages/pyright/package-lock.json index 4092c0c2c..83e166a82 100644 --- a/packages/pyright/package-lock.json +++ b/packages/pyright/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "pyright", "version": "1.1.301", "license": "MIT", "bin": { diff --git a/packages/vscode-pyright/package-lock.json b/packages/vscode-pyright/package-lock.json index 7cfdc584d..e5798cd78 100644 --- a/packages/vscode-pyright/package-lock.json +++ b/packages/vscode-pyright/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "vscode-pyright", "version": "1.1.301", "license": "MIT", "dependencies": {