SERVER-100116 Set up rules_lint with eslint (#32036)

GitOrigin-RevId: b358136eaef9eec27470065d6254112867b56245
This commit is contained in:
Zack Winter 2025-02-06 13:41:36 -08:00 committed by MongoDB Bot
parent 4863cb9653
commit c47bf8d1ef
25 changed files with 854 additions and 481 deletions

2
.github/CODEOWNERS vendored
View File

@ -14,7 +14,6 @@ OWNERS.yml @10gen/server-root-ownership @svc-auto-approve-bot
.clang-format @10gen/server-programmability @svc-auto-approve-bot .clang-format @10gen/server-programmability @svc-auto-approve-bot
.clang-tidy.in @10gen/server-programmability @svc-auto-approve-bot .clang-tidy.in @10gen/server-programmability @svc-auto-approve-bot
.eslintignore @10gen/devprod-correctness @svc-auto-approve-bot .eslintignore @10gen/devprod-correctness @svc-auto-approve-bot
.eslintrc.yml @10gen/devprod-correctness @svc-auto-approve-bot
.gitignore @10gen/devprod-build @svc-auto-approve-bot .gitignore @10gen/devprod-build @svc-auto-approve-bot
.mypy.ini @10gen/devprod-build @10gen/devprod-correctness @svc-auto-approve-bot .mypy.ini @10gen/devprod-build @10gen/devprod-correctness @svc-auto-approve-bot
.prettierignore @10gen/devprod-correctness @svc-auto-approve-bot .prettierignore @10gen/devprod-correctness @svc-auto-approve-bot
@ -22,6 +21,7 @@ OWNERS.yml @10gen/server-root-ownership @svc-auto-approve-bot
/BUILD.bazel @10gen/devprod-build @svc-auto-approve-bot /BUILD.bazel @10gen/devprod-build @svc-auto-approve-bot
copy.bara.sky @IamXander @smcclure15 @svc-auto-approve-bot copy.bara.sky @IamXander @smcclure15 @svc-auto-approve-bot
copy.bara.staging.sky @10gen/devprod-correctness @svc-auto-approve-bot copy.bara.staging.sky @10gen/devprod-correctness @svc-auto-approve-bot
eslint.config.mjs @10gen/devprod-correctness @svc-auto-approve-bot
jsconfig.json @10gen/devprod-correctness @svc-auto-approve-bot jsconfig.json @10gen/devprod-correctness @svc-auto-approve-bot
package.json @10gen/devprod-correctness @svc-auto-approve-bot package.json @10gen/devprod-correctness @svc-auto-approve-bot
pnpm-lock.yaml @10gen/devprod-correctness @svc-auto-approve-bot pnpm-lock.yaml @10gen/devprod-correctness @svc-auto-approve-bot

2
.gitignore vendored
View File

@ -269,7 +269,7 @@ node_modules/
package-lock.json package-lock.json
# jstestfuzz generated test directory # jstestfuzz generated test directory
jstestfuzz/ /jstestfuzz/
# Bazel-related work # Bazel-related work
# (Note that each string does NOT terminate with a '/' so that gitignore works properly) # (Note that each string does NOT terminate with a '/' so that gitignore works properly)

1
.npmrc Normal file
View File

@ -0,0 +1 @@
hoist=false

View File

@ -2,6 +2,8 @@ load("@npm//:defs.bzl", "npm_link_all_packages")
load("//bazel/install_rules:install_rules.bzl", "mongo_install") load("//bazel/install_rules:install_rules.bzl", "mongo_install")
load("//bazel/toolchains:mongo_toolchain.bzl", "setup_mongo_toolchain_aliases") load("//bazel/toolchains:mongo_toolchain.bzl", "setup_mongo_toolchain_aliases")
load("//bazel/config:render_template.bzl", "render_template") load("//bazel/config:render_template.bzl", "render_template")
load("@npm//:eslint/package_json.bzl", eslint_bin = "bin")
load("@aspect_rules_js//js:defs.bzl", "js_library")
package( package(
default_visibility = ["//visibility:public"], default_visibility = ["//visibility:public"],
@ -16,11 +18,33 @@ exports_files([
npm_link_all_packages(name = "node_modules") npm_link_all_packages(name = "node_modules")
js_library(
name = "eslintrc",
srcs = ["eslint.config.mjs"],
deps = [
":node_modules/@eslint/js",
":node_modules/globals",
"//:node_modules/@eslint/eslintrc",
],
)
eslint_bin.eslint_binary(
name = "eslint",
data = [
"//:eslintrc",
],
)
alias( alias(
name = "format", name = "format",
actual = "//bazel/format", actual = "//bazel/format",
) )
alias(
name = "lint",
actual = "//bazel:lint",
)
alias( alias(
name = "codeowners", name = "codeowners",
actual = "//buildscripts:codeowners", actual = "//buildscripts:codeowners",

View File

@ -24,9 +24,6 @@ filters:
- ".eslintignore": - ".eslintignore":
approvers: approvers:
- 10gen/devprod-correctness - 10gen/devprod-correctness
- ".eslintrc.yml":
approvers:
- 10gen/devprod-correctness
- ".gitignore": - ".gitignore":
approvers: approvers:
- 10gen/devprod-build - 10gen/devprod-build
@ -50,6 +47,9 @@ filters:
- "copy.bara.staging.sky": - "copy.bara.staging.sky":
approvers: approvers:
- 10gen/devprod-correctness - 10gen/devprod-correctness
- "eslint.config.mjs":
approvers:
- 10gen/devprod-correctness
- "jsconfig.json": - "jsconfig.json":
approvers: approvers:
- 10gen/devprod-correctness - 10gen/devprod-correctness

View File

@ -34,6 +34,78 @@ http_archive(
], ],
) )
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "aspect_rules_lint",
sha256 = "f60e4a737a5e09402f5fa3bd182efa80dac5523ca4b9bc5c6fa8c06fbfb46630",
strip_prefix = "rules_lint-1.1.0",
url = "https://github.com/aspect-build/rules_lint/releases/download/v1.1.0/rules_lint-v1.1.0.tar.gz",
)
# aspect_rules_lint depends on aspect_bazel_lib.
http_archive(
name = "aspect_bazel_lib",
sha256 = "6d758a8f646ecee7a3e294fbe4386daafbe0e5966723009c290d493f227c390b",
strip_prefix = "bazel-lib-2.7.7",
url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.7.7/bazel-lib-v2.7.7.tar.gz",
)
load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies")
# aspect_bazel_lib depends on bazel_skylib
aspect_bazel_lib_dependencies()
load(
"@aspect_rules_lint//format:repositories.bzl",
# Fetch additional formatter binaries you need:
"fetch_java_format",
"fetch_ktfmt",
"fetch_swiftformat",
"rules_lint_dependencies",
)
rules_lint_dependencies()
fetch_java_format()
fetch_ktfmt()
fetch_swiftformat()
load("@aspect_rules_lint//lint:checkstyle.bzl", "fetch_checkstyle")
fetch_checkstyle()
load("@aspect_rules_lint//lint:pmd.bzl", "fetch_pmd")
fetch_pmd()
load("@aspect_rules_lint//lint:vale.bzl", "fetch_vale")
fetch_vale()
load("@aspect_rules_lint//lint:ktlint.bzl", "fetch_ktlint")
fetch_ktlint()
load("@aspect_rules_lint//lint:spotbugs.bzl", "fetch_spotbugs")
fetch_spotbugs()
########################
# Optional: multitool provides defaults for some tools such as yamlfmt
# If you do not set up multitool, you must provide these tools yourself
load("@rules_multitool//multitool:multitool.bzl", "multitool")
multitool(
name = "multitool",
lockfiles = [
"@aspect_rules_lint//format:multitool.lock.json",
"@aspect_rules_lint//lint:multitool.lock.json",
],
)
load("//bazel/platforms:local_config_platform.bzl", "setup_local_config_platform") load("//bazel/platforms:local_config_platform.bzl", "setup_local_config_platform")
load("//bazel/toolchains:mongo_toolchain.bzl", "toolchain_download") load("//bazel/toolchains:mongo_toolchain.bzl", "toolchain_download")
@ -165,16 +237,16 @@ poetry(
http_archive( http_archive(
name = "aspect_rules_js", name = "aspect_rules_js",
sha256 = "630a71aba66c4023a5b16ab3efafaeed8b1a2865ccd168a34611eb73876b3fc4", sha256 = "875b8d01af629dbf626eddc5cf239c9f0da20330f4d99ad956afc961096448dd",
strip_prefix = "rules_js-1.37.1", strip_prefix = "rules_js-2.1.3",
urls = [ urls = [
# Implements retry by relisting each url multiple times to be used as a failover. # Implements retry by relisting each url multiple times to be used as a failover.
# TODO(SERVER-86719): Re-implement http_archive to allow sleeping between retries # TODO(SERVER-86719): Re-implement http_archive to allow sleeping between retries
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz", "https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz", "https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz", "https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz", "https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz", "https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
], ],
) )
@ -182,17 +254,15 @@ load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
rules_js_dependencies() rules_js_dependencies()
load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains") load("@aspect_rules_js//js:toolchains.bzl", "DEFAULT_NODE_VERSION", "rules_js_register_toolchains")
nodejs_register_toolchains( rules_js_register_toolchains(node_version = DEFAULT_NODE_VERSION)
name = "nodejs",
node_version = DEFAULT_NODE_VERSION,
)
load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock") load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
npm_translate_lock( npm_translate_lock(
name = "npm", name = "npm",
npmrc = "//:.npmrc",
pnpm_lock = "//:pnpm-lock.yaml", pnpm_lock = "//:pnpm-lock.yaml",
verify_node_modules_ignored = "//:.bazelignore", verify_node_modules_ignored = "//:.bazelignore",
) )

View File

@ -5,3 +5,10 @@ exports_files([
"scons_link_list.py", "scons_link_list.py",
"install_rules.py", "install_rules.py",
]) ])
sh_binary(
name = "lint",
srcs = ["lint.sh"],
args = ["//..."],
visibility = ["//visibility:public"],
)

2
bazel/lint.sh Executable file
View File

@ -0,0 +1,2 @@
# placeholder for bazel/wrapper_hook/lint.py
echo "No linter errors found!"

171
bazel/wrapper_hook/lint.py Normal file
View File

@ -0,0 +1,171 @@
import os
import pathlib
import platform
import subprocess
import sys
import tempfile
REPO_ROOT = pathlib.Path(__file__).parent.parent.parent
sys.path.append(str(REPO_ROOT))
def list_files_without_targets(bazel_bin: str):
# rules_lint only checks files that are in targets, verify that all files in the source tree
# are contained within targets.
js_files_in_targets = [
line.strip()
for line in subprocess.check_output(
[bazel_bin, "cquery", 'kind("source file", deps(//...))', "--output", "files"],
stderr=subprocess.STDOUT,
)
.decode("utf-8")
.splitlines()
if line.strip().endswith("js")
]
print("Checking that all javascript files have BUILD.bazel targets...")
# Find all .js files in src/mongo and jstests
js_files = (
subprocess.check_output(
["find", "src/mongo", "jstests", "-name", "*.js"],
stderr=subprocess.STDOUT,
)
.decode("utf-8")
.splitlines()
)
# Convert js_files_in_targets to a set for easy comparison
js_files_in_targets_set = set()
for file in js_files_in_targets:
# Remove the leading "//" and replace ":" with "/"
clean_file = file.lstrip("//").replace(":", "/")
js_files_in_targets_set.add(clean_file)
# Create a new list of files that are in js_files but not in js_files_in_targets
new_list = []
for file in js_files:
if file not in js_files_in_targets_set:
new_list.append(file)
if len(new_list) != 0:
print("Found javascript files without BUILD.bazel definitions:")
for file in new_list:
print(f"\t{file}")
print("")
print("Please add these to a js_library target in a BUILD.bazel file in their directory")
return False
print("All javascript files have BUILD.bazel targets!")
return True
def run_rules_lint(bazel_bin, args):
if platform.system() == "Windows":
print("eslint not supported on windows")
sys.exit(1)
if not list_files_without_targets(bazel_bin):
sys.exit(1)
# Default to linting everything if no path was passed in
if len(args) == 0:
args = ["//..."]
fix = ""
with tempfile.NamedTemporaryFile(delete=False) as buildevents:
buildevents_path = buildevents.name
args.append("--aspects=//tools/lint:linters.bzl%eslint")
args.extend(
[
# Allow lints of code that fails some validation action
# See https://github.com/aspect-build/rules_ts/pull/574#issuecomment-2073632879
"--norun_validations",
f"--build_event_json_file={buildevents_path}",
"--output_groups=rules_lint_human",
"--remote_download_regex='.*AspectRulesLint.*'",
]
)
# This is a rudimentary flag parser.
if args[1] == "--fail-on-violation":
args.extend(["--@aspect_rules_lint//lint:fail_on_violation", "--keep_going"])
args.pop(1)
# Allow a `--fix` option on the command-line.
# This happens to make output of the linter such as ruff's
# [*] 1 fixable with the `--fix` option.
# so that the naive thing of pasting that flag to lint.sh will do what the user expects.
if args[1] == "--fix":
fix = "patch"
args.extend(["--@aspect_rules_lint//lint:fix", "--output_groups=rules_lint_patch"])
args.pop(1)
# the --dry-run flag must immediately follow the --fix flag
if args[1] == "--dry-run":
fix = "print"
args.pop(1)
# Actually run the lint itself
subprocess.run([bazel_bin, "build"] + args, check=True)
# Parse out the reports from the build events
filter_expr = '.namedSetOfFiles | values | .files[] | select(.name | endswith($ext)) | ((.pathPrefix | join("/")) + "/" + .name)'
# Maybe this could be hermetic with bazel run @aspect_bazel_lib//tools:jq or sth
# jq on windows outputs CRLF which breaks this script. https://github.com/jqlang/jq/issues/92
valid_reports = (
subprocess.run(
["jq", "--arg", "ext", ".out", "--raw-output", filter_expr, buildevents_path],
capture_output=True,
text=True,
check=True,
)
.stdout.strip()
.split("\n")
)
for report in valid_reports:
# Exclude coverage reports, and check if the output is empty.
if "coverage.dat" in report or not os.path.exists(report) or not os.path.getsize(report):
# Report is empty. No linting errors.
continue
print(f"From {report}:")
with open(report, "r", encoding="utf-8") as f:
print(f.read())
print()
# Apply fixes if requested
if fix:
valid_patches = (
subprocess.run(
["jq", "--arg", "ext", ".patch", "--raw-output", filter_expr, buildevents_path],
capture_output=True,
text=True,
check=True,
)
.stdout.strip()
.split("\n")
)
for patch in valid_patches:
# Exclude coverage, and check if the patch is empty.
if "coverage.dat" in patch or not os.path.exists(patch) or not os.path.getsize(patch):
# Patch is empty. No linting errors.
continue
if fix == "print":
print(f"From {patch}:")
with open(patch, "r", encoding="utf-8") as f:
print(f.read())
print()
elif fix == "patch":
subprocess.run(
["patch", "-p1"], check=True, stdin=open(patch, "r", encoding="utf-8")
)
else:
print(f"ERROR: unknown fix type {fix}", file=sys.stderr)
sys.exit(1)

View File

@ -10,6 +10,7 @@ REPO_ROOT = pathlib.Path(__file__).parent.parent.parent
sys.path.append(str(REPO_ROOT)) sys.path.append(str(REPO_ROOT))
from bazel.wrapper_hook.compiledb import generate_compiledb from bazel.wrapper_hook.compiledb import generate_compiledb
from bazel.wrapper_hook.lint import run_rules_lint
from bazel.wrapper_hook.wrapper_debug import wrapper_debug from bazel.wrapper_hook.wrapper_debug import wrapper_debug
@ -57,8 +58,10 @@ def test_runner_interface(args, autocomplete_query, get_buildozer_output=get_bui
plus_starts = ("+", ":+", "//:+") plus_starts = ("+", ":+", "//:+")
skip_plus_interface = True skip_plus_interface = True
compiledb_target = False compiledb_target = False
lint_target = False
persistent_compdb = True persistent_compdb = True
compiledb_targets = ["//:compiledb", ":compiledb", "compiledb"] compiledb_targets = ["//:compiledb", ":compiledb", "compiledb"]
lint_targets = ["//:lint", ":lint", "lint"]
sources_to_bin = {} sources_to_bin = {}
select_sources = {} select_sources = {}
current_select = None current_select = None
@ -80,6 +83,8 @@ def test_runner_interface(args, autocomplete_query, get_buildozer_output=get_bui
for arg in args: for arg in args:
if arg in compiledb_targets: if arg in compiledb_targets:
compiledb_target = True compiledb_target = True
if arg in lint_targets:
lint_target = True
if arg == "--intree_compdb": if arg == "--intree_compdb":
replacements[arg] = [] replacements[arg] = []
persistent_compdb = False persistent_compdb = False
@ -90,6 +95,9 @@ def test_runner_interface(args, autocomplete_query, get_buildozer_output=get_bui
if compiledb_target: if compiledb_target:
generate_compiledb(args[0], persistent_compdb) generate_compiledb(args[0], persistent_compdb)
if lint_target:
run_rules_lint(args[0], args[3:])
if skip_plus_interface and not autocomplete_query: if skip_plus_interface and not autocomplete_query:
return args[1:] return args[1:]

View File

@ -1,4 +1,5 @@
load("@poetry//:dependencies.bzl", "dependency") load("@poetry//:dependencies.bzl", "dependency")
load("@npm//:eslint/package_json.bzl", "bin")
exports_files([ exports_files([
"cheetah_source_generator.py", "cheetah_source_generator.py",
@ -226,3 +227,10 @@ py_library(
"simple_report", "simple_report",
], ],
) )
bin.eslint_binary(
name = "eslint_binary",
# Allow the binary to be run outside bazel
# See more details about this by commenting this out and running `bazel run //:format`
env = {"BAZEL_BINDIR": "."},
)

View File

@ -1,184 +0,0 @@
# Upgrade ESLint version
### Bundling ESLint executable
1. Install the latest [Node.js](https://nodejs.org/en/download/) if you don't have it.
2. Install [pkg](https://www.npmjs.com/package/pkg) with npm.
```
npm install -g pkg
```
3. Get [ESLint](https://github.com/eslint/eslint) source code.
```
git clone git@github.com:eslint/eslint.git
```
4. Checkout the latest version using git tag.
```
cd eslint
git checkout v${version}
```
5. Add pkg options to `package.json` file.
```
"pkg": {
"scripts": [ "conf/**/*", "lib/**/*", "messages/**/*" ],
"targets": [ "linux-x64", "macos-x64" ]
# "targets": [ "linux-arm" ]
},
```
6. Run pkg command to make ESLint executables.
```
npm install
pkg .
```
7. Check that executables are working.
Copy files to somewhere in your PATH and try to run it.
Depending on your system
```
eslint-linux --help
```
or
```
eslint-macos --help
```
or (if you are on arm)
```
eslint --help
```
(\*) If executable fails to find some .js files there are [extra steps](#extra-steps)
required to be done before step 6.
### Prepare archives
Rename produced files.
```
mv eslint-linux eslint-Linux-x86_64
mv eslint-macos eslint-Darwin-x86_64
# arm
# mv eslint eslint-Linux-arm64
```
Archive files. (No leading v in version e.g. 8.28.0 NOT v8.28.0)
```
tar -czvf eslint-${version}-linux-x86_64.tar.gz eslint-Linux-x86_64
tar -czvf eslint-${version}-darwin.tar.gz eslint-Darwin-x86_64
# arm
# tar -czvf eslint-${version}-linux-arm64.tar.gz eslint-Linux-arm64
```
### Upload archives to `boxes.10gen.com`
Archives should be available by the following links:
```
https://s3.amazonaws.com/boxes.10gen.com/build/eslint-${version}-linux-x86_64.tar.gz
https://s3.amazonaws.com/boxes.10gen.com/build/eslint-${version}-darwin.tar.gz
# arm
# https://s3.amazonaws.com/boxes.10gen.com/build/eslint-${version}-linux-arm64.tar.gz
```
Build team has an access to do that.
You can create a build ticket in Jira for them to do it
(e.g. https://jira.mongodb.org/browse/BUILD-12984)
### Update ESLint version in `buildscripts/eslint.py`
```
# Expected version of ESLint.
ESLINT_VERSION = "${version}"
```
### Extra steps
Unfortunately pkg doesn't work well with `require(variable)` statements
and force include files using `assets` or `scripts` options might not help.
For the ESLint version 7.22.0 and 8.28.0 the following change was applied to the
source code to make everything work:
```
diff --git a/lib/cli-engine/cli-engine.js b/lib/cli-engine/cli-engine.js
index b1befaa04..e02230f83 100644
--- a/lib/cli-engine/cli-engine.js
+++ b/lib/cli-engine/cli-engine.js
@@ -987,43 +987,35 @@ class CLIEngine {
*/
getFormatter(format) {
- // default is stylish
- const resolvedFormatName = format || "stylish";
-
- // only strings are valid formatters
- if (typeof resolvedFormatName === "string") {
-
- // replace \ with / for Windows compatibility
- const normalizedFormatName = resolvedFormatName.replace(/\\/gu, "/");
-
- const slots = internalSlotsMap.get(this);
- const cwd = slots ? slots.options.cwd : process.cwd();
- const namespace = naming.getNamespaceFromTerm(normalizedFormatName);
-
- let formatterPath;
-
- // if there's a slash, then it's a file (TODO: this check seems dubious for scoped npm packages)
- if (!namespace && normalizedFormatName.indexOf("/") > -1) {
- formatterPath = path.resolve(cwd, normalizedFormatName);
- } else {
- try {
- const npmFormat = naming.normalizePackageName(normalizedFormatName, "eslint-formatter");
-
- formatterPath = ModuleResolver.resolve(npmFormat, path.join(cwd, "__placeholder__.js"));
- } catch {
- formatterPath = path.resolve(__dirname, "formatters", normalizedFormatName);
- }
- }
-
- try {
- return require(formatterPath);
- } catch (ex) {
- ex.message = `There was a problem loading formatter: ${formatterPath}\nError: ${ex.message}`;
- throw ex;
- }
-
- } else {
- return null;
+ switch (format) {
+ case "checkstyle":
+ return require("./formatters/checkstyle.js");
+ case "codeframe":
+ return require("./formatters/codeframe.js");
+ case "compact":
+ return require("./formatters/compact.js");
+ case "html":
+ return require("./formatters/html.js");
+ case "jslint-xml":
+ return require("./formatters/jslint-xml.js");
+ case "json-with-metadata":
+ return require("./formatters/json-with-metadata.js");
+ case "json":
+ return require("./formatters/json.js");
+ case "junit":
+ return require("./formatters/junit.js");
+ case "stylish":
+ return require("./formatters/stylish.js");
+ case "table":
+ return require("./formatters/table.js");
+ case "tap":
+ return require("./formatters/tap.js");
+ case "unix":
+ return require("./formatters/unix.js");
+ case "visualstudio":
+ return require("./formatters/visualstudio.js");
+ default:
+ return require("./formatters/stylish.js");
}
}
}
```

View File

@ -10,7 +10,7 @@ class PyrightLinter(base.LinterBase):
def __init__(self): def __init__(self):
"""Create a Pyright linter.""" """Create a Pyright linter."""
super(PyrightLinter, self).__init__("pyright", "1.1.380") super(PyrightLinter, self).__init__("pyright", "1.1.393")
def get_lint_version_cmd_args(self) -> List[str]: def get_lint_version_cmd_args(self) -> List[str]:
"""Get the command to run a version check.""" """Get the command to run a version check."""

View File

@ -4,6 +4,7 @@
import argparse import argparse
import logging import logging
import os import os
import subprocess
import sys import sys
from typing import List from typing import List
@ -90,6 +91,12 @@ def main():
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
structlog.configure(logger_factory=structlog.stdlib.LoggerFactory()) structlog.configure(logger_factory=structlog.stdlib.LoggerFactory())
# Use the nodejs binary from the bazel's npm repository
subprocess.run(["bazel", "build", "//:eslint", "--config=local"], env=os.environ, check=True)
os.environ["PATH"] = (
"bazel-bin/eslint_/eslint.runfiles/nodejs_linux_arm64/bin/nodejs/bin/" + os.pathsep
) + os.environ["PATH"]
args.func(args.paths if hasattr(args, "paths") else []) args.func(args.paths if hasattr(args, "paths") else [])

View File

@ -42,14 +42,11 @@ Ex: `buildscripts/quickmongolint.py lint`
## Javascript Linters ## Javascript Linters
The `buildscripts/eslint.py` wrapper script runs the `eslint` javascript linter. You can see the The `bazel run lint` command runs the `eslint` javascript linter.
usage message for the wrapper by running `buildscripts/eslint.py --help`.
Ex: `buildscripts/eslint.py lint` | Linter | Configuration File(s) | Help Command | Documentation |
| -------- | --------------------- | ------------ | ------------------------------------------ |
| Linter | Configuration File(s) | Help Command | Documentation | | `eslint` | `.eslint.config.mjs` | | [https://eslint.org/](https://eslint.org/) |
| -------- | ------------------------------- | --------------- | ------------------------------------------ |
| `eslint` | `.eslintrc.yml` `.eslintignore` | `eslint --help` | [https://eslint.org/](https://eslint.org/) |
## Yaml Linters ## Yaml Linters

265
eslint.config.mjs Normal file
View File

@ -0,0 +1,265 @@
import globals from "globals";
import path from "node:path";
import { fileURLToPath } from "node:url";
import eslint from "@eslint/js";
import js from "@eslint/js";
import { FlatCompat } from "@eslint/eslintrc";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});
export default [{
ignores: ["src/mongo/gotools/*", "**/*.tpl.js", "jstests/third_party/**/*.js"],
}, ...compat.extends("eslint:recommended"), {
languageOptions: {
globals: {
...globals.mongo,
TestData: true,
WriteError: true,
WriteCommandError: true,
BulkWriteError: true,
DB: true,
DBCollection: true,
DBQuery: true,
DBExplainQuery: true,
DBCommandCursor: true,
MongoBridge: true,
MongoURI: true,
WriteConcern: true,
SessionOptions: true,
CollInfos: true,
CountDownLatch: true,
BSONAwareMap: true,
latestFCV: true,
lastLTSFCV: true,
lastContinuousFCV: true,
checkFCV: true,
isFCVEqual: true,
binVersionToFCV: true,
numVersionsSinceLastLTS: true,
getFCVConstants: true,
removeFCVDocument: true,
targetFCV: true,
AssertionError: true,
assert: true,
doassert: true,
authutil: true,
tojson: true,
tojsononeline: true,
tostrictjson: true,
tojsonObject: true,
toEJSON: true,
print: true,
printjson: true,
printjsononeline: true,
jsTest: true,
jsTestLog: true,
jsonTestLog: true,
ErrorCodes: true,
ErrorCodeStrings: true,
checkProgram: true,
Random: true,
checkLog: true,
sleep: true,
resetDbpath: true,
copyDbpath: true,
jsTestName: true,
startParallelShell: true,
buildInfo: true,
getBuildInfo: true,
jsTestOptions: true,
printShardingStatus: true,
_getErrorWithCode: true,
isNetworkError: true,
__magicNoPrint: true,
computeSHA256Block: true,
emit: true,
_awaitRSHostViaRSMonitor: true,
convertShardKeyToHashed: true,
benchRun: true,
benchRunSync: true,
gc: true,
DataConsistencyChecker: true,
isNumber: true,
isObject: true,
isString: true,
_createSecurityToken: true,
_createTenantToken: true,
_isAddressSanitizerActive: true,
_isLeakSanitizerActive: true,
_isThreadSanitizerActive: true,
_isUndefinedBehaviorSanitizerActive: true,
_isSpiderMonkeyDebugEnabled: true,
_optimizationsEnabled: true,
allocatePort: true,
allocatePorts: true,
resetAllocatedPorts: true,
bsonObjToArray: true,
_writeTestPipeObjects: true,
_writeTestPipe: true,
_writeTestPipeBsonFile: true,
_readTestPipes: true,
runFeatureFlagMultiversionTest: true,
isRetryableError: true,
numberDecimalsAlmostEqual: true,
numberDecimalsEqual: true,
debug: true,
bsonsize: true,
_DelegatingDriverSession: true,
_DummyDriverSession: true,
_ServerSession: true,
sortDoc: true,
executeNoThrowNetworkError: true,
_readDumpFile: true,
_openGoldenData: true,
_writeGoldenData: true,
_threadInject: true,
port: true,
_buildBsonObj: true,
convertTrafficRecordingToBSON: true,
_setShellFailPoint: true,
shellHelper: true,
_srand: true,
_shouldUseImplicitSessions: true,
testingReplication: true,
myPort: true,
retryOnNetworkError: true,
getJSHeapLimitMB: true,
_getEnv: true,
indentStr: true,
_forgetReplSet: true,
_fnvHashToHexString: true,
_resultSetsEqualUnordered: true,
getStringWidth: true,
_compareStringsWithCollation: true,
eventResumeTokenType: true,
highWaterMarkResumeTokenType: true,
// likely could be replaced with `path`
_copyFileRange: true,
appendFile: true,
copyFile: true,
writeFile: true,
fileExists: true,
pathExists: true,
umask: true,
getFileMode: true,
copyDir: true,
// likely could be replaced with `child_process`
MongoRunner: true,
run: true,
runProgram: true,
runMongoProgram: true,
runNonMongoProgram: true,
runNonMongoProgramQuietly: true,
_runMongoProgram: true,
_startMongoProgram: true,
startMongoProgram: true,
_stopMongoProgram: true,
stopMongoProgramByPid: true,
clearRawMongoProgramOutput: true,
rawMongoProgramOutput: true,
waitProgram: true,
waitMongoProgram: true,
_runningMongoChildProcessIds: true,
startMongoProgramNoConnect: true,
// shell-specific
shellPrintHelper: true,
shellAutocomplete: true,
__autocomplete__: true,
defaultPrompt: true,
___it___: true,
__promptWrapper__: true,
passwordPrompt: true,
isInteractive: true,
// built-in BSON types and helpers
Code: true,
MaxKey: true,
MinKey: true,
HexData: true,
DBPointer: true,
DBRef: true,
BinData: true,
NumberLong: true,
NumberDecimal: true,
Timestamp: true,
MD5: true,
Geo: true,
decodeResumeToken: true,
bsonWoCompare: true,
bsonUnorderedFieldsCompare: true,
bsonBinaryEqual: true,
friendlyEqual: true,
timestampCmp: true,
decompressBSONColumn: true,
hex_md5: true,
QueryHelpers: true,
chatty: true,
DriverSession: true,
ToolTest: true,
uncheckedParallelShellPidsString: true,
_shouldRetryWrites: true,
// from_cpp:
__prompt__: true,
_replMonitorStats: true,
// explainable.js
Explainable: true,
// utils.js
_verboseShell: true,
__quiet: true,
printStackTrace: true,
setVerboseShell: true,
_barFormat: true,
compare: true,
compareOn: true,
shellPrint: true,
_originalPrint: true,
disablePrint: true,
enablePrint: true,
replSetMemberStatePrompt: true,
hasErrorCode: true,
helloStatePrompt: true,
_validateMemberIndex: true,
help: true,
retryOnRetryableError: true,
},
ecmaVersion: 2022,
sourceType: "module",
},
rules: {
"no-prototype-builtins": 0,
"no-useless-escape": 0,
"no-irregular-whitespace": 0,
"no-inner-declarations": 0,
"no-unused-vars": [0, {
varsIgnorePattern: "^_",
args: "none",
}],
"no-empty": 0,
"no-redeclare": 0,
"no-constant-condition": 0,
"no-loss-of-precision": 0,
semi: 2,
"no-restricted-syntax": ["error", {
message: "Invalid load call. Please convert your library to a module and import it instead.",
selector: "CallExpression > Identifier[name=\"load\"]",
}],
},
}];

View File

@ -601,7 +601,7 @@ tasks:
jepsen_test_name: set jepsen_test_name: set
# TODO(SERVER-97804): rename if display_name appears on the evergreen UI # TODO(SERVER-97804): rename if display_name appears on the evergreen UI
- name: bazel_run_//:format - name: bazel_run_format
tags: tags:
[ [
"assigned_to_jira_team_devprod_build", "assigned_to_jira_team_devprod_build",
@ -796,6 +796,9 @@ tasks:
"development_critical_single_variant", "development_critical_single_variant",
"lint", "lint",
] ]
depends_on:
- name: version_expansions_gen
variant: generate-tasks-for-version
commands: commands:
- command: timeout.update - command: timeout.update
params: params:

View File

@ -116,10 +116,17 @@ buildvariants:
- name: compile_jstestshell_TG - name: compile_jstestshell_TG
distros: distros:
- amazon2-arm64-latest-nvme - amazon2-arm64-latest-nvme
- name: .development_critical_single_variant !.requires_large_host # TODO(SERVER-99105): Remove the lint/non-lint branch once this is on AL2023
- name: .development_critical_single_variant .requires_large_host - name: .development_critical_single_variant !.requires_large_host !.lint
- name: .development_critical_single_variant .requires_large_host !.lint
distros: distros:
- amazon2-arm64-latest-xlarge - amazon2-arm64-latest-xlarge
- name: .development_critical_single_variant !.requires_large_host .lint
distros:
- amazon2023.3-arm64-small
- name: .development_critical_single_variant .requires_large_host .lint
distros:
- amazon2023.3-arm64-large
- name: .development_critical .requires_compile_variant !.requires_large_host !.incompatible_development_variant !.stitch !.crypt - name: .development_critical .requires_compile_variant !.requires_large_host !.incompatible_development_variant !.stitch !.crypt
- name: .development_critical .requires_compile_variant .requires_large_host !.incompatible_development_variant !.stitch !.crypt - name: .development_critical .requires_compile_variant .requires_large_host !.incompatible_development_variant !.stitch !.crypt
distros: distros:
@ -211,10 +218,17 @@ buildvariants:
- name: compile_test_parallel_dbtest_stream_TG - name: compile_test_parallel_dbtest_stream_TG
distros: distros:
- amazon2-arm64-xlarge-commitqueue - amazon2-arm64-xlarge-commitqueue
- name: .development_critical_single_variant !.requires_large_host !.clang_tidy !libdeps_graph_linting # TODO(SERVER-99105): Remove the lint/non-lint branch once this is on AL2023
- name: .development_critical_single_variant .requires_large_host !.clang_tidy !libdeps_graph_linting - name: .development_critical_single_variant !.requires_large_host !.clang_tidy !libdeps_graph_linting !.lint
- name: .development_critical_single_variant .requires_large_host !.clang_tidy !libdeps_graph_linting !.lint
distros: distros:
- amazon2-arm64-latest-large - amazon2-arm64-latest-large
- name: .development_critical_single_variant !.requires_large_host !.clang_tidy !libdeps_graph_linting .lint
distros:
- amazon2023.3-arm64-small
- name: .development_critical_single_variant .requires_large_host !.clang_tidy !libdeps_graph_linting .lint
distros:
- amazon2023.3-arm64-large
- name: .development_critical !.requires_large_host_commit_queue - name: .development_critical !.requires_large_host_commit_queue
- name: .development_critical .requires_large_host_commit_queue - name: .development_critical .requires_large_host_commit_queue
distros: distros:

View File

@ -716,10 +716,17 @@ buildvariants:
- name: compile_jstestshell_TG - name: compile_jstestshell_TG
distros: distros:
- amazon2-arm64-latest-nvme - amazon2-arm64-latest-nvme
- name: .development_critical_single_variant !.requires_large_host # TODO(SERVER-99105): Remove the lint/non-lint branch once this is on AL2023
- name: .development_critical_single_variant .requires_large_host - name: .development_critical_single_variant !.requires_large_host !.lint
- name: .development_critical_single_variant .requires_large_host !.lint
distros: distros:
- amazon2-arm64-latest-xlarge - amazon2-arm64-latest-xlarge
- name: .development_critical_single_variant !.requires_large_host .lint
distros:
- amazon2023.3-arm64-small
- name: .development_critical_single_variant .requires_large_host .lint
distros:
- amazon2023.3-arm64-large
- name: .development_critical .requires_compile_variant !.requires_large_host !.incompatible_development_variant !.stitch !.crypt - name: .development_critical .requires_compile_variant !.requires_large_host !.incompatible_development_variant !.stitch !.crypt
- name: .development_critical .requires_compile_variant .requires_large_host !.incompatible_development_variant !.stitch !.crypt - name: .development_critical .requires_compile_variant .requires_large_host !.incompatible_development_variant !.stitch !.crypt
distros: distros:

View File

@ -3,7 +3,14 @@
"version": "1.0.0", "version": "1.0.0",
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"prettier": "3.4.2", "@eslint/js": "^9",
"eslint": "8.28.0" "@eslint/eslintrc": "3.2.0",
"eslint": "9.19.0",
"globals": "14.0.0",
"eslint-formatter-unix": "^8.40.0",
"prettier": "3.4.2"
},
"pnpm": {
"onlyBuiltDependencies": []
} }
} }

424
pnpm-lock.yaml generated
View File

@ -4,30 +4,75 @@ settings:
autoInstallPeers: true autoInstallPeers: true
excludeLinksFromLockfile: false excludeLinksFromLockfile: false
devDependencies: onlyBuiltDependencies: []
eslint:
specifier: 8.28.0 importers:
version: 8.28.0
prettier: .:
specifier: 3.2.5 devDependencies:
version: 3.2.5 '@eslint/eslintrc':
specifier: 3.2.0
version: 3.2.0
'@eslint/js':
specifier: ^9
version: 9.19.0
eslint:
specifier: 9.19.0
version: 9.19.0
eslint-formatter-unix:
specifier: ^8.40.0
version: 8.40.0
globals:
specifier: 14.0.0
version: 14.0.0
prettier:
specifier: 3.4.2
version: 3.4.2
packages: packages:
/@aashutoshrathi/word-wrap@1.2.6: /@eslint-community/eslint-utils@4.4.1(eslint@9.19.0):
resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: '>=0.10.0'} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
eslint: 9.19.0
eslint-visitor-keys: 3.4.3
dev: true dev: true
/@eslint/eslintrc@1.4.1: /@eslint-community/regexpp@4.12.1:
resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true
/@eslint/config-array@0.19.1:
resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
'@eslint/object-schema': 2.1.5
debug: 4.4.0
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
dev: true
/@eslint/core@0.10.0:
resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
'@types/json-schema': 7.0.15
dev: true
/@eslint/eslintrc@3.2.0:
resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies: dependencies:
ajv: 6.12.6 ajv: 6.12.6
debug: 4.3.4 debug: 4.4.0
espree: 9.6.1 espree: 10.3.0
globals: 13.24.0 globals: 14.0.0
ignore: 5.3.0 ignore: 5.3.2
import-fresh: 3.3.0 import-fresh: 3.3.0
js-yaml: 4.1.0 js-yaml: 4.1.0
minimatch: 3.1.2 minimatch: 3.1.2
@ -36,15 +81,35 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@humanwhocodes/config-array@0.11.14: /@eslint/js@9.19.0:
resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==}
engines: {node: '>=10.10.0'} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
/@eslint/object-schema@2.1.5:
resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
/@eslint/plugin-kit@0.2.5:
resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies: dependencies:
'@humanwhocodes/object-schema': 2.0.2 '@eslint/core': 0.10.0
debug: 4.3.4 levn: 0.4.1
minimatch: 3.1.2 dev: true
transitivePeerDependencies:
- supports-color /@humanfs/core@0.19.1:
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
dev: true
/@humanfs/node@0.16.6:
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
engines: {node: '>=18.18.0'}
dependencies:
'@humanfs/core': 0.19.1
'@humanwhocodes/retry': 0.3.1
dev: true dev: true
/@humanwhocodes/module-importer@1.0.1: /@humanwhocodes/module-importer@1.0.1:
@ -52,41 +117,34 @@ packages:
engines: {node: '>=12.22'} engines: {node: '>=12.22'}
dev: true dev: true
/@humanwhocodes/object-schema@2.0.2: /@humanwhocodes/retry@0.3.1:
resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
dev: true dev: true
/@nodelib/fs.scandir@2.1.5: /@humanwhocodes/retry@0.4.1:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
engines: {node: '>= 8'} engines: {node: '>=18.18'}
dependencies:
'@nodelib/fs.stat': 2.0.5
run-parallel: 1.2.0
dev: true dev: true
/@nodelib/fs.stat@2.0.5: /@types/estree@1.0.6:
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
engines: {node: '>= 8'}
dev: true dev: true
/@nodelib/fs.walk@1.2.8: /@types/json-schema@7.0.15:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
engines: {node: '>= 8'}
dependencies:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.0
dev: true dev: true
/acorn-jsx@5.3.2(acorn@8.11.3): /acorn-jsx@5.3.2(acorn@8.14.0):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies: peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies: dependencies:
acorn: 8.11.3 acorn: 8.14.0
dev: true dev: true
/acorn@8.11.3: /acorn@8.14.0:
resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
dev: true dev: true
@ -100,11 +158,6 @@ packages:
uri-js: 4.4.1 uri-js: 4.4.1
dev: true dev: true
/ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
dev: true
/ansi-styles@4.3.0: /ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -155,8 +208,8 @@ packages:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true dev: true
/cross-spawn@7.0.3: /cross-spawn@7.0.6:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
dependencies: dependencies:
path-key: 3.1.1 path-key: 3.1.1
@ -164,8 +217,8 @@ packages:
which: 2.0.2 which: 2.0.2
dev: true dev: true
/debug@4.3.4: /debug@4.4.0:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
engines: {node: '>=6.0'} engines: {node: '>=6.0'}
peerDependencies: peerDependencies:
supports-color: '*' supports-color: '*'
@ -173,112 +226,100 @@ packages:
supports-color: supports-color:
optional: true optional: true
dependencies: dependencies:
ms: 2.1.2 ms: 2.1.3
dev: true dev: true
/deep-is@0.1.4: /deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true dev: true
/doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'}
dependencies:
esutils: 2.0.3
dev: true
/escape-string-regexp@4.0.0: /escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
dev: true dev: true
/eslint-scope@7.2.2: /eslint-formatter-unix@8.40.0:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} resolution: {integrity: sha512-gfsmFZ/cb1MobrMfYl2IPFLZEz2tWQVO/tnmziNQdhWJMN85GfZD64dcPsEgaEoeVKgAtK6W9LWLlOxhJWZvDw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/eslint-scope@8.2.0:
resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies: dependencies:
esrecurse: 4.3.0 esrecurse: 4.3.0
estraverse: 5.3.0 estraverse: 5.3.0
dev: true dev: true
/eslint-utils@3.0.0(eslint@8.28.0):
resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
peerDependencies:
eslint: '>=5'
dependencies:
eslint: 8.28.0
eslint-visitor-keys: 2.1.0
dev: true
/eslint-visitor-keys@2.1.0:
resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
engines: {node: '>=10'}
dev: true
/eslint-visitor-keys@3.4.3: /eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/eslint@8.28.0: /eslint-visitor-keys@4.2.0:
resolution: {integrity: sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==} resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
/eslint@9.19.0:
resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true hasBin: true
peerDependencies:
jiti: '*'
peerDependenciesMeta:
jiti:
optional: true
dependencies: dependencies:
'@eslint/eslintrc': 1.4.1 '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0)
'@humanwhocodes/config-array': 0.11.14 '@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.19.1
'@eslint/core': 0.10.0
'@eslint/eslintrc': 3.2.0
'@eslint/js': 9.19.0
'@eslint/plugin-kit': 0.2.5
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8 '@humanwhocodes/retry': 0.4.1
'@types/estree': 1.0.6
'@types/json-schema': 7.0.15
ajv: 6.12.6 ajv: 6.12.6
chalk: 4.1.2 chalk: 4.1.2
cross-spawn: 7.0.3 cross-spawn: 7.0.6
debug: 4.3.4 debug: 4.4.0
doctrine: 3.0.0
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint-scope: 7.2.2 eslint-scope: 8.2.0
eslint-utils: 3.0.0(eslint@8.28.0) eslint-visitor-keys: 4.2.0
eslint-visitor-keys: 3.4.3 espree: 10.3.0
espree: 9.6.1 esquery: 1.6.0
esquery: 1.5.0
esutils: 2.0.3 esutils: 2.0.3
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
file-entry-cache: 6.0.1 file-entry-cache: 8.0.0
find-up: 5.0.0 find-up: 5.0.0
glob-parent: 6.0.2 glob-parent: 6.0.2
globals: 13.24.0 ignore: 5.3.2
grapheme-splitter: 1.0.4
ignore: 5.3.0
import-fresh: 3.3.0
imurmurhash: 0.1.4 imurmurhash: 0.1.4
is-glob: 4.0.3 is-glob: 4.0.3
is-path-inside: 3.0.3
js-sdsl: 4.4.2
js-yaml: 4.1.0
json-stable-stringify-without-jsonify: 1.0.1 json-stable-stringify-without-jsonify: 1.0.1
levn: 0.4.1
lodash.merge: 4.6.2 lodash.merge: 4.6.2
minimatch: 3.1.2 minimatch: 3.1.2
natural-compare: 1.4.0 natural-compare: 1.4.0
optionator: 0.9.3 optionator: 0.9.4
regexpp: 3.2.0
strip-ansi: 6.0.1
strip-json-comments: 3.1.1
text-table: 0.2.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/espree@9.6.1: /espree@10.3.0:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies: dependencies:
acorn: 8.11.3 acorn: 8.14.0
acorn-jsx: 5.3.2(acorn@8.11.3) acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 4.2.0
dev: true dev: true
/esquery@1.5.0: /esquery@1.6.0:
resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'} engines: {node: '>=0.10'}
dependencies: dependencies:
estraverse: 5.3.0 estraverse: 5.3.0
@ -313,17 +354,11 @@ packages:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
dev: true dev: true
/fastq@1.17.0: /file-entry-cache@8.0.0:
resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
dependencies: dependencies:
reusify: 1.0.4 flat-cache: 4.0.1
dev: true
/file-entry-cache@6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
flat-cache: 3.2.0
dev: true dev: true
/find-up@5.0.0: /find-up@5.0.0:
@ -334,21 +369,16 @@ packages:
path-exists: 4.0.0 path-exists: 4.0.0
dev: true dev: true
/flat-cache@3.2.0: /flat-cache@4.0.1:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: ^10.12.0 || >=12.0.0} engines: {node: '>=16'}
dependencies: dependencies:
flatted: 3.2.9 flatted: 3.3.2
keyv: 4.5.4 keyv: 4.5.4
rimraf: 3.0.2
dev: true dev: true
/flatted@3.2.9: /flatted@3.3.2:
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
dev: true
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true dev: true
/glob-parent@6.0.2: /glob-parent@6.0.2:
@ -358,26 +388,9 @@ packages:
is-glob: 4.0.3 is-glob: 4.0.3
dev: true dev: true
/glob@7.2.3: /globals@14.0.0:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
dependencies: engines: {node: '>=18'}
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: true
/globals@13.24.0:
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
engines: {node: '>=8'}
dependencies:
type-fest: 0.20.2
dev: true
/grapheme-splitter@1.0.4:
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
dev: true dev: true
/has-flag@4.0.0: /has-flag@4.0.0:
@ -385,8 +398,8 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: true dev: true
/ignore@5.3.0: /ignore@5.3.2:
resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
dev: true dev: true
@ -403,17 +416,6 @@ packages:
engines: {node: '>=0.8.19'} engines: {node: '>=0.8.19'}
dev: true dev: true
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: true
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: true
/is-extglob@2.1.1: /is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -426,19 +428,10 @@ packages:
is-extglob: 2.1.1 is-extglob: 2.1.1
dev: true dev: true
/is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
dev: true
/isexe@2.0.0: /isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: true dev: true
/js-sdsl@4.4.2:
resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==}
dev: true
/js-yaml@4.1.0: /js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true hasBin: true
@ -489,30 +482,24 @@ packages:
brace-expansion: 1.1.11 brace-expansion: 1.1.11
dev: true dev: true
/ms@2.1.2: /ms@2.1.3:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: true dev: true
/natural-compare@1.4.0: /natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true dev: true
/once@1.4.0: /optionator@0.9.4:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
dependencies:
wrappy: 1.0.2
dev: true
/optionator@0.9.3:
resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
dependencies: dependencies:
'@aashutoshrathi/word-wrap': 1.2.6
deep-is: 0.1.4 deep-is: 0.1.4
fast-levenshtein: 2.0.6 fast-levenshtein: 2.0.6
levn: 0.4.1 levn: 0.4.1
prelude-ls: 1.2.1 prelude-ls: 1.2.1
type-check: 0.4.0 type-check: 0.4.0
word-wrap: 1.2.5
dev: true dev: true
/p-limit@3.1.0: /p-limit@3.1.0:
@ -541,11 +528,6 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: true dev: true
/path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: true
/path-key@3.1.1: /path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -556,8 +538,8 @@ packages:
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
dev: true dev: true
/prettier@3.2.5: /prettier@3.4.2:
resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==}
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
dev: true dev: true
@ -567,38 +549,11 @@ packages:
engines: {node: '>=6'} engines: {node: '>=6'}
dev: true dev: true
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
/regexpp@3.2.0:
resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
engines: {node: '>=8'}
dev: true
/resolve-from@4.0.0: /resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'} engines: {node: '>=4'}
dev: true dev: true
/reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: true
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
dependencies:
glob: 7.2.3
dev: true
/run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
queue-microtask: 1.2.3
dev: true
/shebang-command@2.0.0: /shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -611,13 +566,6 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: true dev: true
/strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
dependencies:
ansi-regex: 5.0.1
dev: true
/strip-json-comments@3.1.1: /strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -630,10 +578,6 @@ packages:
has-flag: 4.0.0 has-flag: 4.0.0
dev: true dev: true
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
/type-check@0.4.0: /type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
@ -641,11 +585,6 @@ packages:
prelude-ls: 1.2.1 prelude-ls: 1.2.1
dev: true dev: true
/type-fest@0.20.2:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
dev: true
/uri-js@4.4.1: /uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies: dependencies:
@ -660,8 +599,9 @@ packages:
isexe: 2.0.0 isexe: 2.0.0
dev: true dev: true
/wrappy@1.0.2: /word-wrap@1.2.5:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
dev: true dev: true
/yocto-queue@0.1.0: /yocto-queue@0.1.0:

40
poetry.lock generated
View File

@ -73,7 +73,7 @@ description = "Backport of CPython tarfile module"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["export", "jira-client"] groups = ["export", "jira-client"]
markers = "python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"},
{file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"}, {file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"},
@ -290,7 +290,7 @@ files = [
{file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
{file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
] ]
markers = {main = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", export = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" or (platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and (sys_platform == \"linux\" or sys_platform == \"darwin\")", external-auth = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\"", jira-client = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" or (platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and sys_platform == \"linux\"", platform = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\"", testing = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""} markers = {main = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and (\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", export = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" or (platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and (sys_platform == \"linux\" or sys_platform == \"darwin\")", external-auth = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\"", jira-client = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" or (platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and sys_platform == \"linux\"", platform = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\"", testing = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""}
[package.dependencies] [package.dependencies]
pycparser = "*" pycparser = "*"
@ -918,7 +918,7 @@ description = "Backport of PEP 654 (exception groups)"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["testing"] groups = ["testing"]
markers = "python_version < \"3.11\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and python_version < \"3.11\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
{file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
@ -1308,7 +1308,7 @@ files = [
{file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"},
{file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"},
] ]
markers = {export = "python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", jira-client = "python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", testing = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""} markers = {export = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", jira-client = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", testing = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""}
[package.dependencies] [package.dependencies]
zipp = ">=3.20" zipp = ">=3.20"
@ -1449,7 +1449,7 @@ description = "Low-level, pure Python DBus protocol wrapper."
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["export", "jira-client"] groups = ["export", "jira-client"]
markers = "sys_platform == \"linux\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and sys_platform == \"linux\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"},
{file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"},
@ -2692,7 +2692,7 @@ files = [
{file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
{file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
] ]
markers = {main = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", export = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" or (platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and (sys_platform == \"linux\" or sys_platform == \"darwin\")", external-auth = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\"", jira-client = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" or (platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and sys_platform == \"linux\"", platform = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\"", testing = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""} markers = {main = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and (\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", export = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" or (platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and (sys_platform == \"linux\" or sys_platform == \"darwin\")", external-auth = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\"", jira-client = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" or (platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and sys_platform == \"linux\"", platform = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\"", testing = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""}
[[package]] [[package]]
name = "pydantic" name = "pydantic"
@ -3082,7 +3082,7 @@ description = ""
optional = false optional = false
python-versions = "*" python-versions = "*"
groups = ["platform"] groups = ["platform"]
markers = "sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "pypiwin32-223-py3-none-any.whl", hash = "sha256:67adf399debc1d5d14dffc1ab5acacb800da569754fafdc576b2a039485aa775"}, {file = "pypiwin32-223-py3-none-any.whl", hash = "sha256:67adf399debc1d5d14dffc1ab5acacb800da569754fafdc576b2a039485aa775"},
{file = "pypiwin32-223.tar.gz", hash = "sha256:71be40c1fbd28594214ecaecb58e7aa8b708eabfa0125c8a109ebd51edbd776a"}, {file = "pypiwin32-223.tar.gz", hash = "sha256:71be40c1fbd28594214ecaecb58e7aa8b708eabfa0125c8a109ebd51edbd776a"},
@ -3106,23 +3106,25 @@ files = [
[[package]] [[package]]
name = "pyright" name = "pyright"
version = "1.1.380" version = "1.1.393"
description = "Command line wrapper for pyright" description = "Command line wrapper for pyright"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["main"] groups = ["main"]
markers = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\"" markers = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""
files = [ files = [
{file = "pyright-1.1.380-py3-none-any.whl", hash = "sha256:a6404392053d8848bacc7aebcbd9d318bb46baf1a1a000359305481920f43879"}, {file = "pyright-1.1.393-py3-none-any.whl", hash = "sha256:8320629bb7a44ca90944ba599390162bf59307f3d9fb6e27da3b7011b8c17ae5"},
{file = "pyright-1.1.380.tar.gz", hash = "sha256:e6ceb1a5f7e9f03106e0aa1d6fbb4d97735a5e7ffb59f3de6b2db590baf935b2"}, {file = "pyright-1.1.393.tar.gz", hash = "sha256:aeeb7ff4e0364775ef416a80111613f91a05c8e01e58ecfefc370ca0db7aed9c"},
] ]
[package.dependencies] [package.dependencies]
nodeenv = ">=1.6.0" nodeenv = ">=1.6.0"
typing-extensions = ">=4.1"
[package.extras] [package.extras]
all = ["twine (>=3.4.1)"] all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"]
dev = ["twine (>=3.4.1)"] dev = ["twine (>=3.4.1)"]
nodejs = ["nodejs-wheel-binaries"]
[[package]] [[package]]
name = "pysocks" name = "pysocks"
@ -3215,7 +3217,7 @@ files = [
{file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"},
{file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"},
] ]
markers = {main = "(platform_system == \"Windows\" or sys_platform == \"win32\") and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", platform = "sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", testing = "sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"} markers = {main = "(platform_system == \"Windows\" or sys_platform == \"win32\") and (\"el8\" in platform_release or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\") and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", platform = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", testing = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"}
[[package]] [[package]]
name = "pywin32-ctypes" name = "pywin32-ctypes"
@ -3224,7 +3226,7 @@ description = "A (partial) reimplementation of pywin32 using ctypes/cffi"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
groups = ["export", "jira-client"] groups = ["export", "jira-client"]
markers = "sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and sys_platform == \"win32\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"}, {file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"},
{file = "pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"}, {file = "pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"},
@ -3780,7 +3782,7 @@ description = "Python bindings to FreeDesktop.org Secret Service API"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
groups = ["export", "jira-client"] groups = ["export", "jira-client"]
markers = "sys_platform == \"linux\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and sys_platform == \"linux\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"},
{file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"},
@ -4105,7 +4107,7 @@ description = "A lil' TOML parser"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["export", "lint", "testing"] groups = ["export", "lint", "testing"]
markers = "python_version < \"3.11\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and python_version < \"3.11\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
{file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
@ -4275,7 +4277,7 @@ description = "An extension for use in the twisted I/O Completion Ports reactor.
optional = false optional = false
python-versions = "*" python-versions = "*"
groups = ["external-auth"] groups = ["external-auth"]
markers = "platform_system == \"Windows\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and platform_system == \"Windows\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "twisted-iocpsupport-1.0.4.tar.gz", hash = "sha256:858096c0d15e33f15ac157f455d8f86f2f2cdd223963e58c0f682a3af8362d89"}, {file = "twisted-iocpsupport-1.0.4.tar.gz", hash = "sha256:858096c0d15e33f15ac157f455d8f86f2f2cdd223963e58c0f682a3af8362d89"},
{file = "twisted_iocpsupport-1.0.4-cp310-cp310-win32.whl", hash = "sha256:afa2b630797f9ed2f27f3d9f55e3f72b4244911e45a8c82756f44babbf0b243e"}, {file = "twisted_iocpsupport-1.0.4-cp310-cp310-win32.whl", hash = "sha256:afa2b630797f9ed2f27f3d9f55e3f72b4244911e45a8c82756f44babbf0b243e"},
@ -4611,7 +4613,7 @@ description = "Python wrapper for extended filesystem attributes"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["export"] groups = ["export"]
markers = "sys_platform == \"darwin\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")" markers = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and sys_platform == \"darwin\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")"
files = [ files = [
{file = "xattr-1.1.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:acb85b6249e9f3ea10cbb56df1021d43f4027212f0d004304bc9075dc7f54769"}, {file = "xattr-1.1.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:acb85b6249e9f3ea10cbb56df1021d43f4027212f0d004304bc9075dc7f54769"},
{file = "xattr-1.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1a848ab125c0fafdc501ccd83b4c9018bba576a037a4ca5960a22f39e295552e"}, {file = "xattr-1.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1a848ab125c0fafdc501ccd83b4c9018bba576a037a4ca5960a22f39e295552e"},
@ -4722,7 +4724,7 @@ files = [
{file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"},
{file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"},
] ]
markers = {export = "python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", jira-client = "python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", testing = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""} markers = {export = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", jira-client = "(\"el8\" in platform_release or platform_machine == \"ppc64le\" or platform_machine == \"s390x\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\") and python_version < \"3.12\" and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\" or platform_machine != \"s390x\" and platform_machine != \"ppc64le\")", testing = "\"el8\" in platform_release and (platform_machine == \"s390x\" or platform_machine == \"ppc64le\") or platform_machine != \"s390x\" and platform_machine != \"ppc64le\" or platform_machine == \"ppc64le\" or platform_machine == \"s390x\""}
[package.extras] [package.extras]
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
@ -4813,4 +4815,4 @@ libdeps = ["cxxfilt", "eventlet", "flask", "flask-cors", "gevent", "lxml", "prog
[metadata] [metadata]
lock-version = "2.1" lock-version = "2.1"
python-versions = ">=3.10,<4.0" python-versions = ">=3.10,<4.0"
content-hash = "c007c9def397da60b98a3cdd464c6748432a3dedcc87ac7bc4e4b452196daf7b" content-hash = "3183347cd7cbe83df8e7e60b9281de1f799c86cd4f271ae1c888109fd754d077"

View File

@ -17,7 +17,7 @@ packages = [
] ]
dependencies = [ dependencies = [
"networkx", # This is also used as a part of build_metrics so it is sort of required "networkx", # This is also used as a part of build_metrics so it is sort of required
"pyright==1.1.380", "pyright (==1.1.393)",
"flask", "flask",
"flask-cors", "flask-cors",
"lxml", "lxml",
@ -41,7 +41,7 @@ gevent = { version = "*", optional = true }
progressbar2 = { version = "*", optional = true } progressbar2 = { version = "*", optional = true }
cxxfilt = { version = "*", optional = true } cxxfilt = { version = "*", optional = true }
pympler = { version = "*", optional = true } pympler = { version = "*", optional = true }
pyright = "1.1.380" pyright = "1.1.393"
[tool.poetry.group.aws.dependencies] [tool.poetry.group.aws.dependencies]
boto3 = "^1.34.156" boto3 = "^1.34.156"

11
tools/lint/BUILD.bazel Normal file
View File

@ -0,0 +1,11 @@
"""Definition of the formatter binary
This is in its own package because it has so many loading-time symbols,
we don't want to trigger eager fetches of these for builds that don't want to run format.
"""
load("@npm//:eslint/package_json.bzl", eslint_bin = "bin")
package(default_visibility = ["//visibility:public"])
eslint_bin.eslint_binary(name = "eslint")

13
tools/lint/linters.bzl Normal file
View File

@ -0,0 +1,13 @@
"Define linter aspects"
load("@aspect_rules_lint//lint:eslint.bzl", "lint_eslint_aspect")
load("@aspect_rules_lint//lint:lint_test.bzl", "lint_test")
eslint = lint_eslint_aspect(
binary = Label("@//tools/lint:eslint"),
configs = [
Label("@//:eslintrc"),
],
)
eslint_test = lint_test(aspect = eslint)