diff --git a/web/e2e/fixtures/FormFixture.ts b/web/e2e/fixtures/FormFixture.ts index 71a620343a..950150ea71 100644 --- a/web/e2e/fixtures/FormFixture.ts +++ b/web/e2e/fixtures/FormFixture.ts @@ -40,20 +40,16 @@ export class FormFixture extends PageFixture { const role = await control.getAttribute("role"); - let textbox: Locator; - if (role === "combobox") { // Comboboxes, such as our Query Language input need additional handling... const textbox = control.getByRole("textbox"); return textbox; - } else { - textbox = control; } - await expect(textbox, `Field (${fieldName}) should be visible`).toBeVisible(); + await expect(control, `Field (${fieldName}) should be visible`).toBeVisible(); - return textbox; + return control; }; /** diff --git a/web/eslint.config.mjs b/web/eslint.config.mjs index 1a925ded8f..cf5f41155a 100644 --- a/web/eslint.config.mjs +++ b/web/eslint.config.mjs @@ -1,30 +1,41 @@ -import { createESLintPackageConfig } from "@goauthentik/eslint-config"; +/** + * @file ESLint Configuration + * + * @import { Config } from "eslint/config"; + */ -import tseslint from "typescript-eslint"; +import { createESLintPackageConfig, DefaultIgnorePatterns } from "@goauthentik/eslint-config"; + +import { defineConfig } from "eslint/config"; // @ts-check /** * ESLint configuration for authentik's monorepo. + * @type {Config[]} */ -const ESLintConfig = createESLintPackageConfig({ - ignorePatterns: [ - "**/dist/**", - "**/out/**", - "**/vendored/**", - "**/.wireit/**", - "**/node_modules/", - "**/.storybook/*", - "coverage/", - "src/locale-codes.ts", - "storybook-static/", - "src/locales/", - "**/*.min.js", - ], -}); - -export default tseslint.config( - ...ESLintConfig, +const eslintConfig = defineConfig( + createESLintPackageConfig({ + parserOptions: { + tsconfigRootDir: import.meta.dirname, + }, + ignorePatterns: [ + // --- + ...DefaultIgnorePatterns, + "**/dist/**", + "**/out/**", + "**/vendored/**", + "**/.wireit/**", + "**/node_modules/", + "**/.storybook/*", + "coverage/", + "src/locale-codes.ts", + "playwright-report", + "storybook-static/", + "src/locales/", + "**/*.min.js", + ], + }), { rules: { "no-console": "off", @@ -33,27 +44,18 @@ export default tseslint.config( }, { rules: { - "no-void": "off", - "no-implicit-coercion": "off", - "prefer-template": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-use-before-define": "off", - "array-callback-return": "off", - "block-scoped-var": "off", "consistent-return": "off", - "func-names": "off", - "guard-for-in": "off", - "no-bitwise": "off", "no-div-regex": "off", - "no-else-return": "off", - "no-empty-function": "off", + "no-empty-function": ["error", { allow: ["arrowFunctions"] }], "no-param-reassign": "off", - "no-throw-literal": "off", - // "no-var": "off", - "prefer-arrow-callback": "off", - "react/jsx-no-leaked-render": "off", - "vars-on-top": "off", }, }, + { + rules: { + "vars-on-top": "off", + }, + files: ["**/*.d.ts"], + }, ); + +export default eslintConfig; diff --git a/web/package-lock.json b/web/package-lock.json index 984fc79490..c6b9dd1105 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -70,7 +70,6 @@ "deepmerge-ts": "^7.1.5", "dompurify": "^3.3.0", "esbuild": "^0.27.1", - "esbuild-plugin-copy": "^2.1.1", "eslint": "^9.39.1", "eslint-plugin-lit": "^2.1.1", "eslint-plugin-wc": "^3.0.2", @@ -3335,13 +3334,13 @@ } }, "node_modules/@swagger-api/apidom-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0.tgz", - "integrity": "sha512-Yy57roPVh5I+wz509OX++TY2iR05oUszJI9JSNvY8bHplURnnag6YjKjbklvEVo07ZNl9SfTZ7ZLer+56O/4gg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.1.tgz", + "integrity": "sha512-inTGo5b49XkHs/Vq48VafXnCzZrwwE+KTNcdfMybdm3RQTbfVFbvSUrS54WoHoaSbef1GsB9rnS/oXoXfNr72g==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-error": "^1.0.0", + "@swagger-api/apidom-error": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3349,14 +3348,14 @@ } }, "node_modules/@swagger-api/apidom-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0.tgz", - "integrity": "sha512-xIVB1g+P5XBJS4OUSlNwtw/8KeeRHjnUQWxXLtT7B4pt22QwhprRJe0CymwxzvubDuIFxo5kgC3CgVvMhwI1sw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.1.tgz", + "integrity": "sha512-biA53spAUphP2IMJSPdqcRFjvLbvLspv1mJQrZpePUq4XGxGOKOHof7dUc1bXJuYvl6OOxOwnVniv5oK2Wyblw==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", + "@swagger-api/apidom-ast": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", "@types/ramda": "~0.30.0", "minim": "~0.23.8", "ramda": "~0.30.0", @@ -3366,37 +3365,37 @@ } }, "node_modules/@swagger-api/apidom-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0.tgz", - "integrity": "sha512-L8fmgQYQfuPCPNlF6KvVXrMuWYh4uxsz955gircsPnV5V2oEaaNVRrQQMHCebvSOAp3OaM8jiiR1FVdzSxkoKg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.1.tgz", + "integrity": "sha512-uwduVNLg9a2qA+Pl4b8gPERH6Xhvm/Ilv4iKMUOpUicLwNmYjrlcRsyYxLvFiNlTghm70xuI3hap1iaXbrer4A==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7" } }, "node_modules/@swagger-api/apidom-json-pointer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0.tgz", - "integrity": "sha512-M2k5/79fEjgfe0EZ+LpwKHi83744WV0/GuU3suAYKRdO/GJclQBUalOMnAyxjSnQLqtNw1jSjVvIsRhArcC9GQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.1.tgz", + "integrity": "sha512-Dgxd9hl1AiCIM1b5f4dSfmP+rGtASUso8Lw51+az605hqrohgykxt8voiQtaJxKySWYbS1J9Vz2xjLwrEmfTKg==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", "@swaggerexpert/json-pointer": "^2.10.1" } }, "node_modules/@swagger-api/apidom-ns-api-design-systems": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0.tgz", - "integrity": "sha512-RUYnXx8jBc01rOygYWLU9i3aJZ7x18Cyf4IXlBtDbqSOjw3oxnmZ6dw52zfrOpaBtsGBFO0VjHWnzPeOoAnGpQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.1.tgz", + "integrity": "sha512-frRfiLjcufeBgqnHQOcXgl6dnvcIdP4+18pWb+qT3N+dv87geJBk1CbXo6RjW9AEQX/7BtvWYkfSMLrh8q2TZA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3404,15 +3403,15 @@ } }, "node_modules/@swagger-api/apidom-ns-arazzo-1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.0.0.tgz", - "integrity": "sha512-zdswSbzGeXu3mvH+FMfI8BP/hC0oReDzZEGmRNN/g9JzyI6bhcciGdFNk3haWFed2Hwa8iWCw6r0O70sJXxktA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.0.1.tgz", + "integrity": "sha512-gJJY0vmi3TJtlCYNPsZahQnP6GA9GtJX1a9jEUASaYYxz6cBBfY39y8C5tQTo0Jvc7QEff/UZ8iGX0kltcwlzA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3420,15 +3419,15 @@ } }, "node_modules/@swagger-api/apidom-ns-asyncapi-2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0.tgz", - "integrity": "sha512-n9EswUqPHOv6rBX0OJSNhJMNM2Psdqeux9w0+XVHPfsCwyZqVQ0HxasLlgXurRaOscdRJ3W6z62t2T9krMiPXg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.1.tgz", + "integrity": "sha512-d8HBr2EVB2gK8FKrxj0Wsss6Qeael//WxnNv1ZtmNeCe1l83iC9RO/hjjq/OFob94ZTOfpPRNwGqZBd4tMxOnA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3436,15 +3435,15 @@ } }, "node_modules/@swagger-api/apidom-ns-asyncapi-3": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-3/-/apidom-ns-asyncapi-3-1.0.0.tgz", - "integrity": "sha512-6Rp9C1RhQyBvYJ/OCuihZprXErryPJqilgHU6xg67QWyOBFQ1VTzSmP9pecMtDD+YiJsU6HB6GYDF+oEzXFkKQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-3/-/apidom-ns-asyncapi-3-1.0.1.tgz", + "integrity": "sha512-vonGt1ScMlT+GbbSGa/+oe874Zl7NVylX3ZoMAhMkRyqu49vmWB6dXUcWw6ZsZu2GxVphjNTm+D52Ikw8UAMWg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3452,15 +3451,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-2019-09": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.0.0.tgz", - "integrity": "sha512-iZHeeQTiLbf5CjbGURusD+OngL/rJjNol35Qg/BeVFsJTzisCyDW6AHMK/0Qe+eRscGwGOkUxr+RhhSgSgXPbg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.0.1.tgz", + "integrity": "sha512-wtVkFhkM7a0ybjAR0HCQyXzAwIWWcaoHmXiZGAS7wTpI2sDMLwCrBXBuISa7BoRkG4ieA2odDF5Eac73knWUbA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3468,15 +3467,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-2020-12": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.0.0.tgz", - "integrity": "sha512-gHKECPM2k2BlOY/b8p/9/a96uKmUc2FC1ruRUgm/DOjv4jQtMkEBgVguI04g3wTpSwIg15o9p85RhhhAGHloQg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.0.1.tgz", + "integrity": "sha512-YBE5kYKARFWi+8HAiUVJxF9WpkdlW2ebH6K4oZt6mnOWROkPS+30Kjjxlz+Q994KhSZGBHKK0d3TU11xXUqyAQ==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-2019-09": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-2019-09": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3484,14 +3483,14 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0.tgz", - "integrity": "sha512-yzkHhq5l0yd1nZbcrqlvUC0uYQ5A8XJo/PHOOD9eibxP/tvhrmkrGVnBEZIS7Y2lIx9goAtCHYJOzwOh2iZ+qQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.1.tgz", + "integrity": "sha512-OR3D7EXVq2H07n9uPKpNCikKC5857Pggbi1g5rt9X0znaUgxTtkYu8unPfbEcjQgFVglzIwqbGhMnahUFXYaTA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0", - "@swagger-api/apidom-core": "^1.0.0", + "@swagger-api/apidom-ast": "^1.0.1", + "@swagger-api/apidom-core": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3499,15 +3498,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0.tgz", - "integrity": "sha512-qjxwyq+dRRW4i/D2OMuuPpNfq215V6FMFMMnznAzqkYJIigUyAsslZt1YYGz5hug/tj2psZHDleCYkfeh7b5Vg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.1.tgz", + "integrity": "sha512-J9/aSU9/YwiRU/avkSN1APYPs9sYVyrzaMpfq7XIY8xMFC4buwrPzCymrqshSOLbn1Qzr9Ruavcqx5Bwt0EuRg==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3515,15 +3514,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0.tgz", - "integrity": "sha512-Lo5QqO831IuMKyuYO5gJVttu/fqsvj66JaSyi4/2KC8srn81yQ9HEi1ousiWVGE0dGuRjGZSr3H2J9fxqbnfTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.1.tgz", + "integrity": "sha512-b8pNff3epzweot5Edoa05mM/jBMgvjqajvNTOvOa8SNPWHWLjSJNYkBT2jI3BnFqqEMMo7litEfKnblblFuDtQ==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3531,16 +3530,16 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0.tgz", - "integrity": "sha512-vaEcRti1An4y9jXaHmkEMd/TQlfcJAEq/SLhDoGWIsTb3sdUovdVVY7QAvQzbX7VCoQeRATfUgMnj29wggbE6g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.1.tgz", + "integrity": "sha512-XZ1xHHvsZZaNNHkqk0KWggZxMM2Av5eJdjbxwLij7TFWjodYVJAMZLyWG15llDBjnTXQYtpFIVLGjndf2oC7Xg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3548,15 +3547,15 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-0": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0.tgz", - "integrity": "sha512-ppBGVheaboTC23LOO+5//C45DDyoda88yFeVxh7Lfqn7HM7D0BSs76tFwr7EUtkEE6vw8tQiwc0Ql6Jk/jmUCQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.1.tgz", + "integrity": "sha512-BAypZcl8NO+jYpAmAXJVCLVe4f+v3ZoZN21Oxu03N2lsv+qz/P9vpl+6C0dOfta6X8fACkuGr4KIGU6leUPpJg==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3564,17 +3563,17 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0.tgz", - "integrity": "sha512-iDocUU+y214ZdcPrBHng97EnCzEIFJ/2eZsxQRSDQTZuAECI53jmVH6KdJUh/1nc3IW5nQczhf3K9cCYdIcY9g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.1.tgz", + "integrity": "sha512-nIkgyIW8XTV+zjzLKxP1JaA/lpgmtsRBLshh1mL+Fspd+RYAhyMpRDRNvBOmkIhva9Dst9LNYyMjBP9ssfKUwg==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-json-pointer": "^1.0.0", - "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0", + "@swagger-api/apidom-ast": "^1.0.1", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-json-pointer": "^1.0.1", + "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3582,144 +3581,144 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0.tgz", - "integrity": "sha512-zzEr6VeS5renKsqzT2bRqWntzE/uJA+GRc/cDwHkbq7rF5rWCBxYmECQ1CZzargrznMeYRg5Kvcg3t9NBwI3Tg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.1.tgz", + "integrity": "sha512-Udj6vJ6Au+fcqZJZtgHlUi1Y/ImLHo8fx4ICSas7hewA7z1/eZ7Y3Yp8YSGZ7ZwqXHS6nnm5fBHws0DgAplnDA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0.tgz", - "integrity": "sha512-/2JG7r3Ok4XAaMtlLTew8y1fVh1BI2jZuVV26QvJAvIcVXhv2Y2+gq9olZUTt1kXqmTx14JOlvxUrg+q/f+EMw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.1.tgz", + "integrity": "sha512-YZ2IuTEzUGXRF8oFuHHGZpM15hRnSI/rZnweGT984bX53HXi1NFpZdNxOz49vmkhFz6XJgxRXp1R3EDN/98urg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-arazzo-json-1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.0.0.tgz", - "integrity": "sha512-uS4N1uTbYsgsr9HW3mhwfjPm2qsVN16cL/YB6/j94e30KYVeUwwXEA5c+xE6weAtCqweTTVTBWCGHtTH+PYxSA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.0.1.tgz", + "integrity": "sha512-Re8EcgYOITyTXvGeJyE/4ZNsprkSrkXVmHzyM9hqTWoMpDILnqOtbrjc0YwLkbe9awBkUMWJ51CEFLYALSYfDA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-arazzo-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-arazzo-yaml-1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.0.0.tgz", - "integrity": "sha512-D23g2/VBbI/SSFIxabjBqcxtoHjR+Z3A2Lp1slFixgwlmd9viQQuQI9p5EdVbXSlLU4aGPocfydOfJ5Sl7nfoA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.0.1.tgz", + "integrity": "sha512-++BB47Vf9sarAf+YCvlt9V2OqFd8O5AZMr/xXBKTls4SzwpUcLf4oIQJpHcr/rl+bgI4CKwxKXHvnhg2vhEVmg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-arazzo-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0.tgz", - "integrity": "sha512-edOFXHrOl1xLRn/i2yVZKJ1+A7YUZ9WyVnIyEedb+L4uFKxDnArNZhi10R3Is6vWKX1GAlH1Uw8xmqYyG7KVQg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.1.tgz", + "integrity": "sha512-dd8djfZy2utM1xO7oxDPB/dmExSFgEA2l71gjHaKmhJw7O5NB8E/1663w9lD4NElj2Ft8kuGLLDsqyKNhXW/9w==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-3": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-3/-/apidom-parser-adapter-asyncapi-json-3-1.0.0.tgz", - "integrity": "sha512-elGrI0b2wyLVN7UKOsg8GNgzidBtIvBWjKyJvt1oy/ZTvLZ+I5wgD9KENfMRtLCdMtWAv8HSyB094nvlhqP/iw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-3/-/apidom-parser-adapter-asyncapi-json-3-1.0.1.tgz", + "integrity": "sha512-qD+gbnSnc9PlZ8b45knyWihrWOMKhnAHDnvzRllX+NiyM3XdBJ7B6yLn8dl6gZuKjTBHoMORLEefoTGvmskneA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-asyncapi-3": "^1.0.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-asyncapi-3": "^1.0.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0.tgz", - "integrity": "sha512-cP58L+QR2qFIpe4I4oOT5QShmXYts20/N9GrxfmeebmNiu0RCrO8yomyzKbtLMX4DWZIOjXfm96i20FmdNtxxA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.1.tgz", + "integrity": "sha512-G5RS0pCFCOIsFflKvWbH+DblunmcAdVi5X9ETTTkGLa1IF5s0DIdjU46WxJAzEQpCXOvmUhpDspjaAYXxGTYpQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3/-/apidom-parser-adapter-asyncapi-yaml-3-1.0.0.tgz", - "integrity": "sha512-5kVZQ7SI0TvkHNCAr0fAz+FMj+Py8ILW8MbWTbJPPzpcfiBa8wb33xbCrO3aQoXSKL4S3J/a+iDFyrzQgBRlRQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3/-/apidom-parser-adapter-asyncapi-yaml-3-1.0.1.tgz", + "integrity": "sha512-hzgUkTsuKYraY0NXQlaYe/j1/LkvNF/8r30Iz7/1B27BYLOKIwHoFGN6jUa8UBA9/0qSp8QPzSwVWFLrgNiqJQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-asyncapi-3": "^1.0.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-asyncapi-3": "^1.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0.tgz", - "integrity": "sha512-+zaH4MX1/JiSP3bQe1WE2CRsmXLSCPF3zMtvyFhPNtPgIIWqHJg1P4zPXy528m3DH/QqagfXIslk4RpDWStyxA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.1.tgz", + "integrity": "sha512-95V2aMBGZ76rYXcod/PCJpVEMK+9mPk/gDgsDKEq2ka+YVMTtR1tUkPUIBmWlNC+brh5reks1QocyQL8B4f3TQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", + "@swagger-api/apidom-ast": "^1.0.1", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3729,112 +3728,112 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0.tgz", - "integrity": "sha512-rm/wotLRSz1JqTdQKwxydC8MnRLgb8VvtNgWgSWHDHChcgFQmimxVya7dmivy1YywcczK9G0cNcR10o4ebI/vw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.1.tgz", + "integrity": "sha512-Gp02eAA32SN+hAgVDc82xpkUthHn0oAdLdri5g3co4pa45XVRsBSHS3L/H3NEbhDJ8wpXjcg+FLs/OAwcm42yw==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-openapi-2": "^1.0.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0.tgz", - "integrity": "sha512-leLf9tC7wCzOaL+oiK8CyLTNTf9+xupfHY+6nzWzJrYiq9yI5nJUM/yr38+Bq5cupA+gDWHl59b32bc/jV+iuQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.1.tgz", + "integrity": "sha512-Ls3U0stAtMqvzesy981crjDa7vwqGHlCoulHIsWQ/V74dHg3Nl1Vg9AgerefKg8LHxxLiYTZJITfsWQMYsnlkA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0.tgz", - "integrity": "sha512-GDf2IlEMhAPlHUWd1f6/cpP8V2k7e2dPaVS7e7baK5djGSwcGHZEUotqyDkA01Vnhf2DPGfmb6rkvg4dQ/1ChA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.1.tgz", + "integrity": "sha512-Xsf3jUCfgqZqZjiABWifPynBDLPkW54V210Oa4SvgyI7ZWgubcy5/Wgd68wvhq4knauRXqRmbgKc+WRm0UP3xw==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0.tgz", - "integrity": "sha512-pYkMetJatd12Cplau9u7MAQYJOJSjs0iuWGzvzG6IkTTNY673aQVxsmdTJK6Mt6sEkG3LK5OOCIqlW63GdtMuQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.1.tgz", + "integrity": "sha512-SygtOXG9XF6lYveg6rymk4u1Twgk1VTxzyVkQ8I6eQoGyBoYfJC00sI6qep9bGU/VnsaRaN/H8+N0vXBeAOsPg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-openapi-2": "^1.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0.tgz", - "integrity": "sha512-iabLypsj+ygEozgTjBi0zu8VgRjq2VKUFxyNo6lVYjLg4PIvnwem3S8GU3iDmEdEqZTBmTQCOnzdbbw+tEm70Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.1.tgz", + "integrity": "sha512-xm8tY1NYe329tGF01WCtCi7uepppORWs3WpwzskSiZnDAmyjIu5ez3R0RFPCiXnMRGgj4wO6UzjawSrKGTJHjA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0.tgz", - "integrity": "sha512-cmx5MC6nC5KBFxZxmFRwcDW9CPLTAZglYvtLh2ILoMBvYS+ht9WUknTqZFIVVCK/l7wAz8ftOtCrnjb7U143yQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.1.tgz", + "integrity": "sha512-p0G3g63Jcd4Z5Y2hStNB0NgjwYJg9VBLhkDcmFdmKCbz9vYA45rMN+wn62pqkWQE7KBZ1F1zY0wacRlUy0VuuQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0.tgz", - "integrity": "sha512-of/vKMaK5e36kwJrhBRvnrpIC9tikUuhpzSMfzckx/58p1H66oHrzdGrRbQxcy1l/HaylJNIn1YvWlaNJVjNcQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.1.tgz", + "integrity": "sha512-ppNo8mncbGA3TchroLmcDv1WUw9vruHa4M96WbWqI7cwH3zdJ1UddwfHkZ5IaCOUU08Iyo2uzMMRaarALAsl8g==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", + "@swagger-api/apidom-ast": "^1.0.1", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", "@tree-sitter-grammars/tree-sitter-yaml": "=0.7.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", @@ -3864,14 +3863,14 @@ } }, "node_modules/@swagger-api/apidom-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0.tgz", - "integrity": "sha512-pT225Muf5pYMaQjyoJ/8+OJuAAvWOLJih2P8ho0EE6pIw4D0Uz9Hq8cODdwBXEr5mOTAwntNDDcPP+FoTfYnyg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.1.tgz", + "integrity": "sha512-FvM6cooFx1ppWN9gKXSLFG2Y4u3SRdv1FIJxj+5VC/6V3++BF2LUFkb7hK0IOaAjw2vQ7G0NUyP+5UY/3qKBjA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0", - "@swagger-api/apidom-error": "^1.0.0", + "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-error": "^1.0.1", "@types/ramda": "~0.30.0", "axios": "^1.12.2", "minimatch": "^7.4.3", @@ -3880,28 +3879,28 @@ "ramda-adjunct": "^5.0.0" }, "optionalDependencies": { - "@swagger-api/apidom-json-pointer": "^1.0.0-rc.0", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-rc.0", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-rc.0", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-rc.0", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-rc.0", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-asyncapi-json-3": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-rc.0" + "@swagger-api/apidom-json-pointer": "^1.0.1", + "@swagger-api/apidom-ns-arazzo-1": "^1.0.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.1", + "@swagger-api/apidom-ns-openapi-2": "^1.0.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.1", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.1", + "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.1", + "@swagger-api/apidom-parser-adapter-asyncapi-json-3": "^1.0.1", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.1", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.0.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.1", + "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1" } }, "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": { @@ -5684,15 +5683,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -5962,9 +5952,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.2.tgz", - "integrity": "sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.3.tgz", + "integrity": "sha512-8QdH6czo+G7uBsNo0GiUfouPN1lRzKdJTGnKXwe12gkFbnnOUaUKGN55dMkfy+mnxmvjwl9zcI4VncczcVXDhA==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -6437,6 +6427,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chromedriver": { "version": "143.0.0", "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-143.0.0.tgz", @@ -7522,18 +7524,6 @@ "node": ">=10.13" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -7591,9 +7581,9 @@ "license": "ISC" }, "node_modules/electron-to-chromium": { - "version": "1.5.264", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.264.tgz", - "integrity": "sha512-1tEf0nLgltC3iy9wtlYDlQDc5Rg9lEKVjEmIHJ21rI9OcqkvD45K1oyNIRA4rR1z3LgJ7KeGzEBojVcV6m4qjA==", + "version": "1.5.266", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz", + "integrity": "sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -7881,21 +7871,6 @@ "@esbuild/win32-x64": "0.27.1" } }, - "node_modules/esbuild-plugin-copy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/esbuild-plugin-copy/-/esbuild-plugin-copy-2.1.1.tgz", - "integrity": "sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "fs-extra": "^10.0.1", - "globby": "^11.0.3" - }, - "peerDependencies": { - "esbuild": ">= 0.14.0" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -8312,18 +8287,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -8671,6 +8634,18 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-patch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", @@ -9050,9 +9025,9 @@ } }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -9251,15 +9226,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/globals": { @@ -9291,34 +9266,25 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.0.0.tgz", + "integrity": "sha512-ejy4TJFga99yW6Q0uhM3pFawKWZmtZzZD/v/GwI5+9bCV5Ew+D2pSND6W7fUes5UykqSsJkUfxFVdRh7Q1+P3Q==", "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" }, "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -13319,12 +13285,15 @@ "license": "MIT" }, "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/pathe": { @@ -13545,20 +13514,6 @@ "node": ">=18" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/pngjs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", @@ -14021,18 +13976,6 @@ "node": ">=4" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -15008,12 +14951,15 @@ } }, "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/smart-buffer": { @@ -17094,6 +17040,20 @@ "@esbuild/win32-x64": "0.25.12" } }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/vitest": { "version": "4.0.15", "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.15.tgz", @@ -17880,36 +17840,13 @@ "node": ">= 12" } }, - "packages/sfe/node_modules/globby": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.0.0.tgz", - "integrity": "sha512-ejy4TJFga99yW6Q0uhM3pFawKWZmtZzZD/v/GwI5+9bCV5Ew+D2pSND6W7fUes5UykqSsJkUfxFVdRh7Q1+P3Q==", - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.5", - "is-path-inside": "^4.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/sfe/node_modules/globby/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "packages/sfe/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "license": "MIT", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } } } diff --git a/web/package.json b/web/package.json index 962b1c289d..9c1e476e1d 100644 --- a/web/package.json +++ b/web/package.json @@ -144,7 +144,6 @@ "deepmerge-ts": "^7.1.5", "dompurify": "^3.3.0", "esbuild": "^0.27.1", - "esbuild-plugin-copy": "^2.1.1", "eslint": "^9.39.1", "eslint-plugin-lit": "^2.1.1", "eslint-plugin-wc": "^3.0.2", diff --git a/web/packages/lex/index.js b/web/packages/lex/index.js index 6ebdb26388..72be63f0ba 100644 --- a/web/packages/lex/index.js +++ b/web/packages/lex/index.js @@ -167,7 +167,9 @@ export class Lexer { if (Array.isArray(token)) { this.tokens = token.slice(1); return token[0]; - } else return token; + } + + return token; } } else { if (this.index !== index) this.remove = 0; diff --git a/web/packages/sfe/src/index.ts b/web/packages/sfe/src/index.ts index 40cfcfd80e..6877ccf351 100644 --- a/web/packages/sfe/src/index.ts +++ b/web/packages/sfe/src/index.ts @@ -17,6 +17,8 @@ import { import { fromByteArray } from "base64-js"; import $ from "jquery"; +/* eslint-disable @typescript-eslint/no-use-before-define */ + interface GlobalAuthentik { brand: { branding_logo: string; diff --git a/web/playwright.config.js b/web/playwright.config.js index 2d4bfb1b73..c14f4029ff 100644 --- a/web/playwright.config.js +++ b/web/playwright.config.js @@ -41,7 +41,7 @@ export default defineConfig({ isEnabled() { return true; }, - log: (name, severity, message, args) => { + log: (name, severity, message, _args) => { let logger = LoggerCache.get(name); if (!logger) { diff --git a/web/scripts/build-web.mjs b/web/scripts/build-web.mjs index 2629285e98..f42a46cbff 100644 --- a/web/scripts/build-web.mjs +++ b/web/scripts/build-web.mjs @@ -24,7 +24,6 @@ import { BuildIdentifier } from "@goauthentik/core/version/node"; import { deepmerge } from "deepmerge-ts"; import esbuild from "esbuild"; -import { copy } from "esbuild-plugin-copy"; /// @@ -37,6 +36,22 @@ const publicBundledDefinitions = Object.fromEntries( ); logger.info(publicBundledDefinitions, "Bundle definitions"); +/** + * @typedef {[from: string, to: string]} SourceDestinationPair + */ + +/** + * @type {SourceDestinationPair[]} + */ +const assets = [ + [ + path.join(path.dirname(EntryPoint.StandaloneLoading.in), "startup"), + path.dirname(EntryPoint.StandaloneLoading.out), + ], + [path.resolve(PackageRoot, "src", "assets", "images"), "./assets/images"], + [path.resolve(PackageRoot, "icons"), "./assets/icons"], +]; + /** * @type {Readonly} */ @@ -63,22 +78,42 @@ const BASE_ESBUILD_OPTIONS = { ".svg": "file", }, plugins: [ - copy({ - assets: [ - { - from: path.join(path.dirname(EntryPoint.StandaloneLoading.in), "startup", "**"), - to: path.dirname(EntryPoint.StandaloneLoading.out), - }, - { - from: path.resolve(PackageRoot, "src", "assets", "images", "**"), - to: "./assets/images", - }, - { - from: path.resolve(PackageRoot, "icons", "*"), - to: "./assets/icons", - }, - ], - }), + { + name: "copy", + setup(build) { + build.onEnd(async () => { + /** + * @type {import('esbuild').PartialMessage[]} + */ + const errors = []; + + /** + * @param {SourceDestinationPair} pair + */ + const copy = ([from, to]) => { + const resolvedDestination = path.resolve(DistDirectory, to); + + logger.debug(`📋 Copying assets from ${from} to ${to}`); + + return fs + .cp(from, resolvedDestination, { recursive: true }) + .catch((error) => { + errors.push({ + text: `Failed to copy assets from ${from} to ${to}: ${error}`, + location: { + file: from, + }, + }); + }); + }; + + await Promise.all(assets.map(copy)); + + return { errors }; + }); + }, + }, + mdxPlugin({ root: MonoRepoRoot, }), diff --git a/web/src/admin/AdminInterface/AdminSidebar.ts b/web/src/admin/AdminInterface/AdminSidebar.ts index d4a8ea1ea7..7cfcef68a9 100644 --- a/web/src/admin/AdminInterface/AdminSidebar.ts +++ b/web/src/admin/AdminInterface/AdminSidebar.ts @@ -18,6 +18,14 @@ export type SidebarEntry = [ children?: SidebarEntry[], ]; +/** + * Recursively renders a collection of sidebar entries. + */ +export function renderSidebarItems(entries: readonly SidebarEntry[]) { + // eslint-disable-next-line @typescript-eslint/no-use-before-define + return repeat(entries, ([path, label]) => path || label, renderSidebarItem); +} + /** * Recursively renders a sidebar entry. */ @@ -44,13 +52,6 @@ export function renderSidebarItem([ `; } -/** - * Recursively renders a collection of sidebar entries. - */ -export function renderSidebarItems(entries: readonly SidebarEntry[]) { - return repeat(entries, ([path, label]) => path || label, renderSidebarItem); -} - // prettier-ignore export const createAdminSidebarEntries = (): readonly SidebarEntry[] => [ [null, msg("Dashboards"), { "?expanded": true }, [ diff --git a/web/src/admin/admin-overview/cards/FipsStatusCard.ts b/web/src/admin/admin-overview/cards/FipsStatusCard.ts index 3c7a7f5602..4ed25f3239 100644 --- a/web/src/admin/admin-overview/cards/FipsStatusCard.ts +++ b/web/src/admin/admin-overview/cards/FipsStatusCard.ts @@ -19,7 +19,7 @@ export class FipsStatusCard extends AdminStatusCard { protected statusSummary?: string; async getPrimaryValue(): Promise { - return await new AdminApi(DEFAULT_CONFIG).adminSystemRetrieve(); + return new AdminApi(DEFAULT_CONFIG).adminSystemRetrieve(); } setStatus(summary: string, content: StatusContent): Promise { diff --git a/web/src/admin/common/stories/ak-crypto-certificate-search.stories.ts b/web/src/admin/common/stories/ak-crypto-certificate-search.stories.ts index eeb4dcfbb1..582de0e3b4 100644 --- a/web/src/admin/common/stories/ak-crypto-certificate-search.stories.ts +++ b/web/src/admin/common/stories/ak-crypto-certificate-search.stories.ts @@ -28,9 +28,9 @@ const metadata: Meta = { ], }, argTypes: { - // Typescript is unaware that arguments for components are treated as properties, and - // properties are typically renamed to lower case, even if the variable is not. - // @ts-expect-error + // @ts-expect-error Typescript is unaware that arguments for components + // are treated as properties, and properties are typically renamed to lower case, + // even if the variable is not. nokey: { control: "boolean", description: diff --git a/web/src/admin/endpoints/connectors/agent/ConfigModal.ts b/web/src/admin/endpoints/connectors/agent/ConfigModal.ts index 729bc7bc8a..b1fd8b84d8 100644 --- a/web/src/admin/endpoints/connectors/agent/ConfigModal.ts +++ b/web/src/admin/endpoints/connectors/agent/ConfigModal.ts @@ -24,7 +24,7 @@ export class ConfigModal extends ModalButton { connectedCallback(): void { super.connectedCallback(); - this.addEventListener("ak-modal-show", (e) => { + this.addEventListener("ak-modal-show", () => { if (!this.request) return; new EndpointsApi(DEFAULT_CONFIG) .endpointsAgentsConnectorsMdmConfigCreate(this.request) diff --git a/web/src/admin/endpoints/devices/DeviceAddHowTo.ts b/web/src/admin/endpoints/devices/DeviceAddHowTo.ts index e34feda66d..5537facebd 100644 --- a/web/src/admin/endpoints/devices/DeviceAddHowTo.ts +++ b/web/src/admin/endpoints/devices/DeviceAddHowTo.ts @@ -18,7 +18,7 @@ export class DeviceAddHowTo extends ModalButton { connectedCallback(): void { super.connectedCallback(); - this.addEventListener("ak-modal-show", (e) => { + this.addEventListener("ak-modal-show", () => { new EndpointsApi(DEFAULT_CONFIG).endpointsConnectorsList().then((e) => { this.connectors = e.results; }); @@ -51,7 +51,7 @@ export class DeviceAddHowTo extends ModalButton { ${this.connectors.length === 0 ? this.renderNone() : html` - ${this.connectors.map((c, idx) => { + ${this.connectors.map((c) => { return html`
(instanceMappings) : undefined; return localMappings ? ([pk, _]: DualSelectPair) => localMappings.has(pk) : ([_0, _1, _2, scope]: DualSelectPair) => diff --git a/web/src/admin/providers/oauth2/OAuth2ProvidersProvider.ts b/web/src/admin/providers/oauth2/OAuth2ProvidersProvider.ts index 2af4df3db3..e880648425 100644 --- a/web/src/admin/providers/oauth2/OAuth2ProvidersProvider.ts +++ b/web/src/admin/providers/oauth2/OAuth2ProvidersProvider.ts @@ -1,10 +1,10 @@ import { DEFAULT_CONFIG } from "#common/api/config"; -import { DualSelectPair } from "#elements/ak-dual-select/types"; +import { DualSelectPair, DualSelectPairSource } from "#elements/ak-dual-select/types"; import { OAuth2Provider, ProvidersApi } from "@goauthentik/api"; -const providerToSelect = (provider: OAuth2Provider) => [ +const providerToSelect = (provider: OAuth2Provider): DualSelectPair => [ provider.pk, provider.name, provider.name, @@ -25,12 +25,14 @@ export async function oauth2ProvidersProvider(page = 1, search = "") { }; } -export function oauth2ProvidersSelector(instanceProviders: number[] | undefined) { +export function oauth2ProvidersSelector( + instanceProviders: number[] | undefined, +): DualSelectPairSource { if (!instanceProviders) { - return async (mappings: DualSelectPair[]) => []; + return async () => []; } - return async () => { + const fetchOauth2Providers: DualSelectPairSource = async () => { const oauthSources = new ProvidersApi(DEFAULT_CONFIG); const mappings = await Promise.allSettled( instanceProviders.map((instanceId) => @@ -43,4 +45,6 @@ export function oauth2ProvidersSelector(instanceProviders: number[] | undefined) .map((s) => s.value) .map(providerToSelect); }; + + return fetchOauth2Providers; } diff --git a/web/src/admin/providers/oauth2/OAuth2Sources.ts b/web/src/admin/providers/oauth2/OAuth2Sources.ts index 0c0c1f34fe..ed6bfd16ca 100644 --- a/web/src/admin/providers/oauth2/OAuth2Sources.ts +++ b/web/src/admin/providers/oauth2/OAuth2Sources.ts @@ -1,10 +1,10 @@ import { DEFAULT_CONFIG } from "#common/api/config"; -import { DualSelectPair } from "#elements/ak-dual-select/types"; +import { DualSelectPair, DualSelectPairSource } from "#elements/ak-dual-select/types"; import { OAuthSource, SourcesApi } from "@goauthentik/api"; -const sourceToSelect = (source: OAuthSource) => [ +const sourceToSelect = (source: OAuthSource): DualSelectPair => [ source.pk, `${source.name} (${source.slug})`, source.name, @@ -26,12 +26,12 @@ export async function oauth2SourcesProvider(page = 1, search = "") { }; } -export function oauth2SourcesSelector(instanceMappings?: string[]) { +export function oauth2SourcesSelector(instanceMappings?: string[]): DualSelectPairSource { if (!instanceMappings) { - return async (mappings: DualSelectPair[]) => []; + return async () => []; } - return async () => { + const fetchAvailableOauth2Sources: DualSelectPairSource = async () => { const oauthSources = new SourcesApi(DEFAULT_CONFIG); const mappings = await Promise.allSettled( instanceMappings.map((instanceId) => @@ -46,4 +46,6 @@ export function oauth2SourcesSelector(instanceMappings?: string[]) { .map((s) => s.results[0]) .map(sourceToSelect); }; + + return fetchAvailableOauth2Sources; } diff --git a/web/src/admin/providers/scim/SCIMProviderFormForm.ts b/web/src/admin/providers/scim/SCIMProviderFormForm.ts index 5dc4b2a889..12b0828383 100644 --- a/web/src/admin/providers/scim/SCIMProviderFormForm.ts +++ b/web/src/admin/providers/scim/SCIMProviderFormForm.ts @@ -46,7 +46,7 @@ export function renderAuthToken(provider?: Partial, errors: Valida >`; } -export function renderAuthOAuth(provider?: Partial, errors: ValidationError = {}) { +export function renderAuthOAuth(provider?: Partial, _errors: ValidationError = {}) { return html` => { diff --git a/web/src/admin/roles/RolePermissionForm.ts b/web/src/admin/roles/RolePermissionForm.ts index e6dc000e79..5c45c4136d 100644 --- a/web/src/admin/roles/RolePermissionForm.ts +++ b/web/src/admin/roles/RolePermissionForm.ts @@ -28,8 +28,6 @@ export class RolePermissionForm extends ModelForm @property() roleUuid?: string; - async load(): Promise {} - loadInstance(): Promise { throw new Error("Method not implemented."); } diff --git a/web/src/admin/sources/kerberos/KerberosSourceForm.ts b/web/src/admin/sources/kerberos/KerberosSourceForm.ts index 4ae12350be..3ad8a3a07c 100644 --- a/web/src/admin/sources/kerberos/KerberosSourceForm.ts +++ b/web/src/admin/sources/kerberos/KerberosSourceForm.ts @@ -49,11 +49,11 @@ export class KerberosSourceForm extends BaseSourceForm { slug: this.instance.slug, patchedKerberosSourceRequest: data, }); - } else { - return new SourcesApi(DEFAULT_CONFIG).sourcesKerberosCreate({ - kerberosSourceRequest: data as unknown as KerberosSourceRequest, - }); } + + return new SourcesApi(DEFAULT_CONFIG).sourcesKerberosCreate({ + kerberosSourceRequest: data as unknown as KerberosSourceRequest, + }); } renderForm(): TemplateResult { diff --git a/web/src/admin/sources/oauth/OAuthSourceForm.ts b/web/src/admin/sources/oauth/OAuthSourceForm.ts index 6ae1dd2ba4..b07594d1a2 100644 --- a/web/src/admin/sources/oauth/OAuthSourceForm.ts +++ b/web/src/admin/sources/oauth/OAuthSourceForm.ts @@ -93,11 +93,11 @@ export class OAuthSourceForm extends BaseSourceForm { slug: this.instance.slug, patchedOAuthSourceRequest: data, }); - } else { - return new SourcesApi(DEFAULT_CONFIG).sourcesOauthCreate({ - oAuthSourceRequest: data as unknown as OAuthSourceRequest, - }); } + + return new SourcesApi(DEFAULT_CONFIG).sourcesOauthCreate({ + oAuthSourceRequest: data as unknown as OAuthSourceRequest, + }); } fetchProviderType(v: string | undefined) { diff --git a/web/src/admin/sources/plex/PlexSourceForm.ts b/web/src/admin/sources/plex/PlexSourceForm.ts index 6795836221..751f200905 100644 --- a/web/src/admin/sources/plex/PlexSourceForm.ts +++ b/web/src/admin/sources/plex/PlexSourceForm.ts @@ -62,11 +62,11 @@ export class PlexSourceForm extends BaseSourceForm { slug: this.instance.slug, plexSourceRequest: data, }); - } else { - return new SourcesApi(DEFAULT_CONFIG).sourcesPlexCreate({ - plexSourceRequest: data, - }); } + + return new SourcesApi(DEFAULT_CONFIG).sourcesPlexCreate({ + plexSourceRequest: data, + }); } async doAuth(): Promise { diff --git a/web/src/admin/sources/saml/SAMLSourceForm.ts b/web/src/admin/sources/saml/SAMLSourceForm.ts index 86b327098e..6d76cb6dc1 100644 --- a/web/src/admin/sources/saml/SAMLSourceForm.ts +++ b/web/src/admin/sources/saml/SAMLSourceForm.ts @@ -59,11 +59,11 @@ export class SAMLSourceForm extends BaseSourceForm { slug: this.instance.slug, sAMLSourceRequest: data, }); - } else { - return new SourcesApi(DEFAULT_CONFIG).sourcesSamlCreate({ - sAMLSourceRequest: data, - }); } + + return new SourcesApi(DEFAULT_CONFIG).sourcesSamlCreate({ + sAMLSourceRequest: data, + }); } renderHasSigningCert(): TemplateResult { diff --git a/web/src/admin/stages/authenticator_webauthn/AuthenticatorWebAuthnStageForm.ts b/web/src/admin/stages/authenticator_webauthn/AuthenticatorWebAuthnStageForm.ts index 9eeba1bc00..88c44de1fd 100644 --- a/web/src/admin/stages/authenticator_webauthn/AuthenticatorWebAuthnStageForm.ts +++ b/web/src/admin/stages/authenticator_webauthn/AuthenticatorWebAuthnStageForm.ts @@ -31,7 +31,7 @@ import { customElement } from "lit/decorators.js"; @customElement("ak-stage-authenticator-webauthn-form") export class AuthenticatorWebAuthnStageForm extends BaseStageForm { async loadInstance(pk: string): Promise { - return await new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorWebauthnRetrieve({ + return new StagesApi(DEFAULT_CONFIG).stagesAuthenticatorWebauthnRetrieve({ stageUuid: pk, }); } diff --git a/web/src/admin/stages/mtls/MTLSStageForm.ts b/web/src/admin/stages/mtls/MTLSStageForm.ts index a259f3f053..f8072208f5 100644 --- a/web/src/admin/stages/mtls/MTLSStageForm.ts +++ b/web/src/admin/stages/mtls/MTLSStageForm.ts @@ -37,11 +37,10 @@ export class MTLSStageForm extends BaseStageForm { stageUuid: this.instance.pk || "", mutualTLSStageRequest: data, }); - } else { - return new StagesApi(DEFAULT_CONFIG).stagesMtlsCreate({ - mutualTLSStageRequest: data, - }); } + return new StagesApi(DEFAULT_CONFIG).stagesMtlsCreate({ + mutualTLSStageRequest: data, + }); } renderForm(): TemplateResult { diff --git a/web/src/admin/users/UserImpersonateForm.ts b/web/src/admin/users/UserImpersonateForm.ts index 09f9f40f48..8672996304 100644 --- a/web/src/admin/users/UserImpersonateForm.ts +++ b/web/src/admin/users/UserImpersonateForm.ts @@ -24,7 +24,8 @@ export class UserImpersonateForm extends Form { try { const settings = await new AdminApi(DEFAULT_CONFIG).adminSettingsRetrieve(); this.requireReason = settings.impersonationRequireReason ?? false; - } catch (e) { + } catch (error) { + console.error("Failed to fetch impersonation settings:", error); // fallback to reason not required as the backend will still validate it this.requireReason = false; } diff --git a/web/src/admin/users/UserPermissionForm.ts b/web/src/admin/users/UserPermissionForm.ts index 1e6d119390..3e510e8cd5 100644 --- a/web/src/admin/users/UserPermissionForm.ts +++ b/web/src/admin/users/UserPermissionForm.ts @@ -28,8 +28,6 @@ export class UserPermissionForm extends ModelForm @property({ type: Number }) userId?: number; - async load(): Promise {} - loadInstance(): Promise { throw new Error("Method not implemented."); } diff --git a/web/src/common/api/config.ts b/web/src/common/api/config.ts index 1ed7501d6e..f6bc6325db 100644 --- a/web/src/common/api/config.ts +++ b/web/src/common/api/config.ts @@ -9,6 +9,17 @@ import { SentryMiddleware } from "#common/sentry/middleware"; import { Config, Configuration, CurrentBrand, RootApi } from "@goauthentik/api"; +export const DEFAULT_CONFIG = new Configuration({ + basePath: `${globalAK().api.base}api/v3`, + middleware: [ + new CSRFMiddleware(), + new EventMiddleware(), + new LoggingMiddleware(globalAK().brand), + new SentryMiddleware(), + new LocaleMiddleware(), + ], +}); + let globalConfigPromise: Promise | undefined = Promise.resolve(globalAK().config); export function config(): Promise { if (!globalConfigPromise) { @@ -34,17 +45,6 @@ export function brandSetFavicon(brand: CurrentBrand) { }); } -export const DEFAULT_CONFIG = new Configuration({ - basePath: `${globalAK().api.base}api/v3`, - middleware: [ - new CSRFMiddleware(), - new EventMiddleware(), - new LoggingMiddleware(globalAK().brand), - new SentryMiddleware(), - new LocaleMiddleware(), - ], -}); - // This is just a function so eslint doesn't complain about // missing-whitespace-between-attributes or // unexpected-character-in-attribute-name diff --git a/web/src/common/errors/network.ts b/web/src/common/errors/network.ts index 9a3a591226..e7364f1cfb 100644 --- a/web/src/common/errors/network.ts +++ b/web/src/common/errors/network.ts @@ -76,6 +76,30 @@ export function isCausedByAbortError(error: unknown): error is AbortErrorLike { //#region API +/** + * A descriptor to provide a human readable error message for a given HTTP status code. + * + * @see {@linkcode ResponseErrorMessages} for a list of fallback error messages. + */ +interface ResponseErrorDescriptor { + headline: string; + reason: string; +} + +/** + * Fallback error messages for HTTP status codes used when a more specific error message is not available in the response. + */ +export const ResponseErrorMessages: Record = { + [HTTPStatusCode.BadRequest]: { + headline: "Bad request", + reason: "The server did not understand the request", + }, + [HTTPStatusCode.InternalServiceError]: { + headline: "Internal server error", + reason: "An unexpected error occurred", + }, +} as const; + /** * An API response error, typically derived from a {@linkcode Response} body. * @@ -113,30 +137,6 @@ export function isResponseErrorLike(errorLike: unknown): errorLike is APIErrorWi return "response" in errorLike && errorLike.response instanceof Response; } -/** - * A descriptor to provide a human readable error message for a given HTTP status code. - * - * @see {@linkcode ResponseErrorMessages} for a list of fallback error messages. - */ -interface ResponseErrorDescriptor { - headline: string; - reason: string; -} - -/** - * Fallback error messages for HTTP status codes used when a more specific error message is not available in the response. - */ -export const ResponseErrorMessages: Record = { - [HTTPStatusCode.BadRequest]: { - headline: "Bad request", - reason: "The server did not understand the request", - }, - [HTTPStatusCode.InternalServiceError]: { - headline: "Internal server error", - reason: "An unexpected error occurred", - }, -} as const; - /** * Composes a human readable error message from a {@linkcode ResponseErrorDescriptor}. * diff --git a/web/src/common/sentry/index.ts b/web/src/common/sentry/index.ts index 1934910c41..e59cb6bd01 100644 --- a/web/src/common/sentry/index.ts +++ b/web/src/common/sentry/index.ts @@ -41,7 +41,7 @@ function beforeSend( return event; } -export function configureSentry(canDoPpi = false): void { +export function configureSentry(): void { const cfg = globalAK().config; const debug = cfg.capabilities.includes(CapabilitiesEnum.CanDebug); diff --git a/web/src/common/users.ts b/web/src/common/users.ts index f05bd287c5..f79190df5d 100644 --- a/web/src/common/users.ts +++ b/web/src/common/users.ts @@ -58,33 +58,6 @@ function createGuestSession(): SessionUser { return guest; } -/** - * Retrieve the current user session. - * - * This is a memoized function, so it will only make one request per page load. - * - * @see {@linkcode refreshMe} to force a refresh. - * - * @category Session - */ -export async function me(requestInit?: RequestInit): Promise { - return new CoreApi(DEFAULT_CONFIG) - .coreUsersMeRetrieve(requestInit) - .catch(async (error: unknown) => { - if (isResponseErrorLike(error)) { - const { response } = error; - - if (response.status === 401 || response.status === 403) { - redirectToAuthFlow(); - } - } - - console.debug("authentik/users: Failed to retrieve user session", error); - - return createGuestSession(); - }); -} - let pendingRedirect = false; /** @@ -112,3 +85,30 @@ export function redirectToAuthFlow(nextPathname = "/flows/-/default/authenticati window.location.assign(authFlowRedirectURL); } + +/** + * Retrieve the current user session. + * + * This is a memoized function, so it will only make one request per page load. + * + * @see {@linkcode refreshMe} to force a refresh. + * + * @category Session + */ +export async function me(requestInit?: RequestInit): Promise { + return new CoreApi(DEFAULT_CONFIG) + .coreUsersMeRetrieve(requestInit) + .catch(async (error: unknown) => { + if (isResponseErrorLike(error)) { + const { response } = error; + + if (response.status === 401 || response.status === 403) { + redirectToAuthFlow(); + } + } + + console.debug("authentik/users: Failed to retrieve user session", error); + + return createGuestSession(); + }); +} diff --git a/web/src/common/utils.ts b/web/src/common/utils.ts index 1032b67fb5..4e8c699497 100644 --- a/web/src/common/utils.ts +++ b/web/src/common/utils.ts @@ -41,7 +41,7 @@ export const ascii_lowercase = "abcdefghijklmnopqrstuvwxyz"; export const ascii_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; export const ascii_letters = ascii_lowercase + ascii_uppercase; export const digits = "0123456789"; -export const hexdigits = digits + "abcdef" + "ABCDEF"; +export const hexdigits = digits + "abcdefABCDEF"; export const octdigits = "01234567"; export const punctuation = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; diff --git a/web/src/components/ak-page-navbar.ts b/web/src/components/ak-page-navbar.ts index 3cbefda3f3..ee3bc91745 100644 --- a/web/src/components/ak-page-navbar.ts +++ b/web/src/components/ak-page-navbar.ts @@ -24,6 +24,30 @@ import PFNotificationBadge from "@patternfly/patternfly/components/NotificationB import PFPage from "@patternfly/patternfly/components/Page/page.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css"; +export class PageDetailsUpdate extends Event { + static readonly eventName = "ak-page-details-update"; + header: PageHeaderInit; + + constructor(header: PageHeaderInit) { + super(PageDetailsUpdate.eventName, { bubbles: true, composed: true }); + this.header = header; + } +} + +export class PageNavMenuToggle extends Event { + static readonly eventName = "ak-page-nav-menu-toggle"; + open: boolean; + + constructor(open?: boolean) { + super(PageNavMenuToggle.eventName, { bubbles: true, composed: true }); + this.open = !!open; + } +} + +export function setPageDetails(header: PageHeaderInit) { + window.dispatchEvent(new PageDetailsUpdate(header)); +} + export interface PageHeaderInit { header?: string | null; description?: string | null; @@ -413,30 +437,6 @@ export class AKPageNavbar //#endregion } -export class PageDetailsUpdate extends Event { - static readonly eventName = "ak-page-details-update"; - header: PageHeaderInit; - - constructor(header: PageHeaderInit) { - super(PageDetailsUpdate.eventName, { bubbles: true, composed: true }); - this.header = header; - } -} - -export class PageNavMenuToggle extends Event { - static readonly eventName = "ak-page-nav-menu-toggle"; - open: boolean; - - constructor(open?: boolean) { - super(PageNavMenuToggle.eventName, { bubbles: true, composed: true }); - this.open = !!open; - } -} - -export function setPageDetails(header: PageHeaderInit) { - window.dispatchEvent(new PageDetailsUpdate(header)); -} - declare global { interface HTMLElementTagNameMap { "ak-page-navbar": AKPageNavbar; diff --git a/web/src/components/ak-search-ql/index.ts b/web/src/components/ak-search-ql/index.ts index b7ff2dc3ce..359f0b97ff 100644 --- a/web/src/components/ak-search-ql/index.ts +++ b/web/src/components/ak-search-ql/index.ts @@ -29,7 +29,9 @@ export class QL extends DjangoQL { logError(message: string): void { console.warn(`authentik/ql: ${message}`); } - textareaResize() {} + textareaResize() { + // Suppress auto-resize behavior + } } /** diff --git a/web/src/components/stories/ak-visibility-toggle.stories.ts b/web/src/components/stories/ak-visibility-toggle.stories.ts index 82d9467ecf..908676ce55 100644 --- a/web/src/components/stories/ak-visibility-toggle.stories.ts +++ b/web/src/components/stories/ak-visibility-toggle.stories.ts @@ -18,7 +18,7 @@ const metadata: Meta = { # Visibility Toggle Component A straightforward two-state iconic button for toggling the visibility of sensitive content such as passwords, private keys, or other secret information. - + - Use for sensitive content that users might want to temporarily reveal - There are default hide/show messages for screen readers, but they can be overridden - Clients always handle the state @@ -77,6 +77,7 @@ const Template: Story = { // Password field integration example export const PasswordFieldExample: Story = { + ...Template, args: { showMessage: "Reveal password", hideMessage: "Conceal password", diff --git a/web/src/elements/Base.ts b/web/src/elements/Base.ts index a850a295f4..2aa229b9b5 100644 --- a/web/src/elements/Base.ts +++ b/web/src/elements/Base.ts @@ -68,7 +68,7 @@ export class AKElement extends LitElement implements AKElementProps { if (process.env.NODE_ENV === "development") { const updatedCallback = this.updated; - this.updated = function (args: PropertyValues) { + this.updated = function updatedWrapper(args: PropertyValues) { updatedCallback?.call(this, args); const unregisteredElements = this.renderRoot.querySelectorAll( diff --git a/web/src/elements/EmptyState.ts b/web/src/elements/EmptyState.ts index c19be5d770..c39db93f08 100644 --- a/web/src/elements/EmptyState.ts +++ b/web/src/elements/EmptyState.ts @@ -135,7 +135,6 @@ interface IEmptyStateContent { primary?: SlottedTemplateResult; } -type ContentKey = keyof IEmptyStateContent; type ContentValue = SlottedTemplateResult | undefined; /** diff --git a/web/src/elements/LoadingOverlay.ts b/web/src/elements/LoadingOverlay.ts index 763fddf355..f4ee256703 100644 --- a/web/src/elements/LoadingOverlay.ts +++ b/web/src/elements/LoadingOverlay.ts @@ -70,7 +70,6 @@ interface ILoadingOverlayContent { body?: SlottedTemplateResult; } -type ContentKey = keyof ILoadingOverlayContent; type ContentValue = SlottedTemplateResult | undefined; /** diff --git a/web/src/elements/ak-dual-select/ak-dual-select.ts b/web/src/elements/ak-dual-select/ak-dual-select.ts index 9ca8247857..698122132f 100644 --- a/web/src/elements/ak-dual-select/ak-dual-select.ts +++ b/web/src/elements/ak-dual-select/ak-dual-select.ts @@ -37,7 +37,7 @@ function localeComparator(a: DualSelectPair, b: DualSelectPair) { return aSortBy.localeCompare(bSortBy); } -function keyfinder(key: string) { +function keyfinder(key: string | number) { return ([k]: DualSelectPair) => k === key; } @@ -98,7 +98,7 @@ export class AkDualSelect extends CustomEmitterElement(CustomListenerElement(AKE @state() protected selectedFilter: string = ""; - #selectedKeys: Set = new Set(); + #selectedKeys: Set = new Set(); //#endregion @@ -188,7 +188,7 @@ export class AkDualSelect extends CustomEmitterElement(CustomListenerElement(AKE // updating the list of currently visible options; protected addAllVisible() { // Create a new array of all current options and selected, and de-dupe. - const selected = new Map([ + const selected = new Map([ ...this.options.map((pair) => [pair[0], pair] as const), ...this.selected.map((pair) => [pair[0], pair] as const), ]); diff --git a/web/src/elements/ak-dual-select/components/ak-dual-select-available-pane.ts b/web/src/elements/ak-dual-select/components/ak-dual-select-available-pane.ts index bbe3ec0a0b..aee59d8142 100644 --- a/web/src/elements/ak-dual-select/components/ak-dual-select-available-pane.ts +++ b/web/src/elements/ak-dual-select/components/ak-dual-select-available-pane.ts @@ -54,7 +54,7 @@ export class AkDualSelectAvailablePane extends CustomEmitterElement = new Set(); + public readonly selected: Set = new Set(); //#endregion @@ -69,7 +69,7 @@ export class AkDualSelectAvailablePane extends CustomEmitterElement = new Set(); + public toMove: Set = new Set(); //#endregion @@ -117,7 +117,7 @@ export class AkDualSelectAvailablePane extends CustomEmitterElement = new Set(); + public toMove: Set = new Set(); //#endregion @@ -88,7 +88,7 @@ export class AkDualSelectSelectedPane extends CustomEmitterElement { + #clickListener = (key: string | number): void => { if (this.toMove.has(key)) { this.toMove.delete(key); } else { @@ -105,7 +105,7 @@ export class AkDualSelectSelectedPane extends CustomEmitterElement { + #moveListener = (key: string | number): void => { this.toMove.delete(key); this.dispatchCustomEvent(DualSelectEventType.RemoveOne, key); diff --git a/web/src/elements/ak-dual-select/stories/ak-dual-select-master.stories.ts b/web/src/elements/ak-dual-select/stories/ak-dual-select-master.stories.ts index b70cead881..81387a0693 100644 --- a/web/src/elements/ak-dual-select/stories/ak-dual-select-master.stories.ts +++ b/web/src/elements/ak-dual-select/stories/ak-dual-select-master.stories.ts @@ -141,15 +141,14 @@ const container = (testItem: TemplateResult) =>
`; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const handleMoveChanged = (result: any) => { +const handleMoveChanged = (result: CustomEvent<{ value: Array<[string, string]> }>) => { const target = document.querySelector("#action-button-message-pad"); target!.innerHTML = ""; - // @ts-ignore + target!.append(result.detail.value.map(([k, _]) => k).join(", ")); }; -window.addEventListener("change", handleMoveChanged); +window.addEventListener("change", handleMoveChanged as unknown as EventListener); type Story = StoryObj; diff --git a/web/src/elements/ak-dual-select/stories/ak-dual-select-selected-pane.stories.ts b/web/src/elements/ak-dual-select/stories/ak-dual-select-selected-pane.stories.ts index aadd2aeabc..6468437c83 100644 --- a/web/src/elements/ak-dual-select/stories/ak-dual-select-selected-pane.stories.ts +++ b/web/src/elements/ak-dual-select/stories/ak-dual-select-selected-pane.stories.ts @@ -20,7 +20,9 @@ const metadata: Meta = { }, }, argTypes: { - // @ts-ignore + // @ts-expect-error Typescript is unaware that arguments for components + // are treated as properties, and properties are typically renamed to lower case, + // even if the variable is not. options: { type: "string", description: "An array of [key, label] pairs of what to show", diff --git a/web/src/elements/ak-dual-select/types.ts b/web/src/elements/ak-dual-select/types.ts index 18471554e6..51dd6bbd1b 100644 --- a/web/src/elements/ak-dual-select/types.ts +++ b/web/src/elements/ak-dual-select/types.ts @@ -26,7 +26,7 @@ export type DualSelectPair = [ /** * The key used to identify the object in the API. */ - key: string, + key: string | number, /** * A human-readable label for the object. */ diff --git a/web/src/elements/ak-mdx/remark/remark-admonition.ts b/web/src/elements/ak-mdx/remark/remark-admonition.ts index 0622de8cec..aa69cfb2c5 100644 --- a/web/src/elements/ak-mdx/remark/remark-admonition.ts +++ b/web/src/elements/ak-mdx/remark/remark-admonition.ts @@ -33,7 +33,7 @@ export const remarkAdmonition: Plugin<[unknown], Root, VFile> = () => { } }; - // @ts-ignore - visit cannot infer the type of the visitor. + // @ts-expect-error visit cannot infer the type of the visitor. visit(tree, visitor); }; }; diff --git a/web/src/elements/ak-mdx/remark/remark-headings.ts b/web/src/elements/ak-mdx/remark/remark-headings.ts index 56cd100246..061078602b 100644 --- a/web/src/elements/ak-mdx/remark/remark-headings.ts +++ b/web/src/elements/ak-mdx/remark/remark-headings.ts @@ -21,7 +21,6 @@ export const remarkHeadings: Plugin<[unknown], Root, VFile> = () => { }; }; - // @ts-ignore - visit cannot infer the type of the visitor. visit(tree, "heading", visitor); }; }; diff --git a/web/src/elements/ak-mdx/remark/remark-lists.ts b/web/src/elements/ak-mdx/remark/remark-lists.ts index bfda2fde6f..84726cfbdb 100644 --- a/web/src/elements/ak-mdx/remark/remark-lists.ts +++ b/web/src/elements/ak-mdx/remark/remark-lists.ts @@ -17,7 +17,6 @@ export const remarkLists: Plugin<[unknown], Root, VFile> = () => { }; }; - // @ts-ignore - visit cannot infer the type of the visitor. visit(tree, "list", visitor); }; }; diff --git a/web/src/elements/buttons/ActionButton/ak-action-button.stories.ts b/web/src/elements/buttons/ActionButton/ak-action-button.stories.ts index 5dc8ef86a2..7da32f8cba 100644 --- a/web/src/elements/buttons/ActionButton/ak-action-button.stories.ts +++ b/web/src/elements/buttons/ActionButton/ak-action-button.stories.ts @@ -75,11 +75,11 @@ window.addEventListener("ak-button-failure", displayMessage); export const ButtonWithSuccess = () => { const run = () => - new Promise(function (resolve) { - setTimeout(function () { + new Promise((resolve) => + setTimeout(() => { resolve("Success!"); - }, 3000); - }); + }, 3000), + ); return container( html` { const run = () => - new Promise(function (resolve) { - setTimeout(function () { + new Promise((resolve) => + setTimeout(() => { resolve(); - }, 3000); - }); + }, 3000), + ); return html`
3 Seconds diff --git a/web/src/elements/decorators/intersection-observer.ts b/web/src/elements/decorators/intersection-observer.ts index 65a630671a..312a622c3f 100644 --- a/web/src/elements/decorators/intersection-observer.ts +++ b/web/src/elements/decorators/intersection-observer.ts @@ -71,7 +71,7 @@ export function intersectionObserver(init: IntersectionObserverInit = {}): Inter const { connectedCallback, disconnectedCallback } = target; - target.connectedCallback = function (this: T) { + target.connectedCallback = function connectedCallbackWrapper(this: T) { connectedCallback?.call(this); if (this.hasUpdated) { @@ -83,7 +83,7 @@ export function intersectionObserver(init: IntersectionObserverInit = {}): Inter } }; - target.disconnectedCallback = function (this: LitElement) { + target.disconnectedCallback = function disconnectedCallbackWrapper(this: LitElement) { disconnectedCallback?.call(this); if (observer) { diff --git a/web/src/elements/forms/Form.ts b/web/src/elements/forms/Form.ts index 572b98a86f..2578fa9eb3 100644 --- a/web/src/elements/forms/Form.ts +++ b/web/src/elements/forms/Form.ts @@ -277,7 +277,7 @@ export abstract class Form> extends AKElement { /** * An overridable method for returning a formatted message after a successful submission. */ - protected formatAPISuccessMessage(response: unknown): APIMessage | null { + protected formatAPISuccessMessage(_response: unknown): APIMessage | null { const message = this.getSuccessMessage(); if (!message) return null; diff --git a/web/src/elements/router/RouteMatch.ts b/web/src/elements/router/RouteMatch.ts index 287bc0d9b3..0b18e52ee3 100644 --- a/web/src/elements/router/RouteMatch.ts +++ b/web/src/elements/router/RouteMatch.ts @@ -42,14 +42,6 @@ export class RouteMatch { } } -export function getURLParam(key: string, fallback: T): T { - const params = getURLParams(); - if (key in params) { - return params[key] as T; - } - return fallback; -} - export function getURLParams(): RouteParameterRecord { const params = {}; if (window.location.hash.includes(ROUTE_SEPARATOR)) { @@ -64,6 +56,14 @@ export function getURLParams(): RouteParameterRecord { return params; } +export function getURLParam(key: string, fallback: T): T { + const params = getURLParams(); + if (key in params) { + return params[key] as T; + } + return fallback; +} + /** * Serialize route parameters to a JSON string, removing empty values. * diff --git a/web/src/elements/router/RouterOutlet.ts b/web/src/elements/router/RouterOutlet.ts index cee3b1c46c..4d9856598a 100644 --- a/web/src/elements/router/RouterOutlet.ts +++ b/web/src/elements/router/RouterOutlet.ts @@ -23,23 +23,26 @@ import { customElement, property } from "lit/decorators.js"; // Poliyfill for hashchange.newURL, // https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onhashchange window.addEventListener("load", () => { - if (!window.HashChangeEvent) - (function () { - let lastURL = document.URL; - window.addEventListener("hashchange", function (event) { - Object.defineProperty(event, "oldURL", { - enumerable: true, - configurable: true, - value: lastURL, - }); - Object.defineProperty(event, "newURL", { - enumerable: true, - configurable: true, - value: document.URL, - }); - lastURL = document.URL; - }); - })(); + if (window.HashChangeEvent) { + return; + } + + let lastURL = document.URL; + + window.addEventListener("hashchange", (event) => { + Object.defineProperty(event, "oldURL", { + enumerable: true, + configurable: true, + value: lastURL, + }); + + Object.defineProperty(event, "newURL", { + enumerable: true, + configurable: true, + value: document.URL, + }); + lastURL = document.URL; + }); }); export function paramURL(url: string, params?: { [key: string]: unknown }): string { diff --git a/web/src/elements/stories/Alert.stories.ts b/web/src/elements/stories/Alert.stories.ts index 6b485069fc..70ce01d128 100644 --- a/web/src/elements/stories/Alert.stories.ts +++ b/web/src/elements/stories/Alert.stories.ts @@ -42,7 +42,9 @@ Note that the content of an alert _must_ be a valid HTML component; plain text d inline: { control: "boolean" }, level: { control: "text" }, icon: { control: "text" }, - // @ts-ignore + // @ts-expect-error Typescript is unaware that arguments for components + // are treated as properties, and properties are typically renamed to lower case, + // even if the variable is not. message: { control: "text" }, }, }; @@ -55,7 +57,7 @@ export const DefaultStory: StoryObj = { message: "You should be alarmed.", }, - // @ts-ignore + // @ts-expect-error Storybook cannot infer the type here. render: ({ inline, level, icon, message }: IAlertForTesting) => { return html`