From 563a712b641c67bd2e2ce4a316df179d34e3fcdc Mon Sep 17 00:00:00 2001 From: Shark that walks like a man <106829671+stwlam@users.noreply.github.com> Date: Mon, 30 Sep 2024 21:15:55 -0500 Subject: [PATCH] Update NPM dependencies (#16716) Includes necessary updates for: - types (eslint) - ts formatting (prettier, single ts rule change) - scss (dart sass deprecations) --- .eslintrc.json | 89 - build/lib/foundry-utils.ts | 7 +- eslint.config.js | 51 + eslint.json.config.js | 7 + package-lock.json | 1578 ++++++++++++----- package.json | 54 +- src/global.ts | 1 + src/module/actor/actions/simple.ts | 2 +- src/module/actor/base.ts | 14 +- .../actor/character/apps/attribute-builder.ts | 2 +- src/module/actor/character/document.ts | 6 +- src/module/actor/character/elemental-blast.ts | 2 +- src/module/actor/character/feats.ts | 14 +- src/module/actor/character/sheet.ts | 2 +- src/module/actor/creature/config.ts | 2 +- src/module/actor/creature/document.ts | 2 +- src/module/actor/creature/sheet.ts | 2 +- src/module/actor/data/iwr.ts | 2 +- src/module/actor/familiar/document.ts | 6 +- src/module/actor/hazard/document.ts | 2 +- src/module/actor/helpers.ts | 2 +- src/module/actor/modifiers.ts | 8 +- src/module/actor/npc/sheet.ts | 4 +- src/module/actor/party/invalid-campaign.ts | 2 +- src/module/actor/party/kingdom/model.ts | 1 - src/module/actor/party/types.ts | 3 +- src/module/actor/roll-context/base.ts | 10 +- src/module/actor/sheet/base.ts | 4 +- .../actor/sheet/item-summary-renderer.ts | 4 +- .../popups/casting-item-create-dialog.ts | 2 +- .../popups/manage-attack-proficiencies.ts | 2 +- src/module/apps/pick-a-thing-prompt.ts | 2 +- src/module/apps/sidebar/actor-directory.ts | 2 +- src/module/apps/world-clock/app.ts | 2 +- src/module/chat-message/document.ts | 6 +- src/module/chat-message/listeners/cards.ts | 6 +- src/module/collection/actors.ts | 2 +- src/module/item/ability/helpers.ts | 2 +- src/module/item/abstract-effect/document.ts | 4 +- src/module/item/abstract-effect/helpers.ts | 2 +- src/module/item/affliction/document.ts | 2 +- src/module/item/base/document.ts | 10 +- .../item/base/sheet/rule-element-form/aura.ts | 2 +- .../sheet/rule-element-form/flat-modifier.ts | 2 +- .../base/sheet/rule-element-form/roll-note.ts | 2 +- src/module/item/base/sheet/sheet.ts | 4 +- src/module/item/campaign-feature/document.ts | 2 +- src/module/item/effect/document.ts | 2 +- src/module/item/equipment/document.ts | 2 +- src/module/item/feat/sheet.ts | 4 +- src/module/item/melee/document.ts | 6 +- src/module/item/physical/document.ts | 6 +- src/module/item/physical/helpers.ts | 2 +- src/module/item/shield/document.ts | 2 +- src/module/item/spell/document.ts | 4 +- src/module/item/spell/helpers.ts | 2 +- .../item/spellcasting-entry/collection.ts | 2 +- src/module/item/spellcasting-entry/data.ts | 8 - .../item/spellcasting-entry/document.ts | 2 +- src/module/item/weapon/document.ts | 6 +- .../migration/migrations/718-carry-type.ts | 2 +- .../migrations/823-heritage-ancestry-slug.ts | 2 +- .../migrations/841-v11-uuid-format.ts | 2 +- .../848-numeric-armor-properties.ts | 2 +- .../migrations/859-material-type-grade.ts | 4 +- .../migrations/862-specific-magic-armor.ts | 2 +- .../882-spell-data-reorganization.ts | 2 +- .../885-convert-alignment-damage.ts | 2 +- .../migrations/909-refine-consumable-data.ts | 2 +- .../migrations/910-edicts-anathema-arrays.ts | 8 +- .../migration/migrations/918-deity-skills.ts | 2 +- src/module/rules/rule-element/base.ts | 2 +- .../rules/rule-element/choice-set/prompt.ts | 2 +- .../rule-element/choice-set/rule-element.ts | 6 +- src/module/rules/rule-element/crit-spec.ts | 2 +- .../item-alteration/alteration.ts | 6 +- .../rules/rule-element/special-statistic.ts | 4 +- src/module/rules/rule-element/strike.ts | 8 +- .../scene/measured-template-document.ts | 2 +- src/module/scene/token-document/document.ts | 6 +- src/module/system/action-macros/helpers.ts | 4 +- src/module/system/check/check.ts | 14 +- src/module/system/damage/damage.ts | 2 +- src/module/system/damage/formula.ts | 4 +- src/module/system/damage/helpers.ts | 2 +- src/module/system/damage/iwr.ts | 2 +- src/module/system/damage/roll.ts | 4 +- src/module/system/damage/weapon.ts | 4 +- src/module/system/settings/homebrew/menu.ts | 2 +- src/module/system/statistic/armor-class.ts | 2 +- src/module/system/statistic/statistic.ts | 14 +- src/module/system/text-editor.ts | 4 +- src/scripts/dice.ts | 4 +- .../macros/travel/travel-speed-sheet.ts | 2 +- src/scripts/set-game-pf2e.ts | 1 + src/scripts/system/dragstart-handler.ts | 2 +- src/scripts/ui/inline-roll-links.ts | 6 +- src/styles/_colors.scss | 68 +- src/styles/actor/_index.scss | 2 +- src/styles/actor/_spell-collection.scss | 4 +- src/styles/actor/_spell-preparation.scss | 4 +- src/styles/actor/character/_character.scss | 4 +- src/styles/actor/character/_crafting.scss | 4 +- src/styles/actor/character/_effects.scss | 5 +- .../actor/character/_proficiencies.scss | 8 +- src/styles/actor/character/_sidebar.scss | 8 +- src/styles/actor/tabs/_actions.scss | 4 +- src/styles/actor/vehicle/_effects.scss | 5 +- src/styles/actor/vehicle/_sidebar.scss | 8 +- src/styles/mixins/_animations.scss | 4 +- src/styles/scene/_index.scss | 5 +- src/styles/ui/_roll-modifiers-dialog.scss | 16 +- types/foundry/.eslintrc.json | 11 - .../applications/api/application.d.ts | 4 +- .../api/handlebars-application.ts | 2 +- .../client-esm/canvas/edges/edges.d.ts | 8 - .../client-esm/canvas/edges/vertex.d.ts | 3 - .../client-esm/canvas/scene-manager.d.ts | 2 +- .../canvas/sources/base-light-source.d.ts | 2 +- .../sources/point-effect-source-mixes.d.ts | 2 +- .../sources/rendered-effect-source.d.ts | 2 + .../region-behaviors/suppress-weather.d.ts | 3 +- types/foundry/client/apps/app.d.ts | 2 + .../foundry/client/apps/client-settings.d.ts | 3 +- .../client/apps/forms/combat-config.d.ts | 2 +- .../client/apps/forms/playlist-config.d.ts | 2 +- .../apps/forms/playlist-sound-config.d.ts | 2 +- types/foundry/client/apps/hud/hotbar.d.ts | 2 +- .../client/apps/sidebar/apps/chat-popout.d.ts | 6 +- .../client/apps/sidebar/tabs/chat-log.d.ts | 2 +- .../client/apps/sidebar/tabs/settings.d.ts | 2 +- types/foundry/client/config.d.ts | 4 +- types/foundry/client/core/audio.d.ts | 2 + types/foundry/client/core/hooks.d.ts | 3 +- .../data/documents/client-base-mixes.d.ts | 2 + .../data/documents/region-document.d.ts | 2 +- .../foundry/client/data/documents/scene.d.ts | 2 +- types/foundry/client/pixi/board.d.ts | 2 +- .../core/interaction/canvas-animation.d.ts | 2 + .../pixi/core/interaction/mouse-handler.d.ts | 2 +- .../pixi/layers/base/placeables-layer.d.ts | 2 +- .../client/pixi/perception/vision-mode.d.ts | 10 +- .../primary-canvas-object.ts | 2 +- .../primary-occludable-object.ts | 2 +- .../primary-sprite-mesh.ts | 2 +- .../client/pixi/placeables/region.d.ts | 4 +- .../client/pixi/placeables/template.d.ts | 8 +- .../foundry/client/pixi/placeables/token.d.ts | 32 +- .../pixi/webgl/extensions/batch-renderer.d.ts | 2 + .../webgl/shaders/filters/transition.d.ts | 4 +- .../webgl/shaders/samplers/base-sampler.d.ts | 2 + .../pixi/webgl/shaders/samplers/depth.d.ts | 2 + .../webgl/shaders/samplers/occlusion.d.ts | 2 + types/foundry/client/roll.d.ts | 1 - types/foundry/client/ui/filepicker.d.ts | 2 + types/foundry/client/ui/tabs.d.ts | 40 +- types/foundry/common/types.d.ts | 2 +- types/foundry/common/utils/collection.d.ts | 2 +- vite.config.ts | 6 +- 159 files changed, 1524 insertions(+), 963 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 eslint.config.js create mode 100644 eslint.json.config.js delete mode 100644 types/foundry/.eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 3eb32d69c78..00000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true, - "jest/globals": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module", - "project": "./tsconfig.json" - }, - "ignorePatterns": [ - "dist/" - ], - "rules": { - "eqeqeq": "error", - "prettier/prettier": "error", - "no-console": "off", - "no-plusplus": [ - "error", - { - "allowForLoopAfterthoughts": true - } - ], - "no-unused-expressions": [ - "error", - { - "allowShortCircuit": true - } - ], - "spaced-comment": [ - "error", - "always", - { - "markers": [ - "/" - ] - } - ], - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/ban-ts-comment": "error", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/explicit-module-boundary-types": "error", - "@typescript-eslint/lines-between-class-members": [ - "error", - "always", - { - "exceptAfterSingleLine": true - } - ], - "@typescript-eslint/prefer-namespace-keyword": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-namespace": [ - "error", - { - "allowDeclarations": true - } - ], - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-unsafe-declaration-merging": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/array-type": [ - "error", - { - "default": "array" - } - ] - }, - "plugins": [ - "jest", - "prettier", - "@typescript-eslint" - ], - "overrides": [ - { - "files": "tests/**/*", - "rules": { - "global-require": "off" - } - } - ], - "parser": "@typescript-eslint/parser" -} diff --git a/build/lib/foundry-utils.ts b/build/lib/foundry-utils.ts index 6591203a9cf..814b798dd15 100644 --- a/build/lib/foundry-utils.ts +++ b/build/lib/foundry-utils.ts @@ -90,7 +90,8 @@ export function getType(variable: unknown): string { if ((variable as object).constructor.name === "Object") return "Object"; // simple objects // Match prototype instances - const prototypes: [Function, string][] = [ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const prototypes: [new (...args: any[]) => object, string][] = [ [Array, "Array"], [Set, "Set"], [Map, "Map"], @@ -290,7 +291,7 @@ function _arrayEquals(arr: unknown[], other: unknown): boolean { const t1 = getType(v1); if (t0 !== t1) return false; if ((v0 as Maybe<{ equals?: unknown }>)?.equals instanceof Function) - return (v0 as { equals: Function }).equals(v1); + return (v0 as { equals: (arg: unknown) => boolean }).equals(v1); if (t0 === "Object") return objectsEqual(v0 as object, v1); return v0 === v1; }); @@ -318,7 +319,7 @@ function diffObject(original: object, other: object, { inner = false, deletionKe // If the prototype explicitly exposes an equality-testing method, use it if ((v0 as { equals?: unknown }).equals instanceof Function) { - return [!(v0 as { equals: Function }).equals(v1), v1]; + return [!(v0 as { equals: (arg: unknown) => boolean }).equals(v1), v1]; } if (Array.isArray(v0)) { return [!_arrayEquals(v0, v1), v1]; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000000..32b11a87cb6 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,51 @@ +// @ts-check + +import eslint from "@eslint/js"; +import jest from "eslint-plugin-jest"; +import prettier from "eslint-plugin-prettier"; +import globals from "globals"; +import tseslint from "typescript-eslint"; + +export default [ + { files: ["**/*.ts"] }, + { ignores: ["**/dist/"] }, + eslint.configs.recommended, + ...tseslint.configs.recommended, + { + plugins: { jest, prettier }, + languageOptions: { + globals: { + ...globals.browser, + ...jest.environments.globals.globals, + }, + ecmaVersion: 2022, + sourceType: "module", + parserOptions: { project: "./tsconfig.json" }, + }, + rules: { + eqeqeq: "error", + "prettier/prettier": "error", + "no-console": "off", + "no-plusplus": ["error", { allowForLoopAfterthoughts: true }], + "no-unused-expressions": ["error", { allowShortCircuit: true }], + "spaced-comment": ["error", "always", { markers: ["/"] }], + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/explicit-module-boundary-types": "error", + "@typescript-eslint/prefer-namespace-keyword": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-empty-object-type": ["error", { allowInterfaces: "with-single-extends" }], + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-namespace": ["error", { allowDeclarations: true }], + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-unsafe-declaration-merging": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/array-type": ["error", { default: "array" }], + }, + }, + { + files: ["tests/**/*"], + rules: { "global-require": "off" }, + }, +]; diff --git a/eslint.json.config.js b/eslint.json.config.js new file mode 100644 index 00000000000..a98d87ed79f --- /dev/null +++ b/eslint.json.config.js @@ -0,0 +1,7 @@ +// @ts-check +import json from "eslint-plugin-json"; + +export default [ + { files: ["static/lang/*.json", "static/system.json", "static/template.json"] }, + json.configs["recommended"], +]; diff --git a/package-lock.json b/package-lock.json index b6dce9c8f7b..3e494c529a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,24 +9,27 @@ "version": "6.4.1", "license": "Apache-2.0", "dependencies": { - "@codemirror/autocomplete": "^6.16.0", + "@codemirror/autocomplete": "^6.18.1", "@codemirror/lang-json": "^6.0.1", "@yaireo/tagify": "4.16.4", "codemirror": "^6.0.1", - "luxon": "^3.4.4", + "luxon": "^3.5.0", "minisearch": "^6.3.0", - "nouislider": "^15.8.0", + "nouislider": "^15.8.1", "remeda": "^1.43.0", - "sortablejs": "^1.15.2", + "sortablejs": "^1.15.3", "uuid": "^10.0.0" }, "devDependencies": { + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.11.1", "@pixi/graphics-smooth": "^1.1.0", "@pixi/particle-emitter": "5.0.8", + "@types/eslint__js": "^8.42.3", "@types/fs-extra": "^11.0.4", "@types/glob": "^8.1.0", - "@types/jest": "^29.5.12", - "@types/jquery": "^3.5.30", + "@types/jest": "^29.5.13", + "@types/jquery": "^3.5.31", "@types/jsdom": "^21.1.7", "@types/luxon": "^3.4.2", "@types/node": "^20.14.6", @@ -34,41 +37,42 @@ "@types/showdown": "^2.0.6", "@types/sortablejs": "^1.15.8", "@types/tooltipster": "^0.0.35", - "@types/uuid": "^9.0.8", + "@types/uuid": "^10.0.0", "@types/yaireo__tagify": "4.17.0", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", "classic-level": "^1.3.0", "es-jest": "^2.1.0", - "eslint": "^8.57.0", + "eslint": "^9.11.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-json": "^4.0.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-jest": "^28.8.3", + "eslint-plugin-json": "^4.0.1", + "eslint-plugin-prettier": "^5.2.1", "fs-extra": "^11.2.0", "gsap": "3.11.5", "handlebars": "4.7.8", "jest": "^29.7.0", "jest-each": "^29.7.0", "js-angusj-clipper": "^1.3.1", - "jsdom": "^24.1.0", + "jsdom": "^25.0.1", "peggy": "^4.0.3", "pixi.js": "^7.4.2", - "prettier": "3.2.5", + "prettier": "3.3.3", "prompts": "^2.4.2", "prosemirror-commands": "^1.5.2", "prosemirror-view": "^1.33.6", - "sass": "^1.77.6", + "sass": "^1.79.4", "socket.io": "4.7.5", "socket.io-client": "4.7.5", "tinymce": "6.8.4", "tsconfig-paths": "^4.2.0", - "tsx": "^4.15.6", - "typescript": "5.3.3", - "vite": "^5.3.1", - "vite-plugin-checker": "^0.6.4", - "vite-plugin-static-copy": "^1.0.5", - "vite-tsconfig-paths": "^4.3.2", + "tsx": "^4.19.1", + "typescript": "^5.3.3", + "typescript-eslint": "^8.7.0", + "vite": "^5.4.8", + "vite-plugin-checker": "^0.8.0", + "vite-plugin-static-copy": "^1.0.6", + "vite-tsconfig-paths": "^5.0.1", "yargs": "^17.7.2" }, "engines": { @@ -677,9 +681,10 @@ "dev": true }, "node_modules/@codemirror/autocomplete": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.16.0.tgz", - "integrity": "sha512-P/LeCTtZHRTCU4xQsa89vSKWecYv1ZqwzOd5topheGRf+qtacFgBeIMQi3eL8Kt/BUNvxUWkx+5qP2jlGoARrg==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.1.tgz", + "integrity": "sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==", + "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -1049,6 +1054,23 @@ "node": ">=12" } }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/openbsd-x64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", @@ -1145,24 +1167,51 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1170,34 +1219,43 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "levn": "^0.4.1" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1213,12 +1271,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -2150,6 +2215,7 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -2158,208 +2224,224 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz", - "integrity": "sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.5.tgz", + "integrity": "sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz", - "integrity": "sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.5.tgz", + "integrity": "sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz", - "integrity": "sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.5.tgz", + "integrity": "sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz", - "integrity": "sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.5.tgz", + "integrity": "sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz", - "integrity": "sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.5.tgz", + "integrity": "sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz", - "integrity": "sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.5.tgz", + "integrity": "sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz", - "integrity": "sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.5.tgz", + "integrity": "sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz", - "integrity": "sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.5.tgz", + "integrity": "sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz", - "integrity": "sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.5.tgz", + "integrity": "sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz", - "integrity": "sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.5.tgz", + "integrity": "sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz", - "integrity": "sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.5.tgz", + "integrity": "sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz", - "integrity": "sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.5.tgz", + "integrity": "sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz", - "integrity": "sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.5.tgz", + "integrity": "sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz", - "integrity": "sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.5.tgz", + "integrity": "sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz", - "integrity": "sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.5.tgz", + "integrity": "sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz", - "integrity": "sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.5.tgz", + "integrity": "sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2463,11 +2545,33 @@ "integrity": "sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==", "dev": true }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint__js": { + "version": "8.42.3", + "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz", + "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*" + } + }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/fs-extra": { "version": "11.0.4", @@ -2523,20 +2627,22 @@ } }, "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "version": "29.5.13", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.13.tgz", + "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, "node_modules/@types/jquery": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", - "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.31.tgz", + "integrity": "sha512-rf/iB+cPJ/YZfMwr+FVuQbm7IaWC4y3FVYfVDxRGqmUCFjjPII0HWaP0vTPJGp6m4o13AXySCcMbWfrWtBFAKw==", "dev": true, + "license": "MIT", "dependencies": { "@types/sizzle": "*" } @@ -2552,6 +2658,13 @@ "parse5": "^7.0.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/jsonfile": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", @@ -2648,10 +2761,11 @@ "dev": true }, "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/yaireo__tagify": { "version": "4.17.0", @@ -2679,31 +2793,32 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.1.tgz", - "integrity": "sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz", + "integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/type-utils": "7.13.1", - "@typescript-eslint/utils": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/type-utils": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2712,26 +2827,27 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.1.tgz", - "integrity": "sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz", + "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2740,16 +2856,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz", - "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz", + "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1" + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2757,26 +2874,24 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.1.tgz", - "integrity": "sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz", + "integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.1", - "@typescript-eslint/utils": "7.13.1", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/utils": "8.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^8.56.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -2784,12 +2899,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz", - "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz", + "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2797,22 +2913,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz", - "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz", + "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/visitor-keys": "7.13.1", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2849,50 +2966,46 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz", - "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz", + "integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.1", - "@typescript-eslint/types": "7.13.1", - "@typescript-eslint/typescript-estree": "7.13.1" + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz", - "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz", + "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.13.1", + "@typescript-eslint/types": "8.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "node_modules/@yaireo/tagify": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/@yaireo/tagify/-/tagify-4.16.4.tgz", @@ -2933,10 +3046,11 @@ } }, "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2949,6 +3063,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -2970,6 +3085,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3049,16 +3165,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "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==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "Python-2.0" }, "node_modules/asynckit": { "version": "0.4.0", @@ -3645,12 +3753,13 @@ } }, "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", "dev": true, + "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "rrweb-cssom": "^0.7.1" }, "engines": { "node": ">=18" @@ -3771,30 +3880,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/earcut": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", @@ -3982,43 +4067,43 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.1", + "@eslint/plugin-kit": "^0.2.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", @@ -4030,10 +4115,18 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -4049,18 +4142,19 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", - "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", + "version": "28.8.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.3.tgz", + "integrity": "sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "engines": { "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", "jest": "*" }, @@ -4074,10 +4168,11 @@ } }, "node_modules/eslint-plugin-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-4.0.0.tgz", - "integrity": "sha512-l/P3WTzl2HI8PbwsbDIrZ+6jvwQI4TGuz20ReJkG3Y+gZS5ZurTgx+gBmuLpOgiqMyDJWyJ7+GCjevWtNYQcUg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-4.0.1.tgz", + "integrity": "sha512-3An5ISV5dq/kHfXdNyY5TUe2ONC3yXFSkLX2gu+W8xAhKhfvrRvkSAeKXCxZqZ0KJLX15ojBuLPyj+UikQMkOA==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21", "vscode-json-languageservice": "^4.1.6" @@ -4087,13 +4182,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.9.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -4117,16 +4213,17 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4144,18 +4241,45 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4191,6 +4315,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -4212,6 +4337,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -4274,7 +4400,8 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -4341,15 +4468,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -4381,24 +4509,25 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/form-data": { "version": "4.0.0", @@ -4560,35 +4689,13 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "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" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4740,10 +4847,11 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -4813,6 +4921,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -5645,6 +5754,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -5653,31 +5763,32 @@ } }, "node_modules/jsdom": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz", - "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "dev": true, + "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.1.0", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", + "https-proxy-agent": "^7.0.5", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.10", + "nwsapi": "^2.2.12", "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.0", + "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0", - "ws": "^8.17.0", + "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "engines": { @@ -5692,11 +5803,27 @@ } } }, - "node_modules/jsdom/node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true + "node_modules/jsdom/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, "node_modules/jsesc": { "version": "2.5.2", @@ -5714,7 +5841,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -5726,7 +5854,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -5747,10 +5876,11 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", @@ -5769,6 +5899,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -5851,7 +5982,8 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -5881,9 +6013,10 @@ } }, "node_modules/luxon": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", - "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "license": "MIT", "engines": { "node": ">=12" } @@ -6022,6 +6155,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -6089,9 +6223,10 @@ } }, "node_modules/nouislider": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.8.0.tgz", - "integrity": "sha512-E7Rvt2Uc5IIl7Hv7+mO8XH8uFyqe3ofxi5j2QMi2B7w8JHVLAEzTpgDBk0oYZBaplsk60QOso3qrq8qk3JPHEQ==" + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.8.1.tgz", + "integrity": "sha512-93TweAi8kqntHJSPiSWQ1o/uZ29VWOmal9YKb6KKGGlCkugaNfAupT7o1qTHqdJvNQ7S0su5rO6qRFCjP8fxtw==", + "license": "MIT" }, "node_modules/npm-run-path": { "version": "4.0.1", @@ -6106,10 +6241,11 @@ } }, "node_modules/nwsapi": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", - "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", - "dev": true + "version": "2.2.13", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", + "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", @@ -6219,6 +6355,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -6289,15 +6426,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/peggy": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/peggy/-/peggy-4.0.3.tgz", @@ -6316,10 +6444,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -6449,9 +6578,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "funding": [ { @@ -6467,10 +6596,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -6486,10 +6616,11 @@ } }, "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -6619,12 +6750,6 @@ "prosemirror-transform": "^1.1.0" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6665,12 +6790,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6723,12 +6842,6 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -6772,6 +6885,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6804,29 +6918,14 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.3.tgz", - "integrity": "sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.5.tgz", + "integrity": "sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -6836,30 +6935,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.14.3", - "@rollup/rollup-android-arm64": "4.14.3", - "@rollup/rollup-darwin-arm64": "4.14.3", - "@rollup/rollup-darwin-x64": "4.14.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.14.3", - "@rollup/rollup-linux-arm-musleabihf": "4.14.3", - "@rollup/rollup-linux-arm64-gnu": "4.14.3", - "@rollup/rollup-linux-arm64-musl": "4.14.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.14.3", - "@rollup/rollup-linux-riscv64-gnu": "4.14.3", - "@rollup/rollup-linux-s390x-gnu": "4.14.3", - "@rollup/rollup-linux-x64-gnu": "4.14.3", - "@rollup/rollup-linux-x64-musl": "4.14.3", - "@rollup/rollup-win32-arm64-msvc": "4.14.3", - "@rollup/rollup-win32-ia32-msvc": "4.14.3", - "@rollup/rollup-win32-x64-msvc": "4.14.3", + "@rollup/rollup-android-arm-eabi": "4.22.5", + "@rollup/rollup-android-arm64": "4.22.5", + "@rollup/rollup-darwin-arm64": "4.22.5", + "@rollup/rollup-darwin-x64": "4.22.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.5", + "@rollup/rollup-linux-arm-musleabihf": "4.22.5", + "@rollup/rollup-linux-arm64-gnu": "4.22.5", + "@rollup/rollup-linux-arm64-musl": "4.22.5", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.5", + "@rollup/rollup-linux-riscv64-gnu": "4.22.5", + "@rollup/rollup-linux-s390x-gnu": "4.22.5", + "@rollup/rollup-linux-x64-gnu": "4.22.5", + "@rollup/rollup-linux-x64-musl": "4.22.5", + "@rollup/rollup-win32-arm64-msvc": "4.22.5", + "@rollup/rollup-win32-ia32-msvc": "4.22.5", + "@rollup/rollup-win32-x64-msvc": "4.22.5", "fsevents": "~2.3.2" } }, "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", @@ -6891,12 +6991,13 @@ "dev": true }, "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz", + "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==", "dev": true, + "license": "MIT", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", + "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, @@ -6907,6 +7008,36 @@ "node": ">=14.0.0" } }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", + "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -7086,9 +7217,10 @@ } }, "node_modules/sortablejs": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz", - "integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==" + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz", + "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==", + "license": "MIT" }, "node_modules/source-map": { "version": "0.6.1", @@ -7109,10 +7241,11 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -7259,10 +7392,11 @@ "dev": true }, "node_modules/synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, + "license": "MIT", "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" @@ -7306,6 +7440,26 @@ "integrity": "sha512-okoJyxuPv1gzASxQDNgQbnUXOdAIyoOSXcXcZZu7tiW0PSKEdf3SdASxPBupRj+64/E3elHwVRnzSdo82Emqbg==", "dev": true }, + "node_modules/tldts": { + "version": "6.1.48", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.48.tgz", + "integrity": "sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.48" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.48", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.48.tgz", + "integrity": "sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==", + "dev": true, + "license": "MIT" + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -7334,27 +7488,16 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/tr46": { @@ -7425,18 +7568,20 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" }, "node_modules/tsx": { - "version": "4.15.6", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.6.tgz", - "integrity": "sha512-is0VQQlfNZRHEuSSTKA6m4xw74IU4AizmuB6lAYLRt9XtuyeQnyJYexhNZOPCB59SqC4JzmSzPnHGBXxf3k0hA==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", + "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "~0.21.4", + "esbuild": "~0.23.0", "get-tsconfig": "^4.7.5" }, "bin": { @@ -7449,6 +7594,437 @@ "fsevents": "~2.3.3" } }, + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7470,23 +8046,12 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typescript": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7495,6 +8060,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.7.0.tgz", + "integrity": "sha512-nEHbEYJyHwsuf7c3V3RS7Saq+1+la3i0ieR3qP0yjqWSzVmh8Drp47uOl9LjbPANac4S7EFSqvcYIKXUUwIfIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.7.0", + "@typescript-eslint/parser": "8.7.0", + "@typescript-eslint/utils": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -7558,6 +8147,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -7572,16 +8162,6 @@ "qs": "^6.11.2" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -7624,14 +8204,15 @@ } }, "node_modules/vite": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -7650,6 +8231,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -7667,6 +8249,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -7679,10 +8264,11 @@ } }, "node_modules/vite-plugin-checker": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.4.tgz", - "integrity": "sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.8.0.tgz", + "integrity": "sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "ansi-escapes": "^4.3.0", @@ -7692,7 +8278,6 @@ "fast-glob": "^3.2.7", "fs-extra": "^11.1.0", "npm-run-path": "^4.0.1", - "semver": "^7.5.0", "strip-ansi": "^6.0.0", "tiny-invariant": "^1.1.0", "vscode-languageclient": "^7.0.0", @@ -7704,6 +8289,7 @@ "node": ">=14.16" }, "peerDependencies": { + "@biomejs/biome": ">=1.7", "eslint": ">=7", "meow": "^9.0.0", "optionator": "^0.9.1", @@ -7712,9 +8298,12 @@ "vite": ">=2.0.0", "vls": "*", "vti": "*", - "vue-tsc": ">=1.3.9" + "vue-tsc": "~2.1.6" }, "peerDependenciesMeta": { + "@biomejs/biome": { + "optional": true + }, "eslint": { "optional": true }, @@ -7751,10 +8340,11 @@ } }, "node_modules/vite-plugin-static-copy": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-1.0.5.tgz", - "integrity": "sha512-02k0Rox+buYdEOfeilKZSgs1gXfPf9RjVztZEIYZgVIxjsVZi6AXssjzdi+qW6zYt00d3bq+tpP2voVXN2fKLw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-1.0.6.tgz", + "integrity": "sha512-3uSvsMwDVFZRitqoWHj0t4137Kz7UynnJeq1EZlRW7e25h2068fyIZX4ORCCOAkfp1FklGxJNVJBkBOD+PZIew==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.3", "fast-glob": "^3.2.11", @@ -7769,10 +8359,11 @@ } }, "node_modules/vite-tsconfig-paths": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", - "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.0.1.tgz", + "integrity": "sha512-yqwv+LstU7NwPeNqajZzLEBVpUFU6Dugtb2P84FXuvaoYA+/70l9MHE+GYfYAycVyPSDYZ7mjOFuYBRqlEpTig==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", @@ -7792,6 +8383,7 @@ "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", "dev": true, + "license": "MIT", "dependencies": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.3", @@ -7861,13 +8453,15 @@ "version": "3.17.5", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-nls": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.0.8", diff --git a/package.json b/package.json index d522735f48a..f18ce5aa640 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,10 @@ "test": "jest", "migrate": "tsx ./build/run-migration.ts", "lint": "npm run lint:ts && npm run lint:json && npm run prettier:scss", - "lint:ts": "eslint ./build ./src ./tests ./types --ext .ts", + "lint:ts": "eslint ./build ./src ./tests ./types", "prettier:scss": "prettier --check src/styles", - "lint:json": "eslint ./static --ext .json --no-eslintrc --plugin json --rule \"json/*: error\" --rule \"linebreak-style: error\"", - "lint:fix": "eslint ./build ./src ./tests ./types --ext .ts --fix && prettier --write src/styles" + "lint:json": "eslint -c eslint.json.config.js", + "lint:fix": "eslint ./build ./src ./tests ./types --fix && prettier --write src/styles" }, "author": "The PF2e System Developers", "license": "Apache-2.0", @@ -29,12 +29,15 @@ "node": ">=20.15.0" }, "devDependencies": { + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.11.1", "@pixi/graphics-smooth": "^1.1.0", "@pixi/particle-emitter": "5.0.8", + "@types/eslint__js": "^8.42.3", "@types/fs-extra": "^11.0.4", "@types/glob": "^8.1.0", - "@types/jest": "^29.5.12", - "@types/jquery": "^3.5.30", + "@types/jest": "^29.5.13", + "@types/jquery": "^3.5.31", "@types/jsdom": "^21.1.7", "@types/luxon": "^3.4.2", "@types/node": "^20.14.6", @@ -42,53 +45,54 @@ "@types/showdown": "^2.0.6", "@types/sortablejs": "^1.15.8", "@types/tooltipster": "^0.0.35", - "@types/uuid": "^9.0.8", + "@types/uuid": "^10.0.0", "@types/yaireo__tagify": "4.17.0", - "@typescript-eslint/eslint-plugin": "^7.13.1", - "@typescript-eslint/parser": "^7.13.1", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "@typescript-eslint/parser": "^8.7.0", "classic-level": "^1.3.0", "es-jest": "^2.1.0", - "eslint": "^8.57.0", + "eslint": "^9.11.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-jest": "^28.6.0", - "eslint-plugin-json": "^4.0.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-jest": "^28.8.3", + "eslint-plugin-json": "^4.0.1", + "eslint-plugin-prettier": "^5.2.1", "fs-extra": "^11.2.0", "gsap": "3.11.5", "handlebars": "4.7.8", "jest": "^29.7.0", "jest-each": "^29.7.0", "js-angusj-clipper": "^1.3.1", - "jsdom": "^24.1.0", + "jsdom": "^25.0.1", "peggy": "^4.0.3", "pixi.js": "^7.4.2", - "prettier": "3.2.5", + "prettier": "3.3.3", "prompts": "^2.4.2", "prosemirror-commands": "^1.5.2", "prosemirror-view": "^1.33.6", - "sass": "^1.77.6", + "sass": "^1.79.4", "socket.io": "4.7.5", "socket.io-client": "4.7.5", "tinymce": "6.8.4", "tsconfig-paths": "^4.2.0", - "tsx": "^4.15.6", - "typescript": "5.3.3", - "vite": "^5.3.1", - "vite-plugin-checker": "^0.6.4", - "vite-plugin-static-copy": "^1.0.5", - "vite-tsconfig-paths": "^4.3.2", + "tsx": "^4.19.1", + "typescript": "^5.3.3", + "typescript-eslint": "^8.7.0", + "vite": "^5.4.8", + "vite-plugin-checker": "^0.8.0", + "vite-plugin-static-copy": "^1.0.6", + "vite-tsconfig-paths": "^5.0.1", "yargs": "^17.7.2" }, "dependencies": { - "@codemirror/autocomplete": "^6.16.0", + "@codemirror/autocomplete": "^6.18.1", "@codemirror/lang-json": "^6.0.1", "@yaireo/tagify": "4.16.4", "codemirror": "^6.0.1", - "luxon": "^3.4.4", + "luxon": "^3.5.0", "minisearch": "^6.3.0", - "nouislider": "^15.8.0", + "nouislider": "^15.8.1", "remeda": "^1.43.0", - "sortablejs": "^1.15.2", + "sortablejs": "^1.15.3", "uuid": "^10.0.0" } } diff --git a/src/global.ts b/src/global.ts index 8d12dcdc4a9..cd36057fd97 100644 --- a/src/global.ts +++ b/src/global.ts @@ -84,6 +84,7 @@ interface GamePF2e UserPF2e > { pf2e: { + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type actions: Record & Collection; compendiumBrowser: CompendiumBrowser; licenseViewer: LicenseViewer; diff --git a/src/module/actor/actions/simple.ts b/src/module/actor/actions/simple.ts index f381b4e1462..d24b1a555bd 100644 --- a/src/module/actor/actions/simple.ts +++ b/src/module/actor/actions/simple.ts @@ -77,7 +77,7 @@ class SimpleActionVariant extends BaseActionVariant { flavor, speaker: ChatMessage.getSpeaker({ actor }), }; - const message = options.message?.create ?? true ? await ChatMessage.create(data) : new ChatMessage(data); + const message = (options.message?.create ?? true) ? await ChatMessage.create(data) : new ChatMessage(data); const item = effect && actor.isOwner ? ((await actor.createEmbeddedDocuments("Item", [effect.toObject()]))[0] as EffectPF2e) diff --git a/src/module/actor/base.ts b/src/module/actor/base.ts index 1352173948c..7929a8555d7 100644 --- a/src/module/actor/base.ts +++ b/src/module/actor/base.ts @@ -168,7 +168,7 @@ class ActorPF2e { // Backward compatibility - value = typeof itemId === "boolean" ? itemId : value ?? !this.rollOptions[domain]?.[option]; + value = typeof itemId === "boolean" ? itemId : (value ?? !this.rollOptions[domain]?.[option]); type MaybeRollOption = { key: string; domain?: unknown; option?: unknown }; if (typeof itemId === "string") { @@ -1086,11 +1086,11 @@ class ActorPF2e 0 ? Math.min(shieldHardness, finalDamage) : 0; // The blocking shield may not be the held shield, such as in when the Shield spell is in play const blockingShield = heldShield?.id === actorShield?.itemId ? heldShield : null; - const currentShieldHP = blockingShield ? blockingShield._source.system.hp.value : actorShield?.hp.value ?? 0; + const currentShieldHP = blockingShield ? blockingShield._source.system.hp.value : (actorShield?.hp.value ?? 0); const shieldDamage = shieldBlock ? Math.min(currentShieldHP, Math.abs(finalDamage) - damageAbsorbedByShield) : 0; @@ -1105,7 +1105,7 @@ class ActorPF2e { if (damageResult.totalApplied <= 0 || damageResult.updates["system.attributes.hp.value"] !== 0) { return null; diff --git a/src/module/actor/character/apps/attribute-builder.ts b/src/module/actor/character/apps/attribute-builder.ts index 13cf267596a..df8a3b72832 100644 --- a/src/module/actor/character/apps/attribute-builder.ts +++ b/src/module/actor/character/apps/attribute-builder.ts @@ -47,7 +47,7 @@ class AttributeBuilder extends Application { class: actor.class, attributeModifiers: R.mapValues(actor.abilities, (value, attribute) => { // Allow decimal values in manual mode (to track partial boosts) - const mod = build.manual ? actor._source.system.abilities?.[attribute].mod ?? 0 : value.base; + const mod = build.manual ? (actor._source.system.abilities?.[attribute].mod ?? 0) : value.base; return { mod: Number(mod.toFixed(1)).signedString(), label: CONFIG.PF2E.abilities[attribute], diff --git a/src/module/actor/character/document.ts b/src/module/actor/character/document.ts index 63bdc73a621..01ab2427c09 100644 --- a/src/module/actor/character/document.ts +++ b/src/module/actor/character/document.ts @@ -310,7 +310,7 @@ class CharacterPF2e 1 ? configuredAmmo.uses.value : configuredAmmo.quantity - : configuredAmmo?.quantity ?? 0; + : (configuredAmmo?.quantity ?? 0); params.consumeAmmo ??= ammoRequired > 0; if (params.consumeAmmo && ammoRequired > ammoRemaining) { @@ -1480,7 +1480,7 @@ class CharacterPF2e extends Collection { - const slug = actor.class ? actor.class.slug ?? sluggify(actor.class.name) : null; + const slug = actor.class ? (actor.class.slug ?? sluggify(actor.class.name)) : null; return slug && slug in CONFIG.PF2E.featTraits ? slug : null; })(); @@ -170,7 +170,7 @@ class CharacterFeats extends Collection c.isFeatValid(feat) && !c.isFull); const group = validGroups.at(0); if (validGroups.length === 1 && group) { - const slotId = group.slotted ? Object.values(group.slots).find((slot) => !slot?.feat)?.id ?? null : null; + const slotId = group.slotted ? (Object.values(group.slots).find((slot) => !slot?.feat)?.id ?? null) : null; return { group, slotId }; } @@ -200,7 +200,7 @@ class CharacterFeats extends Collection (a.feat?.level || 0) - (b.feat?.level || 0)); @@ -305,8 +305,8 @@ class FeatGroup | undefined = this.slots[slotId]; if (!slot && this.slotted) return false; @@ -320,7 +320,7 @@ class FeatGroup = null): Promise[]> { const slot = this.slots[slotId ?? ""]; - const location = this.slotted || this.id === "bonus" ? slot?.id ?? null : this.id; + const location = this.slotted || this.id === "bonus" ? (slot?.id ?? null) : this.id; const existing = this.actor.items.filter( (i): i is FeatLike => isFeatLike(i) && i.system.location === location, ); diff --git a/src/module/actor/character/sheet.ts b/src/module/actor/character/sheet.ts index f8bc304b901..6276e15f5bf 100644 --- a/src/module/actor/character/sheet.ts +++ b/src/module/actor/character/sheet.ts @@ -1657,7 +1657,7 @@ interface CharacterSheetData exten magicTraditions: Record; martialProficiencies: Record<"attacks" | "defenses", Record>; options: CharacterSheetOptions; - preparationType: Object; + preparationType: object; showPFSTab: boolean; spellCollectionGroups: Record; hasNormalSpellcasting: boolean; diff --git a/src/module/actor/creature/config.ts b/src/module/actor/creature/config.ts index f22ca9102f1..10851773927 100644 --- a/src/module/actor/creature/config.ts +++ b/src/module/actor/creature/config.ts @@ -28,7 +28,7 @@ abstract class CreatureConfig extends DocumentSheet override async getData(options: Partial = {}): Promise> { const source: BaseCreatureSource = this.actor._source; const alliance = - source.system.details?.alliance === null ? "neutral" : source.system.details?.alliance ?? "default"; + source.system.details?.alliance === null ? "neutral" : (source.system.details?.alliance ?? "default"); const defaultValue = game.i18n.localize( this.actor.hasPlayerOwner ? "PF2E.Actor.Creature.Alliance.Party" diff --git a/src/module/actor/creature/document.ts b/src/module/actor/creature/document.ts index 553a272b074..df012fe0a89 100644 --- a/src/module/actor/creature/document.ts +++ b/src/module/actor/creature/document.ts @@ -84,7 +84,7 @@ abstract class CreaturePF2e< } else { const attacks: { item: ItemPF2e; ready: boolean }[] = weapon ? [{ item: weapon, ready: true }] - : this.system.actions ?? []; + : (this.system.actions ?? []); const readyAttacks = attacks.filter((a) => a.ready); const traitsFromItems = readyAttacks.map((a) => new Set(a.item.system.traits?.value ?? [])); if (traitsFromItems.length === 0) return baseReach; diff --git a/src/module/actor/creature/sheet.ts b/src/module/actor/creature/sheet.ts index eecf0750251..e6878a5253a 100644 --- a/src/module/actor/creature/sheet.ts +++ b/src/module/actor/creature/sheet.ts @@ -61,7 +61,7 @@ abstract class CreatureSheetPF2e extends ActorSheet const entry = this.actor.items.get(collectionId, { strict: true }); if (entry?.isOfType("spellcastingEntry") && entry.isPrepared) { const referenceEl = htmlClosest(event?.target, "[data-action=open-spell-preparation]"); - const offset = referenceEl ? $(referenceEl).offset() ?? { left: 0, top: 0 } : null; + const offset = referenceEl ? ($(referenceEl).offset() ?? { left: 0, top: 0 }) : null; const options = offset ? { top: offset.top - 60, left: offset.left + 200 } : {}; const sheet = new SpellPreparationSheet(entry, options); sheet.render(true); diff --git a/src/module/actor/data/iwr.ts b/src/module/actor/data/iwr.ts index 5b0c94cbb4e..f5feab4f4fb 100644 --- a/src/module/actor/data/iwr.ts +++ b/src/module/actor/data/iwr.ts @@ -25,7 +25,7 @@ abstract class IWR { this.exceptions = fu.deepClone(data.exceptions ?? []); this.definition = data.definition ?? null; this.source = data.source ?? null; - this.#customLabel = this.type === "custom" ? data.customLabel ?? null : null; + this.#customLabel = this.type === "custom" ? (data.customLabel ?? null) : null; } abstract get label(): string; diff --git a/src/module/actor/familiar/document.ts b/src/module/actor/familiar/document.ts index 53f8c376d23..34166307f9e 100644 --- a/src/module/actor/familiar/document.ts +++ b/src/module/actor/familiar/document.ts @@ -41,7 +41,7 @@ class FamiliarPF2e & { - attributes: { speed: RawSpeed; flanking: {} }; - details: {}; + attributes: { speed: RawSpeed; flanking: object }; + details: object; }; type RawSpeed = { value: number; otherSpeeds: LabeledSpeed[] }; diff --git a/src/module/actor/hazard/document.ts b/src/module/actor/hazard/document.ts index 8eab8ca276b..f3b3af38321 100644 --- a/src/module/actor/hazard/document.ts +++ b/src/module/actor/hazard/document.ts @@ -56,7 +56,7 @@ class HazardPF2e !m.ignored && m.type === "ability"), ].reduce((best, candidate) => - candidate && best ? (candidate.value > best.value ? candidate : best) : candidate ?? best, + candidate && best ? (candidate.value > best.value ? candidate : best) : (candidate ?? best), ); if (attributeModifier) { diff --git a/src/module/actor/modifiers.ts b/src/module/actor/modifiers.ts index b7e46447719..89566ca0201 100644 --- a/src/module/actor/modifiers.ts +++ b/src/module/actor/modifiers.ts @@ -193,9 +193,9 @@ class ModifierPF2e implements RawModifier { Object.defineProperty(this, "rule", { enumerable: false }); this.damageType = objectHasKey(CONFIG.PF2E.damageTypes, params.damageType) ? params.damageType : null; - this.damageCategory = this.damageType === "bleed" ? "persistent" : params.damageCategory ?? null; + this.damageCategory = this.damageType === "bleed" ? "persistent" : (params.damageCategory ?? null); // Force splash damage into being critical-only or not doubling on critical hits - this.critical = this.damageCategory === "splash" ? !!params.critical : params.critical ?? null; + this.critical = this.damageCategory === "splash" ? !!params.critical : (params.critical ?? null); this.kind = ((): "bonus" | "penalty" | "modifier" => { if (this.modifier >= 0 && !["ability", "untyped"].includes(this.type)) { @@ -368,7 +368,7 @@ function createProficiencyModifier({ ? game.pf2e.settings.variants.pwol.modifiers : [0, 2, 4, 6, 8]; - const addedLevel = addLevel && !pwolVariant ? level ?? actor.level : 0; + const addedLevel = addLevel && !pwolVariant ? (level ?? actor.level) : 0; const bonus = baseBonuses[rank] + addedLevel; return new ModifierPF2e({ @@ -719,7 +719,7 @@ class DamageDicePF2e { : this.damageType === "bleed" ? "persistent" : null; - this.critical = this.category === "splash" ? !!params.critical : params.critical ?? null; + this.critical = this.category === "splash" ? !!params.critical : (params.critical ?? null); this.predicate = params.predicate instanceof Predicate ? params.predicate : new Predicate(params.predicate ?? []); diff --git a/src/module/actor/npc/sheet.ts b/src/module/actor/npc/sheet.ts index 6b628481b8f..d86c9703979 100644 --- a/src/module/actor/npc/sheet.ts +++ b/src/module/actor/npc/sheet.ts @@ -174,7 +174,7 @@ class NPCSheetPF2e extends AbstractNPCSheet { if (this.isLootSheet || this.actor.limited) { const tokenSetsNameVisibility = game.pf2e.settings.tokens.nameVisibility; const canSeeName = !tokenSetsNameVisibility || !this.token || this.token.playersCanSeeName; - const actorName = canSeeName ? this.token?.name ?? this.actor.name : ""; + const actorName = canSeeName ? (this.token?.name ?? this.actor.name) : ""; if (this.actor.isDead) { return `${actorName} [${game.i18n.localize("PF2E.NPC.Dead")}]`; @@ -191,7 +191,7 @@ class NPCSheetPF2e extends AbstractNPCSheet { if (this.isLootSheet || this.actor.limited) { const tokenSetsNameVisibility = game.pf2e.settings.tokens.nameVisibility; const canSeeName = !tokenSetsNameVisibility || !this.token || this.token.playersCanSeeName; - const actorName = canSeeName ? this.token?.name ?? this.actor.name : ""; + const actorName = canSeeName ? (this.token?.name ?? this.actor.name) : ""; sheetData.actor.name = actorName; } diff --git a/src/module/actor/party/invalid-campaign.ts b/src/module/actor/party/invalid-campaign.ts index a1c86c46709..be1463f02e4 100644 --- a/src/module/actor/party/invalid-campaign.ts +++ b/src/module/actor/party/invalid-campaign.ts @@ -9,7 +9,7 @@ const { DataModel } = foundry.abstract; * Exists if the party's campaign type does not match the configured setting. * Creates a warning and deletion dialog to give one last chance to back out. */ -class InvalidCampaign extends DataModel implements PartyCampaign { +class InvalidCampaign extends DataModel implements PartyCampaign { type = "invalid"; actor: PartyPF2e; diff --git a/src/module/actor/party/kingdom/model.ts b/src/module/actor/party/kingdom/model.ts index 916654fba86..08762fa3769 100644 --- a/src/module/actor/party/kingdom/model.ts +++ b/src/module/actor/party/kingdom/model.ts @@ -575,7 +575,6 @@ class Kingdom extends DataModel implements PartyCampai } } -// eslint-disable-next-line @typescript-eslint/no-empty-interface interface Kingdom extends ModelPropsFromSchema {} export { Kingdom }; diff --git a/src/module/actor/party/types.ts b/src/module/actor/party/types.ts index d50f6465e2a..0d3da0a4abc 100644 --- a/src/module/actor/party/types.ts +++ b/src/module/actor/party/types.ts @@ -3,6 +3,7 @@ import { ItemType } from "@item/base/data/index.ts"; import type { TokenDocumentPF2e } from "@scene"; import type { Statistic } from "@system/statistic/index.ts"; import type DataModel from "types/foundry/common/abstract/data.d.ts"; +import type { DataSchema } from "types/foundry/common/data/fields.d.ts"; import type { PartyPF2e } from "./document.ts"; interface PartyUpdateOperation extends ActorUpdateOperation { @@ -10,7 +11,7 @@ interface PartyUpdateOperation extends } /** Interface for a party campaign implementation, alternative data preparation used by parties for special campaigns */ -interface PartyCampaign extends DataModel { +interface PartyCampaign extends DataModel { type: string; level?: number; /** Any additional item types supported by the campaign */ diff --git a/src/module/actor/roll-context/base.ts b/src/module/actor/roll-context/base.ts index d20d8ef7542..0fd134672e5 100644 --- a/src/module/actor/roll-context/base.ts +++ b/src/module/actor/roll-context/base.ts @@ -42,7 +42,7 @@ abstract class RollContext< actor: params.origin?.actor ?? params.origin?.token?.actor ?? null, statistic: params.origin?.statistic ?? null, token: params.origin?.token ?? params.origin?.actor?.getActiveTokens(true, true).shift() ?? null, - item: params.origin?.item?.actor === params.origin?.actor ? params.origin?.item ?? null : null, + item: params.origin?.item?.actor === params.origin?.actor ? (params.origin?.item ?? null) : null, }; const targetActor = params.target?.actor ?? params.target?.token?.actor; const target = @@ -51,7 +51,7 @@ abstract class RollContext< actor: targetActor, statistic: params.target?.statistic ?? null, token: params.target?.token ?? targetActor?.getActiveTokens(true, true).shift() ?? null, - item: params.origin?.item ? null : params.target?.item ?? null, + item: params.origin?.item ? null : (params.target?.item ?? null), } : null; this.unresolved = { origin, target }; @@ -325,7 +325,7 @@ abstract class RollContext< const unclonedItem = this.item; return unresolvedRoller?.statistic instanceof StatisticModifier - ? strikeActions.find((action): boolean => { + ? (strikeActions.find((action): boolean => { // Find the matching weapon or melee item if (unclonedItem?.id !== action.item.id || unclonedItem.name !== action.item.name) return false; if (unclonedItem.isOfType("melee") && action.item.isOfType("melee")) return true; @@ -338,8 +338,8 @@ abstract class RollContext< ); }) ?? unresolvedRoller?.statistic ?? - null - : unresolvedRoller?.statistic ?? null; + null) + : (unresolvedRoller?.statistic ?? null); } } diff --git a/src/module/actor/sheet/base.ts b/src/module/actor/sheet/base.ts index aefa81112e5..f6df68e8912 100644 --- a/src/module/actor/sheet/base.ts +++ b/src/module/actor/sheet/base.ts @@ -259,7 +259,7 @@ abstract class ActorSheetPF2e extends ActorSheet (altUsage === "thrown" ? s.item.isThrown : s.item.isMelee)) ?? null + ? (rootAction?.altUsages?.find((s) => (altUsage === "thrown" ? s.item.isThrown : s.item.isMelee)) ?? null) : rootAction; return strike?.ready || !readyOnly ? strike : null; @@ -511,7 +511,7 @@ abstract class ActorSheetPF2e extends ActorSheet> = collectionId - ? actor.spellcasting?.collections.get(collectionId, { strict: true }) ?? actor.items + ? (actor.spellcasting?.collections.get(collectionId, { strict: true }) ?? actor.items) : actor.items; const itemId = itemEl?.dataset.itemId; diff --git a/src/module/actor/sheet/item-summary-renderer.ts b/src/module/actor/sheet/item-summary-renderer.ts index 84193d7d607..800b6256e7a 100644 --- a/src/module/actor/sheet/item-summary-renderer.ts +++ b/src/module/actor/sheet/item-summary-renderer.ts @@ -84,8 +84,8 @@ export class ItemSummaryRenderer { - itemTypeOptions?: Object; + itemTypeOptions?: object; validLevels?: number[]; itemType?: SpellConsumableItemType; level?: OneToTen; diff --git a/src/module/actor/sheet/popups/manage-attack-proficiencies.ts b/src/module/actor/sheet/popups/manage-attack-proficiencies.ts index 2db4b16c8bf..d1a664c0e55 100644 --- a/src/module/actor/sheet/popups/manage-attack-proficiencies.ts +++ b/src/module/actor/sheet/popups/manage-attack-proficiencies.ts @@ -48,7 +48,7 @@ function remove(actor: CharacterPF2e, event: MouseEvent): void { const translationKey = key?.replace(/^weapon-(?:base|group)-/, "") ?? ""; const name = objectHasKey(weaponGroups, translationKey) ? game.i18n.localize(weaponGroups[translationKey]) - : baseWeapons[translationKey] ?? baseShields[translationKey] ?? translationKey; + : (baseWeapons[translationKey] ?? baseShields[translationKey] ?? translationKey); const localize = localizer("PF2E.RemoveCombatProficiency"); const message = localize("Message", { proficiency: name }); diff --git a/src/module/apps/pick-a-thing-prompt.ts b/src/module/apps/pick-a-thing-prompt.ts index 5f0f8ea9254..a7971913eb1 100644 --- a/src/module/apps/pick-a-thing-prompt.ts +++ b/src/module/apps/pick-a-thing-prompt.ts @@ -53,7 +53,7 @@ abstract class PickAThingPrompt> { // Inject any additional data for specific party implementations for (const header of htmlQueryAll($element.get(0), ".party")) { const party = game.actors.get(header.dataset.documentId ?? ""); - const sidebarButtons = party?.isOfType("party") ? party.campaign?.createSidebarButtons?.() ?? [] : []; + const sidebarButtons = party?.isOfType("party") ? (party.campaign?.createSidebarButtons?.() ?? []) : []; header.querySelector("header h3")?.after(...sidebarButtons); } } diff --git a/src/module/apps/world-clock/app.ts b/src/module/apps/world-clock/app.ts index 5d06299727f..3548d315ba7 100644 --- a/src/module/apps/world-clock/app.ts +++ b/src/module/apps/world-clock/app.ts @@ -6,7 +6,7 @@ import { TimeChangeMode, TimeOfDay } from "./time-of-day.ts"; interface WorldClockData { date: string; time: string; - options?: {}; + options?: object; user: User; sign: "+" | "-"; } diff --git a/src/module/chat-message/document.ts b/src/module/chat-message/document.ts index d784959ad84..028bcce292c 100644 --- a/src/module/chat-message/document.ts +++ b/src/module/chat-message/document.ts @@ -147,11 +147,11 @@ class ChatMessagePF2e extends ChatMessage { const itemMeleeOrRanged = strikeData?.item.isMelee ? "melee" : "ranged"; return meleeOrRanged === itemMeleeOrRanged - ? strikeData ?? null - : strikeData?.altUsages?.find((u) => { + ? (strikeData ?? null) + : (strikeData?.altUsages?.find((u) => { const altUsageMeleeOrRanged = u.item.isMelee ? "melee" : "ranged"; return meleeOrRanged === altUsageMeleeOrRanged; - }) ?? null; + }) ?? null); } async showDetails(): Promise { diff --git a/src/module/chat-message/listeners/cards.ts b/src/module/chat-message/listeners/cards.ts index 8be5fba6226..5a82f8ce50d 100644 --- a/src/module/chat-message/listeners/cards.ts +++ b/src/module/chat-message/listeners/cards.ts @@ -56,7 +56,7 @@ class ChatCards { const strikeAction = message._strike; if (strikeAction && action?.startsWith("strike-")) { const context = ( - message.rolls.some((r) => r instanceof CheckRoll) ? message.flags.pf2e.context ?? null : null + message.rolls.some((r) => r instanceof CheckRoll) ? (message.flags.pf2e.context ?? null) : null ) as CheckContextChatFlag | null; const mapIncreases = context && "mapIncreases" in context && tupleHasValue([0, 1, 2], context.mapIncreases) @@ -243,7 +243,7 @@ class ChatCards { (r): r is Rolled => r instanceof CheckRoll && r.options.action === "elemental-blast", ); const checkContext = ( - roll ? message.flags.pf2e.context ?? null : null + roll ? (message.flags.pf2e.context ?? null) : null ) as CheckContextChatFlag | null; const outcome = button.dataset.outcome === "success" ? "success" : "criticalSuccess"; const [element, damageType, meleeOrRanged, actionCost]: (string | undefined)[] = @@ -344,7 +344,7 @@ class ChatCards { const roll = message.rolls.find( (r): r is Rolled => r instanceof CheckRoll && r.options.action === "army-strike", ); - const checkContext = (roll ? message.flags.pf2e.context ?? null : null) as CheckContextChatFlag | null; + const checkContext = (roll ? (message.flags.pf2e.context ?? null) : null) as CheckContextChatFlag | null; const action = button.dataset.outcome === "success" ? "damage" : "critical"; const strike = actor.strikes[roll?.options.identifier ?? ""]; strike?.[action]({ checkContext, event }); diff --git a/src/module/collection/actors.ts b/src/module/collection/actors.ts index 430e0d3e37f..cdf73421302 100644 --- a/src/module/collection/actors.ts +++ b/src/module/collection/actors.ts @@ -7,7 +7,7 @@ export class ActorsPF2e> extends Actors { const actor = this.get(activePartyId); return actor?.isOfType("party") ? actor - : (this as Actors>).find>((a) => a.isOfType("party")) ?? null; + : ((this as Actors>).find>((a) => a.isOfType("party")) ?? null); } /** Overrwriten to omit actors in parties, which are rendered separately */ diff --git a/src/module/item/ability/helpers.ts b/src/module/item/ability/helpers.ts index 2e545f6007a..6a951075623 100644 --- a/src/module/item/ability/helpers.ts +++ b/src/module/item/ability/helpers.ts @@ -57,7 +57,7 @@ function getActionCostRollOptions(prefix: string, item: { actionCost?: ActionCos const actionCost = item.actionCost; if (!actionCost) return []; - const value = actionCost.type === "free" ? 0 : actionCost.type === "reaction" ? 1 : actionCost.value ?? 0; + const value = actionCost.type === "free" ? 0 : actionCost.type === "reaction" ? 1 : (actionCost.value ?? 0); return [`${prefix}:action:type:${actionCost.type}`, `${prefix}:action:cost:${value}`]; } diff --git a/src/module/item/abstract-effect/document.ts b/src/module/item/abstract-effect/document.ts index 681facc262b..4dcf11ec793 100644 --- a/src/module/item/abstract-effect/document.ts +++ b/src/module/item/abstract-effect/document.ts @@ -35,7 +35,7 @@ abstract class AbstractEffectPF2e(originUUID); @@ -86,7 +86,7 @@ abstract class AbstractEffectPF2e `${prefix}:${o}`) ?? [] + ? (origin.getSelfRollOptions("origin").map((o) => `${prefix}:${o}`) ?? []) : []; })(); diff --git a/src/module/item/abstract-effect/helpers.ts b/src/module/item/abstract-effect/helpers.ts index 1897785aa95..a81cf9bb58a 100644 --- a/src/module/item/abstract-effect/helpers.ts +++ b/src/module/item/abstract-effect/helpers.ts @@ -30,7 +30,7 @@ export function calculateRemainingDuration( const currentInitiative = combatant.initiative ?? 0; // A familiar won't be represented in the encounter tracker: use the master in its place - const fightyActor = effect.actor?.isOfType("familiar") ? effect.actor.master ?? effect.actor : effect.actor; + const fightyActor = effect.actor?.isOfType("familiar") ? (effect.actor.master ?? effect.actor) : effect.actor; const atTurnStart = () => startInitiative === currentInitiative && combatant.actor === (effect.origin ?? fightyActor); diff --git a/src/module/item/affliction/document.ts b/src/module/item/affliction/document.ts index a52ec4d7c32..3262f300c89 100644 --- a/src/module/item/affliction/document.ts +++ b/src/module/item/affliction/document.ts @@ -180,7 +180,7 @@ class AfflictionPF2e extend if (!data.linked) { return R.maxBy( allExisting.filter((i) => !i.appliedBy && !i.isLocked), - (c) => (c.active ? Infinity : c.value ?? 0), + (c) => (c.active ? Infinity : (c.value ?? 0)), ); } diff --git a/src/module/item/base/document.ts b/src/module/item/base/document.ts index e21395330c0..466786803cc 100644 --- a/src/module/item/base/document.ts +++ b/src/module/item/base/document.ts @@ -63,7 +63,7 @@ class ItemPF2e extends Item /** The UUID of the item from which this one was copied (or is identical to if a compendium item) **/ get sourceId(): ItemUUID | null { - return this._id && this.pack ? this.uuid : this._stats.duplicateSource ?? this._stats.compendiumSource; + return this._id && this.pack ? this.uuid : (this._stats.duplicateSource ?? this._stats.compendiumSource); } /** The recorded schema version of this item, updated after each data migration */ @@ -71,7 +71,7 @@ class ItemPF2e extends Item const legacyValue = R.isPlainObject(this._source.system.schema) ? Number(this._source.system.schema.version) || null : null; - return Number(this._source.system._migration?.version) ?? legacyValue; + return Number(this._source.system._migration?.version) || legacyValue; } get description(): string { @@ -152,7 +152,7 @@ class ItemPF2e extends Item const slug = this.slug ?? sluggify(this.name); const granterOptions = includeGranter - ? this.grantedBy?.getRollOptions("granter", { includeGranter: false }).map((o) => `${prefix}:${o}`) ?? [] + ? (this.grantedBy?.getRollOptions("granter", { includeGranter: false }).map((o) => `${prefix}:${o}`) ?? []) : []; const rollOptions = [ @@ -174,7 +174,7 @@ class ItemPF2e extends Item } // The heightened level of a spell is retrievable from its getter but not prepared level data - const level = this.isOfType("spell") ? this.rank : this.system.level?.value ?? null; + const level = this.isOfType("spell") ? this.rank : (this.system.level?.value ?? null); if (typeof level === "number") { rollOptions.push(`${prefix}:level:${level}`); } @@ -231,7 +231,7 @@ class ItemPF2e extends Item ); // Create the chat message - return options.create ?? true + return (options.create ?? true) ? ChatMessagePF2e.create(chatData, { rollMode, renderSheet: false }) : new ChatMessagePF2e(chatData, { rollMode }); } diff --git a/src/module/item/base/sheet/rule-element-form/aura.ts b/src/module/item/base/sheet/rule-element-form/aura.ts index d64e350c107..913444cd5e4 100644 --- a/src/module/item/base/sheet/rule-element-form/aura.ts +++ b/src/module/item/base/sheet/rule-element-form/aura.ts @@ -134,7 +134,7 @@ class AuraForm extends RuleElementForm { ...e, item: fromUuidSync(e.uuid), })), - borderColor: border?.color === "user-color" ? userColor : border?.color?.toString() ?? null, + borderColor: border?.color === "user-color" ? userColor : (border?.color?.toString() ?? null), highlightColor: highlight.color === "user-color" ? userColor : highlight?.color?.toString(), saveTypes: CONFIG.PF2E.saves, isImageFile: isImageFilePath(this.rule.appearance?.texture?.src), diff --git a/src/module/item/base/sheet/rule-element-form/flat-modifier.ts b/src/module/item/base/sheet/rule-element-form/flat-modifier.ts index 6cdd3025e22..53da91936ce 100644 --- a/src/module/item/base/sheet/rule-element-form/flat-modifier.ts +++ b/src/module/item/base/sheet/rule-element-form/flat-modifier.ts @@ -21,7 +21,7 @@ class FlatModifierForm extends RuleElementForm { const selector = this.rule.selector; - const newValue = Array.isArray(selector) ? selector.at(0) ?? "" : [selector ?? ""].filter((s) => !!s); + const newValue = Array.isArray(selector) ? (selector.at(0) ?? "") : [selector ?? ""].filter((s) => !!s); this.updateItem({ selector: newValue }); }); } diff --git a/src/module/item/base/sheet/rule-element-form/roll-note.ts b/src/module/item/base/sheet/rule-element-form/roll-note.ts index 227358b2515..8a1b6eab230 100644 --- a/src/module/item/base/sheet/rule-element-form/roll-note.ts +++ b/src/module/item/base/sheet/rule-element-form/roll-note.ts @@ -21,7 +21,7 @@ class RollNoteForm extends RuleElementForm { // Add events for toggle buttons htmlQuery(html, "[data-action=toggle-selector]")?.addEventListener("click", () => { const selector = this.rule.selector; - const newValue = Array.isArray(selector) ? selector.at(0) ?? "" : [selector ?? ""].filter((s) => !!s); + const newValue = Array.isArray(selector) ? (selector.at(0) ?? "") : [selector ?? ""].filter((s) => !!s); this.updateItem({ selector: newValue }); }); const optionsEl = htmlQuery(html, "tagify-tags.outcomes"); diff --git a/src/module/item/base/sheet/sheet.ts b/src/module/item/base/sheet/sheet.ts index 70a420d5e49..1362ee82e72 100644 --- a/src/module/item/base/sheet/sheet.ts +++ b/src/module/item/base/sheet/sheet.ts @@ -142,7 +142,7 @@ class ItemSheetPF2e extends ItemSheet extends ItemSheet { if (this._submitting) return; // Don't open if already submitting - const index = Number(anchor.dataset.ruleIndex ?? "NaN") ?? null; + const index = Number(anchor.dataset.ruleIndex ?? "NaN") || null; this.#editingRuleElementIndex = index; this.#rulesLastScrollTop = rulesPanel?.scrollTop ?? null; this.render(); diff --git a/src/module/item/campaign-feature/document.ts b/src/module/item/campaign-feature/document.ts index f79e8a4765a..bdd40171bf7 100644 --- a/src/module/item/campaign-feature/document.ts +++ b/src/module/item/campaign-feature/document.ts @@ -29,7 +29,7 @@ class CampaignFeaturePF2e e /** Returns the level if the feature type supports it */ get level(): number | null { - return this.behavior !== "activity" ? this.system.level?.value ?? 0 : null; + return this.behavior !== "activity" ? (this.system.level?.value ?? 0) : null; } get traits(): Set { diff --git a/src/module/item/effect/document.ts b/src/module/item/effect/document.ts index 31662fb43ff..a47191e497d 100644 --- a/src/module/item/effect/document.ts +++ b/src/module/item/effect/document.ts @@ -53,7 +53,7 @@ class EffectPF2e extends Ab badge.label = null; } else { if (badge.type === "counter") badge.loop ??= false; - badge.min = badge.labels ? 1 : badge.min ?? 1; + badge.min = badge.labels ? 1 : (badge.min ?? 1); badge.max = badge.labels?.length ?? badge.max ?? Infinity; badge.value = Math.clamp(badge.value, badge.min, badge.max); badge.label = badge.labels?.at(badge.value - 1)?.trim() || null; diff --git a/src/module/item/equipment/document.ts b/src/module/item/equipment/document.ts index a32245e1b66..612df6b3789 100644 --- a/src/module/item/equipment/document.ts +++ b/src/module/item/equipment/document.ts @@ -25,7 +25,7 @@ class EquipmentPF2e extends ? "Book" : /\bring\b/.test(this.slug ?? "") ? "Ring" - : this.system.usage.value?.replace(/^worn/, "").capitalize() ?? ""; + : (this.system.usage.value?.replace(/^worn/, "").capitalize() ?? ""); const itemType = objectHasKey(identificationConfig.UnidentifiedType, slotType) ? game.i18n.localize(identificationConfig.UnidentifiedType[slotType]) diff --git a/src/module/item/feat/sheet.ts b/src/module/item/feat/sheet.ts index c4057235392..9a38e7f589f 100644 --- a/src/module/item/feat/sheet.ts +++ b/src/module/item/feat/sheet.ts @@ -189,8 +189,8 @@ class FeatSheetPF2e extends ItemSheetPF2e { slug, label: game.i18n.localize(CONFIG.PF2E.senses[slug]), acuity: SENSES_WITH_MANDATORY_ACUITIES[slug] ?? selection?.acuity ?? "precise", - range: sensesWithUnlimitedRange.includes(slug) ? null : selection?.range ?? null, - special: slug === "darkvision" ? selection?.special ?? null : null, + range: sensesWithUnlimitedRange.includes(slug) ? null : (selection?.range ?? null), + special: slug === "darkvision" ? (selection?.special ?? null) : null, canSetAcuity: !(slug in SENSES_WITH_MANDATORY_ACUITIES), canSetRange: !sensesWithUnlimitedRange.includes(slug), selected: !!selection, diff --git a/src/module/item/melee/document.ts b/src/module/item/melee/document.ts index 0f8775d72c9..d69d370aa22 100644 --- a/src/module/item/melee/document.ts +++ b/src/module/item/melee/document.ts @@ -149,11 +149,11 @@ class MeleePF2e extends Ite override prepareSiblingData(): void { const { linkedWeapon } = this; const isUnarmed = this.traits.has("unarmed"); - this.category = isUnarmed ? "unarmed" : linkedWeapon?.category ?? null; - this.group = isUnarmed ? "brawling" : this.linkedWeapon?.group ?? null; + this.category = isUnarmed ? "unarmed" : (linkedWeapon?.category ?? null); + this.group = isUnarmed ? "brawling" : (this.linkedWeapon?.group ?? null); this.baseType = tupleHasValue(["claw", "fist", "jaws"] as const, this.slug) ? this.slug - : this.linkedWeapon?.baseType ?? null; + : (this.linkedWeapon?.baseType ?? null); } override prepareActorData(): void { diff --git a/src/module/item/physical/document.ts b/src/module/item/physical/document.ts index f9c43587b77..967fede7339 100644 --- a/src/module/item/physical/document.ts +++ b/src/module/item/physical/document.ts @@ -91,7 +91,7 @@ abstract class PhysicalItemPF2e (e === this ? [] : e.system.apex ?? [])); + const otherApexData = this.actor.inventory.contents.flatMap((e) => + e === this ? [] : (e.system.apex ?? []), + ); if (this.system.apex.selected || (this.isInvested && otherApexData.every((d) => !d.selected))) { this.system.apex.selected = true; for (const data of otherApexData) { diff --git a/src/module/item/physical/helpers.ts b/src/module/item/physical/helpers.ts index b8896fbaf60..5ce0b3f7a49 100644 --- a/src/module/item/physical/helpers.ts +++ b/src/module/item/physical/helpers.ts @@ -30,7 +30,7 @@ function computePrice(item: PhysicalItemPF2e): CoinsPF2e { const reinforcingRuneValue = !item.isOfType("shield") || item.isSpecific ? 0 - : RUNE_DATA.shield.reinforcing[item.system.runes.reinforcing]?.price ?? 0; + : (RUNE_DATA.shield.reinforcing[item.system.runes.reinforcing]?.price ?? 0); const runeValue = item.isSpecific ? 0 : runesData.reduce((sum, rune) => sum + rune.price, 0) - reinforcingRuneValue; const basePrice = materialValue > 0 || runeValue > 0 ? new CoinsPF2e() : item.price.value; diff --git a/src/module/item/shield/document.ts b/src/module/item/shield/document.ts index 909cb5b9d24..b19c6aba3b5 100644 --- a/src/module/item/shield/document.ts +++ b/src/module/item/shield/document.ts @@ -114,7 +114,7 @@ class ShieldPF2e extends Ph const adjustFromMaterialAndRune = (property: "hardness" | "maxHP", base: number): number => { const fromMaterial = this.isSpecific ? Math.max(base, materialData?.[property] ?? base) - : materialData?.[property] ?? base; + : (materialData?.[property] ?? base); const additionalFromRune = reinforcingRune ? RUNE_DATA.shield.reinforcing[reinforcingRune]?.[property] : null; diff --git a/src/module/item/spell/document.ts b/src/module/item/spell/document.ts index ecf869a43a0..d2854c2b6b3 100644 --- a/src/module/item/spell/document.ts +++ b/src/module/item/spell/document.ts @@ -80,7 +80,7 @@ class SpellPF2e extends Ite /** The id of the override overlay that constitutes this variant */ get variantId(): string | null { - return this.original ? this.appliedOverlays?.get("override") ?? null : null; + return this.original ? (this.appliedOverlays?.get("override") ?? null) : null; } /** The spell's "base" rank; that is, before heightening */ @@ -253,7 +253,7 @@ class SpellPF2e extends Ite } override get uuid(): ItemUUID { - return this.isVariant ? this.original?.uuid ?? super.uuid : super.uuid; + return this.isVariant ? (this.original?.uuid ?? super.uuid) : super.uuid; } /** Given a slot level, compute the actual level the spell will be cast at */ diff --git a/src/module/item/spell/helpers.ts b/src/module/item/spell/helpers.ts index c60f0cf4baa..04be7f8e85e 100644 --- a/src/module/item/spell/helpers.ts +++ b/src/module/item/spell/helpers.ts @@ -35,7 +35,7 @@ async function createDescriptionPrepend( : partialSaveLabel; return passive && save ? game.i18n.format("PF2E.ListPartsAnd.two", { first: passive, second: save }) - : passive ?? save; + : (passive ?? save); })(); const durationLabel = ((): string | null => { diff --git a/src/module/item/spellcasting-entry/collection.ts b/src/module/item/spellcasting-entry/collection.ts index 976468716d6..8db43ecd38a 100644 --- a/src/module/item/spellcasting-entry/collection.ts +++ b/src/module/item/spellcasting-entry/collection.ts @@ -58,7 +58,7 @@ class SpellCollection extends Collection; -interface SpellAttackRollModifier { - breakdown: string; - notes: RollNotePF2e[]; - roll: Function; - value: number; -} - interface SpellDifficultyClass { breakdown: string; notes: RollNotePF2e[]; @@ -78,7 +71,6 @@ interface SpellCollectionTypeData extends SpellCollectionTypeSource { export type { SlotKey, - SpellAttackRollModifier, SpellDifficultyClass, SpellcastingEntrySlots, SpellcastingEntrySource, diff --git a/src/module/item/spellcasting-entry/document.ts b/src/module/item/spellcasting-entry/document.ts index 27f6c028bc7..f364c7ab2b9 100644 --- a/src/module/item/spellcasting-entry/document.ts +++ b/src/module/item/spellcasting-entry/document.ts @@ -381,7 +381,7 @@ class SpellcastingEntryPF2e const defaultData = { groups: [], prepList: null }; const collectionData = - this.category === "items" ? defaultData : (await this.spells?.getSpellData({ prepList })) ?? defaultData; + this.category === "items" ? defaultData : ((await this.spells?.getSpellData({ prepList })) ?? defaultData); return fu.mergeObject(collectionData, { id: this.id, diff --git a/src/module/item/weapon/document.ts b/src/module/item/weapon/document.ts index 94b1efed90b..f38fdb7c485 100644 --- a/src/module/item/weapon/document.ts +++ b/src/module/item/weapon/document.ts @@ -460,7 +460,7 @@ class WeaponPF2e extends Ph override generateUnidentifiedName({ typeOnly = false }: { typeOnly?: boolean } = { typeOnly: false }): string { const baseWeaponTypes: Record = CONFIG.PF2E.baseWeaponTypes; const baseShieldTypes: Record = CONFIG.PF2E.baseShieldTypes; - const base = this.baseType ? baseWeaponTypes[this.baseType] ?? baseShieldTypes[this.baseType] ?? null : null; + const base = this.baseType ? (baseWeaponTypes[this.baseType] ?? baseShieldTypes[this.baseType] ?? null) : null; const group = this.group ? CONFIG.PF2E.weaponGroups[this.group] : null; const itemType = game.i18n.localize(base ?? group ?? "TYPES.Item.weapon"); @@ -480,7 +480,7 @@ class WeaponPF2e extends Ph this.toThrownUsage() ?? [], meleeUsage ?? [], // Some combination weapons have a melee usage that is throwable - recurse ? meleeUsage?.toThrownUsage() ?? [] : [], + recurse ? (meleeUsage?.toThrownUsage() ?? []) : [], ].flat(); } @@ -608,7 +608,7 @@ class WeaponPF2e extends Ph const newTraits: NPCAttackTrait[] = traits .flatMap((t) => t === "reach" - ? reachTraitToNPCReach[this.size] ?? [] + ? (reachTraitToNPCReach[this.size] ?? []) : t === "thrown" && setHasElement(THROWN_RANGES, rangeIncrement) ? (`thrown-${rangeIncrement}` as const) : t, diff --git a/src/module/migration/migrations/718-carry-type.ts b/src/module/migration/migrations/718-carry-type.ts index b129e9bef30..57ab31099ad 100644 --- a/src/module/migration/migrations/718-carry-type.ts +++ b/src/module/migration/migrations/718-carry-type.ts @@ -69,7 +69,7 @@ export class Migration718CarryType extends MigrationBase { equipped.inSlot = !!equipped.value; } else if (usage.type === "held") { if (equipped.value) equipped.carryType = "held"; - equipped.handsHeld = equipped.value ? usage.hands ?? 1 : 0; + equipped.handsHeld = equipped.value ? (usage.hands ?? 1) : 0; } equipped["-=value"] = null; diff --git a/src/module/migration/migrations/823-heritage-ancestry-slug.ts b/src/module/migration/migrations/823-heritage-ancestry-slug.ts index d07147c740b..147232de826 100644 --- a/src/module/migration/migrations/823-heritage-ancestry-slug.ts +++ b/src/module/migration/migrations/823-heritage-ancestry-slug.ts @@ -15,7 +15,7 @@ export class Migration823HeritageAncestrySlug extends MigrationBase { const ancestry = await fromUuid(source.system.ancestry.uuid); source.system.ancestry.slug = ancestry instanceof AncestryPF2e - ? ancestry.slug ?? sluggify(ancestry.name) + ? (ancestry.slug ?? sluggify(ancestry.name)) : sluggify(source.system.ancestry.name); } } diff --git a/src/module/migration/migrations/841-v11-uuid-format.ts b/src/module/migration/migrations/841-v11-uuid-format.ts index 34b4806412c..108a7c0e33b 100644 --- a/src/module/migration/migrations/841-v11-uuid-format.ts +++ b/src/module/migration/migrations/841-v11-uuid-format.ts @@ -20,7 +20,7 @@ export class Migration841V11UUIDFormat extends MigrationBase { if (explicitDocType) return explicitDocType; if ("game" in globalThis) { const { collection } = fu.parseUuid(uuid) ?? {}; - return collection instanceof CompendiumCollection ? collection.metadata.type ?? null : null; + return collection instanceof CompendiumCollection ? (collection.metadata.type ?? null) : null; } return null; })(); diff --git a/src/module/migration/migrations/848-numeric-armor-properties.ts b/src/module/migration/migrations/848-numeric-armor-properties.ts index 8d18fd39ac8..cb645c9bf95 100644 --- a/src/module/migration/migrations/848-numeric-armor-properties.ts +++ b/src/module/migration/migrations/848-numeric-armor-properties.ts @@ -20,7 +20,7 @@ export class Migration848NumericArmorProperties extends MigrationBase { for (const [oldKey, newKey] of this.#oldToNew) { const oldProperty = source.system[oldKey]; - const newProperty = R.isPlainObject(source.system[newKey]) ? 0 : source.system[newKey] ?? 0; + const newProperty = R.isPlainObject(source.system[newKey]) ? 0 : (source.system[newKey] ?? 0); if (R.isPlainObject(oldProperty) && newProperty === 0) { delete source.system[oldKey]; if (oldKey === "strength") { diff --git a/src/module/migration/migrations/859-material-type-grade.ts b/src/module/migration/migrations/859-material-type-grade.ts index 14b4370af34..95308e5e64d 100644 --- a/src/module/migration/migrations/859-material-type-grade.ts +++ b/src/module/migration/migrations/859-material-type-grade.ts @@ -26,10 +26,10 @@ export class Migration859MaterialTypeGrade extends MigrationBase { if (itemIsOfType(source, "physical") && this.#hasOldMaterialData(source)) { const { preciousMaterial, preciousMaterialGrade } = source.system; const type = this.#PRECIOUS_MATERIAL_TYPES.has(String(preciousMaterial?.value)) - ? preciousMaterial?.value ?? null + ? (preciousMaterial?.value ?? null) : null; const grade = setHasElement(PRECIOUS_MATERIAL_GRADES, preciousMaterialGrade?.value) - ? preciousMaterialGrade?.value ?? null + ? (preciousMaterialGrade?.value ?? null) : null; source.system.material = { type: type as WeaponMaterialType | null, grade }; diff --git a/src/module/migration/migrations/862-specific-magic-armor.ts b/src/module/migration/migrations/862-specific-magic-armor.ts index 9afd1fac972..7b9eddb327d 100644 --- a/src/module/migration/migrations/862-specific-magic-armor.ts +++ b/src/module/migration/migrations/862-specific-magic-armor.ts @@ -64,7 +64,7 @@ export class Migration862SpecificMagicArmor extends MigrationBase { ? (this.#resilientRuneValues.get( String(source.system.resiliencyRune?.value ?? ""), ) as ZeroToThree) || 1 - : 0 || 0, + : 0, property: [], }, }; diff --git a/src/module/migration/migrations/882-spell-data-reorganization.ts b/src/module/migration/migrations/882-spell-data-reorganization.ts index 395e4f2a0fa..b3d6c8afdec 100644 --- a/src/module/migration/migrations/882-spell-data-reorganization.ts +++ b/src/module/migration/migrations/882-spell-data-reorganization.ts @@ -134,7 +134,7 @@ export class Migration882SpellDataReorganization extends MigrationBase { value: system.duration?.value ?? "", sustained: isObject(system.sustained) ? !!system.sustained.value || system.duration?.value?.includes("sustained") || false - : system.duration?.sustained ?? false, + : (system.duration?.sustained ?? false), }; } if ("sustained" in system) system["-=sustained"] = null; diff --git a/src/module/migration/migrations/885-convert-alignment-damage.ts b/src/module/migration/migrations/885-convert-alignment-damage.ts index 19b530c7a9a..b48ceffcd8b 100644 --- a/src/module/migration/migrations/885-convert-alignment-damage.ts +++ b/src/module/migration/migrations/885-convert-alignment-damage.ts @@ -50,7 +50,7 @@ export class Migration885ConvertAlignmentDamage extends MigrationBase { override async updateActor(source: ActorSourcePF2e): Promise { const traits: { value: string[] } = - source.type === "character" ? { value: [] } : source.system.traits ?? { value: [] }; + source.type === "character" ? { value: [] } : (source.system.traits ?? { value: [] }); const iwrKeys = ["immunities", "weaknesses", "resistances"] as const; const iwr: WeaklyTypedIWR = R.pick(source.system.attributes, iwrKeys); diff --git a/src/module/migration/migrations/909-refine-consumable-data.ts b/src/module/migration/migrations/909-refine-consumable-data.ts index d9081793af1..690ded23787 100644 --- a/src/module/migration/migrations/909-refine-consumable-data.ts +++ b/src/module/migration/migrations/909-refine-consumable-data.ts @@ -23,7 +23,7 @@ export class Migration909RefineConsumableData extends MigrationBase { const autoDestroy = R.isPlainObject(system.autoDestroy) ? !!system.autoDestroy.value - : system.uses?.autoDestroy ?? true; + : (system.uses?.autoDestroy ?? true); if ("autoDestroy" in system) { system["-=autoDestroy"] = null; } diff --git a/src/module/migration/migrations/910-edicts-anathema-arrays.ts b/src/module/migration/migrations/910-edicts-anathema-arrays.ts index 610ce23a91d..dbf507b24e5 100644 --- a/src/module/migration/migrations/910-edicts-anathema-arrays.ts +++ b/src/module/migration/migrations/910-edicts-anathema-arrays.ts @@ -9,11 +9,11 @@ export class Migration910EdictsAnathemaArrays extends MigrationBase { override async updateActor(source: ActorSourcePF2e): Promise { if (source.type !== "character") return; const biography = source.system.details.biography; - biography.edicts = (typeof biography.edicts === "string" ? [biography.edicts] : biography.edicts ?? []).filter( - R.isTruthy, - ); + biography.edicts = ( + typeof biography.edicts === "string" ? [biography.edicts] : (biography.edicts ?? []) + ).filter(R.isTruthy); biography.anathema = ( - typeof biography.anathema === "string" ? [biography.anathema] : biography.anathema ?? [] + typeof biography.anathema === "string" ? [biography.anathema] : (biography.anathema ?? []) ).filter(R.isTruthy); } } diff --git a/src/module/migration/migrations/918-deity-skills.ts b/src/module/migration/migrations/918-deity-skills.ts index 7e84f467c9a..c6f4391b22e 100644 --- a/src/module/migration/migrations/918-deity-skills.ts +++ b/src/module/migration/migrations/918-deity-skills.ts @@ -14,7 +14,7 @@ export class Migration918DeitySkills extends MigrationBase { source.system.skill = ( typeof source.system.skill === "string" ? [SKILL_DICTIONARY[source.system.skill]] - : source.system.skill ?? [] + : (source.system.skill ?? []) ).filter(R.isTruthy); } } diff --git a/src/module/rules/rule-element/base.ts b/src/module/rules/rule-element/base.ts index c0ea6a5d50e..51aca7a7a18 100644 --- a/src/module/rules/rule-element/base.ts +++ b/src/module/rules/rule-element/base.ts @@ -67,7 +67,7 @@ abstract class RuleElementPF2e, string | num this.containsItems && this.choices.length > 0 && this.choices.every((c) => !UUIDUtils.isItemUUID(c.value)); const newChoice = { - value: slugsAsValues ? droppedItem.slug ?? sluggify(droppedItem.id) : droppedItem.uuid, + value: slugsAsValues ? (droppedItem.slug ?? sluggify(droppedItem.id)) : droppedItem.uuid, label: droppedItem.name, }; const choicesLength = this.choices.push(newChoice); diff --git a/src/module/rules/rule-element/choice-set/rule-element.ts b/src/module/rules/rule-element/choice-set/rule-element.ts index 10f06ed54de..1b7b009daee 100644 --- a/src/module/rules/rule-element/choice-set/rule-element.ts +++ b/src/module/rules/rule-element/choice-set/rule-element.ts @@ -319,8 +319,8 @@ class ChoiceSetRuleElement extends RuleElementPF2e { ): PickableThing[] { const data = typeof choices === "string" - ? fu.getProperty(CONFIG.PF2E, choices) ?? fu.getProperty(this.actor, choices) ?? {} - : fu.getProperty(CONFIG.PF2E, choices.config) ?? {}; + ? (fu.getProperty(CONFIG.PF2E, choices) ?? fu.getProperty(this.actor, choices) ?? {}) + : (fu.getProperty(CONFIG.PF2E, choices.config) ?? {}); const predicate = !validate || typeof choices === "string" ? null : choices.predicate; // If this is an array, optionally run predicates on all the entries @@ -501,7 +501,7 @@ class ChoiceSetRuleElement extends RuleElementPF2e { return filteredItems .filter((i) => (i.isOfType("feat") ? (existing.get(i.slug ?? sluggify(i.name)) ?? 0) < i.maxTakable : true)) .map((f) => ({ - value: choices.slugsAsValues ? f.slug ?? sluggify(f.name) : f.uuid, + value: choices.slugsAsValues ? (f.slug ?? sluggify(f.name)) : f.uuid, label: f.name, img: f.img, })); diff --git a/src/module/rules/rule-element/crit-spec.ts b/src/module/rules/rule-element/crit-spec.ts index e7d5958ab54..c65605275aa 100644 --- a/src/module/rules/rule-element/crit-spec.ts +++ b/src/module/rules/rule-element/crit-spec.ts @@ -161,7 +161,7 @@ class CritSpecRuleElement extends RuleElementPF2e { critical: true, }); const bonusValue = weapon.isOfType("melee") - ? weapon.linkedWeapon?.system.runes.potency ?? 0 + ? (weapon.linkedWeapon?.system.runes.potency ?? 0) : weapon.flags.pf2e.attackItemBonus; const bonus = bonusValue > 0 diff --git a/src/module/rules/rule-element/item-alteration/alteration.ts b/src/module/rules/rule-element/item-alteration/alteration.ts index 00c512d272d..375ce25bbc0 100644 --- a/src/module/rules/rule-element/item-alteration/alteration.ts +++ b/src/module/rules/rule-element/item-alteration/alteration.ts @@ -136,11 +136,11 @@ class ItemAlteration extends foundry.abstract.DataModel { this.battleForm ??= false; this.options ??= []; this.graspingAppendage = ["fist", "claw"].includes(this.baseType ?? "") - ? this.graspingAppendage ?? true + ? (this.graspingAppendage ?? true) : this.category === "unarmed" || this.traits.includes("unarmed") ? !!this.graspingAppendage : false; @@ -250,7 +250,7 @@ class StrikeRuleElement extends RuleElementPF2e { flags: { pf2e: { battleForm: this.battleForm, - fixedAttack: actorIsNPC ? this.attackModifier ?? null : null, + fixedAttack: actorIsNPC ? (this.attackModifier ?? null) : null, }, }, system: { @@ -261,7 +261,7 @@ class StrikeRuleElement extends RuleElementPF2e { baseItem: this.baseType, attribute, bonus: { - value: actorIsNPC ? this.attackModifier ?? 0 : 0, + value: actorIsNPC ? (this.attackModifier ?? 0) : 0, }, damage: { ...this.damage.base, @@ -280,7 +280,7 @@ class StrikeRuleElement extends RuleElementPF2e { }, }, options: { value: this.options }, - runes: this.category === "unarmed" ? unarmedRunes ?? {} : {}, + runes: this.category === "unarmed" ? (unarmedRunes ?? {}) : {}, usage: { value: "held-in-one-hand" }, equipped: { carryType: "held", diff --git a/src/module/scene/measured-template-document.ts b/src/module/scene/measured-template-document.ts index df8e766d6b4..9fcfd4c440d 100644 --- a/src/module/scene/measured-template-document.ts +++ b/src/module/scene/measured-template-document.ts @@ -14,7 +14,7 @@ class MeasuredTemplateDocumentPF2e< const uuid = this.flags.pf2e?.origin?.actor; if (!uuid) return null; const document = fromUuidSync(uuid); - return document instanceof ActorPF2e ? document : this.item?.actor ?? null; + return document instanceof ActorPF2e ? document : (this.item?.actor ?? null); } get item(): ItemPF2e | null { diff --git a/src/module/scene/token-document/document.ts b/src/module/scene/token-document/document.ts index 33a7b6bdfca..ffd673cf91a 100644 --- a/src/module/scene/token-document/document.ts +++ b/src/module/scene/token-document/document.ts @@ -233,7 +233,7 @@ class TokenDocumentPF2e ext const autoscaleDefault = game.pf2e.settings.tokens.autoscale; // Autoscaling is a secondary feature of linking to actor size - const autoscale = linkToActorSize ? this.flags.pf2e.autoscale ?? autoscaleDefault : false; + const autoscale = linkToActorSize ? (this.flags.pf2e.autoscale ?? autoscaleDefault) : false; this.flags.pf2e = fu.mergeObject(this.flags.pf2e ?? {}, { linkToActorSize, autoscale }); // Token dimensions from actor size @@ -441,10 +441,10 @@ class TokenDocumentPF2e ext if (this.scene?.isView && Object.keys(tokenChanges).length > 0) { const tokenOverrides = this.actor?.synthetics.tokenOverrides ?? {}; - const animation = tokenChanges.texture?.src ? tokenOverrides.animation ?? this.#lastAnimation ?? {} : {}; + const animation = tokenChanges.texture?.src ? (tokenOverrides.animation ?? this.#lastAnimation ?? {}) : {}; this.#lastAnimation = R.isDeepEqual(animation, this.#lastAnimation ?? {}) ? null - : tokenOverrides.animation ?? null; + : (tokenOverrides.animation ?? null); this.object?._onUpdate(tokenChanges, { broadcast: false, updates: [], animation }, game.user.id); } diff --git a/src/module/system/action-macros/helpers.ts b/src/module/system/action-macros/helpers.ts index e73a060b7cb..743e8919cfb 100644 --- a/src/module/system/action-macros/helpers.ts +++ b/src/module/system/action-macros/helpers.ts @@ -216,7 +216,7 @@ class ActionMacroHelpers { const distance = ((): number | null => { const reach = selfActor.isOfType("creature") && weapon?.isOfType("weapon") - ? selfActor.getReach({ action: "attack", weapon }) ?? null + ? (selfActor.getReach({ action: "attack", weapon }) ?? null) : null; return selfToken?.object && targetData?.token?.object ? selfToken.object.distanceTo(targetData.token.object, { reach }) @@ -366,7 +366,7 @@ class ActionMacroHelpers { fully = false, }: ResolveCheckDCParams): CheckDC | CheckDCReference | null { if (typeof unresolvedDC === "string") { - return fully ? target?.getStatistic(unresolvedDC)?.dc ?? null : { slug: unresolvedDC }; + return fully ? (target?.getStatistic(unresolvedDC)?.dc ?? null) : { slug: unresolvedDC }; } if (typeof unresolvedDC === "function") return unresolvedDC(target); diff --git a/src/module/system/check/check.ts b/src/module/system/check/check.ts index 9f06354bf1f..d457691bd78 100644 --- a/src/module/system/check/check.ts +++ b/src/module/system/check/check.ts @@ -245,8 +245,8 @@ class CheckPF2e { const item = context.item ?? null; const targeting = !!context.origin?.self; - const self = targeting ? context.origin ?? null : context.target ?? null; - const opposer = targeting ? context.target ?? null : context.origin ?? null; + const self = targeting ? (context.origin ?? null) : (context.target ?? null); + const opposer = targeting ? (context.target ?? null) : (context.origin ?? null); const flavor = await (async (): Promise => { const result = await this.#createResultFlavor({ degree, self, opposer, targeting }); @@ -318,7 +318,7 @@ class CheckPF2e { if (callback) { const msg = message instanceof ChatMessagePF2e ? message : new ChatMessagePF2e(message); - const evt = !!event && event instanceof Event ? event : event?.originalEvent ?? null; + const evt = !!event && event instanceof Event ? event : (event?.originalEvent ?? null); await callback(roll, context.outcome, msg, evt); } @@ -643,7 +643,7 @@ class CheckPF2e { const dc = degree.dc; const needsDCParam = !!dc.label && Number.isInteger(dc.value) && !dc.label.includes("{dc}"); const customLabel = - needsDCParam && dc.label ? `${game.i18n.localize(dc.label)}: {dc}` : dc.label ?? null; + needsDCParam && dc.label ? `${game.i18n.localize(dc.label)}: {dc}` : (dc.label ?? null); const opposingActor = await (async (): Promise => { if (!opposer?.actor) return null; @@ -688,7 +688,7 @@ class CheckPF2e { const dcSlug = ((): string | null => { const fromParams = dc.slug ?? (dc.statistic instanceof StatisticDifficultyClass ? dc.statistic.parent.slug : null); - return fromParams === "ac" ? "armor" : fromParams?.replace(/-dc$/, "") ?? null; + return fromParams === "ac" ? "armor" : (fromParams?.replace(/-dc$/, "") ?? null); })(); const dcType = game.i18n.localize( dc.label?.trim() || @@ -705,7 +705,7 @@ class CheckPF2e { const preadjustedDC = circumstances.length > 0 && dc.statistic ? dc.value - circumstances.reduce((total, c) => total + c.modifier, 0) - : dc.value ?? null; + : (dc.value ?? null); const visible = opposingActor?.hasPlayerOwner || dc.visible || game.pf2e.settings.metagame.dcs; @@ -715,7 +715,7 @@ class CheckPF2e { ? targeting ? checkDCs.Label.WithTarget : checkDCs.Label.WithOrigin - : customLabel ?? checkDCs.Label.NoTarget, + : (customLabel ?? checkDCs.Label.NoTarget), ); const markup = game.i18n.format(labelKey, { dcType, dc: dc.value, opposer: opposerData?.name ?? null }); diff --git a/src/module/system/damage/damage.ts b/src/module/system/damage/damage.ts index a762be2554e..df312cda297 100644 --- a/src/module/system/damage/damage.ts +++ b/src/module/system/damage/damage.ts @@ -16,7 +16,7 @@ export class DamagePF2e { static async roll( data: DamageTemplate, context: DamageDamageContext, - callback?: Function, + callback?: (roll: Rolled) => void | Promise, ): Promise | null> { const outcome = context.outcome ?? null; context.createMessage ??= true; diff --git a/src/module/system/damage/formula.ts b/src/module/system/damage/formula.ts index 0ed8490b170..8e4bb3b9f8c 100644 --- a/src/module/system/damage/formula.ts +++ b/src/module/system/damage/formula.ts @@ -127,8 +127,8 @@ function createDamageFormula( // must not be applied to persistent damage--nor vice versa const matchingDamage = modifier.kind === "modifier" - ? bonusableDamage.find((b) => b.damageType === (modifier.damageType ?? b.damageType)) ?? - damage.base.at(0) + ? (bonusableDamage.find((b) => b.damageType === (modifier.damageType ?? b.damageType)) ?? + damage.base.at(0)) : bonusableDamage.find( (b) => b.damageType === (modifier.damageType ?? b.damageType) && b.category === modifier.category, ); diff --git a/src/module/system/damage/helpers.ts b/src/module/system/damage/helpers.ts index b9e02890aa1..a8b19524b79 100644 --- a/src/module/system/damage/helpers.ts +++ b/src/module/system/damage/helpers.ts @@ -401,7 +401,7 @@ function getDamageDiceOverrideLabel(d: DamageDicePF2e | RawDamageDice): string { ? game.i18n.format("PF2E.Roll.Dialog.Damage.Dice", { dice: d.override.diceNumber, }) - : d.override.dieSize ?? "", + : (d.override.dieSize ?? ""), }) : null, ].filter(R.isTruthy); diff --git a/src/module/system/damage/iwr.ts b/src/module/system/damage/iwr.ts index 7d9f34ae745..3b2a0292d62 100644 --- a/src/module/system/damage/iwr.ts +++ b/src/module/system/damage/iwr.ts @@ -139,7 +139,7 @@ function applyIWR(actor: ActorPF2e, roll: Rolled, rollOptions: Set w.test(formalDescription)); const splashDamage = instance.componentTotal("splash"); - const splashWeakness = splashDamage ? weaknesses.find((w) => w.type === "splash-damage") ?? null : null; + const splashWeakness = splashDamage ? (weaknesses.find((w) => w.type === "splash-damage") ?? null) : null; const precisionWeakness = precisionDamage > 0 ? weaknesses.find((r) => r.type === "precision") : null; const highestWeakness = [...mainWeaknesses, precisionWeakness, splashWeakness] .filter(R.isTruthy) diff --git a/src/module/system/damage/roll.ts b/src/module/system/damage/roll.ts index f1567e13e74..78914c503ec 100644 --- a/src/module/system/damage/roll.ts +++ b/src/module/system/damage/roll.ts @@ -571,7 +571,7 @@ class DamageInstance extends AbstractDamageRoll { // Get the total with all damage-doubling removed const undoubledTotal = - head instanceof ArithmeticExpression || head instanceof Grouping ? head.critImmuneTotal ?? 0 : this.total; + head instanceof ArithmeticExpression || head instanceof Grouping ? (head.critImmuneTotal ?? 0) : this.total; if (this.critRule === "double-damage") { return undoubledTotal; @@ -619,7 +619,7 @@ class DamageInstance extends AbstractDamageRoll { Promise.resolve().then(() => { // Peggy calls `eval` by default, which makes build tools cranky: instead use the generated source and pass it to a // function constructor. - const Evaluator = function () {}.constructor as new (...args: unknown[]) => Function; + const Evaluator = function () {}.constructor as new (...args: unknown[]) => (obj: object) => void; new Evaluator("AbstractDamageRoll", ROLL_PARSER).call(this, AbstractDamageRoll); }); diff --git a/src/module/system/damage/weapon.ts b/src/module/system/damage/weapon.ts index 517684a6d1f..45eea225b02 100644 --- a/src/module/system/damage/weapon.ts +++ b/src/module/system/damage/weapon.ts @@ -245,7 +245,7 @@ class WeaponDamagePF2e { null, ); - return standard ? alternate ?? standard : []; + return standard ? (alternate ?? standard) : []; })(); if (critSpecEffect.length > 0) options.add("critical-specialization"); @@ -313,7 +313,7 @@ class WeaponDamagePF2e { // Get striking dice: the number of damage dice from a striking rune (or ABP devastating strikes) const strikingDice = weapon.isOfType("weapon") ? weapon.system.damage.dice - weapon._source.system.damage.dice - : strikingSynthetic?.bonus ?? 0; + : (strikingSynthetic?.bonus ?? 0); // Deadly trait const traitLabels: Record = CONFIG.PF2E.weaponTraits; diff --git a/src/module/system/settings/homebrew/menu.ts b/src/module/system/settings/homebrew/menu.ts index 5d35ffa41fb..4afb7e9b0df 100644 --- a/src/module/system/settings/homebrew/menu.ts +++ b/src/module/system/settings/homebrew/menu.ts @@ -6,7 +6,7 @@ import { MigrationRunner } from "@module/migration/runner/index.ts"; import { LanguageSelector } from "@system/tag-selector/languages.ts"; import { ErrorPF2e, htmlClosest, htmlQuery, htmlQueryAll, localizer, objectHasKey, sluggify } from "@util"; import Tagify from "@yaireo/tagify"; -import "@yaireo/tagify/src/tagify.scss"; +import "@yaireo/tagify/dist/tagify.css"; import * as R from "remeda"; import { PartialSettingsData, SettingsMenuPF2e } from "../menu.ts"; import { DamageTypeManager } from "./damage.ts"; diff --git a/src/module/system/statistic/armor-class.ts b/src/module/system/statistic/armor-class.ts index 07631fabde0..8403ddb28a0 100644 --- a/src/module/system/statistic/armor-class.ts +++ b/src/module/system/statistic/armor-class.ts @@ -18,7 +18,7 @@ class ArmorStatistic extends Statistic = {}) { data.rank ??= 1; - const attribute = actor.isOfType("creature") ? data.attribute ?? "dex" : null; + const attribute = actor.isOfType("creature") ? (data.attribute ?? "dex") : null; const domains = attribute ? ["all", `${attribute}-based`] : ["all"]; const fullData: ArmorStatisticData = { ...data, diff --git a/src/module/system/statistic/statistic.ts b/src/module/system/statistic/statistic.ts index 8b14e3d52f1..b83a3b65220 100644 --- a/src/module/system/statistic/statistic.ts +++ b/src/module/system/statistic/statistic.ts @@ -67,8 +67,8 @@ class Statistic extends BaseStatistic m.type === "ability" && m.ability === data.attribute) ?? - createAttributeModifier({ actor, attribute: data.attribute, domains }) + ? (data.modifiers.find((m) => m.type === "ability" && m.ability === data.attribute) ?? + createAttributeModifier({ actor, attribute: data.attribute, domains })) : null; if (data.attribute) domains.push(`${data.attribute}-based`); @@ -400,7 +400,7 @@ class StatisticCheck { async roll(args: StatisticRollParameters = {}): Promise | null> { // Work with a `CheckDC` object - args.dc = typeof args.dc === "number" ? { value: Math.trunc(args.dc) || 0 } : args.dc ?? null; + args.dc = typeof args.dc === "number" ? { value: Math.trunc(args.dc) || 0 } : (args.dc ?? null); // Allow use of events for modules and macros but don't allow it for internal system use const { rollMode, skipDialog } = (() => { @@ -423,9 +423,9 @@ class StatisticCheck { const originToken = selfIsTarget ? args.origin?.getActiveTokens(true, true).shift() : selfToken; const targetToken = selfIsTarget ? selfToken - : args.target?.getActiveTokens(true, true)?.find((t) => t.actor?.isOfType("army", "creature", "hazard")) ?? + : (args.target?.getActiveTokens(true, true)?.find((t) => t.actor?.isOfType("army", "creature", "hazard")) ?? game.user.targets.find((t) => !!t.actor?.isOfType("army", "creature", "hazard"))?.document ?? - null; + null); const selfIsTargeting = !selfIsTarget && @@ -495,7 +495,7 @@ class StatisticCheck { const originActor = rollContext.origin?.actor ?? self; const targetActor = rollContext.target?.actor ?? null; const selfActor = (selfIsTarget ? targetActor : originActor) ?? self; - const dc = typeof args.dc?.value === "number" ? args.dc : rollContext?.dc ?? null; + const dc = typeof args.dc?.value === "number" ? args.dc : (rollContext?.dc ?? null); // Extract modifiers, unless this is a flat check const extraModifiers = @@ -531,7 +531,7 @@ class StatisticCheck { ? 2 * item.rank : item?.isOfType("physical") ? item.level - : originActor?.level ?? selfActor.level; + : (originActor?.level ?? selfActor.level); const amount = this.type === "saving-throw" && selfActor.level > effectLevel diff --git a/src/module/system/text-editor.ts b/src/module/system/text-editor.ts index 755f22dcf6d..670bfa3666b 100644 --- a/src/module/system/text-editor.ts +++ b/src/module/system/text-editor.ts @@ -195,7 +195,7 @@ class TextEditorPF2e extends TextEditor { subtitle, title: item.name, }) - : anchor.dataset.name ?? item?.name ?? ""; + : (anchor.dataset.name ?? item?.name ?? ""); args.template.name = game.i18n.localize(name); await DamagePF2e.roll(args.template, args.context); @@ -774,7 +774,7 @@ class TextEditorPF2e extends TextEditor { const label = "shortLabel" in rawParams // A "short label" will omit all damage types and categories ? roll.instances.map((i) => i.head.expression).join(" + ") - : args.inlineLabel ?? formula; + : (args.inlineLabel ?? formula); const labelEl = createHTMLElement("span", { children: [label] }); const element = createHTMLElement("a", { diff --git a/src/scripts/dice.ts b/src/scripts/dice.ts index da6a80b3af8..ce36ad29d2c 100644 --- a/src/scripts/dice.ts +++ b/src/scripts/dice.ts @@ -52,8 +52,8 @@ class DicePF2e { template?: string; title: string; speaker: foundry.documents.ChatSpeakerData; - flavor?: Function; - onClose?: Function; + flavor?: (parts: (string | number | string[])[], data: Record) => string; + onClose?: (html: HTMLElement | JQuery, parts: (string | number)[], data: Record) => void; dialogOptions?: Partial; rollMode?: RollMode; rollType?: string; diff --git a/src/scripts/macros/travel/travel-speed-sheet.ts b/src/scripts/macros/travel/travel-speed-sheet.ts index 5948dd8b662..fdff642f476 100644 --- a/src/scripts/macros/travel/travel-speed-sheet.ts +++ b/src/scripts/macros/travel/travel-speed-sheet.ts @@ -107,7 +107,7 @@ interface TravelSpeedSheetOptions extends FormApplicationOptions { actors: CharacterPF2e[]; } -class TravelSpeedSheet extends FormApplication<{}, TravelSpeedSheetOptions> { +class TravelSpeedSheet extends FormApplication { private formData?: TravelFormData = undefined; static override get defaultOptions(): FormApplicationOptions { diff --git a/src/scripts/set-game-pf2e.ts b/src/scripts/set-game-pf2e.ts index fcf6f580786..7852daaa59b 100644 --- a/src/scripts/set-game-pf2e.ts +++ b/src/scripts/set-game-pf2e.ts @@ -41,6 +41,7 @@ import { sluggify } from "@util"; /** Expose public game.pf2e interface */ export const SetGamePF2e = { onInit: (): void => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type type ActionCollection = Record & Collection; const actions = new Collection( SystemActions.map((action) => [action.slug, action]), diff --git a/src/scripts/system/dragstart-handler.ts b/src/scripts/system/dragstart-handler.ts index fcc1c58dcbe..f86e9fb65e0 100644 --- a/src/scripts/system/dragstart-handler.ts +++ b/src/scripts/system/dragstart-handler.ts @@ -56,7 +56,7 @@ export function extendDragData(): void { roll: roll ? { total: roll.total, - degreeOfSuccess: roll instanceof CheckRoll ? roll.degreeOfSuccess ?? null : null, + degreeOfSuccess: roll instanceof CheckRoll ? (roll.degreeOfSuccess ?? null) : null, } : null, }; diff --git a/src/scripts/ui/inline-roll-links.ts b/src/scripts/ui/inline-roll-links.ts index 9692636aa9d..69312b71a75 100644 --- a/src/scripts/ui/inline-roll-links.ts +++ b/src/scripts/ui/inline-roll-links.ts @@ -235,7 +235,7 @@ export class InlineRollLinks { ? rollingActor : targetOwner ? parentActor - : game.user.targets.first()?.actor ?? null; + : (game.user.targets.first()?.actor ?? null); const opposingActor = rollerRole === "target" ? parentActor : targetActor; const originActor = rollerRole === "origin" ? rollingActor : parentActor; @@ -373,7 +373,7 @@ export class InlineRollLinks { const messageId = foundryDoc instanceof ChatMessagePF2e ? foundryDoc.id - : htmlClosest(link, "[data-message-id]")?.dataset.messageId ?? null; + : (htmlClosest(link, "[data-message-id]")?.dataset.messageId ?? null); if (messageId) { flags.pf2e.messageId = messageId; } @@ -468,7 +468,7 @@ function resolveDocument(html: HTMLElement): ClientDocument | null { // Return the chat message if there is one const messageId = htmlClosest(html, "[data-message-id]")?.dataset.messageId; - return messageId ? game.messages.get(messageId) ?? null : null; + return messageId ? (game.messages.get(messageId) ?? null) : null; } /** Retrieve an actor via a passed document. Handles item owners and chat message actors. */ diff --git a/src/styles/_colors.scss b/src/styles/_colors.scss index 4eafced9de6..a5c6e3f5e7e 100644 --- a/src/styles/_colors.scss +++ b/src/styles/_colors.scss @@ -16,7 +16,7 @@ $tertiary-color: #e9d7a1; /* compliments the primary color, usually used in comb $alt-color: #786452 !default; /* for all other uses */ $alt-dark: #443730; $light-background-color: #f8f4f1; -$less-light-background-color: darken($light-background-color, 10); +$less-light-background-color: color.adjust($light-background-color, $lightness: -10%); $sub-color: #605856; /* Text */ @@ -43,23 +43,23 @@ $adjusted-lower: #cc3311; :root { /* Global */ --color-pf-primary: #{$primary-color}; - --color-pf-primary-dark: #{darken($primary-color, 5)}; - --color-pf-primary-darker: #{darken($primary-color, 10)}; - --color-pf-primary-light: #{lighten($primary-color, 5)}; - --color-pf-primary-lighter: #{lighten($primary-color, 10)}; + --color-pf-primary-dark: #{color.adjust($primary-color, $lightness: -5%)}; + --color-pf-primary-darker: #{color.adjust($primary-color, $lightness: -10%)}; + --color-pf-primary-light: #{color.adjust($primary-color, $lightness: 5%)}; + --color-pf-primary-lighter: #{color.adjust($primary-color, $lightness: 10%)}; --color-pf-alternate: #{$alt-color}; --color-pf-alternate-dark: #{$alt-dark}; - --color-pf-alternate-darker: #{darken($alt-dark, 10)}; - --color-pf-alternate-light: #{lighten($alt-color, 10)}; + --color-pf-alternate-darker: #{color.adjust($alt-dark, $lightness: -10%)}; + --color-pf-alternate-light: #{color.adjust($alt-color, $lightness: 10%)}; --color-pf-secondary: #{$secondary-color}; - --color-pf-secondary-dark: #{darken($secondary-color, 10)}; - --color-pf-secondary-light: #{lighten($secondary-color, 10)}; - --color-pf-secondary-lighter: #{lighten($secondary-color, 20)}; + --color-pf-secondary-dark: #{color.adjust($secondary-color, $lightness: -10%)}; + --color-pf-secondary-light: #{color.adjust($secondary-color, $lightness: 10%)}; + --color-pf-secondary-lighter: #{color.adjust($secondary-color, $lightness: 20%)}; --color-pf-tertiary: #{$tertiary-color}; - --color-pf-tertiary-dark: #{darken($tertiary-color, 10)}; - --color-pf-tertiary-darker: #{darken($tertiary-color, 20)}; - --color-pf-tertiary-darkest: #{darken($tertiary-color, 51)}; - --color-pf-tertiary-light: #{lighten($tertiary-color, 10)}; + --color-pf-tertiary-dark: #{color.adjust($tertiary-color, $lightness: -10%)}; + --color-pf-tertiary-darker: #{color.adjust($tertiary-color, $lightness: -20%)}; + --color-pf-tertiary-darkest: #{color.adjust($tertiary-color, $lightness: -51%)}; + --color-pf-tertiary-light: #{color.adjust($tertiary-color, $lightness: 10%)}; --primary: var(--color-pf-primary); --secondary: var(--color-pf-secondary); --tertiary: var(--color-pf-tertiary); @@ -73,7 +73,7 @@ $adjusted-lower: #cc3311; // Inline links and user visibility --inline-link-bg: #ddd; - --inline-repost-bg: #{lighten(#ddd, 5%)}; + --inline-repost-bg: #{color.adjust(#ddd, $lightness: 5%)}; --visibility-gm-bg: #e8e8ef; --visibility-owner-bg: #ddebe1; --blind-roll: #f5eaf5; @@ -143,25 +143,25 @@ $adjusted-lower: #cc3311; $damage-vitality: #ffffe0; $damage-void: #00001f; $darker: -12.5%; - $transparenter: 0.875; - - --color-bg-acid: #{transparentize($damage-acid, $transparenter)}; - --color-bg-bleed: #{transparentize($damage-bleed, $transparenter)}; - --color-bg-chaotic: #{transparentize($damage-chaotic, $transparenter)}; - --color-bg-cold: #{transparentize($damage-cold, $transparenter)}; - --color-bg-electricity: #{transparentize($damage-electricity, $transparenter)}; - --color-bg-evil: #{transparentize($damage-evil, $transparenter)}; - --color-bg-fire: #{transparentize($damage-fire, $transparenter)}; - --color-bg-force: #{transparentize($damage-force, $transparenter)}; - --color-bg-good: #{transparentize($damage-good, $transparenter)}; - --color-bg-lawful: #{transparentize($damage-lawful, $transparenter)}; - --color-bg-mental: #{transparentize($damage-mental, $transparenter)}; - --color-bg-physical: #{transparentize($damage-physical, $transparenter)}; - --color-bg-poison: #{transparentize($damage-poison, $transparenter)}; - --color-bg-sonic: #{transparentize($damage-sonic, $transparenter)}; - --color-bg-spirit: #{transparentize($damage-spirit, $transparenter)}; - --color-bg-vitality: #{transparentize($damage-vitality, $transparenter)}; - --color-bg-void: #{transparentize($damage-void, $transparenter)}; + $transparenter: -87.5%; + + --color-bg-acid: #{color.scale($damage-acid, $alpha: $transparenter)}; + --color-bg-bleed: #{color.scale($damage-bleed, $alpha: $transparenter)}; + --color-bg-chaotic: #{color.scale($damage-chaotic, $alpha: $transparenter)}; + --color-bg-cold: #{color.scale($damage-cold, $alpha: $transparenter)}; + --color-bg-electricity: #{color.scale($damage-electricity, $alpha: $transparenter)}; + --color-bg-evil: #{color.scale($damage-evil, $alpha: $transparenter)}; + --color-bg-fire: #{color.scale($damage-fire, $alpha: $transparenter)}; + --color-bg-force: #{color.scale($damage-force, $alpha: $transparenter)}; + --color-bg-good: #{color.scale($damage-good, $alpha: $transparenter)}; + --color-bg-lawful: #{color.scale($damage-lawful, $alpha: $transparenter)}; + --color-bg-mental: #{color.scale($damage-mental, $alpha: $transparenter)}; + --color-bg-physical: #{color.scale($damage-physical, $alpha: $transparenter)}; + --color-bg-poison: #{color.scale($damage-poison, $alpha: $transparenter)}; + --color-bg-sonic: #{color.scale($damage-sonic, $alpha: $transparenter)}; + --color-bg-spirit: #{color.scale($damage-spirit, $alpha: $transparenter)}; + --color-bg-vitality: #{color.scale($damage-vitality, $alpha: $transparenter)}; + --color-bg-void: #{color.scale($damage-void, $alpha: $transparenter)}; --color-border-acid: #{$damage-acid}; --color-border-bleed: #{$damage-bleed}; diff --git a/src/styles/actor/_index.scss b/src/styles/actor/_index.scss index e11f670bd02..739606d9735 100644 --- a/src/styles/actor/_index.scss +++ b/src/styles/actor/_index.scss @@ -2,10 +2,10 @@ @import "iwr-editor"; .actor.sheet section.window-content { - @import "../reset"; font-family: var(--sans-serif); overflow: hidden; padding: 0; + @import "../reset"; h1, h2, diff --git a/src/styles/actor/_spell-collection.scss b/src/styles/actor/_spell-collection.scss index 92ae3fed9cb..ef5f3268c8d 100644 --- a/src/styles/actor/_spell-collection.scss +++ b/src/styles/actor/_spell-collection.scss @@ -1,3 +1,5 @@ +@use "sass:color"; + ol.spell-list { border-bottom: 1px solid var(--color-border-light-2); display: flex; @@ -213,7 +215,7 @@ ol.spell-list { .item-summary { background-color: rgba($light-background-color, 0.5); border-bottom: 1px solid var(--sub); - border-top: 1px solid lighten($sub-color, 30); + border-top: 1px solid color.adjust($sub-color, $lightness: -30%); display: block; grid-column: span 5; padding: var(--space-4) 0 var(--space-8); diff --git a/src/styles/actor/_spell-preparation.scss b/src/styles/actor/_spell-preparation.scss index 00eac4ece87..ddb7ba60001 100644 --- a/src/styles/actor/_spell-preparation.scss +++ b/src/styles/actor/_spell-preparation.scss @@ -1,3 +1,5 @@ +@use "sass:color"; + // Spellcasting Preparation Sheet Styling .spellcasting-entry.preparation > .window-content { @import "../reset"; @@ -195,7 +197,7 @@ .item-summary { background-color: rgba($light-background-color, 0.5); border-bottom: 1px solid var(--sub); - border-top: 1px solid lighten($sub-color, 30); + border-top: 1px solid color.adjust($sub-color, $lightness: 30%); display: block; grid-column: span 5; padding: var(--space-4) 0 var(--space-8); diff --git a/src/styles/actor/character/_character.scss b/src/styles/actor/character/_character.scss index b4dec8f0c6f..5dd48b324a1 100644 --- a/src/styles/actor/character/_character.scss +++ b/src/styles/actor/character/_character.scss @@ -1,9 +1,11 @@ +@use "sass:color"; + &.character { gap: 1rem; select { background-color: var(--color-pf-alternate); - border: 1px solid darken($alt-color, 8); + border: 1px solid color.adjust($alt-color, $lightness: -8%); width: calc(100% - var(--space-6)); &:disabled { diff --git a/src/styles/actor/character/_crafting.scss b/src/styles/actor/character/_crafting.scss index 96dc64d24cd..e822987675c 100644 --- a/src/styles/actor/character/_crafting.scss +++ b/src/styles/actor/character/_crafting.scss @@ -1,3 +1,5 @@ +@use "sass:color"; + &.crafting { .crafting-options { @include frame-elegant; @@ -202,7 +204,7 @@ grid-column: 1 / 6; padding: var(--space-8); border-bottom: 1px solid var(--sub); - border-top: 1px solid lighten($sub-color, 30); + border-top: 1px solid color.adjust($sub-color, $lightness: 30%); background-color: rgba($light-background-color, 0.5); p { diff --git a/src/styles/actor/character/_effects.scss b/src/styles/actor/character/_effects.scss index a48fd8d231a..a7d413dc57e 100644 --- a/src/styles/actor/character/_effects.scss +++ b/src/styles/actor/character/_effects.scss @@ -1,3 +1,4 @@ +@use "sass:color"; @use "../../mixins/effects-list"; &.effects { @@ -8,8 +9,8 @@ padding-bottom: 1em; .item { - border-top: 1px solid lighten($-alt-color, 40); - $border-color: lighten($-alt-color, 40); + border-top: 1px solid color.adjust($-alt-color, $lightness: 40%); + $border-color: color.adjust($-alt-color, $lightness: 40%); border: solid transparent; border-width: 0 0 1px; border-image: linear-gradient(90deg, #f1edea, $border-color) 1 repeat; diff --git a/src/styles/actor/character/_proficiencies.scss b/src/styles/actor/character/_proficiencies.scss index 162db621afd..15007afdf9c 100644 --- a/src/styles/actor/character/_proficiencies.scss +++ b/src/styles/actor/character/_proficiencies.scss @@ -35,14 +35,14 @@ padding: 0 var(--space-8) 0 var(--space-4); a.d20 { - &:hover { - @include die-spin; - } - filter: drop-shadow(0 0 1px var(--color-shadow-dark)) drop-shadow(0 0 3px var(--color-text-dark-4)) drop-shadow(0 0 12px var(--color-text-light-3)); padding: var(--space-4); + &:hover { + @include die-spin; + } + path { fill: var(--color-text-light-1); } diff --git a/src/styles/actor/character/_sidebar.scss b/src/styles/actor/character/_sidebar.scss index 78a9218e4e3..fdb167d7351 100644 --- a/src/styles/actor/character/_sidebar.scss +++ b/src/styles/actor/character/_sidebar.scss @@ -1,3 +1,5 @@ +@use "sass:color"; + aside { background-image: url("/assets/sheet/red_sidebar_top.webp"), url("/assets/sheet/red_sidebar_bottom.webp"); background-repeat: no-repeat; @@ -243,9 +245,9 @@ aside { background-color: var(--color-pf-primary); background-image: linear-gradient( 90deg, - darken($primary-color, 5) 0%, - lighten($primary-color, 8) 50%, - darken($primary-color, 5) 100% + color.adjust($primary-color, $lightness: -5%) 0%, + color.adjust($primary-color, $lightness: 8%) 50%, + color.adjust($primary-color, $lightness: -5%) 100% ); border: 1px solid var(--sidebar-title); border-radius: 0 0 4px 4px; diff --git a/src/styles/actor/tabs/_actions.scss b/src/styles/actor/tabs/_actions.scss index bb05cc9f511..0532e2d4191 100644 --- a/src/styles/actor/tabs/_actions.scss +++ b/src/styles/actor/tabs/_actions.scss @@ -1,3 +1,5 @@ +@use "sass:color"; + .actions-container { padding: var(--space-8) var(--space-4) 2rem; @@ -34,7 +36,7 @@ ol.actions-list { &.action, &.strike { - $border-color: lighten($alt-color, 40); + $border-color: color.adjust($alt-color, $lightness: 40%); border: solid transparent; border-image: linear-gradient(90deg, #f1edea, $border-color) 1 repeat; border-width: 0 0 var(--space-1); diff --git a/src/styles/actor/vehicle/_effects.scss b/src/styles/actor/vehicle/_effects.scss index 9e4a37d0026..f7d9039a9fe 100644 --- a/src/styles/actor/vehicle/_effects.scss +++ b/src/styles/actor/vehicle/_effects.scss @@ -1,3 +1,4 @@ +@use "sass:color"; @import "../../mixins/effects-list"; &.effects { @@ -8,8 +9,8 @@ padding-bottom: 1em; .item { - border-top: 1px solid lighten($-alt-color, 40); - $border-color: lighten($-alt-color, 40); + border-top: 1px solid color.adjust($-alt-color, $lightness: 40%); + $border-color: color.adjust($-alt-color, $lightness: 40%); border: solid transparent; border-width: 0 0 1px; border-image: linear-gradient(90deg, #f1edea, $border-color) 1 repeat; diff --git a/src/styles/actor/vehicle/_sidebar.scss b/src/styles/actor/vehicle/_sidebar.scss index 2a34f42e71a..ea4d618528c 100644 --- a/src/styles/actor/vehicle/_sidebar.scss +++ b/src/styles/actor/vehicle/_sidebar.scss @@ -1,3 +1,5 @@ +@use "sass:color"; + aside { grid-area: sidebar; color: var(--sidebar-label); @@ -151,9 +153,9 @@ aside { &.current-hp { background-image: linear-gradient( 90deg, - darken($primary-color, 5) 0%, - lighten($primary-color, 8) 50%, - darken($primary-color, 5) 100% + var(--color-pf-primary-dark) 0%, + color.adjust($primary-color, $lightness: 8%) 50%, + var(--color-pf-primary-dark) 100% ); background-color: var(--primary); border-radius: 0 0 4px 4px; diff --git a/src/styles/mixins/_animations.scss b/src/styles/mixins/_animations.scss index 9bdb93e8aa9..23f173caf6d 100644 --- a/src/styles/mixins/_animations.scss +++ b/src/styles/mixins/_animations.scss @@ -3,6 +3,8 @@ } @mixin die-spin { + animation: rotation 2s infinite linear; + @keyframes rotation { from { -webkit-transform: rotate(0deg); @@ -11,8 +13,6 @@ -webkit-transform: rotate(359deg); } } - - animation: rotation 2s infinite linear; } @mixin quick-transition { diff --git a/src/styles/scene/_index.scss b/src/styles/scene/_index.scss index d17c1abc3dd..eeee52904e5 100644 --- a/src/styles/scene/_index.scss +++ b/src/styles/scene/_index.scss @@ -1,7 +1,8 @@ +@use "sass:color"; @import "darkness-adjuster", "sheet", "token-config"; #controls ol.control-tools > li:has(> i.gm-vision) { $gm-vision: #d1ccff; - background: rgba(darken($gm-vision, 30), 0.3); - color: #{lighten($gm-vision, 5)}; + background: rgba(color.adjust($gm-vision, $lightness: -30%), 0.3); + color: #{color.adjust($gm-vision, $lightness: 5%)}; } diff --git a/src/styles/ui/_roll-modifiers-dialog.scss b/src/styles/ui/_roll-modifiers-dialog.scss index a0f5f48863f..979e91b593b 100644 --- a/src/styles/ui/_roll-modifiers-dialog.scss +++ b/src/styles/ui/_roll-modifiers-dialog.scss @@ -1,3 +1,5 @@ +@use "sass:color"; + .roll-modifiers-dialog { background: none; box-shadow: none; @@ -6,9 +8,9 @@ @include inset-gold-border; background: linear-gradient( 90deg, - var(--secondary) 0%, - lighten($secondary-color, 10) 50%, - var(--secondary) 100% + var(--color-pf-secondary) 0%, + var(--color-pf-secondary-light) 50%, + var(--color-pf-secondary) 100% ); border-radius: 0; margin-bottom: 2px; @@ -22,19 +24,19 @@ button { @include button; - background-color: var(--alt); + background-color: var(--color-pf-alternate); border-radius: 2px; color: var(--text-light); cursor: pointer; font-family: var(--sans-serif); &:hover { - text-shadow: 0 0 2px var(--tertiary); + text-shadow: 0 0 2px var(--color-pf-tertiary); } } .toggle { - background: var(--secondary); + background: var(--color-pf-secondary); border-radius: 50px; box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), @@ -230,7 +232,7 @@ .roll { color: var(--text-light); - background-color: var(--secondary); + background-color: var(--color-pf-secondary); .damage.color, i { diff --git a/types/foundry/.eslintrc.json b/types/foundry/.eslintrc.json deleted file mode 100644 index b2a49ab4e89..00000000000 --- a/types/foundry/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "rules": { - // follow foundry convention in commons module - "import/no-default-export": "off", - // import plugin doesn't understand multiple exports in type declarations - "import/export": "off", - // import plugin isn't wise to node16 module resolution - "import/no-unresolved": "off", - "no-var": "off" - } -} diff --git a/types/foundry/client-esm/applications/api/application.d.ts b/types/foundry/client-esm/applications/api/application.d.ts index af135ec1439..519ce13c791 100644 --- a/types/foundry/client-esm/applications/api/application.d.ts +++ b/types/foundry/client-esm/applications/api/application.d.ts @@ -35,8 +35,8 @@ export default class ApplicationV2< close: HTMLButtonElement; controls: HTMLButtonElement; controlsDropdown: HTMLDivElement; - onDrag: Function; - onResize: Function; + onDrag: (event: DragEvent) => void; + onResize: (event: DragEvent) => void; pointerStartPosition: ApplicationPosition; pointerMoveThrottle: boolean; }; diff --git a/types/foundry/client-esm/applications/api/handlebars-application.ts b/types/foundry/client-esm/applications/api/handlebars-application.ts index b9b4927aa7b..d841e849fc1 100644 --- a/types/foundry/client-esm/applications/api/handlebars-application.ts +++ b/types/foundry/client-esm/applications/api/handlebars-application.ts @@ -1,7 +1,7 @@ import type ApplicationV2 from "./application.d.ts"; /** Augment an Application class with [Handlebars](https://handlebarsjs.com) template rendering behavior. */ -/* eslint-disable no-unused-expressions */ +/* eslint-disable @typescript-eslint/no-unused-expressions, no-unused-expressions */ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export default function HandlebarsApplicationMixin>(BaseApplication: TBase) { class HandlebarsApplication extends BaseApplication { diff --git a/types/foundry/client-esm/canvas/edges/edges.d.ts b/types/foundry/client-esm/canvas/edges/edges.d.ts index aac220ad7e2..50982a51cc2 100644 --- a/types/foundry/client-esm/canvas/edges/edges.d.ts +++ b/types/foundry/client-esm/canvas/edges/edges.d.ts @@ -1,12 +1,4 @@ -import type { Edge } from "./edge.d.ts"; - export class CanvasEdges extends Map { - /** Edge instances which represent the outer boundaries of the game canvas. */ - #outerBounds: Edge[]; - - /** Edge instances which represent the inner boundaries of the scene rectangle. */ - #innerBounds: Edge[]; - /** * Initialize all active edges for the Scene. This workflow occurs once only when the Canvas is first initialized. * Edges are created from the following sources: diff --git a/types/foundry/client-esm/canvas/edges/vertex.d.ts b/types/foundry/client-esm/canvas/edges/vertex.d.ts index 1f1579e0e91..35709f8d42d 100644 --- a/types/foundry/client-esm/canvas/edges/vertex.d.ts +++ b/types/foundry/client-esm/canvas/edges/vertex.d.ts @@ -7,9 +7,6 @@ import type { Edge } from "./edge.d.ts"; export class PolygonVertex { constructor(x: number, y: number, options?: PolygonVertexOptions); - /** The effective maximum texture size that Foundry VTT "ever" has to worry about. */ - static #MAX_TEXTURE_SIZE: number; - /** * Determine the sort key to use for this vertex, arranging points from north-west to south-east. * @param x The x-coordinate diff --git a/types/foundry/client-esm/canvas/scene-manager.d.ts b/types/foundry/client-esm/canvas/scene-manager.d.ts index c4f89271c08..904744a51ee 100644 --- a/types/foundry/client-esm/canvas/scene-manager.d.ts +++ b/types/foundry/client-esm/canvas/scene-manager.d.ts @@ -76,7 +76,7 @@ export class SceneManager { _registerHooks(): void; /** Register additional hook functions are only used while this Scene is active and is automatically deactivated. */ - registerHook(hookName: string, handler: Function): void; + registerHook(hookName: string, handler: (...args: unknown[]) => number | void): void; /** Deactivate Hook functions that were added specifically for this Scene. */ _deactivateHooks(): void; diff --git a/types/foundry/client-esm/canvas/sources/base-light-source.d.ts b/types/foundry/client-esm/canvas/sources/base-light-source.d.ts index 064e24ab41e..53fbed93170 100644 --- a/types/foundry/client-esm/canvas/sources/base-light-source.d.ts +++ b/types/foundry/client-esm/canvas/sources/base-light-source.d.ts @@ -127,7 +127,7 @@ declare global { interface LightAnimationConfiguration { label: string; - animation: Function; + animation: (...args: unknown[]) => void; /* A custom illumination shader used by this animation */ illuminationShader: PIXI.Shader; /* A custom coloration shader used by this animation */ diff --git a/types/foundry/client-esm/canvas/sources/point-effect-source-mixes.d.ts b/types/foundry/client-esm/canvas/sources/point-effect-source-mixes.d.ts index 54a205337b7..b9c2c785a5f 100644 --- a/types/foundry/client-esm/canvas/sources/point-effect-source-mixes.d.ts +++ b/types/foundry/client-esm/canvas/sources/point-effect-source-mixes.d.ts @@ -302,7 +302,7 @@ declare interface PointSourceAnimationConfiguration { /** The human-readable (localized) label for the animation */ label?: string; /** The animation function that runs every frame */ - animation?: Function; + animation?: (...args: unknown[]) => void; /** A custom illumination shader used by this animation */ illuminationShader?: PIXI.Shader; /** A custom coloration shader used by this animation */ diff --git a/types/foundry/client-esm/canvas/sources/rendered-effect-source.d.ts b/types/foundry/client-esm/canvas/sources/rendered-effect-source.d.ts index 8dbda61661b..bb101aed5cc 100644 --- a/types/foundry/client-esm/canvas/sources/rendered-effect-source.d.ts +++ b/types/foundry/client-esm/canvas/sources/rendered-effect-source.d.ts @@ -1,6 +1,8 @@ import type BaseEffectSource from "./base-effect-source.d.ts"; import type { BaseEffectSourceData } from "./base-effect-source.d.ts"; +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + /** * An abstract class which extends the base PointSource to provide common functionality for rendering. * This class is extended by both the LightSource and VisionSource subclasses. diff --git a/types/foundry/client-esm/data/region-behaviors/suppress-weather.d.ts b/types/foundry/client-esm/data/region-behaviors/suppress-weather.d.ts index 896891c044a..da19a6c8ff5 100644 --- a/types/foundry/client-esm/data/region-behaviors/suppress-weather.d.ts +++ b/types/foundry/client-esm/data/region-behaviors/suppress-weather.d.ts @@ -1,3 +1,4 @@ +import type { DataSchema } from "../../../common/data/fields.d.ts"; import type { RegionBehaviorType } from "./base.d.ts"; /** The data model for a behavior that allows to suppress weather effects within the Region */ @@ -9,4 +10,4 @@ export interface SuppressWeatherRegionBehaviorType extends RegionBehaviorType, ModelPropsFromSchema {} -export type SuppressWeatherRegionBehaviorTypeSchema = {}; +export type SuppressWeatherRegionBehaviorTypeSchema = DataSchema; diff --git a/types/foundry/client/apps/app.d.ts b/types/foundry/client/apps/app.d.ts index 395d003d640..65e8b3de6d8 100644 --- a/types/foundry/client/apps/app.d.ts +++ b/types/foundry/client/apps/app.d.ts @@ -1,5 +1,7 @@ export {}; +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + declare global { /** The standard application window that is rendered for a large variety of UI elements in Foundry VTT */ class Application { diff --git a/types/foundry/client/apps/client-settings.d.ts b/types/foundry/client/apps/client-settings.d.ts index e689c23ccc3..e37e4038fc2 100644 --- a/types/foundry/client/apps/client-settings.d.ts +++ b/types/foundry/client/apps/client-settings.d.ts @@ -5,6 +5,5 @@ */ declare class SettingsConfig extends FormApplication { // @TODO: Declare - - protected override _updateObject(event: Event, formData: {}): Promise; + protected override _updateObject(event: Event, formData: Record): Promise; } diff --git a/types/foundry/client/apps/forms/combat-config.d.ts b/types/foundry/client/apps/forms/combat-config.d.ts index 4d8f450f303..60db9fec240 100644 --- a/types/foundry/client/apps/forms/combat-config.d.ts +++ b/types/foundry/client/apps/forms/combat-config.d.ts @@ -4,7 +4,7 @@ declare class CombatTrackerConfig extends FormA override getData(options?: Partial): Promise>; - protected override _updateObject(event: Event, formData: {}): Promise; + protected override _updateObject(event: Event, formData: Record): Promise; override activateListeners(html: JQuery): void; diff --git a/types/foundry/client/apps/forms/playlist-config.d.ts b/types/foundry/client/apps/forms/playlist-config.d.ts index d4404d7fc8b..35bb74e5b62 100644 --- a/types/foundry/client/apps/forms/playlist-config.d.ts +++ b/types/foundry/client/apps/forms/playlist-config.d.ts @@ -5,5 +5,5 @@ * @param options Additional application rendering options */ declare class PlaylistConfig extends FormApplication { - protected override _updateObject(event: Event, formData: {}): Promise; + protected override _updateObject(event: Event, formData: Record): Promise; } diff --git a/types/foundry/client/apps/forms/playlist-sound-config.d.ts b/types/foundry/client/apps/forms/playlist-sound-config.d.ts index e92f3ff88fc..07b36a04d1c 100644 --- a/types/foundry/client/apps/forms/playlist-sound-config.d.ts +++ b/types/foundry/client/apps/forms/playlist-sound-config.d.ts @@ -5,5 +5,5 @@ * @param options Additional application rendering options */ declare class PlaylistSoundConfig extends FormApplication { - protected override _updateObject(event: Event, formData: {}): Promise; + protected override _updateObject(event: Event, formData: Record): Promise; } diff --git a/types/foundry/client/apps/hud/hotbar.d.ts b/types/foundry/client/apps/hud/hotbar.d.ts index 58f8d843e32..e433e5966b3 100644 --- a/types/foundry/client/apps/hud/hotbar.d.ts +++ b/types/foundry/client/apps/hud/hotbar.d.ts @@ -33,7 +33,7 @@ declare global { static override get defaultOptions(): ApplicationOptions; - override getData(options?: {}): { + override getData(options?: Record): { page: number; macros: TMacro[]; barClass: string; diff --git a/types/foundry/client/apps/sidebar/apps/chat-popout.d.ts b/types/foundry/client/apps/sidebar/apps/chat-popout.d.ts index ef426e7e535..5c2e1809628 100644 --- a/types/foundry/client/apps/sidebar/apps/chat-popout.d.ts +++ b/types/foundry/client/apps/sidebar/apps/chat-popout.d.ts @@ -1,10 +1,8 @@ declare class ChatPopout extends Application { - /** - * The displayed Chat Message entity - */ + /** The displayed Chat Message document */ message: ChatMessage; - constructor(message: ChatMessage, options?: {}); + constructor(message: ChatMessage, options?: ApplicationOptions); /** @override */ static get defaultOptions(): (typeof Application)["defaultOptions"] & { diff --git a/types/foundry/client/apps/sidebar/tabs/chat-log.d.ts b/types/foundry/client/apps/sidebar/tabs/chat-log.d.ts index ef57e89e203..36514888f98 100644 --- a/types/foundry/client/apps/sidebar/tabs/chat-log.d.ts +++ b/types/foundry/client/apps/sidebar/tabs/chat-log.d.ts @@ -34,7 +34,7 @@ declare global { */ protected _lastWhisper: TChatMessage | null; - constructor(options?: {}); + constructor(options?: Partial); static override get defaultOptions(): ChatLogOptions; diff --git a/types/foundry/client/apps/sidebar/tabs/settings.d.ts b/types/foundry/client/apps/sidebar/tabs/settings.d.ts index 0713383ca6c..b75ddba5f05 100644 --- a/types/foundry/client/apps/sidebar/tabs/settings.d.ts +++ b/types/foundry/client/apps/sidebar/tabs/settings.d.ts @@ -5,7 +5,7 @@ declare class Settings extends SidebarTab { static override get defaultOptions(): ApplicationOptions; - override getData(options?: {}): { + override getData(options?: Record): { user: User; system: object; coreVersion: string; diff --git a/types/foundry/client/config.d.ts b/types/foundry/client/config.d.ts index be7f3969a25..d65af172c5d 100644 --- a/types/foundry/client/config.d.ts +++ b/types/foundry/client/config.d.ts @@ -270,7 +270,7 @@ declare global { string, ConstructorOf> >; - typeLabels: {}; + typeLabels: Record; typeIcons: Record; defaultType: string; sidebarIcon: string; @@ -674,7 +674,7 @@ declare global { f: typeof terms.FateDie; [key: string]: ConstructorOf; }; - randomUniform: Function; + randomUniform: () => number; }; /** The control icons used for rendering common HUD operations */ diff --git a/types/foundry/client/core/audio.d.ts b/types/foundry/client/core/audio.d.ts index 8bd550c1484..d24bbd07d4b 100644 --- a/types/foundry/client/core/audio.d.ts +++ b/types/foundry/client/core/audio.d.ts @@ -1,5 +1,7 @@ export {}; +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + declare global { /** * A helper class to provide common functionality for working with HTML5 audio and Howler instances diff --git a/types/foundry/client/core/hooks.d.ts b/types/foundry/client/core/hooks.d.ts index b9888437982..091a0024a04 100644 --- a/types/foundry/client/core/hooks.d.ts +++ b/types/foundry/client/core/hooks.d.ts @@ -161,7 +161,8 @@ declare global { * @param hook The unique name of the hooked event * @param fn The function that should be removed from the set of hooked callbacks */ - static off(hook: string, fn: Function): void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + static off(hook: string, fn: (...args: any[]) => boolean | void | Promise): void; /** * Call all hook listeners in the order in which they were registered diff --git a/types/foundry/client/data/documents/client-base-mixes.d.ts b/types/foundry/client/data/documents/client-base-mixes.d.ts index e3b98ca4477..17e25592a3b 100644 --- a/types/foundry/client/data/documents/client-base-mixes.d.ts +++ b/types/foundry/client/data/documents/client-base-mixes.d.ts @@ -1,5 +1,7 @@ import type { ApplicationV2, DocumentSheetV2 } from "../../../client-esm/applications/api/module.d.ts"; +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + export declare class ClientBaseAmbientLight extends foundry.documents .BaseAmbientLight { protected _sheet: DocumentSheet | null; diff --git a/types/foundry/client/data/documents/region-document.d.ts b/types/foundry/client/data/documents/region-document.d.ts index 6d782976d14..93b0deb9b16 100644 --- a/types/foundry/client/data/documents/region-document.d.ts +++ b/types/foundry/client/data/documents/region-document.d.ts @@ -104,7 +104,7 @@ declare global { interface RegionBoundaryRegionEvent extends BaseRegionEvent { name: "regionBoundary"; - data: {}; + data: object; } type RegionEvent = diff --git a/types/foundry/client/data/documents/scene.d.ts b/types/foundry/client/data/documents/scene.d.ts index 753bb2494b1..f1f488afe4e 100644 --- a/types/foundry/client/data/documents/scene.d.ts +++ b/types/foundry/client/data/documents/scene.d.ts @@ -13,7 +13,7 @@ declare global { * Track the viewed position of each scene (while in memory only, not persisted) * When switching back to a previously viewed scene, we can automatically pan to the previous position. */ - protected _viewPosition: {} | { x: number; y: number; scale: number }; + protected _viewPosition: Record | { x: number; y: number; scale: number }; /** Track whether the scene is the active view */ protected _view: boolean; diff --git a/types/foundry/client/pixi/board.d.ts b/types/foundry/client/pixi/board.d.ts index ecbab28ebd5..732d2e264d7 100644 --- a/types/foundry/client/pixi/board.d.ts +++ b/types/foundry/client/pixi/board.d.ts @@ -357,7 +357,7 @@ declare global { * This number is zero if "soft shadows" are disabled * @param strength Optional blur strength to apply */ - updateBlur(strength?: Number | undefined): void; + updateBlur(strength?: number | undefined): void; /** * Convert canvas co-ordinates to the client's viewport. diff --git a/types/foundry/client/pixi/core/interaction/canvas-animation.d.ts b/types/foundry/client/pixi/core/interaction/canvas-animation.d.ts index a32d26f6b88..397b342b2ff 100644 --- a/types/foundry/client/pixi/core/interaction/canvas-animation.d.ts +++ b/types/foundry/client/pixi/core/interaction/canvas-animation.d.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + interface CanvasAnimationAttribute { /** The attribute name being animated */ attribute: string; diff --git a/types/foundry/client/pixi/core/interaction/mouse-handler.d.ts b/types/foundry/client/pixi/core/interaction/mouse-handler.d.ts index 5f5d2a711ba..6fcd4c83031 100644 --- a/types/foundry/client/pixi/core/interaction/mouse-handler.d.ts +++ b/types/foundry/client/pixi/core/interaction/mouse-handler.d.ts @@ -47,7 +47,7 @@ declare class MouseInteractionManager { state: number; /** Bound handlers which can be added and removed */ - handlers: Record; + handlers: Record void>; /** The drag handling time */ dragTime: number; diff --git a/types/foundry/client/pixi/layers/base/placeables-layer.d.ts b/types/foundry/client/pixi/layers/base/placeables-layer.d.ts index 32a700d4d4d..dc8511683b7 100644 --- a/types/foundry/client/pixi/layers/base/placeables-layer.d.ts +++ b/types/foundry/client/pixi/layers/base/placeables-layer.d.ts @@ -275,7 +275,7 @@ declare global { */ updateAll( transformation: (document: TObject) => Record, - condition?: Function | null, + condition?: ((...args: unknown[]) => boolean) | null, options?: DatabaseCreateOperation, ): Promise; diff --git a/types/foundry/client/pixi/perception/vision-mode.d.ts b/types/foundry/client/pixi/perception/vision-mode.d.ts index 41e8157d9f6..fe2bfbcea7c 100644 --- a/types/foundry/client/pixi/perception/vision-mode.d.ts +++ b/types/foundry/client/pixi/perception/vision-mode.d.ts @@ -91,13 +91,13 @@ declare global { type ShaderSchema = fields.SchemaField<{ shader: ShaderField; - uniforms: fields.ObjectField<{}>; + uniforms: fields.ObjectField; }>; type LightingSchema = fields.SchemaField<{ visibility: fields.NumberField; postProcessingModes: fields.ArrayField; - uniforms: fields.ObjectField<{}>; + uniforms: fields.ObjectField; }>; type VisionModeSchema = { @@ -106,15 +106,15 @@ type VisionModeSchema = { tokenConfig: fields.BooleanField; canvas: fields.SchemaField<{ shader: ShaderField; - uniforms: fields.ObjectField<{}>; + uniforms: fields.ObjectField; }>; lighting: fields.SchemaField<{ background: LightingSchema; coloration: LightingSchema; illumination: LightingSchema; darkness: LightingSchema; - levels: fields.ObjectField<{}>; - multipliers: fields.ObjectField<{}>; + levels: fields.ObjectField; + multipliers: fields.ObjectField; }>; vision: fields.SchemaField<{ background: ShaderSchema; diff --git a/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-canvas-object.ts b/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-canvas-object.ts index 8505ed11278..398bd879149 100644 --- a/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-canvas-object.ts +++ b/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-canvas-object.ts @@ -32,7 +32,7 @@ export interface PrimaryCanvasObjectData { * @returns A DisplayObject subclass mixed with PrimaryCanvasObject features * @mixin */ -/* eslint-disable no-unused-expressions */ +/* eslint-disable @typescript-eslint/no-unused-expressions, no-unused-expressions */ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function PrimaryCanvasObjectMixin>(DisplayObject: TBase) { /** diff --git a/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-occludable-object.ts b/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-occludable-object.ts index fc8f76c6df7..8f59496e271 100644 --- a/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-occludable-object.ts +++ b/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-occludable-object.ts @@ -7,7 +7,7 @@ import { PrimaryCanvasObjectMixin } from "./primary-canvas-object.ts"; * @returns A DisplayObject subclass mixed with OccludableObject features * @mixin */ -/* eslint-disable no-unused-expressions */ +/* eslint-disable @typescript-eslint/no-unused-expressions, no-unused-expressions */ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function PrimaryOccludableObjectMixin>(DisplayObject: TBase) { abstract class PrimaryOccludableObject extends PrimaryCanvasObjectMixin(DisplayObject) { diff --git a/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-sprite-mesh.ts b/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-sprite-mesh.ts index 030a352778d..95250af6410 100644 --- a/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-sprite-mesh.ts +++ b/types/foundry/client/pixi/placeables/primary-canvas-objects/primary-sprite-mesh.ts @@ -8,7 +8,7 @@ import { PrimaryOccludableObjectMixin } from "./primary-occludable-object.ts"; * @param [options.name] The name of this sprite. * @param [options.object] Any object that owns this sprite. */ -/* eslint-disable no-unused-expressions */ +/* eslint-disable @typescript-eslint/no-unused-expressions, no-unused-expressions */ export class PrimarySpriteMesh extends PrimaryOccludableObjectMixin(SpriteMesh) { constructor( options: { texture?: PIXI.Texture; name?: string | null; object?: object }, diff --git a/types/foundry/client/pixi/placeables/region.d.ts b/types/foundry/client/pixi/placeables/region.d.ts index b4288f47366..cbb7404b9d8 100644 --- a/types/foundry/client/pixi/placeables/region.d.ts +++ b/types/foundry/client/pixi/placeables/region.d.ts @@ -16,8 +16,8 @@ declare global { static override RENDER_FLAGS: { redraw: { propagate: ["refresh"] }; refresh: { propagate: ["refreshState", "refreshBorder"]; alias: boolean }; - refreshState: {}; - refreshBorder: {}; + refreshState: object; + refreshBorder: object; }; /** The scaling factor used for Clipper paths. */ diff --git a/types/foundry/client/pixi/placeables/template.d.ts b/types/foundry/client/pixi/placeables/template.d.ts index 83dd0fc7a2c..aa3488e9daa 100644 --- a/types/foundry/client/pixi/placeables/template.d.ts +++ b/types/foundry/client/pixi/placeables/template.d.ts @@ -30,12 +30,12 @@ declare class MeasuredTemplate< static override RENDER_FLAGS: { redraw: { propagate: ["refresh"] }; refresh: { propagate: ["refreshState", "refreshShape"]; alias: true }; - refreshState: {}; + refreshState: object; refreshShape: { propagate: ["refreshPosition", "refreshGrid", "refreshText", "refreshTemplate"] }; - refreshTemplate: {}; + refreshTemplate: object; refreshPosition: { propagate: ["refreshGrid"] }; - refreshGrid: {}; - refreshText: {}; + refreshGrid: object; + refreshText: object; }; /* -------------------------------------------- */ diff --git a/types/foundry/client/pixi/placeables/token.d.ts b/types/foundry/client/pixi/placeables/token.d.ts index 6e74e8f50c4..2331ca30e9e 100644 --- a/types/foundry/client/pixi/placeables/token.d.ts +++ b/types/foundry/client/pixi/placeables/token.d.ts @@ -12,7 +12,7 @@ declare global { static override RENDER_FLAGS: { redraw: { propagate: ["refresh"] }; - redrawEffects: {}; + redrawEffects: object; refresh: { propagate: [ "refreshState", @@ -25,10 +25,10 @@ declare global { alias: true; }; refreshState: { propagate: ["refreshVisibility", "refreshTarget"] }; - refreshVisibility: {}; + refreshVisibility: object; refreshTransform: { propagate: ["refreshPosition", "refreshRotation", "refreshSize"]; alias: true }; - refreshPosition: {}; - refreshRotation: {}; + refreshPosition: object; + refreshRotation: object; refreshSize: { propagate: [ "refreshPosition", @@ -40,18 +40,18 @@ declare global { "refreshTooltip", ]; }; - refreshElevation: {}; + refreshElevation: object; refreshMesh: { propagate: ["refreshShader"] }; - refreshShader: {}; + refreshShader: object; refreshShape: { propagate: ["refreshVisibility", "refreshPosition", "refreshBorder", "refreshEffects"] }; - refreshBorder: {}; - refreshBars: {}; - refreshEffects: {}; - refreshNameplate: {}; - refreshTarget: {}; - refreshTooltip: {}; - refreshRingVisuals: {}; - recoverFromPreview: {}; + refreshBorder: object; + refreshBars: object; + refreshEffects: object; + refreshNameplate: object; + refreshTarget: object; + refreshTooltip: object; + refreshRingVisuals: object; + recoverFromPreview: object; }; /** The shape of this token. */ @@ -185,11 +185,11 @@ declare global { */ get isVisible(): boolean; - /** The animation name used for Token movement */ + /** The animation name used for Token movement */ get animationName(): string; /* -------------------------------------------- */ - /* Lighting and Vision Attributes + /* Lighting and Vision Attributes */ /* -------------------------------------------- */ /** Test whether the Token has sight (or blindness) at any radius */ diff --git a/types/foundry/client/pixi/webgl/extensions/batch-renderer.d.ts b/types/foundry/client/pixi/webgl/extensions/batch-renderer.d.ts index 582ee970f63..dd143aeef8c 100644 --- a/types/foundry/client/pixi/webgl/extensions/batch-renderer.d.ts +++ b/types/foundry/client/pixi/webgl/extensions/batch-renderer.d.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + /** A batch renderer with a customizable data transfer function to packed geometries. */ declare class BatchRenderer extends PIXI.BatchRenderer { /** The batch shader generator class. */ diff --git a/types/foundry/client/pixi/webgl/shaders/filters/transition.d.ts b/types/foundry/client/pixi/webgl/shaders/filters/transition.d.ts index 15f1cf6d34a..4911fae78ea 100644 --- a/types/foundry/client/pixi/webgl/shaders/filters/transition.d.ts +++ b/types/foundry/client/pixi/webgl/shaders/filters/transition.d.ts @@ -1,5 +1,7 @@ export {}; +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + declare global { /** A filter specialized for transition effects between a source object and a target texture. */ class TextureTransitionFilter extends AbstractBaseFilter { @@ -49,7 +51,7 @@ declare global { texture: PIXI.Texture, options?: { type?: TextureTransitionType; - name?: string | Symbol; + name?: string | symbol; duration?: number; easing?: Function | string; }, diff --git a/types/foundry/client/pixi/webgl/shaders/samplers/base-sampler.d.ts b/types/foundry/client/pixi/webgl/shaders/samplers/base-sampler.d.ts index fc75522a575..5776640d8eb 100644 --- a/types/foundry/client/pixi/webgl/shaders/samplers/base-sampler.d.ts +++ b/types/foundry/client/pixi/webgl/shaders/samplers/base-sampler.d.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + /** * The base sampler shader exposes a simple sprite shader and all the framework to handle: * - Batched shaders and plugin subscription diff --git a/types/foundry/client/pixi/webgl/shaders/samplers/depth.d.ts b/types/foundry/client/pixi/webgl/shaders/samplers/depth.d.ts index f18d29dcefc..15993df3101 100644 --- a/types/foundry/client/pixi/webgl/shaders/samplers/depth.d.ts +++ b/types/foundry/client/pixi/webgl/shaders/samplers/depth.d.ts @@ -1,5 +1,7 @@ export {}; +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + declare global { /** * The batch data that is needed by {@link DepthSamplerShader} to render an element with batching. diff --git a/types/foundry/client/pixi/webgl/shaders/samplers/occlusion.d.ts b/types/foundry/client/pixi/webgl/shaders/samplers/occlusion.d.ts index df6e924adaf..ea66600bde8 100644 --- a/types/foundry/client/pixi/webgl/shaders/samplers/occlusion.d.ts +++ b/types/foundry/client/pixi/webgl/shaders/samplers/occlusion.d.ts @@ -1,5 +1,7 @@ export {}; +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + declare global { /** * The occlusion sampler shader. diff --git a/types/foundry/client/roll.d.ts b/types/foundry/client/roll.d.ts index 7883d88ac48..914a0913285 100644 --- a/types/foundry/client/roll.d.ts +++ b/types/foundry/client/roll.d.ts @@ -469,6 +469,5 @@ declare global { } // Empty extended interface that can be expanded by the system without polluting Math itself - // eslint-disable-next-line @typescript-eslint/no-empty-interface interface RollMathProxy extends Math {} } diff --git a/types/foundry/client/ui/filepicker.d.ts b/types/foundry/client/ui/filepicker.d.ts index 5bdce5f1622..8373e3f2e8c 100644 --- a/types/foundry/client/ui/filepicker.d.ts +++ b/types/foundry/client/ui/filepicker.d.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + /** * The FilePicker application renders contents of the server-side public directory. * This app allows for navigating and uploading files to the public path. diff --git a/types/foundry/client/ui/tabs.d.ts b/types/foundry/client/ui/tabs.d.ts index b26204a4364..b940961a166 100644 --- a/types/foundry/client/ui/tabs.d.ts +++ b/types/foundry/client/ui/tabs.d.ts @@ -3,7 +3,7 @@ declare interface TabsOptions { contentSelector?: string; group?: string; initial?: string; - callback?: Function; + callback?: (...args: unknown[]) => void; } /** @@ -33,49 +33,31 @@ declare interface TabsOptions { * tabs.bind(html); */ declare class Tabs { - /** - * The value of the active tab - */ + /** The value of the active tab */ active: string; - /** - * A callback function to trigger when the tab is changed - */ - callback: Function | null; + /** A callback function to trigger when the tab is changed */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + callback: ((...args: any[]) => void) | null; - /** - * The CSS selector used to target the tab navigation element - */ + /** The CSS selector used to target the tab navigation element */ _navSelector: string; - /** - * A reference to the HTML navigation element the tab controller is bound to - */ + /** A reference to the HTML navigation element the tab controller is bound to */ _nav: HTMLElement | null; - /** - * The CSS selector used to target the tab content element - */ + /** The CSS selector used to target the tab content element */ _contentSelector: string; - /** - * A reference to the HTML container element of the tab content - */ + /** A reference to the HTML container element of the tab content */ _content: HTMLElement | null; constructor({ navSelector, contentSelector, initial, callback }: TabsOptions); - /** - * Bind the Tabs controller to an HTML application - * @param html - */ + /** Bind the Tabs controller to an HTML application */ bind(html: HTMLElement): void; - /** - * Activate a new tab by name - * @param tabName - * @param triggerCallback - */ + /** Activate a new tab by name */ activate(tabName: string, { triggerCallback }?: { triggerCallback?: boolean }): void; /** diff --git a/types/foundry/common/types.d.ts b/types/foundry/common/types.d.ts index 2dcc21241da..7ea4f98181d 100644 --- a/types/foundry/common/types.d.ts +++ b/types/foundry/common/types.d.ts @@ -49,7 +49,7 @@ declare global { | ObjectConstructor | ArrayConstructor | ConstructorOf - | Function; + | ((data: unknown) => unknown); /** For string Types, defines the allowable values */ choices?: TChoices; /** For numeric Types, defines the allowable range */ diff --git a/types/foundry/common/utils/collection.d.ts b/types/foundry/common/utils/collection.d.ts index 17600927c74..718b4f9bc2e 100644 --- a/types/foundry/common/utils/collection.d.ts +++ b/types/foundry/common/utils/collection.d.ts @@ -112,7 +112,7 @@ declare interface CollectionConstructor { readonly prototype: Collection; } -// biome-ignore lint/style/noVar: +// eslint-disable-next-line no-var declare var Collection: CollectionConstructor; interface CollectionGetOptions { diff --git a/vite.config.ts b/vite.config.ts index 587efdef0db..5945dd7fbf7 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -169,7 +169,7 @@ const config = Vite.defineConfig(({ command, mode }): Vite.UserConfig => { ].join(""), ), output: { - assetFileNames: ({ name }): string => (name === "style.css" ? "styles/pf2e.css" : name ?? ""), + assetFileNames: ({ name }): string => (name === "style.css" ? "styles/pf2e.css" : (name ?? "")), chunkFileNames: "[name].mjs", entryFileNames: "pf2e.mjs", manualChunks: { @@ -192,9 +192,7 @@ const config = Vite.defineConfig(({ command, mode }): Vite.UserConfig => { }, }, plugins, - css: { - devSourcemap: buildMode === "development", - }, + css: { devSourcemap: buildMode === "development" }, }; });