diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6c1bfecd161..8272cb8a232 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -14,7 +14,6 @@ OWNERS.yml @10gen/server-root-ownership @svc-auto-approve-bot .clang-format @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 -.eslintrc.yml @10gen/devprod-correctness @svc-auto-approve-bot .gitignore @10gen/devprod-build @svc-auto-approve-bot .mypy.ini @10gen/devprod-build @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 copy.bara.sky @IamXander @smcclure15 @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 package.json @10gen/devprod-correctness @svc-auto-approve-bot pnpm-lock.yaml @10gen/devprod-correctness @svc-auto-approve-bot diff --git a/.gitignore b/.gitignore index 0fbd3fc6ea1..feea918d159 100644 --- a/.gitignore +++ b/.gitignore @@ -269,7 +269,7 @@ node_modules/ package-lock.json # jstestfuzz generated test directory -jstestfuzz/ +/jstestfuzz/ # Bazel-related work # (Note that each string does NOT terminate with a '/' so that gitignore works properly) diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000000..84ff0791f0d --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +hoist=false diff --git a/BUILD.bazel b/BUILD.bazel index 4c27d7dd957..1edd0dfee96 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -2,6 +2,8 @@ load("@npm//:defs.bzl", "npm_link_all_packages") load("//bazel/install_rules:install_rules.bzl", "mongo_install") load("//bazel/toolchains:mongo_toolchain.bzl", "setup_mongo_toolchain_aliases") 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( default_visibility = ["//visibility:public"], @@ -16,11 +18,33 @@ exports_files([ 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( name = "format", actual = "//bazel/format", ) +alias( + name = "lint", + actual = "//bazel:lint", +) + alias( name = "codeowners", actual = "//buildscripts:codeowners", diff --git a/OWNERS.yml b/OWNERS.yml index 912b65a2299..12ee0a6f4c0 100644 --- a/OWNERS.yml +++ b/OWNERS.yml @@ -24,9 +24,6 @@ filters: - ".eslintignore": approvers: - 10gen/devprod-correctness - - ".eslintrc.yml": - approvers: - - 10gen/devprod-correctness - ".gitignore": approvers: - 10gen/devprod-build @@ -50,6 +47,9 @@ filters: - "copy.bara.staging.sky": approvers: - 10gen/devprod-correctness + - "eslint.config.mjs": + approvers: + - 10gen/devprod-correctness - "jsconfig.json": approvers: - 10gen/devprod-correctness diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index 270e0ade9fc..82a193e90d6 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -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/toolchains:mongo_toolchain.bzl", "toolchain_download") @@ -165,16 +237,16 @@ poetry( http_archive( name = "aspect_rules_js", - sha256 = "630a71aba66c4023a5b16ab3efafaeed8b1a2865ccd168a34611eb73876b3fc4", - strip_prefix = "rules_js-1.37.1", + sha256 = "875b8d01af629dbf626eddc5cf239c9f0da20330f4d99ad956afc961096448dd", + strip_prefix = "rules_js-2.1.3", urls = [ # 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 - "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/v1.37.1/rules_js-v1.37.1.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/v1.37.1/rules_js-v1.37.1.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/v2.1.3/rules_js-v2.1.3.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/v2.1.3/rules_js-v2.1.3.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() -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( - name = "nodejs", - node_version = DEFAULT_NODE_VERSION, -) +rules_js_register_toolchains(node_version = DEFAULT_NODE_VERSION) load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock") npm_translate_lock( name = "npm", + npmrc = "//:.npmrc", pnpm_lock = "//:pnpm-lock.yaml", verify_node_modules_ignored = "//:.bazelignore", ) diff --git a/bazel/BUILD.bazel b/bazel/BUILD.bazel index d8e12bd5b11..01a889a9a53 100644 --- a/bazel/BUILD.bazel +++ b/bazel/BUILD.bazel @@ -5,3 +5,10 @@ exports_files([ "scons_link_list.py", "install_rules.py", ]) + +sh_binary( + name = "lint", + srcs = ["lint.sh"], + args = ["//..."], + visibility = ["//visibility:public"], +) diff --git a/bazel/lint.sh b/bazel/lint.sh new file mode 100755 index 00000000000..d0d06afb0d9 --- /dev/null +++ b/bazel/lint.sh @@ -0,0 +1,2 @@ +# placeholder for bazel/wrapper_hook/lint.py +echo "No linter errors found!" \ No newline at end of file diff --git a/bazel/wrapper_hook/lint.py b/bazel/wrapper_hook/lint.py new file mode 100644 index 00000000000..5946401909a --- /dev/null +++ b/bazel/wrapper_hook/lint.py @@ -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) diff --git a/bazel/wrapper_hook/plus_interface.py b/bazel/wrapper_hook/plus_interface.py index f09f9921b69..ff66a739a28 100644 --- a/bazel/wrapper_hook/plus_interface.py +++ b/bazel/wrapper_hook/plus_interface.py @@ -10,6 +10,7 @@ REPO_ROOT = pathlib.Path(__file__).parent.parent.parent sys.path.append(str(REPO_ROOT)) 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 @@ -57,8 +58,10 @@ def test_runner_interface(args, autocomplete_query, get_buildozer_output=get_bui plus_starts = ("+", ":+", "//:+") skip_plus_interface = True compiledb_target = False + lint_target = False persistent_compdb = True compiledb_targets = ["//:compiledb", ":compiledb", "compiledb"] + lint_targets = ["//:lint", ":lint", "lint"] sources_to_bin = {} select_sources = {} current_select = None @@ -80,6 +83,8 @@ def test_runner_interface(args, autocomplete_query, get_buildozer_output=get_bui for arg in args: if arg in compiledb_targets: compiledb_target = True + if arg in lint_targets: + lint_target = True if arg == "--intree_compdb": replacements[arg] = [] persistent_compdb = False @@ -90,6 +95,9 @@ def test_runner_interface(args, autocomplete_query, get_buildozer_output=get_bui if compiledb_target: generate_compiledb(args[0], persistent_compdb) + if lint_target: + run_rules_lint(args[0], args[3:]) + if skip_plus_interface and not autocomplete_query: return args[1:] diff --git a/buildscripts/BUILD.bazel b/buildscripts/BUILD.bazel index df6bd886601..9657dbe0271 100644 --- a/buildscripts/BUILD.bazel +++ b/buildscripts/BUILD.bazel @@ -1,4 +1,5 @@ load("@poetry//:dependencies.bzl", "dependency") +load("@npm//:eslint/package_json.bzl", "bin") exports_files([ "cheetah_source_generator.py", @@ -226,3 +227,10 @@ py_library( "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": "."}, +) diff --git a/buildscripts/eslint/README.md b/buildscripts/eslint/README.md deleted file mode 100644 index cd25098731a..00000000000 --- a/buildscripts/eslint/README.md +++ /dev/null @@ -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"); - } - } - } -``` diff --git a/buildscripts/linter/pyrightlinter.py b/buildscripts/linter/pyrightlinter.py index 1572e074d75..6761d29bd89 100644 --- a/buildscripts/linter/pyrightlinter.py +++ b/buildscripts/linter/pyrightlinter.py @@ -10,7 +10,7 @@ class PyrightLinter(base.LinterBase): def __init__(self): """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]: """Get the command to run a version check.""" diff --git a/buildscripts/pyrightlint.py b/buildscripts/pyrightlint.py index 37e74cd56ef..9eac45e2c86 100755 --- a/buildscripts/pyrightlint.py +++ b/buildscripts/pyrightlint.py @@ -4,6 +4,7 @@ import argparse import logging import os +import subprocess import sys from typing import List @@ -90,6 +91,12 @@ def main(): logging.basicConfig(level=logging.DEBUG) 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 []) diff --git a/docs/linting.md b/docs/linting.md index d08d7ecfbf2..4de769a0387 100644 --- a/docs/linting.md +++ b/docs/linting.md @@ -42,14 +42,11 @@ Ex: `buildscripts/quickmongolint.py lint` ## Javascript Linters -The `buildscripts/eslint.py` wrapper script runs the `eslint` javascript linter. You can see the -usage message for the wrapper by running `buildscripts/eslint.py --help`. +The `bazel run lint` command runs the `eslint` javascript linter. -Ex: `buildscripts/eslint.py lint` - -| Linter | Configuration File(s) | Help Command | Documentation | -| -------- | ------------------------------- | --------------- | ------------------------------------------ | -| `eslint` | `.eslintrc.yml` `.eslintignore` | `eslint --help` | [https://eslint.org/](https://eslint.org/) | +| Linter | Configuration File(s) | Help Command | Documentation | +| -------- | --------------------- | ------------ | ------------------------------------------ | +| `eslint` | `.eslint.config.mjs` | | [https://eslint.org/](https://eslint.org/) | ## Yaml Linters diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000000..3553ca81f5b --- /dev/null +++ b/eslint.config.mjs @@ -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\"]", + }], + }, +}]; \ No newline at end of file diff --git a/etc/evergreen_yml_components/tasks/misc_tasks.yml b/etc/evergreen_yml_components/tasks/misc_tasks.yml index 9138eca9ee4..4069f7571f5 100644 --- a/etc/evergreen_yml_components/tasks/misc_tasks.yml +++ b/etc/evergreen_yml_components/tasks/misc_tasks.yml @@ -601,7 +601,7 @@ tasks: jepsen_test_name: set # TODO(SERVER-97804): rename if display_name appears on the evergreen UI - - name: bazel_run_//:format + - name: bazel_run_format tags: [ "assigned_to_jira_team_devprod_build", @@ -796,6 +796,9 @@ tasks: "development_critical_single_variant", "lint", ] + depends_on: + - name: version_expansions_gen + variant: generate-tasks-for-version commands: - command: timeout.update params: diff --git a/etc/evergreen_yml_components/variants/amazon/test_dev.yml b/etc/evergreen_yml_components/variants/amazon/test_dev.yml index 2185738dfe6..63f99a1dd25 100644 --- a/etc/evergreen_yml_components/variants/amazon/test_dev.yml +++ b/etc/evergreen_yml_components/variants/amazon/test_dev.yml @@ -116,10 +116,17 @@ buildvariants: - name: compile_jstestshell_TG distros: - amazon2-arm64-latest-nvme - - name: .development_critical_single_variant !.requires_large_host - - 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 !.lint + - name: .development_critical_single_variant .requires_large_host !.lint distros: - 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 distros: @@ -211,10 +218,17 @@ buildvariants: - name: compile_test_parallel_dbtest_stream_TG distros: - amazon2-arm64-xlarge-commitqueue - - 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 + # 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 !.lint + - name: .development_critical_single_variant .requires_large_host !.clang_tidy !libdeps_graph_linting !.lint distros: - 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 distros: diff --git a/etc/evergreen_yml_components/variants/amazon/test_dev_master_branch_only.yml b/etc/evergreen_yml_components/variants/amazon/test_dev_master_branch_only.yml index 070fa5509db..caaef93e362 100644 --- a/etc/evergreen_yml_components/variants/amazon/test_dev_master_branch_only.yml +++ b/etc/evergreen_yml_components/variants/amazon/test_dev_master_branch_only.yml @@ -716,10 +716,17 @@ buildvariants: - name: compile_jstestshell_TG distros: - amazon2-arm64-latest-nvme - - name: .development_critical_single_variant !.requires_large_host - - 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 !.lint + - name: .development_critical_single_variant .requires_large_host !.lint distros: - 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 distros: diff --git a/package.json b/package.json index 11cb9435a45..b5d89ca8927 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,14 @@ "version": "1.0.0", "private": true, "devDependencies": { - "prettier": "3.4.2", - "eslint": "8.28.0" + "@eslint/js": "^9", + "@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": [] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 473d183c7d9..fd3b38ab490 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,30 +4,75 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -devDependencies: - eslint: - specifier: 8.28.0 - version: 8.28.0 - prettier: - specifier: 3.2.5 - version: 3.2.5 +onlyBuiltDependencies: [] + +importers: + + .: + devDependencies: + '@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: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} + /@eslint-community/eslint-utils@4.4.1(eslint@9.19.0): + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + 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 - /@eslint/eslintrc@1.4.1: - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint-community/regexpp@4.12.1: + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + 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: ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -36,15 +81,35 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} + /@eslint/js@9.19.0: + resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} + 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: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@eslint/core': 0.10.0 + levn: 0.4.1 + dev: true + + /@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 /@humanwhocodes/module-importer@1.0.1: @@ -52,41 +117,34 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/retry@0.3.1: + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + /@humanwhocodes/retry@0.4.1: + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + /@types/estree@1.0.6: + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} dev: true - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.0 + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 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==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.14.0 dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -100,11 +158,6 @@ packages: uri-js: 4.4.1 dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -155,8 +208,8 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + /cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} dependencies: path-key: 3.1.1 @@ -164,8 +217,8 @@ packages: which: 2.0.2 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -173,112 +226,100 @@ packages: supports-color: optional: true dependencies: - ms: 2.1.2 + ms: 2.1.3 dev: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 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: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + /eslint-formatter-unix@8.40.0: + resolution: {integrity: sha512-gfsmFZ/cb1MobrMfYl2IPFLZEz2tWQVO/tnmziNQdhWJMN85GfZD64dcPsEgaEoeVKgAtK6W9LWLlOxhJWZvDw==} 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: esrecurse: 4.3.0 estraverse: 5.3.0 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: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.28.0: - resolution: {integrity: sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + 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 + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) + '@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 - '@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 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 + cross-spawn: 7.0.6 + debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-utils: 3.0.0(eslint@8.28.0) - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - grapheme-splitter: 1.0.4 - ignore: 5.3.0 - import-fresh: 3.3.0 + ignore: 5.3.2 imurmurhash: 0.1.4 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 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 + optionator: 0.9.4 transitivePeerDependencies: - supports-color dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 dev: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -313,17 +354,11 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq@1.17.0: - resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} dependencies: - reusify: 1.0.4 - 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 + flat-cache: 4.0.1 dev: true /find-up@5.0.0: @@ -334,21 +369,16 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} dependencies: - flatted: 3.2.9 + flatted: 3.3.2 keyv: 4.5.4 - rimraf: 3.0.2 dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + /flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} dev: true /glob-parent@6.0.2: @@ -358,26 +388,9 @@ packages: is-glob: 4.0.3 dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - 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==} + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} dev: true /has-flag@4.0.0: @@ -385,8 +398,8 @@ packages: engines: {node: '>=8'} dev: true - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} dev: true @@ -403,17 +416,6 @@ packages: engines: {node: '>=0.8.19'} 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: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -426,19 +428,10 @@ packages: is-extglob: 2.1.1 dev: true - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /js-sdsl@4.4.2: - resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} - dev: true - /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -489,30 +482,24 @@ packages: brace-expansion: 1.1.11 dev: true - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 dev: true /p-limit@3.1.0: @@ -541,11 +528,6 @@ packages: engines: {node: '>=8'} dev: true - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -556,8 +538,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} engines: {node: '>=14'} hasBin: true dev: true @@ -567,38 +549,11 @@ packages: engines: {node: '>=6'} 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: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} 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: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -611,13 +566,6 @@ packages: engines: {node: '>=8'} 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: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -630,10 +578,6 @@ packages: has-flag: 4.0.0 dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -641,11 +585,6 @@ packages: prelude-ls: 1.2.1 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: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -660,8 +599,9 @@ packages: isexe: 2.0.0 dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} dev: true /yocto-queue@0.1.0: diff --git a/poetry.lock b/poetry.lock index 981f78ffe9a..5f14e4cb2d2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -73,7 +73,7 @@ description = "Backport of CPython tarfile module" optional = false python-versions = ">=3.8" 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 = [ {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, {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.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] pycparser = "*" @@ -918,7 +918,7 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" 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 = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {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.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] zipp = ">=3.20" @@ -1449,7 +1449,7 @@ description = "Low-level, pure Python DBus protocol wrapper." optional = false python-versions = ">=3.7" 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 = [ {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, {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.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]] name = "pydantic" @@ -3082,7 +3082,7 @@ description = "" optional = false python-versions = "*" 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 = [ {file = "pypiwin32-223-py3-none-any.whl", hash = "sha256:67adf399debc1d5d14dffc1ab5acacb800da569754fafdc576b2a039485aa775"}, {file = "pypiwin32-223.tar.gz", hash = "sha256:71be40c1fbd28594214ecaecb58e7aa8b708eabfa0125c8a109ebd51edbd776a"}, @@ -3106,23 +3106,25 @@ files = [ [[package]] name = "pyright" -version = "1.1.380" +version = "1.1.393" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" 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\"" files = [ - {file = "pyright-1.1.380-py3-none-any.whl", hash = "sha256:a6404392053d8848bacc7aebcbd9d318bb46baf1a1a000359305481920f43879"}, - {file = "pyright-1.1.380.tar.gz", hash = "sha256:e6ceb1a5f7e9f03106e0aa1d6fbb4d97735a5e7ffb59f3de6b2db590baf935b2"}, + {file = "pyright-1.1.393-py3-none-any.whl", hash = "sha256:8320629bb7a44ca90944ba599390162bf59307f3d9fb6e27da3b7011b8c17ae5"}, + {file = "pyright-1.1.393.tar.gz", hash = "sha256:aeeb7ff4e0364775ef416a80111613f91a05c8e01e58ecfefc370ca0db7aed9c"}, ] [package.dependencies] nodeenv = ">=1.6.0" +typing-extensions = ">=4.1" [package.extras] -all = ["twine (>=3.4.1)"] +all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"] dev = ["twine (>=3.4.1)"] +nodejs = ["nodejs-wheel-binaries"] [[package]] name = "pysocks" @@ -3215,7 +3217,7 @@ files = [ {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, {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]] name = "pywin32-ctypes" @@ -3224,7 +3226,7 @@ description = "A (partial) reimplementation of pywin32 using ctypes/cffi" optional = false python-versions = ">=3.6" 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 = [ {file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"}, {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 python-versions = ">=3.6" 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 = [ {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, @@ -4105,7 +4107,7 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.8" 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 = [ {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"}, @@ -4275,7 +4277,7 @@ description = "An extension for use in the twisted I/O Completion Ports reactor. optional = false python-versions = "*" 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 = [ {file = "twisted-iocpsupport-1.0.4.tar.gz", hash = "sha256:858096c0d15e33f15ac157f455d8f86f2f2cdd223963e58c0f682a3af8362d89"}, {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 python-versions = ">=3.8" 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 = [ {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"}, @@ -4722,7 +4724,7 @@ files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {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] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] @@ -4813,4 +4815,4 @@ libdeps = ["cxxfilt", "eventlet", "flask", "flask-cors", "gevent", "lxml", "prog [metadata] lock-version = "2.1" python-versions = ">=3.10,<4.0" -content-hash = "c007c9def397da60b98a3cdd464c6748432a3dedcc87ac7bc4e4b452196daf7b" +content-hash = "3183347cd7cbe83df8e7e60b9281de1f799c86cd4f271ae1c888109fd754d077" diff --git a/pyproject.toml b/pyproject.toml index 4bd4d24e3be..c02fa53d6fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ packages = [ ] dependencies = [ "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-cors", "lxml", @@ -41,7 +41,7 @@ gevent = { version = "*", optional = true } progressbar2 = { version = "*", optional = true } cxxfilt = { version = "*", optional = true } pympler = { version = "*", optional = true } -pyright = "1.1.380" +pyright = "1.1.393" [tool.poetry.group.aws.dependencies] boto3 = "^1.34.156" diff --git a/tools/lint/BUILD.bazel b/tools/lint/BUILD.bazel new file mode 100644 index 00000000000..9f5d27547ee --- /dev/null +++ b/tools/lint/BUILD.bazel @@ -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") diff --git a/tools/lint/linters.bzl b/tools/lint/linters.bzl new file mode 100644 index 00000000000..1340b295031 --- /dev/null +++ b/tools/lint/linters.bzl @@ -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)