diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 9613cb03919..f1d0b6e906a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -16,7 +16,7 @@ repos:
rev: 'v2.3.0'
hooks:
- id: 'codespell'
- exclude: '^(package-lock.json|src/test/openutau-ustx/bulaomeng.ustx.yaml|src/test/kustomization/labels.json|src/bin/.*)$'
+ exclude: '^(package-lock.json|src/test/openutau-ustx/bulaomeng.ustx.yaml|src/test/kustomization/labels.json|src/test/bun-lock/bun.lock.json|src/bin/.*)$'
args:
[
'--ignore-words-list',
diff --git a/.prettierrc.cjs b/.prettierrc.cjs
index 59d0ed1ad25..6e96370483a 100644
--- a/.prettierrc.cjs
+++ b/.prettierrc.cjs
@@ -89,5 +89,20 @@ module.exports = {
}),
},
},
+ {
+ files: 'src/test/bun-lock/bun.lock.json',
+ options: {
+ jsonRecursiveSort: false,
+ jsonSortOrder: JSON.stringify({
+ '.': 'none',
+ '*': 'none',
+ lockfileVersion: 'none',
+ workspaces: 'none',
+ '/^\\$.*/': null,
+ }),
+ bracketSameLine: true,
+ printWidth: 100000000000,
+ },
+ },
],
}
diff --git a/src/api/json/catalog.json b/src/api/json/catalog.json
index c28eb1cca32..ee4c0cc659b 100644
--- a/src/api/json/catalog.json
+++ b/src/api/json/catalog.json
@@ -839,6 +839,12 @@
"0.65.0": "https://json.schemastore.org/sourcehut-build-0.65.0.json"
}
},
+ {
+ "name": "bun.lock",
+ "description": "bun.lock file",
+ "fileMatch": ["bun.lock"],
+ "url": "https://json.schemastore.org/bun.lock.json"
+ },
{
"name": "bundleconfig.json",
"description": "bundleconfig.json files",
@@ -3513,6 +3519,12 @@
"1.6": "https://json.schemastore.org/mkdocs-1.6.json"
}
},
+ {
+ "name": "mrdocs.yml",
+ "description": "MrDocs configuration file",
+ "fileMatch": ["mrdocs.yml"],
+ "url": "https://raw.githubusercontent.com/cppalliance/mrdocs/refs/heads/master/docs/mrdocs.schema.json"
+ },
{
"name": "MLOS Configs",
"description": "Config files for the mlos_bench utility in MLOS",
@@ -4368,6 +4380,12 @@
"v0": "https://json.schemastore.org/radiohound-v0.json"
}
},
+ {
+ "name": "PyGTA Config",
+ "description": "Configuration file used by pyglotaran and pyglotaran-extras",
+ "fileMatch": ["pygta_config.yaml", "pygta_config.yml"],
+ "url": "https://pyglotaran-extras.readthedocs.io/en/latest/_static/pygta_config.schema.json"
+ },
{
"name": "Rancher Fleet",
"description": "Rancher Fleet fleet.yaml configuration file",
@@ -5205,6 +5223,16 @@
"description": "Traefik v2 Dynamic Configuration File Provider",
"url": "https://json.schemastore.org/traefik-v2-file-provider.json"
},
+ {
+ "name": "Traefik v3",
+ "description": "Traefik v3 YAML configuration file",
+ "url": "https://json.schemastore.org/traefik-v3.json"
+ },
+ {
+ "name": "Traefik v3 File Provider",
+ "description": "Traefik v3 Dynamic Configuration File Provider",
+ "url": "https://json.schemastore.org/traefik-v3-file-provider.json"
+ },
{
"name": "transcend.yml",
"description": "Define personal data in code using Transcend",
@@ -6060,7 +6088,7 @@
"name": "swcrc",
"description": "swc configuration files",
"fileMatch": [".swcrc"],
- "url": "https://json.schemastore.org/swcrc.json"
+ "url": "https://swc.rs/schema.json"
},
{
"name": "OpenWeather Road Risk API",
@@ -7350,15 +7378,21 @@
{
"name": "Chamaleon template",
"description": "Chamaleon template",
- "fileMatch": ["**/environments/cha-template.json"],
+ "fileMatch": ["template.chamaleon.json"],
"url": "https://raw.githubusercontent.com/gerardorodriguezdev/chamaleon/refs/heads/master/schemas/template-schema.json"
},
{
"name": "Chamaleon environment",
"description": "Chamaleon environment",
- "fileMatch": ["**/environments/*-cha.json"],
+ "fileMatch": ["*.environment.chamaleon.json"],
"url": "https://raw.githubusercontent.com/gerardorodriguezdev/chamaleon/refs/heads/master/schemas/environment-schema.json"
},
+ {
+ "name": "Chamaleon properties",
+ "description": "Chamaleon properties",
+ "fileMatch": ["properties.chamaleon.json"],
+ "url": "https://raw.githubusercontent.com/gerardorodriguezdev/chamaleon/refs/heads/master/schemas/properties-schema.json"
+ },
{
"name": "ctfd-setup configuration file",
"description": "CTFer.io ctfd-setup utility configuration file",
@@ -7413,10 +7447,7 @@
{
"name": "gematik tiger test environment configuration",
"description": "A configuration file for the test environment of the gematik Tiger test platform",
- "fileMatch": [
- "**/tiger.yml",
- "**/tiger.yaml"
- ],
+ "fileMatch": ["**/tiger.yml", "**/tiger.yaml"],
"url": "https://json.schemastore.org/gematik-tiger.json"
}
]
diff --git a/src/schema-validation.jsonc b/src/schema-validation.jsonc
index 71137307218..502bb47e043 100644
--- a/src/schema-validation.jsonc
+++ b/src/schema-validation.jsonc
@@ -556,6 +556,9 @@
"bower.json": {
"externalSchema": ["base-04.json"]
},
+ "bun-lock.json": {
+ "unknownKeywords": ["allowTrailingCommas"]
+ },
"cargo-make.json": {
"unknownKeywords": ["x-taplo", "x-taplo-info", "links"]
},
diff --git a/src/schemas/json/bun-lock.json b/src/schemas/json/bun-lock.json
new file mode 100644
index 00000000000..94b9de8dc94
--- /dev/null
+++ b/src/schemas/json/bun-lock.json
@@ -0,0 +1,303 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://json.schemastore.org/bun.lock.json",
+ "title": "Bun.lock file",
+ "description": "Schema definition for Bun's `bun.lock` file (package manager lockfile). See https://bun.sh/docs/install/lockfile",
+ "type": "object",
+ "additionalProperties": true,
+ "allowTrailingCommas": true,
+ "properties": {
+ "lockfileVersion": {
+ "type": "integer",
+ "enum": [0],
+ "description": "Specifies the version of the lockfile format. Currently only 0."
+ },
+ "workspaces": {
+ "type": "object",
+ "description": "Defines the project workspaces and their corresponding packages.",
+ "patternProperties": {
+ ".*": {
+ "$ref": "#/definitions/BunLockFileWorkspacePackage"
+ }
+ }
+ },
+ "overrides": {
+ "type": "object",
+ "description": "Defines custom dependency resolutions for specific packages.",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ "patchedDependencies": {
+ "type": "object",
+ "description": "Lists dependencies that have been patched to modify their behavior.",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ "trustedDependencies": {
+ "type": "array",
+ "description": "An array of dependencies explicitly marked as trusted.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "packages": {
+ "type": "object",
+ "description": "Contains information about all the packages used in the project.",
+ "patternProperties": {
+ ".*": {
+ "$ref": "#/definitions/BunLockFilePackageArray"
+ }
+ }
+ }
+ },
+ "required": ["lockfileVersion", "workspaces", "packages"],
+ "definitions": {
+ "BunLockFileBasePackageInfo": {
+ "type": "object",
+ "description": "Base information about a package, including dependencies and peer relationships.",
+ "required": [],
+ "properties": {
+ "dependencies": {
+ "type": "object",
+ "description": "A map of dependencies required by this package.",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ "devDependencies": {
+ "type": "object",
+ "description": "A map of development-only dependencies.",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ "optionalDependencies": {
+ "type": "object",
+ "description": "A map of optional dependencies for this package.",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ "peerDependencies": {
+ "type": "object",
+ "description": "A map of peer dependencies for this package.",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ "optionalPeers": {
+ "type": "array",
+ "description": "An array of optional peer dependencies.",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "BunLockFileWorkspacePackage": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/BunLockFileBasePackageInfo"
+ },
+ {
+ "type": "object",
+ "description": "Information specific to workspace packages.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the workspace package."
+ },
+ "version": {
+ "type": "string",
+ "description": "The version of the workspace package."
+ }
+ }
+ }
+ ]
+ },
+ "BunLockFilePackageInfo": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/BunLockFileBasePackageInfo"
+ },
+ {
+ "type": "object",
+ "description": "Detailed information about a specific package.",
+ "properties": {
+ "os": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ ],
+ "description": "Specifies operating systems supported by this package."
+ },
+ "cpu": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ ],
+ "description": "Specifies CPU architectures supported by this package."
+ },
+ "bin": {
+ "description": "Executable binaries provided by the package.",
+ "oneOf": [
+ {
+ "type": "object",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "type": "string"
+ }
+ ]
+ },
+ "binDir": {
+ "type": "string",
+ "description": "Directory where the package's binaries are located."
+ },
+ "bundled": {
+ "type": "boolean",
+ "enum": [true],
+ "description": "Indicates if the package is bundled."
+ }
+ },
+ "required": []
+ }
+ ]
+ },
+ "BunLockFilePackageArray": {
+ "description": "An array representing a package in the lockfile.",
+ "oneOf": [
+ {
+ "description": "Represents an npm package.",
+ "type": "array",
+ "items": [
+ {
+ "type": "string",
+ "description": "Package name and version in the format 'name@version'."
+ },
+ {
+ "type": "string",
+ "description": "Registry URL or empty string for the default registry."
+ },
+ {
+ "$ref": "#/definitions/BunLockFilePackageInfo",
+ "description": "Package metadata including dependencies and environment constraints."
+ },
+ {
+ "type": "string",
+ "description": "Integrity hash for the package."
+ }
+ ],
+ "minItems": 4,
+ "maxItems": 4
+ },
+ {
+ "description": "Represents a symlink, folder, tarball, or workspace package.",
+ "type": "array",
+ "items": [
+ {
+ "type": "string",
+ "description": "Package name with a path or workspace prefix."
+ },
+ {
+ "$ref": "#/definitions/BunLockFilePackageInfo",
+ "description": "Package metadata including dependencies and environment constraints."
+ }
+ ],
+ "minItems": 2,
+ "maxItems": 2
+ },
+ {
+ "description": "Represents a git or GitHub package.",
+ "type": "array",
+ "items": [
+ {
+ "type": "string",
+ "description": "Package name with a git or GitHub prefix."
+ },
+ {
+ "$ref": "#/definitions/BunLockFilePackageInfo",
+ "description": "Package metadata including dependencies and environment constraints."
+ },
+ {
+ "type": "string",
+ "description": "Bun tag for the package."
+ }
+ ],
+ "minItems": 3,
+ "maxItems": 3
+ },
+ {
+ "description": "Represents the root package.",
+ "type": "array",
+ "items": [
+ {
+ "type": "string",
+ "description": "Root package identifier in the format 'name@root:'."
+ },
+ {
+ "type": "object",
+ "properties": {
+ "bin": {
+ "description": "Executable binaries provided by the root package.",
+ "oneOf": [
+ {
+ "type": "object",
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "type": "string"
+ }
+ ]
+ },
+ "binDir": {
+ "type": "string",
+ "description": "Directory where the root package's binaries are located."
+ }
+ },
+ "additionalProperties": false
+ }
+ ],
+ "minItems": 2,
+ "maxItems": 2
+ }
+ ]
+ }
+ }
+}
diff --git a/src/schemas/json/cargo.json b/src/schemas/json/cargo.json
index 43e5efb19ee..203451734a5 100644
--- a/src/schemas/json/cargo.json
+++ b/src/schemas/json/cargo.json
@@ -293,6 +293,13 @@
"additionalProperties": {
"$ref": "#/definitions/Lint"
}
+ },
+ "rustdoc": {
+ "description": "Lint settings for [Rustdoc](https://doc.rust-lang.org/rustdoc/). See Rustdoc's [individual lints](https://doc.rust-lang.org/rustdoc/lints.html) (rustdoc does not have lint groups)",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/Lint"
+ }
}
},
"additionalProperties": false
@@ -361,6 +368,8 @@
"required": ["name"],
"properties": {
"authors": {
+ "title": "Authors",
+ "description": "The `authors` field lists people or organizations that are considered the\n\"authors\" of the package. The exact meaning is open to interpretation — it may\nlist the original or primary authors, current maintainers, or owners of the\npackage. These names will be listed on the crate's page on\n[crates.io](https://crates.io). An optional email address may be included within angled\nbrackets at the end of each author.\n\n> **Note**: [crates.io](https://crates.io) requires at least one author to be listed.",
"anyOf": [
{
"$ref": "#/definitions/Authors"
@@ -410,6 +419,8 @@
"$ref": "#/definitions/Build"
},
"categories": {
+ "title": "Categories",
+ "description": "The `categories` field is an array of strings of the categories this package\nbelongs to.\n\n```toml\ncategories = [\"command-line-utilities\", \"development-tools::cargo-plugins\"]\n```\n\n> **Note**: [crates.io](https://crates.io) has a maximum of 5 categories. Each category should\n> match one of the strings available at https://crates.io/category_slugs, and\n> must match exactly.",
"anyOf": [
{
"$ref": "#/definitions/Categories"
@@ -429,6 +440,8 @@
}
},
"description": {
+ "title": "Description",
+ "description": "The description is a short blurb about the package. [crates.io](https://crates.io) will display\nthis with your package. This should be plain text (not Markdown).\n\n```toml\n[package]\n# ...\ndescription = \"A short description of my package\"\n```\n\n> **Note**: [crates.io](https://crates.io) requires the `description` to be set.",
"anyOf": [
{
"$ref": "#/definitions/Description"
@@ -439,6 +452,8 @@
]
},
"documentation": {
+ "title": "Documentation",
+ "description": "\nThe `documentation` field specifies a URL to a website hosting the crate's\ndocumentation. If no URL is specified in the manifest file, [crates.io](https://crates.io) will\nautomatically link your crate to the corresponding [docs.rs](https://docs.rs) page.\n\n```toml\n[package]\n# ...\ndocumentation = \"https://docs.rs/bitflags\"\n```\n",
"anyOf": [
{
"$ref": "#/definitions/Documentation"
@@ -449,6 +464,8 @@
]
},
"edition": {
+ "title": "Edition",
+ "description": "The `edition` key affects which edition your package is compiled with. Cargo\nwill always generate packages via [`cargo new`](https://doc.rust-lang.org/cargo/commands/cargo-new.html) with the `edition` key set to the\nlatest edition. Setting the `edition` key in `[package]` will affect all\ntargets/crates in the package, including test suites, benchmarks, binaries,\nexamples, etc.",
"anyOf": [
{
"$ref": "#/definitions/Edition"
@@ -459,6 +476,8 @@
]
},
"exclude": {
+ "title": "Exclude",
+ "description": "You can explicitly specify that a set of file patterns should be ignored or\nincluded for the purposes of packaging. The patterns specified in the\n`exclude` field identify a set of files that are not included, and the\npatterns in `include` specify files that are explicitly included.\n\nThe patterns should be [gitignore](https://git-scm.com/docs/gitignore)-style patterns. Briefly:\n\n- `foo` matches any file or directory with the name `foo` anywhere in the\n package. This is equivalent to the pattern `**/foo`.\n- `/foo` matches any file or directory with the name `foo` only in the root of\n the package.\n- `foo/` matches any *directory* with the name `foo` anywhere in the package.\n- Common glob patterns like `*`, `?`, and `[]` are supported:\n - `*` matches zero or more characters except `/`. For example, `*.html`\n matches any file or directory with the `.html` extension anywhere in the\n package.\n - `?` matches any character except `/`. For example, `foo?` matches `food`,\n but not `foo`.\n - `[]` allows for matching a range of characters. For example, `[ab]`\n matches either `a` or `b`. `[a-z]` matches letters a through z.\n- `**/` prefix matches in any directory. For example, `**/foo/bar` matches the\n file or directory `bar` anywhere that is directly under directory `foo`.\n- `/**` suffix matches everything inside. For example, `foo/**` matches all\n files inside directory `foo`, including all files in subdirectories below\n `foo`.\n- `/**/` matches zero or more directories. For example, `a/**/b` matches\n `a/b`, `a/x/b`, `a/x/y/b`, and so on.\n- `!` prefix negates a pattern. For example, a pattern of `src/**.rs` and\n `!foo.rs` would match all files with the `.rs` extension inside the `src`\n directory, except for any file named `foo.rs`.\n\nIf git is being used for a package, the `exclude` field will be seeded with\nthe `gitignore` settings from the repository.\n\n```toml\n[package]\n# ...\nexclude = [\"build/**/*.o\", \"doc/**/*.html\"]\n```\n\n```toml\n[package]\n# ...\ninclude = [\"src/**/*\", \"Cargo.toml\"]\n```\n\nThe options are mutually exclusive: setting `include` will override an\n`exclude`. Note that `include` must be an exhaustive list of files as otherwise\nnecessary source files may not be included. The package's `Cargo.toml` is\nautomatically included.\n\nThe include/exclude list is also used for change tracking in some situations.\nFor targets built with `rustdoc`, it is used to determine the list of files to\ntrack to determine if the target should be rebuilt. If the package has a\n[build script](https://doc.rust-lang.org/cargo/reference/build-scripts.html) that does not emit any `rerun-if-*` directives, then the\ninclude/exclude list is used for tracking if the build script should be re-run\nif any of those files change.",
"anyOf": [
{
"$ref": "#/definitions/Exclude"
@@ -469,6 +488,8 @@
]
},
"homepage": {
+ "title": "Homepage",
+ "description": "The `homepage` field should be a URL to a site that is the home page for your\npackage.\n\n```toml\n[package]\n# ...\nhomepage = \"https://serde.rs/\"\n```",
"anyOf": [
{
"$ref": "#/definitions/Homepage"
@@ -486,6 +507,7 @@
}
},
"include": {
+ "description": "You can explicitly specify that a set of file patterns should be ignored or\nincluded for the purposes of packaging. The patterns specified in the\n`exclude` field identify a set of files that are not included, and the\npatterns in `include` specify files that are explicitly included.\n\nThe patterns should be [gitignore](https://git-scm.com/docs/gitignore)-style patterns. Briefly:\n\n- `foo` matches any file or directory with the name `foo` anywhere in the\n package. This is equivalent to the pattern `**/foo`.\n- `/foo` matches any file or directory with the name `foo` only in the root of\n the package.\n- `foo/` matches any *directory* with the name `foo` anywhere in the package.\n- Common glob patterns like `*`, `?`, and `[]` are supported:\n - `*` matches zero or more characters except `/`. For example, `*.html`\n matches any file or directory with the `.html` extension anywhere in the\n package.\n - `?` matches any character except `/`. For example, `foo?` matches `food`,\n but not `foo`.\n - `[]` allows for matching a range of characters. For example, `[ab]`\n matches either `a` or `b`. `[a-z]` matches letters a through z.\n- `**/` prefix matches in any directory. For example, `**/foo/bar` matches the\n file or directory `bar` anywhere that is directly under directory `foo`.\n- `/**` suffix matches everything inside. For example, `foo/**` matches all\n files inside directory `foo`, including all files in subdirectories below\n `foo`.\n- `/**/` matches zero or more directories. For example, `a/**/b` matches\n `a/b`, `a/x/b`, `a/x/y/b`, and so on.\n- `!` prefix negates a pattern. For example, a pattern of `src/**.rs` and\n `!foo.rs` would match all files with the `.rs` extension inside the `src`\n directory, except for any file named `foo.rs`.\n\nIf git is being used for a package, the `exclude` field will be seeded with\nthe `gitignore` settings from the repository.\n\n```toml\n[package]\n# ...\nexclude = [\"build/**/*.o\", \"doc/**/*.html\"]\n```\n\n```toml\n[package]\n# ...\ninclude = [\"src/**/*\", \"Cargo.toml\"]\n```\n\nThe options are mutually exclusive: setting `include` will override an\n`exclude`. Note that `include` must be an exhaustive list of files as otherwise\nnecessary source files may not be included. The package's `Cargo.toml` is\nautomatically included.\n\nThe include/exclude list is also used for change tracking in some situations.\nFor targets built with `rustdoc`, it is used to determine the list of files to\ntrack to determine if the target should be rebuilt. If the package has a\n[build script](https://doc.rust-lang.org/cargo/reference/build-scripts.html) that does not emit any `rerun-if-*` directives, then the\ninclude/exclude list is used for tracking if the build script should be re-run\nif any of those files change.",
"anyOf": [
{
"$ref": "#/definitions/Include"
@@ -496,6 +518,8 @@
]
},
"keywords": {
+ "title": "Keywords",
+ "description": "The `keywords` field is an array of strings that describe this package. This\ncan help when searching for the package on a registry, and you may choose any\nwords that would help someone find this crate.\n\n```toml\n[package]\n# ...\nkeywords = [\"gamedev\", \"graphics\"]\n```\n\n> **Note**: [crates.io](https://crates.io) has a maximum of 5 keywords. Each keyword must be\n> ASCII text, start with a letter, and only contain letters, numbers, `_` or\n> `-`, and have at most 20 characters.",
"anyOf": [
{
"$ref": "#/definitions/Keywords"
@@ -506,6 +530,8 @@
]
},
"license": {
+ "title": "License",
+ "description": "The `license` field contains the name of the software license that the package\nis released under.\n\n[crates.io](https://crates.io/) interprets the `license` field as an [SPDX 2.1 license\nexpression](https://spdx.org/spdx-specification-21-web-version#h.jxpfx0ykyb60). The name must be a known license\nfrom the [SPDX license list 3.6](https://github.com/spdx/license-list-data/tree/v3.6). Parentheses are not\ncurrently supported. See the [SPDX site](https://spdx.org/license-list) for more information.\n\nSPDX license expressions support AND and OR operators to combine multiple\nlicenses.\n\n```toml\n[package]\n# ...\nlicense = \"MIT OR Apache-2.0\"\n```\n\nUsing `OR` indicates the user may choose either license. Using `AND` indicates\nthe user must comply with both licenses simultaneously. The `WITH` operator\nindicates a license with a special exception. Some examples:\n\n* `MIT OR Apache-2.0`\n* `LGPL-2.1 AND MIT AND BSD-2-Clause`\n* `GPL-2.0+ WITH Bison-exception-2.2`\n\nIf a package is using a nonstandard license, then the `license-file` field may\nbe specified in lieu of the `license` field.",
"anyOf": [
{
"$ref": "#/definitions/License"
@@ -516,6 +542,8 @@
]
},
"license-file": {
+ "title": "LicenseFile",
+ "description": "The `license-file` field contains the path to a file\ncontaining the text of the license (relative to this `Cargo.toml`).\n\n```toml\n[package]\n# ...\nlicense-file = \"LICENSE.txt\"\n```\n\n> **Note**: [crates.io](https://crates.io) requires either `license` or `license-file` to be set.",
"anyOf": [
{
"$ref": "#/definitions/LicenseFile"
@@ -571,6 +599,8 @@
}
},
"publish": {
+ "title": "Publish",
+ "description": "The `publish` field can be used to prevent a package from being published to a package registry (like *crates.io*) by mistake, for instance to keep a package\nprivate in a company.\n\n```toml\n[package]\n# ...\npublish = false\n```\n\nThe value may also be an array of strings which are registry names that are\nallowed to be published to.\n\n```toml\n[package]\n# ...\npublish = [\"some-registry-name\"]\n```",
"anyOf": [
{
"$ref": "#/definitions/Publish"
@@ -587,6 +617,8 @@
}
},
"readme": {
+ "title": "Readme",
+ "description": "The `readme` field should be the path to a file in the package root (relative\nto this `Cargo.toml`) that contains general information about the package.\nThis file will be transferred to the registry when you publish. [crates.io](https://crates.io)\nwill interpret it as Markdown and render it on the crate's page.\n\n```toml\n[package]\n# ...\nreadme = \"README.md\"\n```\n\nIf no value is specified for this field, and a file named `README.md`,\n`README.txt` or `README` exists in the package root, then the name of that\nfile will be used. You can suppress this behavior by setting this field to\n`false`. If the field is set to `true`, a default value of `README.md` will\nbe assumed.\n",
"anyOf": [
{
"$ref": "#/definitions/Readme"
@@ -597,6 +629,8 @@
]
},
"repository": {
+ "title": "Repository",
+ "description": "The `repository` field should be a URL to the source repository for your\npackage.\n\n```toml\n[package]\n# ...\nrepository = \"https://github.com/rust-lang/cargo/\"\n```",
"anyOf": [
{
"$ref": "#/definitions/Repository"
@@ -610,6 +644,8 @@
"$ref": "#/definitions/Resolver"
},
"rust-version": {
+ "title": "RustVersion",
+ "description": "The `rust-version` field is an optional key that tells cargo what version of the\nRust language and compiler your package can be compiled with. If the currently\nselected version of the Rust compiler is older than the stated version, cargo\nwill exit with an error, telling the user what version is required.\n\nThe first version of Cargo that supports this field was released with Rust 1.56.0.\nIn older releases, the field will be ignored, and Cargo will display a warning.\n\n```toml\n[package]\n# ...\nrust-version = \"1.56\"\n```\n\nThe Rust version must be a bare version number with two or three components; it\ncannot include semver operators or pre-release identifiers. Compiler pre-release\nidentifiers such as -nightly will be ignored while checking the Rust version.\nThe `rust-version` must be equal to or newer than the version that first\nintroduced the configured `edition`.\n\nThe `rust-version` may be ignored using the `--ignore-rust-version` option.\n\nSetting the `rust-version` key in `[package]` will affect all targets/crates in\nthe package, including test suites, benchmarks, binaries, examples, etc.",
"anyOf": [
{
"$ref": "#/definitions/RustVersion"
@@ -620,6 +656,8 @@
]
},
"version": {
+ "title": "Semantic Version",
+ "description": "Cargo bakes in the concept of [Semantic Versioning](https://semver.org/), so make sure you follow some basic rules:\n\n* Before you reach 1.0.0, anything goes, but if you make breaking changes,\n increment the minor version. In Rust, breaking changes include adding fields to\n structs or variants to enums.\n* After 1.0.0, only make breaking changes when you increment the major version.\n Don't break the build.\n* After 1.0.0, don't add any new public API (no new `pub` anything) in patch-level\n versions. Always increment the minor version if you add any new `pub` structs,\n traits, fields, types, functions, methods or anything else.\n* Use version numbers with three numeric parts such as 1.0.0 rather than 1.0.",
"anyOf": [
{
"$ref": "#/definitions/SemVer"
@@ -1453,11 +1491,11 @@
}
},
"WorkspaceInheritance": {
- "title": "Workspace",
- "description": "The `workspace` field allow keys to be inherited by defining them in the member package with `{key}.workspace = true`",
"type": "object",
"properties": {
"workspace": {
+ "title": "Workspace",
+ "description": "The `workspace` field allow keys to be inherited by defining them in the member package with `{key}.workspace = true`",
"type": "boolean",
"enum": [true]
}
diff --git a/src/schemas/json/gematik-tiger.json b/src/schemas/json/gematik-tiger.json
index e83d1c478ab..8ca3fb9b006 100644
--- a/src/schemas/json/gematik-tiger.json
+++ b/src/schemas/json/gematik-tiger.json
@@ -1,15 +1,9 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://json.schemastore.org/gematik-tiger.json",
- "title": "Tiger environment configuration",
- "description": "A configuration file for the test environment of the gematik Tiger test platform",
-
"$defs": {
"CfgExternalJarOptions-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"activateLogs": {
"type": "boolean"
@@ -18,99 +12,63 @@
"type": "boolean"
},
"arguments": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"options": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"workingDir": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
"CfgHelmChartOptions-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"context": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"debug": {
"type": "boolean"
},
"exposedPorts": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"healthcheckPods": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"logPods": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"nameSpace": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"podName": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"values": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"workingDir": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
@@ -121,25 +79,16 @@
"type": "boolean"
},
"dependsUpon": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"environment": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"exports": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
@@ -148,202 +97,121 @@
"$ref": "#/$defs/CfgExternalJarOptions-nullable"
},
"healthcheckReturnCode": {
- "type": [
- "integer",
- "null"
- ]
+ "type": ["integer", "null"]
},
"healthcheckUrl": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"helmChartOptions": {
"$ref": "#/$defs/CfgHelmChartOptions-nullable"
},
"hostname": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"logFile": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"source": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"startupPollIntervalMs": {
- "type": [
- "integer",
- "null"
- ]
+ "type": ["integer", "null"]
},
"startupTimeoutSec": {
- "type": [
- "integer",
- "null"
- ]
+ "type": ["integer", "null"]
},
"tigerProxyConfiguration": {
"$ref": "#/$defs/TigerProxyConfiguration-nullable"
},
"type": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"uiRank": {
"type": "integer"
},
"urlMappings": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"version": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
"DirectReverseProxyInfo-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"hostname": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"ignoreConnectionErrors": {
"type": "boolean"
},
"port": {
- "type": [
- "integer",
- "null"
- ]
+ "type": ["integer", "null"]
}
}
},
"ForwardProxyInfo-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"hostname": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"noProxyHosts": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"password": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"port": {
- "type": [
- "integer",
- "null"
- ]
+ "type": ["integer", "null"]
},
"type": {
"$ref": "#/$defs/TigerProxyType-nullable"
},
"username": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
"Map(String,CfgServer)-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"additionalProperties": {
"$ref": "#/$defs/CfgServer"
}
},
"PrivateKey-nullable": {
- "type": [
- "object",
- "null"
- ]
+ "type": ["object", "null"]
},
"RbelModificationDescription": {
"type": "object",
"properties": {
"condition": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"deleteAfterNExecutions": {
- "type": [
- "integer",
- "null"
- ]
+ "type": ["integer", "null"]
},
"name": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"regexFilter": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"replaceWith": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"targetElement": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
@@ -354,13 +222,7 @@
},
{
"type": "string",
- "enum": [
- "PKCS12",
- "JKS",
- "BKS",
- "PKCS8",
- "PKCS1"
- ]
+ "enum": ["PKCS12", "JKS", "BKS", "PKCS8", "PKCS1"]
}
]
},
@@ -371,10 +233,7 @@
"$ref": "#/$defs/X509Certificate-nullable"
},
"certificateChain": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"$ref": "#/$defs/X509Certificate"
}
@@ -383,10 +242,7 @@
"$ref": "#/$defs/TigerPkiIdentityInformation-nullable"
},
"keyId": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"privateKey": {
"$ref": "#/$defs/PrivateKey-nullable"
@@ -410,10 +266,7 @@
"$ref": "#/$defs/TigerRouteAuthenticationConfiguration-nullable"
},
"criterions": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
@@ -422,25 +275,16 @@
"type": "boolean"
},
"from": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"hosts": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"to": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
@@ -448,31 +292,19 @@
}
},
"TigerFileSaveInfo-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"clearFileOnBoot": {
"type": "boolean"
},
"filename": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"readFilter": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"sourceFile": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"writeToFile": {
"type": "boolean"
@@ -480,25 +312,16 @@
}
},
"TigerPkiIdentityInformation-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"filenames": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"password": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"storeType": {
"$ref": "#/$defs/StoreType-nullable"
@@ -506,10 +329,7 @@
}
},
"TigerProxyConfiguration-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"activateForwardAllLogging": {
"type": "boolean"
@@ -518,10 +338,7 @@
"type": "boolean"
},
"activateRbelParsingFor": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
@@ -554,10 +371,7 @@
"$ref": "#/$defs/ForwardProxyInfo-nullable"
},
"keyFolders": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
@@ -572,25 +386,16 @@
"type": "integer"
},
"modifications": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"$ref": "#/$defs/RbelModificationDescription"
}
},
"name": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"notes": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"$ref": "#/$defs/TigerProxyNoteCommand"
}
@@ -599,43 +404,25 @@
"type": "boolean"
},
"password": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"perMessageBufferSizeInMb": {
"type": "integer"
},
"proxiedServer": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"proxiedServerProtocol": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"proxyLogLevel": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"proxyPort": {
- "type": [
- "integer",
- "null"
- ]
+ "type": ["integer", "null"]
},
"proxyRoutes": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"$ref": "#/$defs/TigerConfigurationRoute"
}
@@ -671,25 +458,16 @@
"$ref": "#/$defs/TrafficEndpointConfiguration-nullable"
},
"trafficEndpointFilterString": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"trafficEndpoints": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"username": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
@@ -697,16 +475,10 @@
"type": "object",
"properties": {
"jexlCriterion": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"message": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
@@ -717,98 +489,62 @@
},
{
"type": "string",
- "enum": [
- "http",
- "https"
- ]
+ "enum": ["http", "https"]
}
]
},
"TigerRouteAuthenticationConfiguration-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"bearerToken": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"password": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"username": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
"TigerTlsConfiguration-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"allowGenericFallbackIdentity": {
"type": "boolean"
},
"alternativeNames": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"clientSslSuites": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"clientSupportedGroups": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"domainName": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"forwardMutualTlsIdentity": {
"$ref": "#/$defs/TigerConfigurationPkiIdentity-nullable"
},
"masterSecretsFile": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"ocspSignerIdentity": {
"$ref": "#/$defs/TigerConfigurationPkiIdentity-nullable"
},
"serverIdentities": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"$ref": "#/$defs/TigerConfigurationPkiIdentity"
}
@@ -820,19 +556,13 @@
"$ref": "#/$defs/TigerConfigurationPkiIdentity-nullable"
},
"serverSslSuites": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
},
"serverTlsProtocols": {
- "type": [
- "array",
- "null"
- ],
+ "type": ["array", "null"],
"items": {
"type": "string"
}
@@ -840,28 +570,16 @@
}
},
"TrafficEndpointConfiguration-nullable": {
- "type": [
- "object",
- "null"
- ],
+ "type": ["object", "null"],
"properties": {
"name": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"stompTopic": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
},
"wsEndpoint": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
@@ -869,10 +587,7 @@
"type": "object",
"properties": {
"type": {
- "type": [
- "string",
- "null"
- ]
+ "type": ["string", "null"]
}
}
},
@@ -887,14 +602,17 @@
]
}
},
+ "title": "Tiger environment configuration",
+ "description": "A configuration file for the test environment of the gematik Tiger test platform",
+
"type": "object",
"properties": {
"localProxyActive": {
"type": "boolean"
},
"servers": {
- "type": "object",
"$ref": "#/$defs/Map(String,CfgServer)-nullable",
+ "type": "object",
"additionalProperties": {
"$ref": "#/$defs/CfgServer"
}
diff --git a/src/schemas/json/partial-eslint-plugins.json b/src/schemas/json/partial-eslint-plugins.json
index 2f5bcfa30a8..3279e1ccab4 100644
--- a/src/schemas/json/partial-eslint-plugins.json
+++ b/src/schemas/json/partial-eslint-plugins.json
@@ -13992,9 +13992,25 @@
]
},
{
- "type": "object",
- "additionalProperties": true,
- "properties": {}
+ "oneOf": [
+ {
+ "const": "never",
+ "description": "Disallows awaiting any returned promises.",
+ "deprecated": true
+ },
+ {
+ "const": "error-handling-correctness-only",
+ "description": "In error-handling contexts, the rule enforces that returned promises must be awaited. In ordinary contexts, the rule does not enforce any particular behavior around whether returned promises are awaited."
+ },
+ {
+ "const": "in-try-catch",
+ "description": "In error-handling contexts, the rule enforces that returned promises must be awaited. In ordinary contexts, the rule enforces that returned promises must not be awaited."
+ },
+ {
+ "const": "always",
+ "description": "Requires that all returned promises be awaited."
+ }
+ ]
}
]
}
diff --git a/src/schemas/json/prometheus.json b/src/schemas/json/prometheus.json
index 9656e156740..58b26c55166 100644
--- a/src/schemas/json/prometheus.json
+++ b/src/schemas/json/prometheus.json
@@ -1152,6 +1152,17 @@
"$ref": "#/definitions/duration",
"description": "Per-scrape timeout when scraping this job. Defaults to `global.scrape_timeout`."
},
+ "fallback_scrape_protocol": {
+ "description": "Fallback protocol to use if a scrape returns blank, unparsable, or otherwise invalid Content-Type.",
+ "type": ["string", "null"],
+ "enum": [
+ "OpenMetricsText0.0.1",
+ "OpenMetricsText1.0.0",
+ "PrometheusProto",
+ "PrometheusText0.0.4",
+ "PrometheusText1.0.0"
+ ]
+ },
"metrics_path": {
"description": "The HTTP resource path on which to fetch metrics from targets.",
"type": ["string", "null"],
diff --git a/src/schemas/json/ruff.json b/src/schemas/json/ruff.json
index effd5048699..d042745f000 100644
--- a/src/schemas/json/ruff.json
+++ b/src/schemas/json/ruff.json
@@ -1022,6 +1022,20 @@
"items": {
"type": "string"
}
+ },
+ "warns-extend-require-match-for": {
+ "description": "List of additional warning names that require a match= parameter in a `pytest.warns()` call. This extends the default list of warnings that require a match= parameter.\n\nThis option is useful if you want to extend the default list of warnings that require a match= parameter without having to specify the entire list.\n\nNote that this option does not remove any warnings from the default list.\n\nSupports glob patterns. For more information on the glob syntax, refer to the [`globset` documentation](https://docs.rs/globset/latest/globset/#syntax).",
+ "type": ["array", "null"],
+ "items": {
+ "type": "string"
+ }
+ },
+ "warns-require-match-for": {
+ "description": "List of warning names that require a match= parameter in a `pytest.warns()` call.\n\nSupports glob patterns. For more information on the glob syntax, refer to the [`globset` documentation](https://docs.rs/globset/latest/globset/#syntax).",
+ "type": ["array", "null"],
+ "items": {
+ "type": "string"
+ }
}
},
"additionalProperties": false
@@ -1860,6 +1874,17 @@
}
]
},
+ "pydoclint": {
+ "description": "Options for the `pydoclint` plugin.",
+ "anyOf": [
+ {
+ "$ref": "#/definitions/PydoclintOptions"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
"pydocstyle": {
"description": "Options for the `pydocstyle` plugin.",
"anyOf": [
@@ -2066,6 +2091,16 @@
},
"additionalProperties": false
},
+ "PydoclintOptions": {
+ "type": "object",
+ "properties": {
+ "ignore-one-line-docstrings": {
+ "description": "Skip docstrings which fit on a single line.\n\nNote: The corresponding setting in `pydoclint` is named `skip-checking-short-docstrings`.",
+ "type": ["boolean", "null"]
+ }
+ },
+ "additionalProperties": false
+ },
"PydocstyleOptions": {
"type": "object",
"properties": {
@@ -2721,6 +2756,7 @@
"FURB116",
"FURB118",
"FURB12",
+ "FURB122",
"FURB129",
"FURB13",
"FURB131",
@@ -3159,6 +3195,11 @@
"PT025",
"PT026",
"PT027",
+ "PT028",
+ "PT029",
+ "PT03",
+ "PT030",
+ "PT031",
"PTH",
"PTH1",
"PTH10",
@@ -3342,6 +3383,7 @@
"RUF055",
"RUF056",
"RUF057",
+ "RUF058",
"RUF1",
"RUF10",
"RUF100",
diff --git a/src/schemas/json/swcrc.json b/src/schemas/json/swcrc.json
deleted file mode 100644
index a9fc64c4f8d..00000000000
--- a/src/schemas/json/swcrc.json
+++ /dev/null
@@ -1,688 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "https://json.schemastore.org/swcrc.json",
- "anyOf": [
- {
- "type": "array",
- "items": {
- "$ref": "#/definitions/entryPoint"
- }
- },
- {
- "$ref": "#/definitions/entryPoint"
- }
- ],
- "definitions": {
- "fileMatcher": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "array",
- "items": {
- "$ref": "#/definitions/fileMatcher"
- }
- }
- ]
- },
- "stringStringMap": {
- "type": "object",
- "patternProperties": {
- "": {
- "type": "string"
- }
- }
- },
- "featureOrModule": {
- "anyOf": [
- {
- "type": "string",
- "description": "CoreJS Module"
- },
- {
- "type": "string",
- "description": "Feature",
- "enum": [
- "transform-template-literals",
- "transform-literals",
- "transform-function-name",
- "transform-arrow-functions",
- "transform-block-scoped-functions",
- "transform-classes",
- "transform-object-super",
- "transform-shorthand-properties",
- "transform-duplicate-keys",
- "transform-computed-properties",
- "transform-for-of",
- "transform-sticky-regex",
- "transform-dotall-regex",
- "transform-unicode-regex",
- "transform-spread",
- "transform-parameters",
- "transform-destructuring",
- "transform-block-scoping",
- "transform-typeof-symbol",
- "transform-new-target",
- "transform-regenerator",
- "transform-exponentiation-operator",
- "transform-async-to-generator",
- "proposal-async-generator-functions",
- "proposal-object-rest-spread",
- "proposal-unicode-property-regex",
- "proposal-json-strings",
- "proposal-optional-catch-binding",
- "transform-named-capturing-groups-regex",
- "transform-member-expression-literals",
- "transform-property-literals",
- "transform-reserved-words",
- "proposal-nullish-coalescing-operator",
- "proposal-optional-chaining",
- "proposal-class-properties",
- "proposal-numeric-separator",
- "proposal-private-methods",
- "transform-unicode-escapes"
- ]
- }
- ]
- },
- "envVersion": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "number"
- }
- ]
- },
- "envVersions": {
- "type": "object",
- "propertyNames": {
- "enum": [
- "chrome",
- "ie",
- "edge",
- "firefox",
- "safari",
- "node",
- "ios",
- "samsung",
- "opera",
- "android",
- "electron",
- "phantom",
- "operaMobile"
- ]
- },
- "patternProperties": {
- "": {
- "$ref": "#/definitions/envVersion"
- }
- }
- },
- "envQuery": {
- "description": "Query",
- "oneOf": [
- {
- "description": "single query",
- "type": "string"
- },
- {
- "description": "multiple queries",
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- ]
- },
- "envQueryOrVersion": {
- "description": "QueryOrVersion",
- "oneOf": [
- {
- "$ref": "#/definitions/envQuery"
- },
- {
- "$ref": "#/definitions/envVersion"
- }
- ]
- },
- "entryPoint": {
- "type": "object",
- "description": "Defines an entry point",
- "properties": {
- "$schema": {
- "type": "string"
- },
- "env": {
- "type": "object",
- "properties": {
- "mode": {
- "type": "string",
- "enum": ["usage", "entry"]
- },
- "debug": {
- "type": "boolean"
- },
- "dynamicImport": {
- "type": "boolean"
- },
- "loose": {
- "type": "boolean"
- },
- "skip": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Skipped es-features. e.g.: 'core-js/modules/foo'"
- },
- "include": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/featureOrModule"
- }
- },
- "exclude": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/featureOrModule"
- }
- },
- "coreJs": {
- "type": "string"
- },
- "targets": {
- "oneOf": [
- {
- "$ref": "#/definitions/envQuery"
- },
- {
- "description": "EsModules",
- "type": "object",
- "properties": {
- "esmodules": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- {
- "$ref": "#/definitions/envVersions",
- "description": "Versions"
- },
- {
- "description": "HashMap",
- "type": "object",
- "patternProperties": {
- "": {
- "$ref": "#/definitions/envQueryOrVersion"
- }
- }
- }
- ]
- },
- "shippedProposals": {
- "type": "boolean"
- },
- "forceAllTransforms": {
- "type": "boolean"
- },
- "bugfixes": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- "test": {
- "$ref": "#/definitions/fileMatcher",
- "description": "Matches the files to include"
- },
- "exclude": {
- "$ref": "#/definitions/fileMatcher",
- "description": "Matches the files to exclude"
- },
- "minify": {
- "type": "boolean",
- "description": "If true, swc will minify the output"
- },
- "module": {
- "type": "object",
- "description": "Describes how swc will transpile the input",
- "properties": {
- "type": {
- "type": "string",
- "enum": ["commonjs", "amd", "umd", "es6"]
- },
- "strict": {
- "type": "boolean",
- "description": "If true, the __esModule property won't be added to the export",
- "default": false
- },
- "strictMode": {
- "type": "boolean",
- "description": "If true, swc emits the 'use strict' directive",
- "default": true
- },
- "lazy": {
- "anyOf": [
- {
- "type": "boolean",
- "description": "If true, lazy-initialize non local imports (not starting with ./)"
- },
- {
- "type": "array",
- "items": {
- "type": "string",
- "description": "RegEx matching file(s)"
- },
- "description": "Lazy-initialize all imports matching one of the given strings"
- }
- ],
- "default": false
- },
- "noInterop": {
- "type": "boolean",
- "description": "Disable the use of interopRequireDefault"
- },
- "moduleId": {
- "type": "string",
- "description": "If emitting amd-modules and specified, swc emits a named amd module"
- },
- "resolveFully": {
- "type": "boolean",
- "description": "Make resolver fully resolve index.js"
- },
- "globals": {
- "$ref": "#/definitions/stringStringMap"
- }
- },
- "required": ["type"],
- "additionalProperties": false
- },
- "jsc": {
- "type": "object",
- "description": "Main Jsc configuration",
- "properties": {
- "parser": {
- "description": "Configures the parser",
- "type": "object",
- "oneOf": [
- {
- "properties": {
- "syntax": {
- "enum": ["ecmascript"]
- },
- "jsx": {
- "type": "boolean",
- "description": "If true, transform jsx"
- },
- "numericSeparator": {
- "type": "boolean",
- "description": "Support numeric separator proposal (Stage 3)"
- },
- "classPrivateProperty": {
- "type": "boolean",
- "description": "Support private class properties"
- },
- "privateMethod": {
- "type": "boolean",
- "description": "Support private class methods"
- },
- "classProperty": {
- "type": "boolean",
- "description": "Support class properties"
- },
- "functionBind": {
- "type": "boolean",
- "description": "Support function bind expression"
- },
- "decorators": {
- "type": "boolean",
- "description": "Enable decorators"
- },
- "decoratorsBeforeExport": {
- "type": "boolean"
- },
- "exportDefaultFrom": {
- "type": "boolean"
- },
- "exportNamespaceFrom": {
- "type": "boolean"
- },
- "dynamicImport": {
- "type": "boolean"
- },
- "nullishCoalescing": {
- "type": "boolean"
- },
- "optionalChaining": {
- "type": "boolean"
- },
- "importMeta": {
- "type": "boolean"
- },
- "topLevelAwait": {
- "type": "boolean"
- },
- "importAssertions": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- {
- "properties": {
- "syntax": {
- "enum": ["typescript"]
- },
- "tsx": {
- "type": "boolean",
- "description": "If true, transform tsx"
- },
- "decorators": {
- "type": "boolean",
- "description": "If true, transform decorators"
- },
- "dynamicImport": {
- "type": "boolean"
- },
- "dts": {
- "type": "boolean",
- "description": "[DISABLED] If true, emit .d.ts files. This flag is currently skipped by serde."
- },
- "noEarlyErrors": {
- "type": "boolean",
- "description": "[DISABLED] This flag is currently skipped by serde."
- },
- "importAssertions": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- }
- ]
- },
- "transform": {
- "type": "object",
- "properties": {
- "react": {
- "type": "object",
- "properties": {
- "development": {
- "type": "boolean"
- },
- "importSource": {
- "type": "string",
- "default": "react"
- },
- "pragma": {
- "type": "string",
- "default": "React.createElement"
- },
- "pragmaFrag": {
- "type": "string",
- "default": "React.Fragment"
- },
- "refresh": {
- "type": "boolean",
- "default": false
- },
- "runtime": {
- "type": "string",
- "enum": ["automatic", "classic"],
- "default": "classic"
- },
- "throwIfNamespace": {
- "type": "boolean",
- "default": true
- },
- "useBuiltins": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
- "constModules": {
- "type": "object",
- "properties": {
- "globals": {
- "type": "object",
- "patternProperties": {
- "": {
- "$ref": "#/definitions/stringStringMap"
- }
- }
- }
- },
- "additionalProperties": false
- },
- "optimizer": {
- "type": "object",
- "properties": {
- "globals": {
- "type": "object",
- "properties": {
- "vars": {
- "$ref": "#/definitions/stringStringMap"
- },
- "envs": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
- },
- "jsonify": {
- "type": "object",
- "properties": {
- "minCost": {
- "type": "number"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "legacyDecorator": {
- "type": "boolean"
- },
- "decoratorMetadata": {
- "type": "boolean",
- "description": "If true, decorator metadata is emitted. Make sure \"Reflect\" is present."
- },
- "useDefineForClassFields": {
- "$comment": "Requires swc@1.3.40",
- "type": "boolean",
- "description": "If false, the old behaviour is used and _defineProperty is not generated for class properties.\nhttps://swc.rs/docs/configuration/compilation#jsctransformusedefineforclassfields"
- },
- "hidden": {
- "type": "object",
- "properties": {
- "jest": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "externalHelpers": {
- "type": "boolean",
- "description": "If true, this option will reduce the filesize by importing from an external module"
- },
- "preserveAllComments": {
- "type": "boolean",
- "description": "If true, all comments will be preserved during compilation"
- },
- "target": {
- "type": "string",
- "description": "Specifies the target environment",
- "enum": [
- "es3",
- "es5",
- "es2015",
- "es2016",
- "es2017",
- "es2018",
- "es2019",
- "es2020",
- "es2021",
- "es2022",
- "esnext"
- ]
- },
- "loose": {
- "type": "boolean",
- "description": "If true, swc generates more efficient code"
- },
- "keepClassNames": {
- "$comment": "Requires swc@1.2.50 and target es2016 or higher",
- "type": "boolean",
- "description": "Preserve original class names\nhttps://swc.rs/docs/configuration/compilation#jsckeepclassnames"
- },
- "paths": {
- "$comment": "Requires swc@1.2.62 and jsc.baseUrl",
- "type": "object",
- "description": "Should reflect \"paths\" property in project's tsconfig.json . See https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping"
- },
- "baseUrl": {
- "$comment": "Requires swc@1.2.62",
- "type": "string",
- "description": "Should reflect \"baseUrl\" property in project's tsconfig.json . See https://www.typescriptlang.org/docs/handbook/module-resolution.html#base-url"
- },
- "minify": {
- "$comment": "Requires swc@1.2.67",
- "title": "minification options",
- "type": "object",
- "description": "Minification options\nhttps://swc.rs/docs/configuration/minification"
- },
- "experimental": {
- "title": "experimental options",
- "type": "object",
- "description": "Experimental options\nhttps://swc.rs/docs/configuration/compilation#jscexperimental",
- "minProperties": 1,
- "properties": {
- "keepImportAssertions": {
- "type": "boolean",
- "description": "Preserve import assertions if true. This is experimental because import assertions are not covered by ecmascript specifications yet."
- },
- "plugins": {
- "type": "array",
- "description": "A list of plugins to load",
- "minItems": 1,
- "items": {
- "type": "array",
- "description": "A tuple with a plugin name and its options",
- "minItems": 2,
- "maxItems": 2,
- "items": [
- {
- "type": "string",
- "description": "Plugin name",
- "minLength": 1
- },
- {
- "type": "object",
- "description": "Plugin options",
- "additionalProperties": true
- }
- ]
- }
- }
- },
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "skipHelperInjection": {
- "type": "boolean"
- },
- "disableHygiene": {
- "type": "boolean"
- },
- "disableFixer": {
- "type": "boolean"
- },
- "cwd": {
- "type": "string"
- },
- "filename": {
- "type": "string"
- },
- "root": {
- "type": "string"
- },
- "swcrc": {
- "type": "boolean"
- },
- "envName": {
- "type": "string"
- },
- "sourceFileName": {
- "type": "string"
- },
- "sourceRoot": {
- "type": "string"
- },
- "isModule": {
- "type": "boolean"
- },
- "globalMark": {
- "type": "number"
- },
- "callerOptions": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- }
- },
- "additionalProperties": false
- },
- "configFile": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ]
- },
- "rootMode": {
- "enum": ["root", "upward", "upward-optional"]
- },
- "inputSourceMap": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ]
- },
- "sourceMaps": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ]
- }
- },
- "additionalProperties": false
- }
- },
- "description": "Schema for the swc configuration file",
- "title": "swc configuration schema"
-}
diff --git a/src/schemas/json/traefik-v3-file-provider.json b/src/schemas/json/traefik-v3-file-provider.json
new file mode 100644
index 00000000000..4e46ba33035
--- /dev/null
+++ b/src/schemas/json/traefik-v3-file-provider.json
@@ -0,0 +1,1790 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://json.schemastore.org/traefik-v3-file-provider.json",
+ "additionalProperties": false,
+ "definitions": {
+ "httpRouter": {
+ "type": "object",
+ "description": "A router is in charge of connecting incoming requests to the services that can handle them. In the process, routers may use pieces of middleware to update the request, or act before forwarding the request to the service.",
+ "properties": {
+ "entryPoints": {
+ "type": "array",
+ "description": "If not specified, HTTP routers will accept requests from all defined entry points. If you want to limit the router scope to a set of entry points, set the entryPoints option.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "rule": {
+ "type": "string",
+ "description": "Rules are a set of matchers configured with values, that determine if a particular request matches specific criteria. If the rule is verified, the router becomes active, calls middlewares, and then forwards the request to the service."
+ },
+ "ruleSyntax": {
+ "type": "string",
+ "description": "In Traefik v3 a new rule syntax has been introduced (migration guide). ruleSyntax option allows to configure the rule syntax to be used for parsing the rule on a per-router basis. This allows to have heterogeneous router configurations and ease migration."
+ },
+ "priority": {
+ "type": "integer",
+ "description": "To avoid path overlap, routes are sorted, by default, in descending order using rules length. The priority is directly equal to the length of the rule, and so the longest length has the highest priority. A value of 0 for the priority is ignored: priority = 0 means that the default rules length sorting is used.",
+ "default": 0,
+ "minimum": 0
+ },
+ "middlewares": {
+ "type": "array",
+ "description": "You can attach a list of middlewares to each HTTP router. The middlewares will take effect only if the rule matches, and before forwarding the request to the service. Middlewares are applied in the same order as their declaration in router.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "service": {
+ "type": "string",
+ "description": "Each request must eventually be handled by a service, which is why each router definition should include a service target, which is basically where the request will be passed along to. HTTP routers can only target HTTP services (not TCP services)."
+ },
+ "tls": {
+ "type": "object",
+ "description": "When a TLS section is specified, it instructs Traefik that the current router is dedicated to HTTPS requests only (and that the router should ignore HTTP (non TLS) requests). Traefik will terminate the SSL connections (meaning that it will send decrypted data to the services). If you need to define the same route for both HTTP and HTTPS requests, you will need to define two different routers: one with the tls section, one without.",
+ "properties": {
+ "options": {
+ "type": "string",
+ "description": "The options field enables fine-grained control of the TLS parameters. It refers to a TLS Options and will be applied only if a Host rule is defined."
+ },
+ "certResolver": {
+ "type": "string",
+ "description": "If certResolver is defined, Traefik will try to generate certificates based on routers Host & HostSNI rules."
+ },
+ "domains": {
+ "type": "array",
+ "description": "You can set SANs (alternative domains) for each main domain. Every domain must have A/AAAA records pointing to Traefik. Each domain & SAN will lead to a certificate request.",
+ "items": {
+ "type": "object",
+ "properties": {
+ "main": {
+ "type": "string",
+ "description": "Main defines the main domain name."
+ },
+ "sans": {
+ "type": "array",
+ "description": "SANs defines the subject alternative domain names.",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["rule", "service"]
+ },
+ "httpLoadBalancerService": {
+ "type": "object",
+ "description": "The load balancers are able to load balance the requests between multiple instances of your programs.\n\nEach service has a load-balancer, even if there is only one server to forward traffic to.",
+ "properties": {
+ "servers": {
+ "type": "array",
+ "description": "Servers declare a single instance of your program.",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string",
+ "description": "The url option point to a specific instance. Paths in the servers' url have no effect. If you want the requests to be sent to a specific path on your servers, configure your routers to use a corresponding middleware (e.g. the AddPrefix or ReplacePath) middlewares."
+ }
+ },
+ "required": ["url"]
+ }
+ },
+ "sticky": {
+ "type": "object",
+ "description": "When sticky sessions are enabled, a cookie is set on the initial request and response to let the client know which server handles the first response. On subsequent requests, to keep the session alive with the same server, the client should resend the same cookie.",
+ "properties": {
+ "cookie": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The default cookie name is an abbreviation of a sha1 (ex: _1d52e)."
+ },
+ "secure": {
+ "type": "boolean",
+ "default": false
+ },
+ "httpOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "sameSite": {
+ "type": "string",
+ "description": "Can be none, lax, strict or empty.",
+ "default": ""
+ }
+ }
+ }
+ }
+ },
+ "healthCheck": {
+ "type": "object",
+ "description": "Configure health check to remove unhealthy servers from the load balancing rotation. Traefik will consider your servers healthy as long as they return status codes between 2XX and 3XX to the health check requests (carried out every interval). Traefik keeps monitoring the health of unhealthy servers. If a server has recovered (returning 2xx -> 3xx responses again), it will be added back to the load balancer rotation pool.",
+ "properties": {
+ "method": {
+ "type": "string",
+ "description": "If defined, will apply this Method for the health check request."
+ },
+ "path": {
+ "type": "string",
+ "description": "path is appended to the server URL to set the health check endpoint."
+ },
+ "scheme": {
+ "type": "string",
+ "description": "If defined, will replace the server URL scheme for the health check endpoint"
+ },
+ "hostname": {
+ "type": "string",
+ "description": "If defined, will apply Host header hostname to the health check request."
+ },
+ "port": {
+ "type": "integer",
+ "description": "If defined, will replace the server URL port for the health check endpoint."
+ },
+ "interval": {
+ "type": "string",
+ "description": "Defines the frequency of the health check calls. Interval is to be given in a format understood by `time.ParseDuration`. The interval must be greater than the timeout. If configuration doesn't reflect this, the interval will be set to timeout + 1 second."
+ },
+ "timeout": {
+ "type": "string",
+ "description": "Defines the maximum duration Traefik will wait for a health check request before considering the server failed (unhealthy). Timeout is to be given in a format understood by `time.ParseDuration`."
+ },
+ "headers": {
+ "type": "object",
+ "description": "Defines custom headers to be sent to the health check endpoint.",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "followRedirects": {
+ "type": "boolean",
+ "description": "Defines whether redirects should be followed during the health check calls (default: true).",
+ "default": true
+ }
+ }
+ },
+ "passHostHeader": {
+ "type": "boolean",
+ "description": "The passHostHeader allows to forward client Host header to server. By default, passHostHeader is true.",
+ "default": true
+ },
+ "responseForwarding": {
+ "type": "object",
+ "description": "Defines how Traefik forwards the response from the backend server to the client.",
+ "properties": {
+ "flushInterval": {
+ "type": "string",
+ "description": "Specifies the interval in between flushes to the client while copying the response body. It is a duration in milliseconds, defaulting to 100. A negative value means to flush immediately after each write to the client. The flushInterval is ignored when ReverseProxy recognizes a response as a streaming response; for such responses, writes are flushed to the client immediately."
+ }
+ }
+ },
+ "serversTransport": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["servers"]
+ },
+ "httpWeightedService": {
+ "type": "object",
+ "description": "The WRR is able to load balance the requests between multiple services based on weights.\n\nThis strategy is only available to load balance between services and not between servers.",
+ "properties": {
+ "services": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "weight": {
+ "type": "number"
+ }
+ }
+ }
+ },
+ "sticky": {
+ "type": "object",
+ "description": "When sticky sessions are enabled, a cookie is set on the initial request and response to let the client know which server handles the first response. On subsequent requests, to keep the session alive with the same server, the client should resend the same cookie.",
+ "properties": {
+ "cookie": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The default cookie name is an abbreviation of a sha1 (ex: _1d52e)."
+ },
+ "secure": {
+ "type": "boolean",
+ "default": false
+ },
+ "httpOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "sameSite": {
+ "type": "string",
+ "description": "Can be none, lax, strict or empty.",
+ "default": ""
+ }
+ }
+ }
+ }
+ },
+ "healthCheck": {
+ "type": "object"
+ }
+ },
+ "additionalProperties": false
+ },
+ "httpMirroringService": {
+ "type": "object",
+ "description": "The mirroring is able to mirror requests sent to a service to other services. Please note that by default the whole request is buffered in memory while it is being mirrored. See the maxBodySize option for how to modify this behaviour.",
+ "properties": {
+ "service": {
+ "type": "string"
+ },
+ "maxBodySize": {
+ "type": "integer",
+ "description": "maxBodySize is the maximum size allowed for the body of the request. If the body is larger, the request is not mirrored. Default value is -1, which means unlimited size.",
+ "default": -1
+ },
+ "mirrors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "percent": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
+ }
+ }
+ },
+ "healthCheck": {
+ "type": "object"
+ }
+ },
+ "additionalProperties": false
+ },
+ "httpFailoverService": {
+ "type": "object",
+ "properties": {
+ "service": {
+ "type": "string"
+ },
+ "fallback": {
+ "type": "string"
+ },
+ "healthCheck": {
+ "type": "object"
+ }
+ },
+ "additionalProperties": false
+ },
+ "httpService": {
+ "type": "object",
+ "description": "The Services are responsible for configuring how to reach the actual services that will eventually handle the incoming requests.",
+ "oneOf": [
+ {
+ "properties": {
+ "loadBalancer": {
+ "$ref": "#/definitions/httpLoadBalancerService"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "weighted": {
+ "$ref": "#/definitions/httpWeightedService"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "mirroring": {
+ "$ref": "#/definitions/httpMirroringService"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "failover": {
+ "$ref": "#/definitions/httpFailoverService"
+ }
+ },
+ "additionalProperties": false
+ }
+ ]
+ },
+ "addPrefixMiddleware": {
+ "type": "object",
+ "description": "The AddPrefix middleware updates the URL Path of the request before forwarding it.",
+ "properties": {
+ "prefix": {
+ "type": "string",
+ "description": "prefix is the string to add before the current path in the requested URL. It should include the leading slash (/)."
+ }
+ },
+ "additionalProperties": false
+ },
+ "basicAuthMiddleware": {
+ "type": "object",
+ "description": "The BasicAuth middleware is a quick way to restrict access to your services to known users. If both users and usersFile are provided, the two are merged. The contents of usersFile have precedence over the values in users.",
+ "properties": {
+ "users": {
+ "type": "array",
+ "description": "The users option is an array of authorized users. Each user will be declared using the `name:hashed-password` format.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "usersFile": {
+ "type": "string",
+ "description": "The usersFile option is the path to an external file that contains the authorized users for the middleware.\n\nThe file content is a list of `name:hashed-password`."
+ },
+ "realm": {
+ "type": "string",
+ "description": "You can customize the realm for the authentication with the realm option. The default value is traefik.",
+ "default": "traefik"
+ },
+ "headerField": {
+ "type": "string",
+ "description": "You can define a header field to store the authenticated user using the headerField option."
+ },
+ "removeHeader": {
+ "type": "boolean",
+ "description": "Set the removeHeader option to true to remove the authorization header before forwarding the request to your service. (Default value is false.)",
+ "default": false
+ }
+ }
+ },
+ "bufferingMiddleware": {
+ "type": "object",
+ "description": "The Buffering middleware gives you control on how you want to read the requests before sending them to services.\n\nWith Buffering, Traefik reads the entire request into memory (possibly buffering large requests into disk), and rejects requests that are over a specified limit.\n\nThis can help services deal with large data (multipart/form-data for example), and can minimize time spent sending data to a service.",
+ "properties": {
+ "maxRequestBodyBytes": {
+ "type": "integer",
+ "description": "With the maxRequestBodyBytes option, you can configure the maximum allowed body size for the request (in Bytes).\n\nIf the request exceeds the allowed size, it is not forwarded to the service and the client gets a 413 (Request Entity Too Large) response."
+ },
+ "memRequestBodyBytes": {
+ "type": "integer",
+ "description": "You can configure a threshold (in Bytes) from which the request will be buffered on disk instead of in memory with the memRequestBodyBytes option."
+ },
+ "maxResponseBodyBytes": {
+ "type": "integer",
+ "description": "With the maxResponseBodyBytes option, you can configure the maximum allowed response size from the service (in Bytes).\n\nIf the response exceeds the allowed size, it is not forwarded to the client. The client gets a 413 (Request Entity Too Large) response instead."
+ },
+ "memResponseBodyBytes": {
+ "type": "integer",
+ "description": "You can configure a threshold (in Bytes) from which the response will be buffered on disk instead of in memory with the memResponseBodyBytes option."
+ },
+ "retryExpression": {
+ "type": "string",
+ "description": "You can have the Buffering middleware replay the request with the help of the retryExpression option."
+ }
+ },
+ "additionalProperties": false
+ },
+ "chainMiddleware": {
+ "type": "object",
+ "description": "The Chain middleware enables you to define reusable combinations of other pieces of middleware. It makes reusing the same groups easier.",
+ "properties": {
+ "middlewares": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "circuitBreakerMiddleware": {
+ "type": "object",
+ "description": "The circuit breaker protects your system from stacking requests to unhealthy services (resulting in cascading failures).\n\nWhen your system is healthy, the circuit is closed (normal operations). When your system becomes unhealthy, the circuit becomes open and the requests are no longer forwarded (but handled by a fallback mechanism).\n\nTo assess if your system is healthy, the circuit breaker constantly monitors the services.",
+ "properties": {
+ "expression": {
+ "type": "string",
+ "description": "You can specify an expression that, once matched, will trigger the circuit breaker (and apply the fallback mechanism instead of calling your services)."
+ },
+ "checkPeriod": {
+ "type": "string",
+ "description": "The interval between successive checks of the circuit breaker condition (when in standby state)"
+ },
+ "fallbackDuration": {
+ "type": "string",
+ "description": "The duration for which the circuit breaker will wait before trying to recover (from a tripped state)."
+ },
+ "recoveryDuration": {
+ "type": "string",
+ "description": "The duration for which the circuit breaker will try to recover (as soon as it is in recovering state)."
+ },
+ "responseCode": {
+ "type": "integer",
+ "description": "The status code that the circuit breaker will return while it is in the open state."
+ }
+ },
+ "additionalProperties": false
+ },
+ "compressMiddleware": {
+ "type": "object",
+ "description": "The Compress middleware enables the gzip compression.",
+ "properties": {
+ "excludedContentTypes": {
+ "type": "array",
+ "description": "excludedContentTypes specifies a list of content types to compare the Content-Type header of the incoming requests to before compressing.\n\nThe requests with content types defined in excludedContentTypes are not compressed.\n\nContent types are compared in a case-insensitive, whitespace-ignored manner.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "minResponseBodyBytes": {
+ "description": "specifies the minimum amount of bytes a response body must have to be compressed.",
+ "type": "integer"
+ },
+ "defaultEncoding": {
+ "type": "string",
+ "description": "defaultEncoding specifies the default encoding if the Accept-Encoding header is not in the request or contains a wildcard (*)."
+ },
+ "includedContentTypes": {
+ "type": "array",
+ "description": "includedContentTypes specifies a list of content types to compare the Content-Type header of the responses before compressing.\n\nThe responses with content types defined in includedContentTypes are compressed.\n\nContent types are compared in a case-insensitive, whitespace-ignored manner.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "encodings": {
+ "type": "array",
+ "description": "encodings specifies the list of supported compression encodings. At least one encoding value must be specified, and valid entries are zstd (Zstandard), br (Brotli), and gzip (Gzip). The order of the list also sets the priority, the top entry has the highest priority.",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "contentTypeMiddleware": {
+ "type": "object",
+ "description": "The Content-Type middleware - or rather its unique autoDetect option - specifies whether to let the Content-Type header, if it has not been set by the backend, be automatically set to a value derived from the contents of the response.\n\nAs a proxy, the default behavior should be to leave the header alone, regardless of what the backend did with it. However, the historic default was to always auto-detect and set the header if it was nil, and it is going to be kept that way in order to support users currently relying on it. This middleware exists to enable the correct behavior until at least the default one can be changed in a future version.",
+ "properties": {
+ "autoDetect": {
+ "type": "boolean",
+ "description": "autoDetect specifies whether to let the Content-Type header, if it has not been set by the backend, be automatically set to a value derived from the contents of the response.",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "digestAuthMiddleware": {
+ "type": "object",
+ "description": "The DigestAuth middleware is a quick way to restrict access to your services to known users. If both users and usersFile are provided, the two are merged. The contents of usersFile have precedence over the values in users.",
+ "properties": {
+ "users": {
+ "type": "array",
+ "description": "The users option is an array of authorized users. Each user will be declared using the `name:realm:encoded-password` format.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "usersFile": {
+ "type": "string",
+ "description": "The usersFile option is the path to an external file that contains the authorized users for the middleware.\n\nThe file content is a list of `name:realm:encoded-password`."
+ },
+ "realm": {
+ "type": "string",
+ "description": "You can customize the realm for the authentication with the realm option. The default value is traefik.",
+ "default": "traefik"
+ },
+ "headerField": {
+ "type": "string",
+ "description": "You can customize the header field for the authenticated user using the headerField option."
+ },
+ "removeHeader": {
+ "type": "boolean",
+ "description": "Set the removeHeader option to true to remove the authorization header before forwarding the request to your service. (Default value is false.)",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "errorsMiddleware": {
+ "type": "object",
+ "description": "The ErrorPage middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes. The error page itself is not hosted by Traefik.",
+ "properties": {
+ "status": {
+ "type": "array",
+ "description": "The status that will trigger the error page.\n\nThe status code ranges are inclusive (500-599 will trigger with every code between 500 and 599, 500 and 599 included). You can define either a status code like 500 or ranges with a syntax like 500-599.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "service": {
+ "type": "string",
+ "description": "The service that will serve the new requested error page."
+ },
+ "query": {
+ "type": "string",
+ "description": "The URL for the error page (hosted by service). You can use {status} in the query, that will be replaced by the received status code."
+ }
+ },
+ "additionalProperties": false
+ },
+ "forwardAuthMiddleware": {
+ "type": "object",
+ "description": "The ForwardAuth middleware delegate the authentication to an external service. If the service response code is 2XX, access is granted and the original request is performed. Otherwise, the response from the authentication server is returned.",
+ "properties": {
+ "address": {
+ "type": "string",
+ "description": "The address option defines the authentication server address."
+ },
+ "tls": {
+ "type": "object",
+ "description": "The tls option is the TLS configuration from Traefik to the authentication server.",
+ "properties": {
+ "ca": {
+ "type": "string",
+ "description": "Certificate Authority used for the secured connection to the authentication server."
+ },
+ "cert": {
+ "type": "string",
+ "description": "Public certificate used for the secured connection to the authentication server."
+ },
+ "key": {
+ "type": "string",
+ "description": "Private certificate used for the secure connection to the authentication server."
+ },
+ "insecureSkipVerify": {
+ "type": "boolean",
+ "description": "If insecureSkipVerify is true, TLS for the connection to authentication server accepts any certificate presented by the server and any host name in that certificate."
+ }
+ }
+ },
+ "trustForwardHeader": {
+ "type": "boolean",
+ "description": "Set the trustForwardHeader option to true to trust all the existing X-Forwarded-* headers."
+ },
+ "authResponseHeaders": {
+ "type": "array",
+ "description": "The authResponseHeaders option is the list of the headers to copy from the authentication server to the request.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "authResponseHeadersRegex": {
+ "type": "string",
+ "description": "The authResponseHeadersRegex option is the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex."
+ },
+ "authRequestHeaders": {
+ "type": "array",
+ "description": "The authRequestHeaders option is the list of the headers to copy from the request to the authentication server.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "addAuthCookiesToResponse": {
+ "type": "array",
+ "description": "The addAuthCookiesToResponse option is the list of cookies to copy from the authentication server to the response, replacing any existing conflicting cookie from the forwarded response.",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "grpcWebMiddleware": {
+ "type": "object",
+ "description": "The GrpcWeb middleware converts gRPC Web requests to HTTP/2 gRPC requests before forwarding them to the backends.",
+ "properties": {
+ "allowOrigins": {
+ "type": "array",
+ "description": "The allowOrigins contains the list of allowed origins. A wildcard origin * can also be configured to match all requests.",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "headersMiddleware": {
+ "type": "object",
+ "description": "The Headers middleware can manage the requests/responses headers.",
+ "properties": {
+ "customRequestHeaders": {
+ "type": "object",
+ "description": "The customRequestHeaders option lists the Header names and values to apply to the request.",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "customResponseHeaders": {
+ "type": "object",
+ "description": "The customResponseHeaders option lists the Header names and values to apply to the response.",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "accessControlAllowCredentials": {
+ "type": "boolean",
+ "description": "The accessControlAllowCredentials indicates whether the request can include user credentials."
+ },
+ "accessControlAllowHeaders": {
+ "type": "array",
+ "description": "The accessControlAllowHeaders indicates which header field names can be used as part of the request.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "accessControlAllowMethods": {
+ "type": "array",
+ "description": "The accessControlAllowMethods indicates which methods can be used during requests.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "accessControlAllowOriginList": {
+ "type": "array",
+ "description": "The accessControlAllowOriginList indicates whether a resource can be shared by returning different values.\n\nA wildcard origin * can also be configured, and will match all requests. If this value is set by a backend server, it will be overwritten by Traefik\n\nThis value can contain a list of allowed origins.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "accessControlAllowOriginListRegex": {
+ "type": "array",
+ "description": "The accessControlAllowOriginListRegex option is the counterpart of the accessControlAllowOriginList option with regular expressions instead of origin values.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "accessControlExposeHeaders": {
+ "type": "array",
+ "description": "The accessControlExposeHeaders indicates which headers are safe to expose to the api of a CORS API specification.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "accessControlMaxAge": {
+ "type": "integer",
+ "description": "The accessControlMaxAge indicates how long (in seconds) a preflight request can be cached."
+ },
+ "addVaryHeader": {
+ "type": "boolean",
+ "description": "The addVaryHeader is used in conjunction with accessControlAllowOriginList to determine whether the vary header should be added or modified to demonstrate that server responses can differ based on the value of the origin header."
+ },
+ "allowedHosts": {
+ "type": "array",
+ "description": "The allowedHosts option lists fully qualified domain names that are allowed.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "hostsProxyHeaders": {
+ "type": "array",
+ "description": "The hostsProxyHeaders option is a set of header keys that may hold a proxied hostname value for the request.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "sslRedirect": {
+ "type": "boolean",
+ "description": "The sslRedirect is set to true, then only allow https requests."
+ },
+ "sslTemporaryRedirect": {
+ "type": "boolean",
+ "description": "Set the sslTemporaryRedirect to true to force an SSL redirection using a 302 (instead of a 301)."
+ },
+ "sslHost": {
+ "type": "string",
+ "description": "The sslHost option is the host name that is used to redirect http requests to https."
+ },
+ "sslProxyHeaders": {
+ "type": "object",
+ "description": "The sslProxyHeaders option is set of header keys with associated values that would indicate a valid https request. Useful when using other proxies with header like: \"X-Forwarded-Proto\": \"https\".",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "sslForceHost": {
+ "type": "boolean",
+ "description": "Set sslForceHost to true and set SSLHost to forced requests to use SSLHost even the ones that are already using SSL."
+ },
+ "stsSeconds": {
+ "type": "integer",
+ "description": "The stsSeconds is the max-age of the Strict-Transport-Security header. If set to 0, would NOT include the header."
+ },
+ "stsIncludeSubdomains": {
+ "type": "boolean",
+ "description": "The stsIncludeSubdomains is set to true, the includeSubDomains directive will be appended to the Strict-Transport-Security header."
+ },
+ "stsPreload": {
+ "type": "boolean",
+ "description": "Set stsPreload to true to have the preload flag appended to the Strict-Transport-Security header."
+ },
+ "forceSTSHeader": {
+ "type": "boolean",
+ "description": "Set forceSTSHeader to true, to add the STS header even when the connection is HTTP."
+ },
+ "frameDeny": {
+ "type": "boolean",
+ "description": "Set frameDeny to true to add the X-Frame-Options header with the value of DENY."
+ },
+ "customFrameOptionsValue": {
+ "type": "string",
+ "description": "The customFrameOptionsValue allows the X-Frame-Options header value to be set with a custom value. This overrides the FrameDeny option."
+ },
+ "contentTypeNosniff": {
+ "type": "boolean",
+ "description": "Set contentTypeNosniff to true to add the X-Content-Type-Options header with the value nosniff."
+ },
+ "browserXssFilter": {
+ "type": "boolean",
+ "description": "Set browserXssFilter to true to add the X-XSS-Protection header with the value 1; mode=block."
+ },
+ "customBrowserXSSValue": {
+ "type": "string",
+ "description": "The customBrowserXssValue option allows the X-XSS-Protection header value to be set with a custom value. This overrides the BrowserXssFilter option."
+ },
+ "contentSecurityPolicy": {
+ "type": "string",
+ "description": "The contentSecurityPolicy option allows the Content-Security-Policy header value to be set with a custom value."
+ },
+ "contentSecurityPolicyReportOnly": {
+ "type": "string",
+ "description": "The contentSecurityPolicyReportOnly option allows the Content-Security-Policy-Report-Only header value to be set with a custom value."
+ },
+ "publicKey": {
+ "type": "string",
+ "description": "The publicKey implements HPKP to prevent MITM attacks with forged certificates."
+ },
+ "referrerPolicy": {
+ "type": "string",
+ "description": "The referrerPolicy allows sites to control when browsers will pass the Referer header to other sites."
+ },
+ "featurePolicy": {
+ "type": "string",
+ "description": "The featurePolicy allows sites to control browser features."
+ },
+ "permissionsPolicy": {
+ "type": "string",
+ "description": "The permissionsPolicy allows sites to control browser features."
+ },
+ "isDevelopment": {
+ "type": "boolean",
+ "description": "Set isDevelopment to true when developing. The AllowedHosts, SSL, and STS options can cause some unwanted effects. Usually testing happens on http, not https, and on localhost, not your production domain.\nIf you would like your development environment to mimic production with complete Host blocking, SSL redirects, and STS headers, leave this as false."
+ }
+ },
+ "additionalProperties": false
+ },
+ "ipStrategy": {
+ "type": "object",
+ "description": "The ipStrategy option defines parameters that set how Traefik will determine the client IP.",
+ "properties": {
+ "depth": {
+ "type": "integer",
+ "description": "The depth option tells Traefik to use the X-Forwarded-For header and take the IP located at the depth position (starting from the right). If depth is greater than the total number of IPs in X-Forwarded-For, then the client IP will be empty. depth is ignored if its value is lesser than or equal to 0."
+ },
+ "excludedIPs": {
+ "type": "array",
+ "description": "excludedIPs tells Traefik to scan the X-Forwarded-For header and pick the first IP not in the list. If depth is specified, excludedIPs is ignored.",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ipWhiteListMiddleware": {
+ "type": "object",
+ "description": "DEPRECATED: IPWhitelist accepts / refuses requests based on the client IP.",
+ "properties": {
+ "sourceRange": {
+ "type": "array",
+ "description": "The sourceRange option sets the allowed IPs (or ranges of allowed IPs by using CIDR notation).",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ipStrategy": {
+ "$ref": "#/definitions/ipStrategy"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ipAllowListMiddleware": {
+ "type": "object",
+ "description": "IPAllowList accepts / refuses requests based on the client IP.",
+ "properties": {
+ "sourceRange": {
+ "type": "array",
+ "description": "The sourceRange option sets the allowed IPs (or ranges of allowed IPs by using CIDR notation).",
+ "items": {
+ "type": "string"
+ }
+ },
+ "rejectStatusCode": {
+ "type": "integer",
+ "description": "RejectStatusCode defines the HTTP status code used for refused requests. If not set, the default is 403 (Forbidden)."
+ },
+ "ipStrategy": {
+ "$ref": "#/definitions/ipStrategy"
+ }
+ },
+ "additionalProperties": false
+ },
+ "sourceCriterion": {
+ "type": "object",
+ "description": "SourceCriterion defines what criterion is used to group requests as originating from a common source. The precedence order is ipStrategy, then requestHeaderName, then requestHost. If none are set, the default is to use the requestHost.",
+ "properties": {
+ "ipStrategy": {
+ "$ref": "#/definitions/ipStrategy"
+ },
+ "requestHeaderName": {
+ "type": "string",
+ "description": "Requests having the same value for the given header are grouped as coming from the same source."
+ },
+ "requestHost": {
+ "type": "boolean",
+ "description": "Whether to consider the request host as the source."
+ }
+ },
+ "additionalProperties": false
+ },
+ "inFlightReqMiddleware": {
+ "type": "object",
+ "description": "To proactively prevent services from being overwhelmed with high load, a limit on the number of simultaneous in-flight requests can be applied.",
+ "properties": {
+ "amount": {
+ "type": "integer",
+ "description": "The amount option defines the maximum amount of allowed simultaneous in-flight request. The middleware will return an HTTP 429 Too Many Requests if there are already amount requests in progress (based on the same sourceCriterion strategy)."
+ },
+ "sourceCriterion": {
+ "$ref": "#/definitions/sourceCriterion"
+ }
+ },
+ "additionalProperties": false
+ },
+ "passTLSClientCertMiddleware": {
+ "type": "object",
+ "description": "PassTLSClientCert adds in header the selected data from the passed client tls certificate.",
+ "properties": {
+ "pem": {
+ "type": "boolean",
+ "description": "The pem option sets the X-Forwarded-Tls-Client-Cert header with the escape certificate."
+ },
+ "info": {
+ "type": "object",
+ "description": "The info option select the specific client certificate details you want to add to the X-Forwarded-Tls-Client-Cert-Info header. The value of the header will be an escaped concatenation of all the selected certificate details.",
+ "properties": {
+ "notAfter": {
+ "type": "boolean",
+ "description": "Set the notAfter option to true to add the Not After information from the Validity part."
+ },
+ "notBefore": {
+ "type": "boolean",
+ "description": "Set the notBefore option to true to add the Not Before information from the Validity part."
+ },
+ "sans": {
+ "type": "boolean",
+ "description": "Set the sans option to true to add the Subject Alternative Name information from the Subject Alternative Name part."
+ },
+ "subject": {
+ "type": "object",
+ "description": "The subject select the specific client certificate subject details you want to add to the X-Forwarded-Tls-Client-Cert-Info header.",
+ "properties": {
+ "country": {
+ "type": "boolean",
+ "description": "Set the country option to true to add the country information into the subject."
+ },
+ "province": {
+ "type": "boolean",
+ "description": "Set the province option to true to add the province information into the subject."
+ },
+ "locality": {
+ "type": "boolean",
+ "description": "Set the locality option to true to add the locality information into the subject."
+ },
+ "organization": {
+ "type": "boolean",
+ "description": "Set the organization option to true to add the organization information into the subject."
+ },
+ "commonName": {
+ "type": "boolean",
+ "description": "Set the commonName option to true to add the commonName information into the subject."
+ },
+ "serialNumber": {
+ "type": "boolean",
+ "description": "Set the serialNumber option to true to add the serialNumber information into the subject."
+ },
+ "domainComponent": {
+ "type": "boolean",
+ "description": "Set the domainComponent option to true to add the domainComponent information into the subject."
+ }
+ }
+ },
+ "issuer": {
+ "type": "object",
+ "description": "The issuer select the specific client certificate issuer details you want to add to the X-Forwarded-Tls-Client-Cert-Info header.",
+ "properties": {
+ "country": {
+ "type": "boolean",
+ "description": "Set the country option to true to add the country information into the issuer."
+ },
+ "province": {
+ "type": "boolean",
+ "description": "Set the province option to true to add the province information into the issuer."
+ },
+ "locality": {
+ "type": "boolean",
+ "description": "Set the locality option to true to add the locality information into the issuer."
+ },
+ "organization": {
+ "type": "boolean",
+ "description": "Set the organization option to true to add the organization information into the issuer."
+ },
+ "commonName": {
+ "type": "boolean",
+ "description": "Set the commonName option to true to add the commonName information into the issuer."
+ },
+ "serialNumber": {
+ "type": "boolean",
+ "description": "Set the serialNumber option to true to add the serialNumber information into the issuer."
+ },
+ "domainComponent": {
+ "type": "boolean",
+ "description": "Set the domainComponent option to true to add the domainComponent information into the issuer."
+ }
+ }
+ }
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "pluginMiddleware": {
+ "type": "object",
+ "description": "Some plugins will need to be configured by adding a dynamic configuration.",
+ "additionalProperties": {
+ "type": "object"
+ }
+ },
+ "rateLimitMiddleware": {
+ "type": "object",
+ "description": "The RateLimit middleware ensures that services will receive a fair number of requests, and allows one to define what fair is.",
+ "properties": {
+ "average": {
+ "description": "average is the maximum rate, by default in requests by second, allowed for the given source.\n\nIt defaults to 0, which means no rate limiting.\n\nThe rate is actually defined by dividing average by period. So for a rate below 1 req/s, one needs to define a period larger than a second.",
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "period": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number",
+ "default": 1
+ }
+ ],
+ "description": "period, in combination with average, defines the actual maximum rate.\n\nIt defaults to 1 second."
+ },
+ "burst": {
+ "type": "number",
+ "description": "burst is the maximum number of requests allowed to go through in the same arbitrarily small period of time.\n\nIt defaults to 1.",
+ "default": 1
+ },
+ "sourceCriterion": {
+ "$ref": "#/definitions/sourceCriterion"
+ }
+ },
+ "additionalProperties": false
+ },
+ "redirectRegexMiddleware": {
+ "type": "object",
+ "description": "RegexRedirect redirect a request from an url to another with regex matching and replacement.",
+ "properties": {
+ "permanent": {
+ "type": "boolean",
+ "description": "Set the permanent option to true to apply a permanent redirection."
+ },
+ "regex": {
+ "type": "string",
+ "description": "The regex option is the regular expression to match and capture elements from the request URL."
+ },
+ "replacement": {
+ "type": "string",
+ "description": "The replacement option defines how to modify the URL to have the new target URL. Care should be taken when defining replacement expand variables: $1x is equivalent to ${1x}, not ${1}x (see Regexp.Expand), so use ${1} syntax."
+ }
+ },
+ "additionalProperties": false
+ },
+ "redirectSchemeMiddleware": {
+ "type": "object",
+ "description": "RedirectScheme redirect request from a scheme to another.",
+ "properties": {
+ "permanent": {
+ "type": "boolean",
+ "description": "Set the permanent option to true to apply a permanent redirection."
+ },
+ "scheme": {
+ "type": "string",
+ "description": "The scheme option defines the scheme of the new url."
+ },
+ "port": {
+ "type": "string",
+ "description": "The port option defines the port of the new url. Port in this configuration is a string, not a numeric value."
+ }
+ },
+ "additionalProperties": false
+ },
+ "replacePathMiddleware": {
+ "type": "object",
+ "description": "Replace the path of the request url. It will replace the actual path by the specified one and will store the original path in a X-Replaced-Path header.",
+ "properties": {
+ "path": {
+ "type": "string",
+ "description": "The path option defines the path to use as replacement in the request url."
+ }
+ },
+ "additionalProperties": false
+ },
+ "replacePathRegexMiddleware": {
+ "type": "object",
+ "description": "The ReplaceRegex replace a path from an url to another with regex matching and replacement. It will replace the actual path by the specified one and store the original path in a X-Replaced-Path header.",
+ "properties": {
+ "regex": {
+ "type": "string",
+ "description": "The regex option is the regular expression to match and capture the path from the request URL."
+ },
+ "replacement": {
+ "type": "string",
+ "description": "The replacement option defines how to modify the path to have the new target path. Care should be taken when defining replacement expand variables: $1x is equivalent to ${1x}, not ${1}x (see Regexp.Expand), so use ${1} syntax."
+ }
+ },
+ "additionalProperties": false
+ },
+ "retryMiddleware": {
+ "type": "object",
+ "description": "The Retry middleware is in charge of reissuing a request a given number of times to a backend server if that server does not reply. To be clear, as soon as the server answers, the middleware stops retrying, regardless of the response status.",
+ "properties": {
+ "attempts": {
+ "type": "integer",
+ "description": "The attempts option defines how many times the request should be retried."
+ },
+ "initialInterval": {
+ "type": "string",
+ "description": "The initialInterval option defines the first wait time in the exponential backoff series."
+ }
+ },
+ "additionalProperties": false,
+ "required": ["attempts"]
+ },
+ "stripPrefixMiddleware": {
+ "type": "object",
+ "description": "Remove the specified prefixes from the URL path. It will strip the matching path prefix and will store the matching path prefix in a X-Forwarded-Prefix header.",
+ "properties": {
+ "prefixes": {
+ "type": "array",
+ "description": "The prefixes option defines the prefixes to strip from the request URL",
+ "items": {
+ "type": "string"
+ }
+ },
+ "forceSlash": {
+ "type": "boolean",
+ "description": "The forceSlash option makes sure that the resulting stripped path is not the empty string, by replacing it with / when necessary.\n\nThis option was added to keep the initial (non-intuitive) behavior of this middleware, in order to avoid introducing a breaking change.\n\nIt's recommended to explicitly set forceSlash to false."
+ }
+ },
+ "additionalProperties": false
+ },
+ "stripPrefixRegexMiddleware": {
+ "type": "object",
+ "description": "Remove the matching prefixes from the URL path. It will strip the matching path prefix and will store the matching path prefix in a X-Forwarded-Prefix header.",
+ "properties": {
+ "regex": {
+ "type": "array",
+ "description": "The regex option is the regular expression to match the path prefix from the request URL.",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "httpMiddleware": {
+ "type": "object",
+ "oneOf": [
+ {
+ "properties": {
+ "addPrefix": {
+ "$ref": "#/definitions/addPrefixMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "basicAuth": {
+ "$ref": "#/definitions/basicAuthMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "buffering": {
+ "$ref": "#/definitions/bufferingMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "chain": {
+ "$ref": "#/definitions/chainMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "circuitBreaker": {
+ "$ref": "#/definitions/circuitBreakerMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "compress": {
+ "$ref": "#/definitions/compressMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "contentType": {
+ "$ref": "#/definitions/contentTypeMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "digestAuth": {
+ "$ref": "#/definitions/digestAuthMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "errors": {
+ "$ref": "#/definitions/errorsMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "forwardAuth": {
+ "$ref": "#/definitions/forwardAuthMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "grpcWeb": {
+ "$ref": "#/definitions/grpcWebMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "headers": {
+ "$ref": "#/definitions/headersMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "ipWhiteList": {
+ "$ref": "#/definitions/ipWhiteListMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "ipAllowList": {
+ "$ref": "#/definitions/ipAllowListMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "inFlightReq": {
+ "$ref": "#/definitions/inFlightReqMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "passTLSClientCert": {
+ "$ref": "#/definitions/passTLSClientCertMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "plugin": {
+ "$ref": "#/definitions/pluginMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "rateLimit": {
+ "$ref": "#/definitions/rateLimitMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "redirectRegex": {
+ "$ref": "#/definitions/redirectRegexMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "redirectScheme": {
+ "$ref": "#/definitions/redirectSchemeMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "replacePath": {
+ "$ref": "#/definitions/replacePathMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "replacePathRegex": {
+ "$ref": "#/definitions/replacePathRegexMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "retry": {
+ "$ref": "#/definitions/retryMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "stripPrefix": {
+ "$ref": "#/definitions/stripPrefixMiddleware"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "stripPrefixRegex": {
+ "$ref": "#/definitions/stripPrefixRegexMiddleware"
+ }
+ },
+ "additionalProperties": false
+ }
+ ]
+ },
+ "tcpRouter": {
+ "type": "object",
+ "description": "If both HTTP routers and TCP routers listen to the same entry points, the TCP routers will apply before the HTTP routers. If no matching route is found for the TCP routers, then the HTTP routers will take over.",
+ "properties": {
+ "entryPoints": {
+ "type": "array",
+ "description": "If not specified, TCP routers will accept requests from all defined entry points. If you want to limit the router scope to a set of entry points, set the entry points option.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "middlewares": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "rule": {
+ "type": "string",
+ "description": "It is important to note that the Server Name Indication is an extension of the TLS protocol. Hence, only TLS routers will be able to specify a domain name with that rule. However, non-TLS routers will have to explicitly use that rule with * (every domain) to state that every non-TLS request will be handled by the router."
+ },
+ "ruleSyntax": {
+ "type": "string",
+ "description": "In Traefik v3 a new rule syntax has been introduced (migration guide). ruleSyntax option allows to configure the rule syntax to be used for parsing the rule on a per-router basis. This allows to have heterogeneous router configurations and ease migration."
+ },
+ "service": {
+ "type": "string",
+ "description": "You must attach a TCP service per TCP router. Services are the target for the router. TCP routers can only target TCP services (not HTTP services)."
+ },
+ "priority": {
+ "type": "integer",
+ "description": "To avoid path overlap, routes are sorted, by default, in descending order using rules length. The priority is directly equal to the length of the rule, and so the longest length has the highest priority. A value of 0 for the priority is ignored: priority = 0 means that the default rules length sorting is used.",
+ "default": 0,
+ "minimum": 0
+ },
+ "tls": {
+ "type": "object",
+ "description": "When a TLS section is specified, it instructs Traefik that the current router is dedicated to TLS requests only (and that the router should ignore non-TLS requests).\n\nBy default, a router with a TLS section will terminate the TLS connections, meaning that it will send decrypted data to the services.",
+ "properties": {
+ "passthrough": {
+ "type": "boolean",
+ "description": "A TLS router will terminate the TLS connection by default. However, the passthrough option can be specified to set whether the requests should be forwarded \"as is\", keeping all data encrypted.",
+ "default": false
+ },
+ "options": {
+ "type": "string",
+ "description": "The options field enables fine-grained control of the TLS parameters. It refers to a TLS Options and will be applied only if a Host rule is defined."
+ },
+ "certResolver": {
+ "type": "string",
+ "description": "If certResolver is defined, Traefik will try to generate certificates based on routers Host & HostSNI rules."
+ },
+ "domains": {
+ "type": "array",
+ "description": "You can set SANs (alternative domains) for each main domain. Every domain must have A/AAAA records pointing to Traefik. Each domain & SAN will lead to a certificate request.",
+ "items": {
+ "type": "object",
+ "properties": {
+ "main": {
+ "type": "string",
+ "description": "Main defines the main domain name."
+ },
+ "sans": {
+ "type": "array",
+ "description": "SANs defines the subject alternative domain names.",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["rule", "service"]
+ },
+ "tcpLoadBalancerService": {
+ "type": "object",
+ "properties": {
+ "servers": {
+ "type": "array",
+ "description": "Servers declare a single instance of your program.",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string",
+ "description": "The address option (IP:Port) point to a specific instance."
+ }
+ },
+ "required": ["address"]
+ }
+ },
+ "terminationDelay": {
+ "type": "number",
+ "description": "As a proxy between a client and a server, it can happen that either side (e.g. client side) decides to terminate its writing capability on the connection (i.e. issuance of a FIN packet). The proxy needs to propagate that intent to the other side, and so when that happens, it also does the same on its connection with the other side (e.g. backend side).\n\nHowever, if for some reason (bad implementation, or malicious intent) the other side does not eventually do the same as well, the connection would stay half-open, which would lock resources for however long.\n\nTo that end, as soon as the proxy enters this termination sequence, it sets a deadline on fully terminating the connections on both sides.\n\nThe termination delay controls that deadline. It is a duration in milliseconds, defaulting to 100. A negative value means an infinite deadline (i.e. the connection is never fully terminated by the proxy itself).",
+ "default": 100
+ },
+ "proxyProtocol": {
+ "type": "object",
+ "properties": {
+ "version": {
+ "type": "integer"
+ }
+ }
+ },
+ "serversTransport": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["servers"]
+ },
+ "tcpWeightedService": {
+ "type": "object",
+ "properties": {
+ "services": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "weight": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "weight"]
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["services"]
+ },
+ "tcpService": {
+ "type": "object",
+ "oneOf": [
+ {
+ "properties": {
+ "loadBalancer": {
+ "$ref": "#/definitions/tcpLoadBalancerService"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "weighted": {
+ "$ref": "#/definitions/tcpWeightedService"
+ }
+ },
+ "additionalProperties": false
+ }
+ ]
+ },
+ "udpRouter": {
+ "type": "object",
+ "properties": {
+ "entryPoints": {
+ "type": "array",
+ "description": "If not specified, UDP routers will accept packets from all defined (UDP) entry points. If one wants to limit the router scope to a set of entry points, one should set the entry points option.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "service": {
+ "type": "string",
+ "description": "There must be one (and only one) UDP service referenced per UDP router. Services are the target for the router."
+ }
+ },
+ "additionalProperties": false,
+ "required": ["service"]
+ },
+ "udpLoadBalancerService": {
+ "type": "object",
+ "description": "The servers load balancer is in charge of balancing the requests between the servers of the same service.",
+ "properties": {
+ "servers": {
+ "type": "array",
+ "description": "The servers field defines all the servers that are part of this load-balancing group, i.e. each address (IP:Port) on which an instance of the service's program is deployed.",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ }
+ },
+ "required": ["address"]
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["servers"]
+ },
+ "udpWeightedService": {
+ "type": "object",
+ "properties": {
+ "services": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "weight": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": ["name", "weight"]
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": ["services"]
+ },
+ "udpService": {
+ "type": "object",
+ "oneOf": [
+ {
+ "properties": {
+ "loadBalancer": {
+ "$ref": "#/definitions/udpLoadBalancerService"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "weighted": {
+ "$ref": "#/definitions/udpWeightedService"
+ }
+ },
+ "additionalProperties": false
+ }
+ ]
+ }
+ },
+ "description": "Traefik v2 Dynamic Configuration File Provider",
+ "properties": {
+ "http": {
+ "type": "object",
+ "properties": {
+ "routers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/httpRouter"
+ }
+ },
+ "services": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/httpService"
+ }
+ },
+ "middlewares": {
+ "type": "object",
+ "description": "Attached to the routers, pieces of middleware are a means of tweaking the requests before they are sent to your service (or before the answer from the services are sent to the clients).\n\nThere are several available middleware in Traefik, some can modify the request, the headers, some are in charge of redirections, some add authentication, and so on.\n\nPieces of middleware can be combined in chains to fit every scenario.",
+ "additionalProperties": {
+ "$ref": "#/definitions/httpMiddleware"
+ }
+ }
+ }
+ },
+ "tcp": {
+ "type": "object",
+ "properties": {
+ "routers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/tcpRouter"
+ }
+ },
+ "services": {
+ "type": "object",
+ "description": "Each of the fields of the service section represents a kind of service. Which means, that for each specified service, one of the fields, and only one, has to be enabled to define what kind of service is created. Currently, the two available kinds are LoadBalancer, and Weighted.",
+ "additionalProperties": {
+ "$ref": "#/definitions/tcpService"
+ }
+ }
+ }
+ },
+ "udp": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "routers": {
+ "type": "object",
+ "description": "Similarly to TCP, as UDP is the transport layer, there is no concept of a request, so there is no notion of an URL path prefix to match an incoming UDP packet with. Furthermore, as there is no good TLS support at the moment for multiple hosts, there is no Host SNI notion to match against either. Therefore, there is no criterion that could be used as a rule to match incoming packets in order to route them. So UDP \"routers\" at this time are pretty much only load-balancers in one form or another.",
+ "additionalProperties": {
+ "$ref": "#/definitions/udpRouter"
+ }
+ },
+ "services": {
+ "type": "object",
+ "description": "Each of the fields of the service section represents a kind of service. Which means, that for each specified service, one of the fields, and only one, has to be enabled to define what kind of service is created. Currently, the two available kinds are LoadBalancer, and Weighted.",
+ "additionalProperties": {
+ "$ref": "#/definitions/udpService"
+ }
+ }
+ }
+ },
+ "tls": {
+ "type": "object",
+ "description": "Configures the TLS connection, TLS options, and certificate stores.",
+ "additionalProperties": false,
+ "properties": {
+ "certificates": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "certFile": {
+ "type": "string"
+ },
+ "keyFile": {
+ "type": "string"
+ },
+ "stores": {
+ "type": "array",
+ "description": "A list of stores can be specified here to indicate where the certificates should be stored. Although the stores list will actually be ignored and automatically set to [\"default\"].",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "options": {
+ "type": "object",
+ "description": "The TLS options allow one to configure some parameters of the TLS connection.",
+ "additionalProperties": false,
+ "patternProperties": {
+ "[a-zA-Z0-9-_]+": {
+ "type": "object",
+ "properties": {
+ "minVersion": {
+ "type": "string",
+ "description": "Minimum TLS Version"
+ },
+ "maxVersion": {
+ "type": "string",
+ "description": "Maximum TLS Version. It is discouraged to use of this setting to disable TLS1.3. The recommended approach is to update the clients to support TLS1.3."
+ },
+ "cipherSuites": {
+ "type": "array",
+ "description": "Cipher suites defined for TLS 1.2 and below cannot be used in TLS 1.3, and vice versa. With TLS 1.3, the cipher suites are not configurable (all supported cipher suites are safe in this case).",
+ "items": {
+ "type": "string"
+ }
+ },
+ "curvePreferences": {
+ "type": "array",
+ "description": "This option allows to set the preferred elliptic curves in a specific order.\n\nThe names of the curves defined by crypto (e.g. CurveP521) and the RFC defined names (e.g. secp521r1) can be used.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "sniStrict": {
+ "type": "boolean",
+ "description": "With strict SNI checking enabled, Traefik won't allow connections from clients that do not specify a server_name extension or don't match any certificate configured on the tlsOption."
+ },
+ "preferServerCipherSuites": {
+ "type": "boolean",
+ "description": "This option allows the server to choose its most preferred cipher suite instead of the client's. Please note that this is enabled automatically when minVersion or maxVersion are set."
+ },
+ "clientAuth": {
+ "type": "object",
+ "description": "Traefik supports mutual authentication, through the clientAuth section.",
+ "properties": {
+ "caFiles": {
+ "type": "array",
+ "description": "For authentication policies that require verification of the client certificate, the certificate authority for the certificate should be set here.",
+ "items": {
+ "type": "string"
+ }
+ },
+ "clientAuthType": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "stores": {
+ "type": "object",
+ "description": "Any store definition other than the default one (named default) will be ignored, and there is therefore only one globally available TLS store.",
+ "patternProperties": {
+ "[a-zA-Z0-9-_]+": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "defaultCertificate": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Traefik can use a default certificate for connections without a SNI, or without a matching domain. If no default certificate is provided, Traefik generates and uses a self-signed certificate.",
+ "properties": {
+ "certFile": {
+ "type": "string"
+ },
+ "keyFile": {
+ "type": "string"
+ }
+ }
+ },
+ "defaultGeneratedCert": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "GeneratedCert defines the default generated certificate configuration.",
+ "properties": {
+ "resolver": {
+ "type": "string",
+ "description": "Resolver is the name of the resolver that will be used to issue the DefaultCertificate."
+ },
+ "domain": {
+ "type": "object",
+ "description": "Domain is the domain definition for the DefaultCertificate.",
+ "properties": {
+ "main": {
+ "type": "string",
+ "description": "Main defines the main domain name."
+ },
+ "sans": {
+ "type": "array",
+ "description": "SANs defines the subject alternative domain names.",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "type": "object"
+}
diff --git a/src/schemas/json/tsconfig.json b/src/schemas/json/tsconfig.json
index 430763a8b9b..4b908872540 100644
--- a/src/schemas/json/tsconfig.json
+++ b/src/schemas/json/tsconfig.json
@@ -452,6 +452,7 @@
"$comment": "The value of 'null' is UNDOCUMENTED (https://github.com/microsoft/TypeScript/pull/18058).",
"description": "Set the newline character for emitting files.",
"type": ["string", "null"],
+ "default": "lf",
"anyOf": [
{
"enum": ["crlf", "lf"]
@@ -773,7 +774,7 @@
"$comment": "The value of 'null' is UNDOCUMENTED (https://github.com/microsoft/TypeScript/pull/18058).",
"description": "Ensure that casing is correct in imports.",
"type": ["boolean", "null"],
- "default": false,
+ "default": true,
"markdownDescription": "Ensure that casing is correct in imports.\n\nSee more: https://www.typescriptlang.org/tsconfig#forceConsistentCasingInFileNames"
},
"generateCpuProfile": {
diff --git a/src/schemas/json/webextension.json b/src/schemas/json/webextension.json
index 4ea0252e7ac..a7136ec04e3 100644
--- a/src/schemas/json/webextension.json
+++ b/src/schemas/json/webextension.json
@@ -474,6 +474,11 @@
"description": "Name of the extension. This is used to identify the extension in the browser's user interface and on sites like addons.mozilla.org.
It's good practice to keep the name short enough to display in the UI. Also, the length of the name of a published extension may be limited.
These restrictions do not apply to self-hosted extensions or extensions distributed outside the stores.
This is a localizable property.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name",
"type": "string"
},
+ "offline_enabled": {
+ "description": "Whether the app or extension is expected to work offline. When Chrome detects that it is offline, apps with this field set to true will be highlighted on the New Tab page.\n\nAs of Chrome 35, apps (ChromeOS only from 2018) are assumed to be offline enabled and the default value of \"offline_enabled\" is true unless \"webview\" permission is requested. In this case, network connectivity is assumed to be required and \"offline_enabled\" defaults to false.\n\nThe \"offline_enabled\" value is also used to determine whether a network connectivity check will be performed when launching an app in ChromeOS kiosk mode. A network connectivity check will be performed when apps are not offline enabled, and app launching put on hold until the device obtains connectivity to the Internet. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/offline_enabled",
+ "type": "boolean",
+ "default": true
+ },
"omnibox": {
"title": "keywords",
"description": "Use the omnibox key to define an omnibox keyword for your extension.\n\nWhen the user types this keyword into the browser's address bar, followed by a space, then any subsequent characters will be sent to the extension using the omnibox API. The extension will then be able to populate the address bar's drop-down suggestions list with its own suggestions.\n\nIf two or more extensions define the same keyword, then the extension that was installed last gets to control the keyword. Any previously installed extensions that defined the same keyword will no longer be able to use the omnibox API.\n\nhttps://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/omnibox",
diff --git a/src/test/bun-lock/bun.lock.json b/src/test/bun-lock/bun.lock.json
new file mode 100644
index 00000000000..7ee40076cda
--- /dev/null
+++ b/src/test/bun-lock/bun.lock.json
@@ -0,0 +1,411 @@
+{
+ "lockfileVersion": 0,
+ "workspaces": {
+ "": {
+ "name": "schemastore.org",
+ "devDependencies": {
+ "@eslint/js": "^9.17.0",
+ "@exodus/schemasafe": "^1.3.0",
+ "@hyperupcall/ajv-formats-draft2019": "^1.7.2",
+ "@prantlf/jsonlint": "^16.0.0",
+ "ajv": "^8.17.1",
+ "ajv-draft-04": "^1.0.0",
+ "ajv-formats": "^2.1.1",
+ "chalk": "^5.3.0",
+ "eslint": "^9.17.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-n": "^17.15.0",
+ "eslint-plugin-promise": "^7.2.1",
+ "globals": "^15.13.0",
+ "jsonc-parser": "^3.3.1",
+ "minimist": "^1.2.8",
+ "node-fetch": "^3.3.2",
+ "ora": "^8.1.1",
+ "prettier": "^3.4.2",
+ "prettier-plugin-sort-json": "^4.0.0",
+ "prettier-plugin-toml": "^2.0.1",
+ "smol-toml": "^1.3.1",
+ "yaml": "^2.6.1"
+ }
+ }
+ },
+ "packages": {
+ "@babel/code-frame": ["@babel/code-frame@7.24.7", "", { "dependencies": { "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" } }, "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA=="],
+
+ "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.24.7", "", {}, "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w=="],
+
+ "@babel/highlight": ["@babel/highlight@7.24.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw=="],
+
+ "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.4.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA=="],
+
+ "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="],
+
+ "@eslint/config-array": ["@eslint/config-array@0.19.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.5", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA=="],
+
+ "@eslint/core": ["@eslint/core@0.9.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q=="],
+
+ "@eslint/eslintrc": ["@eslint/eslintrc@3.2.0", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w=="],
+
+ "@eslint/js": ["@eslint/js@9.17.0", "", {}, "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w=="],
+
+ "@eslint/object-schema": ["@eslint/object-schema@2.1.5", "", {}, "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ=="],
+
+ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.2.4", "", { "dependencies": { "levn": "^0.4.1" } }, "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg=="],
+
+ "@exodus/schemasafe": ["@exodus/schemasafe@1.3.0", "", {}, "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw=="],
+
+ "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
+
+ "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="],
+
+ "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="],
+
+ "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.1", "", {}, "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA=="],
+
+ "@hyperupcall/ajv-formats-draft2019": ["@hyperupcall/ajv-formats-draft2019@1.7.2", "", { "dependencies": { "punycode": "^2.3.1", "schemes": "^1.4.0", "smtp-address-parser": "^1.1.0", "uri-js": "^4.4.1" }, "peerDependencies": { "ajv": ">=8" } }, "sha512-Ds0kJafggVzu9wx7cbIU09pnkDGXkm+p+FK9o1k0XEkH3WPve6Z8wbfr5SsUCDvpND3UEbv1VCFTGxH8Mp/6nQ=="],
+
+ "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
+
+ "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
+
+ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
+
+ "@prantlf/jsonlint": ["@prantlf/jsonlint@16.0.0", "", { "dependencies": { "ajv": "8.17.1", "ajv-draft-04": "1.0.0", "cosmiconfig": "9.0.0", "diff": "5.2.0", "fast-glob": "3.3.2" }, "bin": { "jsonlint": "lib/cli.js" } }, "sha512-L0jFtcsBRJZOr4T6sbePb1R6XYF6Nofj6kmEAxqTKCHEr50uvyxBFnB1UKaehWaMhHnvtyqWfTR5Go25RywXIQ=="],
+
+ "@taplo/core": ["@taplo/core@0.1.1", "", {}, "sha512-BG/zLGf5wiNXGEVPvUAAX/4ilB3PwDUY2o0MV0y47mZbDZ9ad9UK/cIQsILat3bqbPJsALVbU6k3cskNZ3vAQg=="],
+
+ "@taplo/lib": ["@taplo/lib@0.4.0-alpha.2", "", { "dependencies": { "@taplo/core": "^0.1.0" } }, "sha512-DV/Re3DPVY+BhBtLZ3dmP4mP6YMLSsgq9qGLXwOV38lvNF/fBlgvQswzlXmzCEefL/3q2eMoefZpOI/+GLuCNA=="],
+
+ "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="],
+
+ "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
+
+ "acorn": ["acorn@8.14.0", "", { "bin": "bin/acorn" }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="],
+
+ "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
+
+ "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
+
+ "ajv-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" } }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="],
+
+ "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" }, "peerDependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="],
+
+ "ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="],
+
+ "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
+
+ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
+
+ "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
+
+ "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="],
+
+ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
+
+ "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
+
+ "chalk": ["chalk@5.3.0", "", {}, "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w=="],
+
+ "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="],
+
+ "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="],
+
+ "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
+
+ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
+
+ "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
+
+ "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
+
+ "cosmiconfig": ["cosmiconfig@9.0.0", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="],
+
+ "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
+
+ "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="],
+
+ "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="],
+
+ "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
+
+ "diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="],
+
+ "discontinuous-range": ["discontinuous-range@1.0.0", "", {}, "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ=="],
+
+ "emoji-regex": ["emoji-regex@10.3.0", "", {}, "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw=="],
+
+ "enhanced-resolve": ["enhanced-resolve@5.17.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg=="],
+
+ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
+
+ "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="],
+
+ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
+
+ "eslint": ["eslint@9.17.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.19.0", "@eslint/core": "^0.9.0", "@eslint/eslintrc": "^3.2.0", "@eslint/js": "9.17.0", "@eslint/plugin-kit": "^0.2.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.1", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": "bin/eslint.js" }, "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA=="],
+
+ "eslint-compat-utils": ["eslint-compat-utils@0.5.1", "", { "dependencies": { "semver": "^7.5.4" }, "peerDependencies": { "eslint": ">=6.0.0" } }, "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q=="],
+
+ "eslint-config-prettier": ["eslint-config-prettier@9.1.0", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": "bin/cli.js" }, "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw=="],
+
+ "eslint-plugin-es-x": ["eslint-plugin-es-x@7.8.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", "@eslint-community/regexpp": "^4.11.0", "eslint-compat-utils": "^0.5.1" }, "peerDependencies": { "eslint": ">=8" } }, "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ=="],
+
+ "eslint-plugin-n": ["eslint-plugin-n@17.15.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.1", "enhanced-resolve": "^5.17.1", "eslint-plugin-es-x": "^7.8.0", "get-tsconfig": "^4.8.1", "globals": "^15.11.0", "ignore": "^5.3.2", "minimatch": "^9.0.5", "semver": "^7.6.3" }, "peerDependencies": { "eslint": ">=8.23.0" } }, "sha512-xF3zJkOfLlFOm5TvmqmsnA9/fO+/z2pYs0dkuKXKN/ymS6UB1yEcaoIkqxLKQ9Dw/WmLX/Tdh6/5ZS5azVixFQ=="],
+
+ "eslint-plugin-promise": ["eslint-plugin-promise@7.2.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA=="],
+
+ "eslint-scope": ["eslint-scope@8.2.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A=="],
+
+ "eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="],
+
+ "espree": ["espree@10.3.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.0" } }, "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg=="],
+
+ "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="],
+
+ "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="],
+
+ "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
+
+ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
+
+ "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="],
+
+ "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="],
+
+ "fast-glob": ["fast-glob@3.3.2", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow=="],
+
+ "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="],
+
+ "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="],
+
+ "fast-uri": ["fast-uri@3.0.1", "", {}, "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw=="],
+
+ "fastq": ["fastq@1.17.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w=="],
+
+ "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="],
+
+ "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="],
+
+ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
+
+ "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="],
+
+ "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
+
+ "flatted": ["flatted@3.3.1", "", {}, "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw=="],
+
+ "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="],
+
+ "get-east-asian-width": ["get-east-asian-width@1.2.0", "", {}, "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA=="],
+
+ "get-tsconfig": ["get-tsconfig@4.8.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg=="],
+
+ "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
+
+ "globals": ["globals@15.13.0", "", {}, "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g=="],
+
+ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
+
+ "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
+
+ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="],
+
+ "import-fresh": ["import-fresh@3.3.0", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="],
+
+ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
+
+ "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
+
+ "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
+
+ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
+
+ "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="],
+
+ "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
+
+ "is-unicode-supported": ["is-unicode-supported@2.0.0", "", {}, "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q=="],
+
+ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
+
+ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
+
+ "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": "bin/js-yaml.js" }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="],
+
+ "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="],
+
+ "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="],
+
+ "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
+
+ "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="],
+
+ "jsonc-parser": ["jsonc-parser@3.3.1", "", {}, "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ=="],
+
+ "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="],
+
+ "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
+
+ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
+
+ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
+
+ "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
+
+ "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="],
+
+ "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
+
+ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
+
+ "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="],
+
+ "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
+
+ "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
+
+ "moo": ["moo@0.5.2", "", {}, "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q=="],
+
+ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
+
+ "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
+
+ "nearley": ["nearley@2.20.1", "", { "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6" }, "bin": { "nearley-railroad": "bin/nearley-railroad.js", "nearley-test": "bin/nearley-test.js", "nearley-unparse": "bin/nearley-unparse.js", "nearleyc": "bin/nearleyc.js" } }, "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ=="],
+
+ "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="],
+
+ "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
+
+ "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="],
+
+ "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
+
+ "ora": ["ora@8.1.1", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw=="],
+
+ "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
+
+ "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
+
+ "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
+
+ "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
+
+ "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="],
+
+ "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
+
+ "picocolors": ["picocolors@1.0.1", "", {}, "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="],
+
+ "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
+
+ "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
+
+ "prettier": ["prettier@3.4.2", "", { "bin": "bin/prettier.cjs" }, "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ=="],
+
+ "prettier-plugin-sort-json": ["prettier-plugin-sort-json@4.0.0", "", { "peerDependencies": { "prettier": "^3.0.0" } }, "sha512-zV5g+bWFD2zAqyQ8gCkwUTC49o9FxslaUdirwivt5GZHcf57hCocavykuyYqbExoEsuBOg8IU36OY7zmVEMOWA=="],
+
+ "prettier-plugin-toml": ["prettier-plugin-toml@2.0.1", "", { "dependencies": { "@taplo/lib": "^0.4.0-alpha.2" }, "peerDependencies": { "prettier": "^3.0.3" } }, "sha512-99z1YOkViECHtXQjGIigd3talI/ybUI1zB3yniAwUrlWBXupNXThB1hM6bwSMUEj2/+tomTlMtT98F5t4s8IWA=="],
+
+ "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
+
+ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
+
+ "railroad-diagrams": ["railroad-diagrams@1.0.0", "", {}, "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A=="],
+
+ "randexp": ["randexp@0.4.6", "", { "dependencies": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" } }, "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ=="],
+
+ "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
+
+ "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
+
+ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
+
+ "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="],
+
+ "ret": ["ret@0.1.15", "", {}, "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="],
+
+ "reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="],
+
+ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
+
+ "schemes": ["schemes@1.4.0", "", { "dependencies": { "extend": "^3.0.0" } }, "sha512-ImFy9FbCsQlVgnE3TCWmLPCFnVzx0lHL/l+umHplDqAKd0dzFpnS6lFZIpagBlYhKwzVmlV36ec0Y1XTu8JBAQ=="],
+
+ "semver": ["semver@7.6.3", "", { "bin": "bin/semver.js" }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="],
+
+ "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
+
+ "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
+
+ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
+
+ "smol-toml": ["smol-toml@1.3.1", "", {}, "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ=="],
+
+ "smtp-address-parser": ["smtp-address-parser@1.1.0", "", { "dependencies": { "nearley": "^2.20.1" } }, "sha512-Gz11jbNU0plrReU9Sj7fmshSBxxJ9ShdD2q4ktHIHo/rpTH6lFyQoYHYKINPJtPe8aHFnsbtW46Ls0tCCBsIZg=="],
+
+ "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="],
+
+ "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
+
+ "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="],
+
+ "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
+
+ "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
+
+ "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="],
+
+ "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
+
+ "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
+
+ "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
+
+ "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
+
+ "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
+
+ "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
+
+ "yaml": ["yaml@2.6.1", "", { "bin": "bin.mjs" }, "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg=="],
+
+ "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
+
+ "@babel/highlight/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="],
+
+ "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
+
+ "@eslint/eslintrc/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
+
+ "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="],
+
+ "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="],
+
+ "eslint/ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
+
+ "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
+
+ "eslint-plugin-n/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
+
+ "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
+
+ "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="],
+
+ "@babel/highlight/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="],
+
+ "@babel/highlight/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="],
+
+ "@babel/highlight/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="],
+
+ "@eslint/eslintrc/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
+
+ "eslint-plugin-n/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="],
+
+ "eslint/ajv/json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
+
+ "@babel/highlight/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="],
+
+ "@babel/highlight/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="],
+
+ "@babel/highlight/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="]
+ }
+}
diff --git a/src/test/eslintrc/typescript-eslint.json b/src/test/eslintrc/typescript-eslint.json
index 9456b772fb9..a624ec086f8 100644
--- a/src/test/eslintrc/typescript-eslint.json
+++ b/src/test/eslintrc/typescript-eslint.json
@@ -30,6 +30,7 @@
"allowTemplateLiterals": true,
"avoidEscape": true
}
- ]
+ ],
+ "@typescript-eslint/return-await": ["error", "always"]
}
}
diff --git a/src/test/gematik-test-hcpis/hcpi.yaml b/src/test/gematik-test-hcpis/hcpi.yaml
new file mode 100644
index 00000000000..a0c26e01afc
--- /dev/null
+++ b/src/test/gematik-test-hcpis/hcpi.yaml
@@ -0,0 +1,36 @@
+# yaml-language-server: $schema=../../schemas/json/gematik-test-hcpis.json
+# Copyright 2024 gematik GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# health care provider institutions ("Leistungserbringerinstitutionen")
+# initial content: only health care provider institutions, which are actively used in test or definitely
+# planned to be used
+# this is a sample as reference. there shall be one file hcpi.yaml to hold the different entries to be used in tests
+hcpis:
+ someHcpInstitution:
+ hcpiData:
+ name: someHcpiName
+ # an hcpi has a SM(C)-B with a telematik-Id
+ telematik-id: thisIsDummyText
+ # possible rule names according to roles in https://gemspec.gematik.de/docs/gemSpec/gemSpec_OID/latest/#3.5.1.3
+ # table 3 (data of first column, remove heading "oid_" string)
+ hcpiRole: praxis_arzt
+ cards:
+ - iccsn: '01234567890123456789'
+ # expiry date taken from AUT-certificate
+ expiryDate: '2020-01-01'
+ type: whatever
+ # do we need the users of this data to be limited to specific test suites / product teams?
+ ownerTestsuite: Apollo
diff --git a/src/test/gematik-test-hcps/hcp.yaml b/src/test/gematik-test-hcps/hcp.yaml
new file mode 100644
index 00000000000..1128ec363b6
--- /dev/null
+++ b/src/test/gematik-test-hcps/hcp.yaml
@@ -0,0 +1,50 @@
+# yaml-language-server: $schema=../../schemas/json/gematik-test-hcps.json
+#
+# Copyright 2024 gematik GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# health care provider ("Leistungserbringer")
+# initial content: only health care provider, which are actively used in test or definitely
+# planned to be used
+# this is a sample as reference. There shall be one file hcp.yaml to hold the different entries to be used in tests
+hcps:
+ Wittgenstein:
+ hcpData:
+ name:
+ # Data could also be taken from AUT certificate but is quite static and human-readable in this place
+ title: Dr.
+ given: Franz-Josef
+ last: Wittgenstein
+ telematik-id: thisIsDummyText
+ # hcpi: holds the readable name of the health care provider institution
+ # to be used as a reference to the config data for hcpi
+ # can refer to a single medical practice, pharmacy, hospital or other hcpi
+ # multiple entries must be possible
+ hcpi: someHcpInstitution
+ # possible rule names according to roles in https://gemspec.gematik.de/docs/gemSpec/gemSpec_OID/latest/#3.5.1.1
+ # table 2 (data of first column, remove heading "oid_" string)
+ hcpRole: apotheker
+ cards:
+ - iccsn: '01234567890123456789'
+ # expiry date taken from AUT-certificate
+ expiryDate: '2025-01-01'
+ type: smcb
+
+ - iccsn: '01234567890123456789'
+ expiryDate: '2020-01-01'
+ type: smcb
+
+ # do we need the users of this data to be limited to specific test suites / product teams?
+ # ownerTestsuite: Apollo
diff --git a/src/test/gematik-test-insurances/insurance.yaml b/src/test/gematik-test-insurances/insurance.yaml
new file mode 100644
index 00000000000..ba76f112e3c
--- /dev/null
+++ b/src/test/gematik-test-insurances/insurance.yaml
@@ -0,0 +1,54 @@
+# yaml-language-server: $schema=../../schemas/json/gematik-test-insurances.json
+#
+# Copyright 2024 gematik GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Insurances ("Versicherungen" / "Krankenkassen")
+# initial content: only insurances, which are actively used in test or definitely planned to be used
+# this is a sample as reference. There shall be one file patient.yaml to hold the different patient entries to be used in tests
+insurances:
+ insuranceGematik:
+ insuranceData:
+ # hint: as gematik takes over several roles in tests, the specific role is additionally added in the name
+ # allowed Values:
+ # insuranceGematik, KKH, TK, Viactiv, BKK_MobilOil, Barmer, BKK_exclusiv, BKK_Technoform, IKK_Nord,
+ # IKK_Classic, DAK_Gesundheit, mhplus, AOK_NordOst, AOK_Bayern, AOK_BadenWürttemberg, AOK_RheinlandPfalz,
+ # AOK_BremenBH, AOK_Niedersachsen, AOK_Plus, AOK_Hessen, AOK_SachsenAnhalt
+ name: insuranceGematik
+ # an insurance has a SM(C)-B with a telematik-Id, i.e. to access ePA services
+ telematik-id: thisIsDummyText
+ # ik ('Institutskennzeichen') is the 9-digit identifier of the insurance
+ ik: 123456789
+ # IIN (Issuer Identification Number)
+ # is part of eGK-ICCSN (digits 6..10 within the 20-digit ICCSN)
+ # number for all eGK-ICCSNs of patients within this insurance
+ iin: 88311
+ # vsdServiceProvider holds the name of the VSDM service provider for the eGK of the insured
+ # VSDM has nothing to do with IDP
+ vsdServiceProvider:
+ # Allowed Values:
+ # providerGematik, Arge_AOK, gkvi, ITS_Care, Kubus, Mobil_ISC
+ # BitmarckT, ITSC_GmbH, TK_Provider, Worldline
+ name: providerGematik
+ # Links zu VSDM Fachdiensten TU, RU
+ # Wer würde die Daten nutzen?
+ TU:
+ ufs: https://example.org:443/ufs
+ cms: link to cms
+ vsdd: link to vsdd
+ RU:
+ ufs: thisIsDummyText
+ cms: link to cms
+ vsdd: link to vsdd
diff --git a/src/test/gematik-test-patients/patient.yaml b/src/test/gematik-test-patients/patient.yaml
index 3042cb94f90..66217d5d465 100644
--- a/src/test/gematik-test-patients/patient.yaml
+++ b/src/test/gematik-test-patients/patient.yaml
@@ -1,5 +1,4 @@
# yaml-language-server: $schema=../../schemas/json/gematik-test-patients.json
-# $schema: resource:/de/gematik/test/testdata/schemes/patients.json
#
# Copyright 2024 gematik GmbH
#
diff --git a/src/test/gematik-tiger/tiger.yaml b/src/test/gematik-tiger/tiger.yaml
index b4814bb3a72..9277fd97554 100644
--- a/src/test/gematik-tiger/tiger.yaml
+++ b/src/test/gematik-tiger/tiger.yaml
@@ -55,9 +55,8 @@ editorExamples:
}
tigerGlue:
- helloTestLocal: "global value for helloTestLocal"
+ helloTestLocal: 'global value for helloTestLocal'
#to make sure that the test works no mather the order in which the
#features are executed, we use two test variables
- helloTestFeature1: "global value for helloTestFeature1"
- helloTestFeature2: "global value for helloTestFeature2"
-
+ helloTestFeature1: 'global value for helloTestFeature1'
+ helloTestFeature2: 'global value for helloTestFeature2'
diff --git a/src/test/prometheus/prometheus.json b/src/test/prometheus/prometheus.json
index 20f5703aa7a..3bb2793a2b7 100644
--- a/src/test/prometheus/prometheus.json
+++ b/src/test/prometheus/prometheus.json
@@ -73,6 +73,7 @@
"scrape_configs": [
{
"bearer_token_file": "valid_token_file",
+ "fallback_scrape_protocol": "PrometheusText0.0.4",
"file_sd_configs": [
{
"files": ["foo/*.slow.json", "foo/*.slow.yml", "single/file.yml"],
diff --git a/src/test/swcrc/swcrc-test.json b/src/test/swcrc/swcrc-test.json
deleted file mode 100644
index 65ea5648c52..00000000000
--- a/src/test/swcrc/swcrc-test.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "env": {
- "coreJs": "3.22",
- "include": ["proposal-json-strings", "module"]
- },
- "exclude": ["a"],
- "jsc": {
- "experimental": {
- "keepImportAssertions": true,
- "plugins": [
- [
- "swc-plugin-coverage-instrument",
- {
- "option": true
- }
- ]
- ]
- },
- "externalHelpers": false,
- "loose": false,
- "parser": {
- "syntax": "typescript"
- },
- "target": "esnext",
- "transform": {
- "react": {
- "development": false,
- "refresh": false,
- "runtime": "automatic",
- "useBuiltins": false
- },
- "useDefineForClassFields": false
- }
- },
- "minify": false,
- "module": {
- "resolveFully": true,
- "type": "commonjs"
- },
- "test": "a"
-}
diff --git a/src/test/traefik-v3-file-provider/example.json b/src/test/traefik-v3-file-provider/example.json
new file mode 100644
index 00000000000..4e21cda292e
--- /dev/null
+++ b/src/test/traefik-v3-file-provider/example.json
@@ -0,0 +1,735 @@
+{
+ "http": {
+ "middlewares": {
+ "Middleware01": {
+ "addPrefix": {
+ "prefix": "foobar"
+ }
+ },
+ "Middleware02": {
+ "basicAuth": {
+ "headerField": "foobar",
+ "realm": "foobar",
+ "removeHeader": true,
+ "users": ["foobar", "foobar"],
+ "usersFile": "foobar"
+ }
+ },
+ "Middleware03": {
+ "buffering": {
+ "maxRequestBodyBytes": 42,
+ "maxResponseBodyBytes": 42,
+ "memRequestBodyBytes": 42,
+ "memResponseBodyBytes": 42,
+ "retryExpression": "foobar"
+ }
+ },
+ "Middleware04": {
+ "chain": {
+ "middlewares": ["foobar", "foobar"]
+ }
+ },
+ "Middleware05": {
+ "circuitBreaker": {
+ "checkPeriod": "42s",
+ "expression": "foobar",
+ "fallbackDuration": "42s",
+ "recoveryDuration": "42s",
+ "responseCode": 42
+ }
+ },
+ "Middleware06": {
+ "compress": {
+ "defaultEncoding": "foobar",
+ "excludedContentTypes": ["foobar", "foobar"],
+ "includedContentTypes": ["foobar", "foobar"],
+ "minResponseBodyBytes": 42
+ }
+ },
+ "Middleware07": {
+ "contentType": {
+ "autoDetect": true
+ }
+ },
+ "Middleware08": {
+ "digestAuth": {
+ "headerField": "foobar",
+ "realm": "foobar",
+ "removeHeader": true,
+ "users": ["foobar", "foobar"],
+ "usersFile": "foobar"
+ }
+ },
+ "Middleware09": {
+ "errors": {
+ "query": "foobar",
+ "service": "foobar",
+ "status": ["foobar", "foobar"]
+ }
+ },
+ "Middleware10": {
+ "forwardAuth": {
+ "addAuthCookiesToResponse": ["foobar", "foobar"],
+ "address": "foobar",
+ "authRequestHeaders": ["foobar", "foobar"],
+ "authResponseHeaders": ["foobar", "foobar"],
+ "authResponseHeadersRegex": "foobar",
+ "tls": {
+ "ca": "foobar",
+ "caOptional": true,
+ "cert": "foobar",
+ "insecureSkipVerify": true,
+ "key": "foobar"
+ },
+ "trustForwardHeader": true
+ }
+ },
+ "Middleware11": {
+ "grpcWeb": {
+ "allowOrigins": ["foobar", "foobar"]
+ }
+ },
+ "Middleware12": {
+ "headers": {
+ "accessControlAllowCredentials": true,
+ "accessControlAllowHeaders": ["foobar", "foobar"],
+ "accessControlAllowMethods": ["foobar", "foobar"],
+ "accessControlAllowOriginList": ["foobar", "foobar"],
+ "accessControlAllowOriginListRegex": ["foobar", "foobar"],
+ "accessControlExposeHeaders": ["foobar", "foobar"],
+ "accessControlMaxAge": 42,
+ "addVaryHeader": true,
+ "allowedHosts": ["foobar", "foobar"],
+ "browserXssFilter": true,
+ "contentSecurityPolicy": "foobar",
+ "contentSecurityPolicyReportOnly": "foobar",
+ "contentTypeNosniff": true,
+ "customBrowserXSSValue": "foobar",
+ "customFrameOptionsValue": "foobar",
+ "customRequestHeaders": {
+ "name0": "foobar",
+ "name1": "foobar"
+ },
+ "customResponseHeaders": {
+ "name0": "foobar",
+ "name1": "foobar"
+ },
+ "featurePolicy": "foobar",
+ "forceSTSHeader": true,
+ "frameDeny": true,
+ "hostsProxyHeaders": ["foobar", "foobar"],
+ "isDevelopment": true,
+ "permissionsPolicy": "foobar",
+ "publicKey": "foobar",
+ "referrerPolicy": "foobar",
+ "sslForceHost": true,
+ "sslHost": "foobar",
+ "sslProxyHeaders": {
+ "name0": "foobar",
+ "name1": "foobar"
+ },
+ "sslRedirect": true,
+ "sslTemporaryRedirect": true,
+ "stsIncludeSubdomains": true,
+ "stsPreload": true,
+ "stsSeconds": 42
+ }
+ },
+ "Middleware13": {
+ "ipAllowList": {
+ "ipStrategy": {
+ "depth": 42,
+ "excludedIPs": ["foobar", "foobar"]
+ },
+ "rejectStatusCode": 42,
+ "sourceRange": ["foobar", "foobar"]
+ }
+ },
+ "Middleware14": {
+ "ipWhiteList": {
+ "ipStrategy": {
+ "depth": 42,
+ "excludedIPs": ["foobar", "foobar"]
+ },
+ "sourceRange": ["foobar", "foobar"]
+ }
+ },
+ "Middleware15": {
+ "inFlightReq": {
+ "amount": 42,
+ "sourceCriterion": {
+ "ipStrategy": {
+ "depth": 42,
+ "excludedIPs": ["foobar", "foobar"]
+ },
+ "requestHeaderName": "foobar",
+ "requestHost": true
+ }
+ }
+ },
+ "Middleware16": {
+ "passTLSClientCert": {
+ "info": {
+ "issuer": {
+ "commonName": true,
+ "country": true,
+ "domainComponent": true,
+ "locality": true,
+ "organization": true,
+ "province": true,
+ "serialNumber": true
+ },
+ "notAfter": true,
+ "notBefore": true,
+ "sans": true,
+ "serialNumber": true,
+ "subject": {
+ "commonName": true,
+ "country": true,
+ "domainComponent": true,
+ "locality": true,
+ "organization": true,
+ "organizationalUnit": true,
+ "province": true,
+ "serialNumber": true
+ }
+ },
+ "pem": true
+ }
+ },
+ "Middleware17": {
+ "plugin": {
+ "PluginConf0": {
+ "name0": "foobar",
+ "name1": "foobar"
+ },
+ "PluginConf1": {
+ "name0": "foobar",
+ "name1": "foobar"
+ }
+ }
+ },
+ "Middleware18": {
+ "rateLimit": {
+ "average": 42,
+ "burst": 42,
+ "period": "42s",
+ "sourceCriterion": {
+ "ipStrategy": {
+ "depth": 42,
+ "excludedIPs": ["foobar", "foobar"]
+ },
+ "requestHeaderName": "foobar",
+ "requestHost": true
+ }
+ }
+ },
+ "Middleware19": {
+ "redirectRegex": {
+ "permanent": true,
+ "regex": "foobar",
+ "replacement": "foobar"
+ }
+ },
+ "Middleware20": {
+ "redirectScheme": {
+ "permanent": true,
+ "port": "foobar",
+ "scheme": "foobar"
+ }
+ },
+ "Middleware21": {
+ "replacePath": {
+ "path": "foobar"
+ }
+ },
+ "Middleware22": {
+ "replacePathRegex": {
+ "regex": "foobar",
+ "replacement": "foobar"
+ }
+ },
+ "Middleware23": {
+ "retry": {
+ "attempts": 42,
+ "initialInterval": "42s"
+ }
+ },
+ "Middleware24": {
+ "stripPrefix": {
+ "forceSlash": true,
+ "prefixes": ["foobar", "foobar"]
+ }
+ },
+ "Middleware25": {
+ "stripPrefixRegex": {
+ "regex": ["foobar", "foobar"]
+ }
+ }
+ },
+ "routers": {
+ "Router0": {
+ "entryPoints": ["foobar", "foobar"],
+ "middlewares": ["foobar", "foobar"],
+ "priority": 42,
+ "rule": "foobar",
+ "ruleSyntax": "foobar",
+ "service": "foobar",
+ "tls": {
+ "certResolver": "foobar",
+ "domains": [
+ {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ },
+ {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ }
+ ],
+ "options": "foobar"
+ }
+ },
+ "Router1": {
+ "entryPoints": ["foobar", "foobar"],
+ "middlewares": ["foobar", "foobar"],
+ "priority": 42,
+ "rule": "foobar",
+ "ruleSyntax": "foobar",
+ "service": "foobar",
+ "tls": {
+ "certResolver": "foobar",
+ "domains": [
+ {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ },
+ {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ }
+ ],
+ "options": "foobar"
+ }
+ }
+ },
+ "serversTransports": {
+ "ServersTransport0": {
+ "certificates": [
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ },
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ }
+ ],
+ "disableHTTP2": true,
+ "forwardingTimeouts": {
+ "dialTimeout": "42s",
+ "idleConnTimeout": "42s",
+ "pingTimeout": "42s",
+ "readIdleTimeout": "42s",
+ "responseHeaderTimeout": "42s"
+ },
+ "insecureSkipVerify": true,
+ "maxIdleConnsPerHost": 42,
+ "peerCertURI": "foobar",
+ "rootCAs": ["foobar", "foobar"],
+ "serverName": "foobar",
+ "spiffe": {
+ "ids": ["foobar", "foobar"],
+ "trustDomain": "foobar"
+ }
+ },
+ "ServersTransport1": {
+ "certificates": [
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ },
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ }
+ ],
+ "disableHTTP2": true,
+ "forwardingTimeouts": {
+ "dialTimeout": "42s",
+ "idleConnTimeout": "42s",
+ "pingTimeout": "42s",
+ "readIdleTimeout": "42s",
+ "responseHeaderTimeout": "42s"
+ },
+ "insecureSkipVerify": true,
+ "maxIdleConnsPerHost": 42,
+ "peerCertURI": "foobar",
+ "rootCAs": ["foobar", "foobar"],
+ "serverName": "foobar",
+ "spiffe": {
+ "ids": ["foobar", "foobar"],
+ "trustDomain": "foobar"
+ }
+ }
+ },
+ "services": {
+ "Service01": {
+ "failover": {
+ "fallback": "foobar",
+ "healthCheck": {},
+ "service": "foobar"
+ }
+ },
+ "Service02": {
+ "loadBalancer": {
+ "healthCheck": {
+ "followRedirects": true,
+ "headers": {
+ "name0": "foobar",
+ "name1": "foobar"
+ },
+ "hostname": "foobar",
+ "interval": "42s",
+ "method": "foobar",
+ "mode": "foobar",
+ "path": "foobar",
+ "port": 42,
+ "scheme": "foobar",
+ "status": 42,
+ "timeout": "42s"
+ },
+ "passHostHeader": true,
+ "responseForwarding": {
+ "flushInterval": "42s"
+ },
+ "servers": [
+ {
+ "url": "foobar",
+ "weight": 42
+ },
+ {
+ "url": "foobar",
+ "weight": 42
+ }
+ ],
+ "serversTransport": "foobar",
+ "sticky": {
+ "cookie": {
+ "httpOnly": true,
+ "maxAge": 42,
+ "name": "foobar",
+ "sameSite": "foobar",
+ "secure": true
+ }
+ }
+ }
+ },
+ "Service03": {
+ "mirroring": {
+ "healthCheck": {},
+ "maxBodySize": 42,
+ "mirrors": [
+ {
+ "name": "foobar",
+ "percent": 42
+ },
+ {
+ "name": "foobar",
+ "percent": 42
+ }
+ ],
+ "service": "foobar"
+ }
+ },
+ "Service04": {
+ "weighted": {
+ "healthCheck": {},
+ "services": [
+ {
+ "name": "foobar",
+ "weight": 42
+ },
+ {
+ "name": "foobar",
+ "weight": 42
+ }
+ ],
+ "sticky": {
+ "cookie": {
+ "httpOnly": true,
+ "maxAge": 42,
+ "name": "foobar",
+ "sameSite": "foobar",
+ "secure": true
+ }
+ }
+ }
+ }
+ }
+ },
+ "tcp": {
+ "middlewares": {
+ "TCPMiddleware01": {
+ "ipAllowList": {
+ "sourceRange": ["foobar", "foobar"]
+ }
+ },
+ "TCPMiddleware02": {
+ "ipWhiteList": {
+ "sourceRange": ["foobar", "foobar"]
+ }
+ },
+ "TCPMiddleware03": {
+ "inFlightConn": {
+ "amount": 42
+ }
+ }
+ },
+ "routers": {
+ "TCPRouter0": {
+ "entryPoints": ["foobar", "foobar"],
+ "middlewares": ["foobar", "foobar"],
+ "priority": 42,
+ "rule": "foobar",
+ "ruleSyntax": "foobar",
+ "service": "foobar",
+ "tls": {
+ "certResolver": "foobar",
+ "domains": [
+ {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ },
+ {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ }
+ ],
+ "options": "foobar",
+ "passthrough": true
+ }
+ },
+ "TCPRouter1": {
+ "entryPoints": ["foobar", "foobar"],
+ "middlewares": ["foobar", "foobar"],
+ "priority": 42,
+ "rule": "foobar",
+ "ruleSyntax": "foobar",
+ "service": "foobar",
+ "tls": {
+ "certResolver": "foobar",
+ "domains": [
+ {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ },
+ {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ }
+ ],
+ "options": "foobar",
+ "passthrough": true
+ }
+ }
+ },
+ "serversTransports": {
+ "TCPServersTransport0": {
+ "dialKeepAlive": "42s",
+ "dialTimeout": "42s",
+ "terminationDelay": "42s",
+ "tls": {
+ "certificates": [
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ },
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ }
+ ],
+ "insecureSkipVerify": true,
+ "peerCertURI": "foobar",
+ "rootCAs": ["foobar", "foobar"],
+ "serverName": "foobar",
+ "spiffe": {
+ "ids": ["foobar", "foobar"],
+ "trustDomain": "foobar"
+ }
+ }
+ },
+ "TCPServersTransport1": {
+ "dialKeepAlive": "42s",
+ "dialTimeout": "42s",
+ "terminationDelay": "42s",
+ "tls": {
+ "certificates": [
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ },
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ }
+ ],
+ "insecureSkipVerify": true,
+ "peerCertURI": "foobar",
+ "rootCAs": ["foobar", "foobar"],
+ "serverName": "foobar",
+ "spiffe": {
+ "ids": ["foobar", "foobar"],
+ "trustDomain": "foobar"
+ }
+ }
+ }
+ },
+ "services": {
+ "TCPService01": {
+ "loadBalancer": {
+ "proxyProtocol": {
+ "version": 42
+ },
+ "servers": [
+ {
+ "address": "foobar",
+ "tls": true
+ },
+ {
+ "address": "foobar",
+ "tls": true
+ }
+ ],
+ "serversTransport": "foobar",
+ "terminationDelay": 42
+ }
+ },
+ "TCPService02": {
+ "weighted": {
+ "services": [
+ {
+ "name": "foobar",
+ "weight": 42
+ },
+ {
+ "name": "foobar",
+ "weight": 42
+ }
+ ]
+ }
+ }
+ }
+ },
+ "tls": {
+ "certificates": [
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar",
+ "stores": ["foobar", "foobar"]
+ },
+ {
+ "certFile": "foobar",
+ "keyFile": "foobar",
+ "stores": ["foobar", "foobar"]
+ }
+ ],
+ "options": {
+ "Options0": {
+ "alpnProtocols": ["foobar", "foobar"],
+ "cipherSuites": ["foobar", "foobar"],
+ "clientAuth": {
+ "caFiles": ["foobar", "foobar"],
+ "clientAuthType": "foobar"
+ },
+ "curvePreferences": ["foobar", "foobar"],
+ "maxVersion": "foobar",
+ "minVersion": "foobar",
+ "preferServerCipherSuites": true,
+ "sniStrict": true
+ },
+ "Options1": {
+ "alpnProtocols": ["foobar", "foobar"],
+ "cipherSuites": ["foobar", "foobar"],
+ "clientAuth": {
+ "caFiles": ["foobar", "foobar"],
+ "clientAuthType": "foobar"
+ },
+ "curvePreferences": ["foobar", "foobar"],
+ "maxVersion": "foobar",
+ "minVersion": "foobar",
+ "preferServerCipherSuites": true,
+ "sniStrict": true
+ }
+ },
+ "stores": {
+ "Store0": {
+ "defaultCertificate": {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ },
+ "defaultGeneratedCert": {
+ "domain": {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ },
+ "resolver": "foobar"
+ }
+ },
+ "Store1": {
+ "defaultCertificate": {
+ "certFile": "foobar",
+ "keyFile": "foobar"
+ },
+ "defaultGeneratedCert": {
+ "domain": {
+ "main": "foobar",
+ "sans": ["foobar", "foobar"]
+ },
+ "resolver": "foobar"
+ }
+ }
+ }
+ },
+ "udp": {
+ "routers": {
+ "UDPRouter0": {
+ "entryPoints": ["foobar", "foobar"],
+ "service": "foobar"
+ },
+ "UDPRouter1": {
+ "entryPoints": ["foobar", "foobar"],
+ "service": "foobar"
+ }
+ },
+ "services": {
+ "UDPService01": {
+ "loadBalancer": {
+ "servers": [
+ {
+ "address": "foobar"
+ },
+ {
+ "address": "foobar"
+ }
+ ]
+ }
+ },
+ "UDPService02": {
+ "weighted": {
+ "services": [
+ {
+ "name": "foobar",
+ "weight": 42
+ },
+ {
+ "name": "foobar",
+ "weight": 42
+ }
+ ]
+ }
+ }
+ }
+ }
+}
diff --git a/src/test/tsconfig/tsconfig-typescript5.0.json b/src/test/tsconfig/tsconfig-typescript5.0.json
index f4392b1704c..bd39fd76fd4 100644
--- a/src/test/tsconfig/tsconfig-typescript5.0.json
+++ b/src/test/tsconfig/tsconfig-typescript5.0.json
@@ -3,7 +3,9 @@
"allowArbitraryExtensions": true,
"allowImportingTsExtensions": true,
"customConditions": [""],
+ "forceConsistentCasingInFileNames": false,
"moduleResolution": "bundler",
+ "newLine": "crlf",
"resolvePackageJsonExports": true,
"resolvePackageJsonImports": true,
"target": "es2023",