diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 97369bc72..000000000 --- a/.eslintignore +++ /dev/null @@ -1,16 +0,0 @@ -node_modules/ -/play.pokemonshowdown.com/data/* -/play.pokemonshowdown.com/js/* - -!/play.pokemonshowdown.com/js/client-battle.js -!/play.pokemonshowdown.com/js/client-chat-tournament.js -!/play.pokemonshowdown.com/js/client-chat.js -!/play.pokemonshowdown.com/js/client-ladder.js -!/play.pokemonshowdown.com/js/client-mainmenu.js -!/play.pokemonshowdown.com/js/client-rooms.js -!/play.pokemonshowdown.com/js/client-teambuilder.js -!/play.pokemonshowdown.com/js/client-topbar.js -!/play.pokemonshowdown.com/js/client.js -!/play.pokemonshowdown.com/js/replay-embed.template.js -!/play.pokemonshowdown.com/js/search.js -!/play.pokemonshowdown.com/js/storage.js diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index f3aa66b17..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,210 +0,0 @@ -'use strict'; - -module.exports = { - "root": true, - "parserOptions": { - "ecmaVersion": 3, - "sourceType": "script" - }, - "env": { - "node": true, - "browser": true - }, - "globals": { - // Libraries - "_": false, "$": false, "Backbone": false, "d3": false, "html": false, "html4": false, "jQuery": false, "SockJS": false, "ColorThief": false, - - // Environment-specific - "fs": false, "gui": false, "ga": false, "macgap": false, "nwWindow": false, "webkitNotifications": false, "nw": false, - - // Battle stuff - "Battle": true, "Pokemon": true, "BattleSound": true, "BattleTooltips": true, "BattleLog": true, - "BattleAbilities": false, "BattleAliases": false, "BattleBackdrops": false, "BattleBackdropsFive": false, "BattleBackdropsFour": false, "BattleBackdropsThree": false, "BattleEffects": false, - "BattleFormats": false, "BattleFormatsData": false, "BattleLearnsets": false, "BattleItems": false, "BattleMoveAnims": false, "BattleMovedex": false, "BattleNatures": false, - "BattleOtherAnims": false, "BattlePokedex": false,"BattlePokemonSprites": false, "BattlePokemonSpritesBW": false, "BattleSearchCountIndex": false, "BattleSearchIndex": false, "BattleArticleTitles": false, - "BattleSearchIndexOffset": false, "BattleSearchIndexType": false, "BattleStatIDs": false, "BattleStatNames": false, "BattleStatusAnims": false, "BattleStatuses": false, "BattleTeambuilderTable": false, - "ModifiableValue": false, "BattleStatGuesser": false, "BattleStatOptimizer": false, "BattleText": true, "BattleTextAFD": false, "BattleTextNotAFD": false, - "BattleTextParser": false, - - // Generic global variables - "Config": false, "BattleSearch": false, "Storage": false, "Dex": false, "DexSearch": false, - "app": false, "toID": false, "toRoomid": false, "toUserid": false, "toName": false, "PSUtils": false, "MD5": false, - "ChatHistory": false, "Topbar": false, "UserList": false, - - // Rooms - "Room": false, "BattleRoom": false, "ChatRoom": false, "ConsoleRoom": false, "HTMLRoom": false, "LadderRoom": false, "MainMenuRoom": false, "RoomsRoom": false, "BattlesRoom": false, "TeambuilderRoom": false, - - // Tons of popups - "Popup": false, "ForfeitPopup": false, "BracketPopup": false, "LoginPasswordPopup": false, "UserPopup": false, "UserOptionsPopup": false, "UserOptions": false, "TeamPopup": false, - "AvatarsPopup": false, "CreditsPopup": false, "FormatPopup": false, "FormattingPopup": false, "LoginPopup": false, - "MovePopup": false, "SoundsPopup": false, "OptionsPopup": false, "PromptPopup": false, "ProxyPopup": false, "ReconnectPopup": false, - "RegisterPopup": false, "ReplayUploadedPopup": false, "RulesPopup": false, "TabListPopup": false, "TournamentBox": false, - "CustomBackgroundPopup": false, - - // Test client - "POKEMON_SHOWDOWN_TESTCLIENT_KEY": false - }, - "extends": "eslint:recommended", - "rules": { - "no-cond-assign": ["error", "except-parens"], - "no-console": "off", - "no-constant-condition": "off", - "no-control-regex": "off", - "no-empty": ["error", {"allowEmptyCatch": true}], - "no-inner-declarations": ["error", "functions"], - "no-redeclare": "off", - "valid-jsdoc": "off", - - // TODO: actually fix useless escapes - "no-useless-escape": "off", - - "array-callback-return": "error", - "complexity": "off", - "consistent-return": "off", - "default-case": "off", - "dot-location": ["error", "property"], - "dot-notation": "off", - "eqeqeq": "off", - "guard-for-in": "off", - "no-caller": "error", - "no-case-declarations": "off", - "no-div-regex": "error", - "no-else-return": "off", - "no-labels": ["error", {"allowLoop": true, "allowSwitch": true}], - "no-eval": "off", - "no-implied-eval": "error", - "no-extend-native": "error", - "no-extra-bind": "warn", - "no-extra-label": "error", - "no-extra-parens": "off", - "no-implicit-coercion": "off", - "no-invalid-this": "off", - "no-iterator": "error", - "no-lone-blocks": "off", - "no-loop-func": "off", - "no-magic-numbers": "off", - "no-multi-spaces": "warn", - "no-multi-str": "error", - "no-new-func": "error", - "no-new-wrappers": "error", - "no-octal-escape": "error", - "no-param-reassign": "off", - "no-proto": "error", - "no-prototype-builtins": "error", - "no-return-assign": ["error", "except-parens"], - "no-self-compare": "error", - "no-sequences": "error", - "no-throw-literal": "error", - "no-unmodified-loop-condition": "error", - "no-unused-expressions": "error", - "no-useless-call": "error", - "no-useless-concat": "off", - "no-void": "off", - "no-warning-comments": "off", - "no-with": "error", - "radix": ["error", "always"], - "vars-on-top": "off", - "wrap-iife": ["error", "inside"], - "yoda": "off", - - "init-declarations": "off", - "no-catch-shadow": "off", - "no-label-var": "error", - "no-restricted-globals": ["error", "Proxy", "Reflect", "Symbol", "WeakSet"], - "no-shadow-restricted-names": "error", - "no-shadow": "off", - "no-undef-init": "off", - "no-undef": ["error", {"typeof": true}], - "no-undefined": "off", - "no-unused-vars": "off", - - "no-mixed-requires": "error", - "no-new-require": "error", - "no-path-concat": "off", - "no-process-env": "off", - "no-process-exit": "off", - "no-restricted-modules": ["error", "moment", "request", "sugar"], - "no-sync": "off", - - "array-bracket-spacing": ["error", "never"], - "block-spacing": "off", - "brace-style": ["error", "1tbs", {"allowSingleLine": true}], - "camelcase": "off", - "comma-spacing": ["error", {"before": false, "after": true}], - "comma-style": ["error", "last"], - "computed-property-spacing": ["error", "never"], - "consistent-this": "off", - "func-names": "off", - "func-style": "off", - "id-length": "off", - "id-match": "off", - "indent": ["error", "tab"], - "key-spacing": "off", - "lines-around-comment": "off", - "max-nested-callbacks": "off", - "max-statements-per-line": "off", - "new-parens": "error", - "newline-after-var": "off", - "newline-before-return": "off", - "no-array-constructor": "error", - "no-continue": "off", - "no-inline-comments": "off", - "no-lonely-if": "off", - "no-mixed-spaces-and-tabs": ["error", "smart-tabs"], - "no-multiple-empty-lines": ["error", {"max": 2, "maxEOF": 1}], - "no-negated-condition": "off", - "no-nested-ternary": "off", - "no-new-object": "error", - "no-spaced-func": "error", - "no-ternary": "off", - "no-trailing-spaces": ["error", {"ignoreComments": false}], - "no-underscore-dangle": "off", - "no-unneeded-ternary": "error", - "object-curly-spacing": ["error", "never"], - "one-var": "off", - "operator-assignment": "off", - "operator-linebreak": ["error", "after"], - "quote-props": "off", - "quotes": "off", - "require-jsdoc": "off", - "semi-spacing": ["error", {"before": false, "after": true}], - "semi": ["error", "always"], - "sort-vars": "off", - "keyword-spacing": ["error", {"before": true, "after": true}], - "space-before-blocks": ["error", "always"], - "space-before-function-paren": ["error", {"anonymous": "always", "named": "never"}], - "space-in-parens": ["error", "never"], - "space-infix-ops": "error", - "space-unary-ops": ["error", {"words": true, "nonwords": false}], - "wrap-regex": "off", - - "arrow-parens": ["error", "as-needed"], - "arrow-spacing": ["error", {"before": true, "after": true}], - "no-confusing-arrow": "off", - "no-useless-computed-key": "error", - "no-useless-rename": "error", - "prefer-arrow-callback": "off", - "rest-spread-spacing": ["error", "never"], - "template-curly-spacing": ["error", "never"], - "no-restricted-syntax": ["error", "TaggedTemplateExpression", "ObjectPattern", "ArrayPattern"], - - // Rules enabled in the server code, but disabled here - /* - "block-scoped-var": "error", - "callback-return": [2, ["callback", "cb", "done"]], - "comma-dangle": ["error", "always-multiline"], - "curly": ["error", "multi-line", "consistent"], - "eqeqeq": "error", - "no-constant-condition": "error", - "no-floating-decimal": "error", - "no-new": "error", - "no-redeclare": "error", - "no-unused-vars": ["warn", {"args": "none"}], - "no-use-before-define": ["error", {"functions": false, "classes": false}], - "no-var": "error", - "new-cap": ["error", {"newIsCap": true, "capIsNew: false}], - "padded-blocks": ["error", "never"], - "strict": ["error", "global"] - */ - } -}; diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b1ea8233f..d3cfdf652 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: - node-version: [14.x] + node-version: [22.x] steps: - uses: actions/checkout@v2 diff --git a/.vscode/settings.json b/.vscode/settings.json index 3d7d23383..f693783d7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,5 @@ "editor.formatOnSave": false, "showdown.server": "", // e.g., "?~~localhost:8000" "showdown.clientUrl": "http://localhost:8080", - "tslint.configFile": "tslint.json", "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/build-tools/.eslintrc.js b/build-tools/.eslintrc.js deleted file mode 100644 index 602ac6e65..000000000 --- a/build-tools/.eslintrc.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -const baseRules = Object.assign({}, require('./../.eslintrc.js').rules); - -module.exports = { - "root": true, - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "script", - "ecmaFeatures": { - "globalReturn": true - } - }, - "env": { - "es6": true, - "node": true - }, - "rules": Object.assign(baseRules, { - "comma-dangle": [2, "always-multiline"], - "eqeqeq": 2, - "no-floating-decimal": 2, - "no-new": 2, - "no-redeclare": 2, - "radix": [1, "as-needed"], - "strict": [2, "global"], - "no-unused-vars": [1, {"args": "none"}], - "no-use-before-define": [2, {"functions": false, "classes": false}], - "new-cap": [2, {"newIsCap": true, "capIsNew": false}], - "padded-blocks": [2, "never"], - - "arrow-parens": [2, "as-needed"], - "arrow-spacing": [2, {"before": true, "after": true}], - "constructor-super": 2, - "no-class-assign": 2, - "no-confusing-arrow": 0, - "no-const-assign": 2, - "no-dupe-class-members": 2, - "no-restricted-syntax": "off", - "no-this-before-super": 2, - "no-var": 2, - "require-yield": 2, - "template-curly-spacing": [2, "never"], - }), -}; diff --git a/build-tools/build-indexes b/build-tools/build-indexes index aa13c390f..87a5b137f 100755 --- a/build-tools/build-indexes +++ b/build-tools/build-indexes @@ -15,8 +15,8 @@ if (!fs.existsSync('caches/pokemon-showdown')) { } process.stdout.write("Syncing data from Git repository... "); -child_process.execSync('git pull', {cwd: 'caches/pokemon-showdown'}); -child_process.execSync('npm run build', {cwd: 'caches/pokemon-showdown'}); +child_process.execSync('git pull', { cwd: 'caches/pokemon-showdown' }); +child_process.execSync('npm run build', { cwd: 'caches/pokemon-showdown' }); console.log("DONE"); const Dex = require('../caches/pokemon-showdown/dist/sim/dex').Dex; @@ -27,7 +27,7 @@ console.log("DONE"); function es3stringify(obj) { const buf = JSON.stringify(obj); - return buf.replace(/\"([A-Za-z][A-Za-z0-9]*)\"\:/g, (fullMatch, key) => ( + return buf.replace(/"([A-Za-z][A-Za-z0-9]*)":/g, (fullMatch, key) => ( ['return', 'new', 'delete'].includes(key) ? fullMatch : `${key}:` )); } @@ -52,10 +52,14 @@ function requireNoCache(pathSpec) { index = index.concat(Object.keys(Dex.data.Abilities).map(x => x + ' ability')); index = index.concat(Object.keys(Dex.data.TypeChart).map(x => toID(x) + ' type')); index = index.concat(['physical', 'special', 'status'].map(x => toID(x) + ' category')); - index = index.concat(['monster', 'water1', 'bug', 'flying', 'field', 'fairy', 'grass', 'humanlike', 'water3', 'mineral', 'amorphous', 'water2', 'ditto', 'dragon', 'undiscovered'].map(x => toID(x) + ' egggroup')); - index = index.concat(['ou', 'uu', 'ru', 'nu', 'pu', 'zu', 'lc', 'nfe', 'uber', 'uubl', 'rubl', 'nubl', 'publ', 'zubl', 'cap', 'caplc', 'capnfe'].map(x => toID(x) + ' tier')); + index = index.concat([ + 'monster', 'water1', 'bug', 'flying', 'field', 'fairy', 'grass', 'humanlike', 'water3', 'mineral', 'amorphous', 'water2', 'ditto', 'dragon', 'undiscovered', + ].map(x => toID(x) + ' egggroup')); + index = index.concat([ + 'ou', 'uu', 'ru', 'nu', 'pu', 'zu', 'lc', 'nfe', 'uber', 'uubl', 'rubl', 'nubl', 'publ', 'zubl', 'cap', 'caplc', 'capnfe', + ].map(x => toID(x) + ' tier')); - let BattleArticleTitles = {}; + const BattleArticleTitles = {}; try { for (const file of fs.readdirSync('../dex.pokemonshowdown.com/articles/')) { @@ -71,7 +75,7 @@ function requireNoCache(pathSpec) { index.push('' + id + ' article'); } } - } catch (e) { + } catch { console.log('\n(WARNING: NO ARTICLES)'); } index.push('pokemon article'); @@ -79,8 +83,8 @@ function requireNoCache(pathSpec) { // generate aliases function generateAlias(id, name, type) { - let i = name.lastIndexOf(' '); - if (i < 0) i = name.lastIndexOf('-'); + let offset = name.lastIndexOf(' '); + if (offset < 0) offset = name.lastIndexOf('-'); if (name.endsWith('-Mega-X') || name.endsWith('-Mega-Y')) { index.push('mega' + toID(name.slice(0, -7) + name.slice(-1)) + ' ' + type + ' ' + id + ' 0'); index.push('m' + toID(name.slice(0, -7) + name.slice(-1)) + ' ' + type + ' ' + id + ' 0'); @@ -96,86 +100,86 @@ function requireNoCache(pathSpec) { index.push('alolan' + toID(name.slice(0, -6)) + ' ' + type + ' ' + id + ' 0'); return; } - let oldI = i; - if (name === 'Alakazam') i = 5; - if (name === 'Arctovish') i = 5; - if (name === 'Arctozolt') i = 5; - if (name === 'Articuno') i = 5; - if (name === 'Breloom') i = 3; - if (name === 'Bronzong') i = 4; - if (name === 'Celebi') i = 4; - if (name === 'Charizard') i = 5; - if (name === 'Donphan') i = 3; - if (name === 'Dracovish') i = 5; - if (name === 'Dracozolt') i = 5; - if (name === 'Dragapult') i = 5; - if (name === 'Dusclops') i = 3; - if (name === 'Electabuzz') i = 6; - if (name === 'Exeggutor') i = 2; - if (name === 'Garchomp') i = 3; - if (name === 'Hariyama') i = 4; - if (name === 'Magearna') i = 2; - if (name === 'Magnezone') i = 5; - if (name === 'Mamoswine') i = 4; - if (name === 'Moltres') i = 3; - if (name === 'Nidoking') i = 4; - if (name === 'Nidoqueen') i = 4; - if (name === 'Nidorina') i = 4; - if (name === 'Nidorino') i = 4; - if (name === 'Regice') i = 3; - if (name === 'Regidrago') i = 4; - if (name === 'Regieleki') i = 4; - if (name === 'Regigigas') i = 4; - if (name === 'Regirock') i = 4; - if (name === 'Registeel') i = 4; - if (name === 'Slowbro') i = 4; - if (name === 'Slowking') i = 4; - if (name === 'Starmie') i = 4; - if (name === 'Tyranitar') i = 6; - if (name === 'Zapdos') i = 3; + const oldOffset = offset; + if (name === 'Alakazam') offset = 5; + if (name === 'Arctovish') offset = 5; + if (name === 'Arctozolt') offset = 5; + if (name === 'Articuno') offset = 5; + if (name === 'Breloom') offset = 3; + if (name === 'Bronzong') offset = 4; + if (name === 'Celebi') offset = 4; + if (name === 'Charizard') offset = 5; + if (name === 'Donphan') offset = 3; + if (name === 'Dracovish') offset = 5; + if (name === 'Dracozolt') offset = 5; + if (name === 'Dragapult') offset = 5; + if (name === 'Dusclops') offset = 3; + if (name === 'Electabuzz') offset = 6; + if (name === 'Exeggutor') offset = 2; + if (name === 'Garchomp') offset = 3; + if (name === 'Hariyama') offset = 4; + if (name === 'Magearna') offset = 2; + if (name === 'Magnezone') offset = 5; + if (name === 'Mamoswine') offset = 4; + if (name === 'Moltres') offset = 3; + if (name === 'Nidoking') offset = 4; + if (name === 'Nidoqueen') offset = 4; + if (name === 'Nidorina') offset = 4; + if (name === 'Nidorino') offset = 4; + if (name === 'Regice') offset = 3; + if (name === 'Regidrago') offset = 4; + if (name === 'Regieleki') offset = 4; + if (name === 'Regigigas') offset = 4; + if (name === 'Regirock') offset = 4; + if (name === 'Registeel') offset = 4; + if (name === 'Slowbro') offset = 4; + if (name === 'Slowking') offset = 4; + if (name === 'Starmie') offset = 4; + if (name === 'Tyranitar') offset = 6; + if (name === 'Zapdos') offset = 3; - if (name === 'Acupressure') i = 3; - if (name === 'Aromatherapy') i = 5; - if (name === 'Boomburst') i = 4; - if (name === 'Crabhammer') i = 4; - if (name === 'Discharge') i = 3; - if (name === 'Earthquake') i = 5; - if (name === 'Extrasensory') i = 5; - if (name === 'Flamethrower') i = 5; - if (name === 'Headbutt') i = 4; - if (name === 'Moonblast') i = 4; - if (name === 'Moonlight') i = 4; - if (name === 'Overheat') i = 4; - if (name === 'Outrage') i = 3; - if (name === 'Octazooka') i = 4; - if (name === 'Payback') i = 3; - if (name === 'Psyshock') i = 3; - if (name === 'Psywave') i = 3; - if (name === 'Rototiller') i = 4; - if (name === 'Rollout') i = 4; - if (name === 'Safeguard') i = 4; - if (name === 'Sandstorm') i = 4; - if (name === 'Smokescreen') i = 5; - if (name === 'Stockpile') i = 5; - if (name === 'Steamroller') i = 5; - if (name === 'Superpower') i = 5; - if (name === 'Supersonic') i = 5; - if (name === 'Synchronoise') i = 7; - if (name === 'Tailwind') i = 4; - if (name === 'Telekinesis') i = 4; - if (name === 'Teleport') i = 4; - if (name === 'Thunderbolt') i = 7; - if (name === 'Twineedle') i = 3; - if (name === 'Uproar') i = 2; - if (name === 'Venoshock') i = 4; - if (name === 'Whirlpool') i = 5; - if (name === 'Whirlwind') i = 5; + if (name === 'Acupressure') offset = 3; + if (name === 'Aromatherapy') offset = 5; + if (name === 'Boomburst') offset = 4; + if (name === 'Crabhammer') offset = 4; + if (name === 'Discharge') offset = 3; + if (name === 'Earthquake') offset = 5; + if (name === 'Extrasensory') offset = 5; + if (name === 'Flamethrower') offset = 5; + if (name === 'Headbutt') offset = 4; + if (name === 'Moonblast') offset = 4; + if (name === 'Moonlight') offset = 4; + if (name === 'Overheat') offset = 4; + if (name === 'Outrage') offset = 3; + if (name === 'Octazooka') offset = 4; + if (name === 'Payback') offset = 3; + if (name === 'Psyshock') offset = 3; + if (name === 'Psywave') offset = 3; + if (name === 'Rototiller') offset = 4; + if (name === 'Rollout') offset = 4; + if (name === 'Safeguard') offset = 4; + if (name === 'Sandstorm') offset = 4; + if (name === 'Smokescreen') offset = 5; + if (name === 'Stockpile') offset = 5; + if (name === 'Steamroller') offset = 5; + if (name === 'Superpower') offset = 5; + if (name === 'Supersonic') offset = 5; + if (name === 'Synchronoise') offset = 7; + if (name === 'Tailwind') offset = 4; + if (name === 'Telekinesis') offset = 4; + if (name === 'Teleport') offset = 4; + if (name === 'Thunderbolt') offset = 7; + if (name === 'Twineedle') offset = 3; + if (name === 'Uproar') offset = 2; + if (name === 'Venoshock') offset = 4; + if (name === 'Whirlpool') offset = 5; + if (name === 'Whirlwind') offset = 5; let acronym; - if (oldI < 0 && i > 0) { - acronym = toID(name.charAt(0) + name.slice(i)); + if (oldOffset < 0 && offset > 0) { + acronym = toID(name.charAt(0) + name.slice(offset)); } - if (i < 0) return; - index.push('' + toID(name.slice(i)) + ' ' + type + ' ' + id + ' ' + toID(name.slice(0, i)).length); + if (offset < 0) return; + index.push('' + toID(name.slice(offset)) + ' ' + type + ' ' + id + ' ' + toID(name.slice(0, offset)).length); if (name.startsWith('Hidden Power ')) { acronym = 'hp' + toID(name.substr(13)); index.push('' + acronym + ' ' + type + ' ' + id + ' 0'); @@ -200,8 +204,8 @@ function requireNoCache(pathSpec) { index.push('cuno ' + type + ' ' + id + ' 4'); } - let i2 = name.lastIndexOf(' ', i - 1); - if (i2 < 0) i2 = name.lastIndexOf('-', i - 1); + let i2 = name.lastIndexOf(' ', offset - 1); + if (i2 < 0) i2 = name.lastIndexOf('-', offset - 1); if (name === 'Zen Headbutt') i2 = 8; if (i2 >= 0) { index.push('' + toID(name.slice(i2)) + ' ' + type + ' ' + id + ' ' + toID(name.slice(0, i2)).length); @@ -248,8 +252,7 @@ function requireNoCache(pathSpec) { index[index.indexOf('ditto pokemon')] = 'ditto egggroup'; index[index.indexOf('ditto egggroup')] = 'ditto pokemon'; - - let BattleSearchIndex = index.map(x => { + const BattleSearchIndex = index.map(x => { x = x.split(' '); if (x.length > 3) { x[3] = Number(x[3]); @@ -258,7 +261,7 @@ function requireNoCache(pathSpec) { return x; }); - let BattleSearchIndexOffset = BattleSearchIndex.map((entry, i) => { + const BattleSearchIndexOffset = BattleSearchIndex.map(entry => { const id = entry[0]; let name = ''; switch (entry[1]) { @@ -281,13 +284,15 @@ function requireNoCache(pathSpec) { return ''; }); - let BattleSearchCountIndex = {}; + const BattleSearchCountIndex = {}; for (const type in Dex.data.TypeChart) { - BattleSearchCountIndex[type + ' move'] = Object.keys(Dex.data.Moves).filter(id => (Dex.data.Moves[id].type === type)).length; + BattleSearchCountIndex[type + ' move'] = Object.keys(Dex.data.Moves) + .filter(id => (Dex.data.Moves[id].type === type)).length; } for (const type in Dex.data.TypeChart) { - BattleSearchCountIndex[type + ' pokemon'] = Object.keys(Dex.data.Pokedex).filter(id => (Dex.data.Pokedex[id].types.indexOf(type) >= 0)).length; + BattleSearchCountIndex[type + ' pokemon'] = Object.keys(Dex.data.Pokedex) + .filter(id => (Dex.data.Pokedex[id].types.indexOf(type) >= 0)).length; } let buf = '// DO NOT EDIT - automatically built with build-tools/build-indexes\n\n'; @@ -369,7 +374,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); const species = Dex.mod(gen).species.get(id); const baseSpecies = Dex.mod(gen).species.get(species.baseSpecies); if (species.gen > genNum) continue; - const tier = (() => { + const speciesTier = (() => { if (isMetBattle) { let tier = species.tier; if (species.isNonstandard) { @@ -416,7 +421,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); return tier; } if (isLetsGo) { - let validNum = (baseSpecies.num <= 151 && species.num >= 1) || [808, 809].includes(baseSpecies.num); + const validNum = (baseSpecies.num <= 151 && species.num >= 1) || [808, 809].includes(baseSpecies.num); if (!validNum) return 'Illegal'; if (species.forme && !['Alola', 'Mega', 'Mega-X', 'Mega-Y', 'Starter'].includes(species.forme)) return 'Illegal'; if (species.name === 'Pikachu-Alola') return 'Illegal'; @@ -442,7 +447,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); if (species.isNonstandard && ['LGPE', 'CAP', 'Future'].includes(species.isNonstandard)) return 'Illegal'; return species.tags.includes('Mythical') ? 'Mythical' : species.tags.includes('Restricted Legendary') ? 'Restricted Legendary' : - species.nfe ? (species.prevo ? 'NFE' : 'LC') : 'Regular'; + species.nfe ? (species.prevo ? 'NFE' : 'LC') : 'Regular'; } if (species.tier === 'CAP' || species.tier === 'CAP NFE' || species.tier === 'CAP LC') { return species.tier; @@ -455,7 +460,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); } return species.tier; })(); - overrideTier[species.id] = tier; + overrideTier[species.id] = speciesTier; if (species.forme) { if ( [ @@ -467,8 +472,8 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); } } - if (!tierTable[tier]) tierTable[tier] = []; - tierTable[tier].push(id); + if (!tierTable[speciesTier]) tierTable[speciesTier] = []; + tierTable[speciesTier].push(id); if (genNum === 9) { const ubersUU = Dex.formats.get(gen + 'ubersuu'); @@ -610,11 +615,16 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); if (gen === 'gen4') { return ["CAP", "CAP NFE", "CAP LC", "AG", "Uber", "OU", "(OU)", "UUBL", "UU", "NUBL", "NU", "NFE", "LC"]; } - return ["CAP", "CAP NFE", "CAP LC", "AG", "Uber", "(Uber)", "OU", "(OU)", "UUBL", "UU", "RUBL", "RU", "NUBL", "NU", "PUBL", "PU", "ZUBL", "ZU", "New", "NFE", "LC", "Unreleased"]; + return [ + "CAP", "CAP NFE", "CAP LC", "AG", "Uber", "(Uber)", "OU", "(OU)", "UUBL", "UU", "RUBL", "RU", "NUBL", "NU", "PUBL", "PU", "ZUBL", "ZU", "New", "NFE", "LC", "Unreleased", + ]; })(); for (const tier of tierOrder) { - if (tier in {OU:1, AG:1, Uber:1, UU:1, RU:1, NU:1, PU:1, ZU: 1, NFE:1, LC:1, DOU:1, DUU:1, "(DUU)":1, New:1, Legal:1, Regular:1, "Restricted Legendary":1, "CAP LC":1}) { + if (tier in { + OU: 1, AG: 1, Uber: 1, UU: 1, RU: 1, NU: 1, PU: 1, ZU: 1, NFE: 1, LC: 1, DOU: 1, DUU: 1, + "(DUU)": 1, New: 1, Legal: 1, Regular: 1, "Restricted Legendary": 1, "CAP LC": 1, + }) { let usedTier = tier; if (usedTier === "(DUU)") usedTier = "DNU"; formatSlices[usedTier] = tiers.length; @@ -907,7 +917,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); } if (available) available = !gen4HMs.has(moveid); - let minUpperGen = available ? 5 : Math.min( + const minUpperGen = available ? 5 : Math.min( ...gens.filter(gen => gen > 4) ); legalGens += '0123456789'.slice(minUpperGen); @@ -1001,7 +1011,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); } if (available) available = !gen4HMs.has(moveid); - let minUpperGen = available ? 5 : Math.min( + const minUpperGen = available ? 5 : Math.min( ...gens.filter(gen => gen > 4) ); legalGens += '012345678'.slice(minUpperGen); @@ -1044,7 +1054,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); } if (available) available = !gen4HMs.has(moveid); - let minUpperGen = available ? 5 : Math.min( + const minUpperGen = available ? 5 : Math.min( ...gens.filter(gen => gen > 4) ); legalGens += '0123456789'.slice(minUpperGen); @@ -1090,7 +1100,7 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); } if (available) available = !gen4HMs.has(moveid); - let minUpperGen = available ? 5 : Math.min( + const minUpperGen = available ? 5 : Math.min( ...gens.filter(gen => gen > 4) ); legalGens += '0123456789'.slice(minUpperGen); @@ -1113,8 +1123,12 @@ process.stdout.write("Building `data/teambuilder-tables.js`... "); } // Client relevant data that should be overriden by past gens and mods - const overrideSpeciesKeys = ['abilities', 'baseStats', 'cosmeticFormes', 'isNonstandard', 'requiredItems', 'types', 'unreleasedHidden']; - const overrideMoveKeys = ['accuracy', 'basePower', 'category', 'desc', 'flags', 'isNonstandard', 'pp', 'priority', 'shortDesc', 'target', 'type']; + const overrideSpeciesKeys = [ + 'abilities', 'baseStats', 'cosmeticFormes', 'isNonstandard', 'requiredItems', 'types', 'unreleasedHidden', + ]; + const overrideMoveKeys = [ + 'accuracy', 'basePower', 'category', 'desc', 'flags', 'isNonstandard', 'pp', 'priority', 'shortDesc', 'target', 'type', + ]; const overrideAbilityKeys = ['desc', 'flags', 'isNonstandard', 'rating', 'shortDesc']; const overrideItemKeys = ['desc', 'fling', 'isNonstandard', 'naturalGift', 'shortDesc']; diff --git a/build-tools/build-learnsets b/build-tools/build-learnsets index 1e149dbe8..c0e9aeddb 100755 --- a/build-tools/build-learnsets +++ b/build-tools/build-learnsets @@ -53,11 +53,11 @@ function updateLearnsets(callback) { ); } - newLearnsetsG6[speciesid] = {learnset: newLearnset}; + newLearnsetsG6[speciesid] = { learnset: newLearnset }; } const buf = []; - const pokemonList = Object.keys(Pokedex).map(speciesId => Pokedex[speciesId]).sort(function (a, b) { + const pokemonList = Object.keys(Pokedex).map(speciesId => Pokedex[speciesId]).sort((a, b) => { // Missingno. goes first (zeroth); afterwards, CAP in descending dex order (increasingly negative) // Finally, standard Pokémon in ascending dex order if (a.num <= 0 && b.num > 0) return -1; @@ -89,11 +89,9 @@ try { // It doesn't exist currently, but it will by the end of the script execution. // Any other error is unacceptable and will throw. } -try { +{ updateStats = fs.statSync(thisFile); updateMTime = updateStats.mtime.getTime(); -} catch (err) { - throw err; // !! } // update learnsets-g6 @@ -105,7 +103,7 @@ let learnsetsG6ToUpdate = true; try { learnsetsStats = fs.statSync(path.join(rootDir, 'data', 'learnsets.js')); -} catch (err) { +} catch { // Couldn't find learnsets.js, but that's not the end of the world: skip to next task. console.error("Couldn't find `data/learnsets.js`. Task aborted."); learnsetsG6ToUpdate = false; @@ -124,10 +122,13 @@ if (learnsetsG6ToUpdate) { } } -if (learnsetsG6ToUpdate && (!indexStats || !learnsetsG6Stats || indexMTime < updateMTime || indexMTime < learnsetsStats.mtime.getTime() || indexMTime < learnsetsG6Stats.mtime.getTime())) { +if (learnsetsG6ToUpdate && ( + !indexStats || !learnsetsG6Stats || indexMTime < updateMTime || indexMTime < learnsetsStats.mtime.getTime() || + indexMTime < learnsetsG6Stats.mtime.getTime() +)) { // Only merge learnsets.js with learnsets-g6.js if any of those files, or this one, have been modified recently (or if we don't know what "recently" means) - updateLearnsets(function (err) { + updateLearnsets(err => { if (err) { let stack = err.stack || ''; stack = "File `data/learnsets-g6` failed to update.\n" + stack; diff --git a/build-tools/build-minidex b/build-tools/build-minidex index dd4cfce04..e42ece641 100755 --- a/build-tools/build-minidex +++ b/build-tools/build-minidex @@ -21,7 +21,6 @@ exports.BattlePokemonSprites = { substitute:{exists:false, front:{w:34, h:39}, back:{w:37, h:38}}, `; - let g5buf = `/* DO NOT EDIT @@ -31,26 +30,26 @@ THIS FILE IS AUTOGENERATED BY ./build-tools/build-minidex exports.BattlePokemonSpritesBW = { `; -function sizeObj(path) { +function sizeObj(objPath) { try { - let size = imageSize(path); + const size = imageSize(objPath); return { w: size.width, h: size.height, }; - } catch (e) {} + } catch {} } function updateSizes() { - for (let baseid in Dex.data.Pokedex) { - let species = Dex.species.get(baseid); - for (let formeName of [''].concat(species.cosmeticFormes || [])) { + for (const baseid in Dex.data.Pokedex) { + const species = Dex.species.get(baseid); + for (const formeName of [''].concat(species.cosmeticFormes || [])) { let spriteid = species.spriteid; if (formeName) spriteid += '-' + toID(formeName).slice(species.id.length); - let id = toID(spriteid); + const id = toID(spriteid); { - let row = {num: species.num}; + const row = { num: species.num }; const frontSize = sizeObj('sprites/ani/' + spriteid + '.gif'); if (frontSize) row.front = frontSize; const frontSizeF = sizeObj('sprites/ani/' + spriteid + '-f.gif'); @@ -65,7 +64,7 @@ function updateSizes() { } { - let g5row = {num: species.num}; + const g5row = { num: species.num }; const frontSize = sizeObj('sprites/gen5ani/' + spriteid + '.gif'); if (frontSize) g5row.front = frontSize; const frontSizeF = sizeObj('sprites/gen5ani/' + spriteid + '-f.gif'); @@ -99,6 +98,6 @@ if (fs.existsSync('sprites/ani/')) { try { fs.unlinkSync('data/pokedex-mini.js'); fs.unlinkSync('data/pokedex-mini-bw.js'); - } catch (e) {} + } catch {} console.log('SKIPPED'); } diff --git a/build-tools/compiler.js b/build-tools/compiler.js index 8250fd321..57042abc7 100644 --- a/build-tools/compiler.js +++ b/build-tools/compiler.js @@ -18,207 +18,204 @@ const sourceMap = require('source-map'); const VERBOSE = false; function outputFileSync(filePath, res, opts) { - fs.mkdirSync(path.dirname(filePath), {recursive: true}); + fs.mkdirSync(path.dirname(filePath), { recursive: true }); - // we've requested explicit sourcemaps to be written to disk - if ( - res.map && - opts.sourceMaps && - opts.sourceMaps !== "inline" - ) { - const mapLoc = filePath + ".map"; - res.code += "\n//# sourceMappingURL=" + path.basename(mapLoc); - res.map.file = path.basename(filePath); - fs.writeFileSync(mapLoc, JSON.stringify(res.map)); - } - - fs.writeFileSync(filePath, res.code); -} - -function slash(path) { - const isExtendedLengthPath = /^\\\\\?\\/.test(path); - const hasNonAscii = /[^\u0000-\u0080]+/.test(path); - - if (isExtendedLengthPath || hasNonAscii) { - return path; + // we've requested explicit sourcemaps to be written to disk + if ( + res.map && + opts.sourceMaps && + opts.sourceMaps !== "inline" + ) { + const mapLoc = filePath + ".map"; + res.code += "\n//# sourceMappingURL=" + path.basename(mapLoc); + res.map.file = path.basename(filePath); + fs.writeFileSync(mapLoc, JSON.stringify(res.map)); } - return path.replace(/\\/g, '/'); + fs.writeFileSync(filePath, res.code); +} + +function slash(filePath) { + const isExtendedLengthPath = /^\\\\\?\\/.test(filePath); + // eslint-disable-next-line no-control-regex + const hasNonAscii = /[^\u0000-\u0080]+/.test(filePath); + + if (isExtendedLengthPath || hasNonAscii) { + return filePath; + } + + return filePath.replace(/\\/g, '/'); } async function combineResults(fileResults, sourceMapOptions, opts) { - let map = null; - if (fileResults.some(result => result?.map)) { - map = new sourceMap.SourceMapGenerator(sourceMapOptions); - } + let map = null; + if (fileResults.some(result => result?.map)) { + map = new sourceMap.SourceMapGenerator(sourceMapOptions); + } - let code = ""; - let offset = 0; + let code = ""; + let offset = 0; - for (const result of fileResults) { - if (!result) continue; + for (const result of fileResults) { + if (!result) continue; - code += result.code + "\n"; + code += result.code + "\n"; - if (result.map) { - const consumer = await new sourceMap.SourceMapConsumer(result.map); - const sources = new Set(); + if (result.map) { + const consumer = await new sourceMap.SourceMapConsumer(result.map); + const sources = new Set(); - consumer.eachMapping(function (mapping) { - if (mapping.source != null) sources.add(mapping.source); + consumer.eachMapping(mapping => { + if (mapping.source != null) sources.add(mapping.source); - map.addMapping({ - generated: { - line: mapping.generatedLine + offset, - column: mapping.generatedColumn, - }, - source: mapping.source, - original: - mapping.source == null - ? null - : { - line: mapping.originalLine, - column: mapping.originalColumn, - }, - }); - }); + map.addMapping({ + generated: { + line: mapping.generatedLine + offset, + column: mapping.generatedColumn, + }, + source: mapping.source, + original: + mapping.source == null ? + null : { + line: mapping.originalLine, + column: mapping.originalColumn, + }, + }); + }); - for (const source of sources) { - const content = consumer.sourceContentFor(source, true); - if (content !== null) { - map.setSourceContent(source, content); - } - } + for (const source of sources) { + const content = consumer.sourceContentFor(source, true); + if (content !== null) { + map.setSourceContent(source, content); + } + } - offset = code.split("\n").length - 1; - } - } + offset = code.split("\n").length - 1; + } + } - if (opts.sourceMaps === "inline") { - const json = JSON.stringify(map); - const base64 = Buffer.from(json, 'utf8').toString('base64'); - code += "\n//# sourceMappingURL=data:application/json;charset=utf-8;base64," + base64; - } + if (opts.sourceMaps === "inline") { + const json = JSON.stringify(map); + const base64 = Buffer.from(json, 'utf8').toString('base64'); + code += "\n//# sourceMappingURL=data:application/json;charset=utf-8;base64," + base64; + } - return { - map: map, - code: code, - }; + return { map, code }; } function noRebuildNeeded(src, dest) { - try { - const srcStat = fs.statSync(src, {throwIfNoEntry: false}); - if (!srcStat) return true; - const destStat = fs.statSync(dest); - if (srcStat.ctimeMs < destStat.ctimeMs) return true; - } catch (e) {} + try { + const srcStat = fs.statSync(src, { throwIfNoEntry: false }); + if (!srcStat) return true; + const destStat = fs.statSync(dest); + if (srcStat.ctimeMs < destStat.ctimeMs) return true; + } catch {} - return false; + return false; } function compileToDir(srcDir, destDir, opts = {}) { - const incremental = opts.incremental; - delete opts.incremental; + const incremental = opts.incremental; + delete opts.incremental; - function handleFile(src, base) { - let relative = path.relative(base, src); + function handleFile(src, base) { + let relative = path.relative(base, src); - if (!relative.endsWith('.ts') && !relative.endsWith('.tsx')) { - return 0; - } - if (relative.endsWith('.d.ts')) return 0; + if (!relative.endsWith('.ts') && !relative.endsWith('.tsx')) { + return 0; + } + if (relative.endsWith('.d.ts')) return 0; - relative = relative.slice(0, relative.endsWith('.tsx') ? -4 : -3) + '.js'; + relative = relative.slice(0, relative.endsWith('.tsx') ? -4 : -3) + '.js'; - const dest = path.join(destDir, relative); + const dest = path.join(destDir, relative); - if (incremental && noRebuildNeeded(src, dest)) return 0; + if (incremental && noRebuildNeeded(src, dest)) return 0; - const res = babel.transformFileSync(src, { - ...opts, - sourceFileName: slash(path.relative(dest + "/..", src)), - }); + const res = babel.transformFileSync(src, { + ...opts, + sourceFileName: slash(path.relative(dest + "/..", src)), + }); - if (!res) return 0; + if (!res) return 0; - outputFileSync(dest, res, opts); - fs.chmodSync(dest, fs.statSync(src).mode); + outputFileSync(dest, res, opts); + fs.chmodSync(dest, fs.statSync(src).mode); - if (VERBOSE) { - console.log(src + " -> " + dest); - } + if (VERBOSE) { + console.log(src + " -> " + dest); + } - return 1; - } + return 1; + } - function handle(src, base) { - const stat = fs.statSync(src, {throwIfNoEntry: false}); + function handle(src, base) { + const stat = fs.statSync(src, { throwIfNoEntry: false }); - if (!stat) return 0; + if (!stat) return 0; - if (stat.isDirectory()) { - if (!base) base = src; + if (stat.isDirectory()) { + if (!base) base = src; - let count = 0; + let count = 0; - const files = fs.readdirSync(src); - for (const filename of files) { - if (filename.startsWith('.')) continue; + const files = fs.readdirSync(src); + for (const filename of files) { + if (filename.startsWith('.')) continue; - const srcFile = path.join(src, filename); + const srcFile = path.join(src, filename); - count += handle(srcFile, base); - } + count += handle(srcFile, base); + } - return count; - } else { - if (!base) base = path.dirname(src); - return handleFile(src, base); - } - } + return count; + } else { + if (!base) base = path.dirname(src); + return handleFile(src, base); + } + } - let total = 0; - fs.mkdirSync(destDir, {recursive: true}); - const srcDirs = typeof srcDir === 'string' ? [srcDir] : srcDir; - for (const dir of srcDirs) total += handle(dir); - if (incremental) opts.incremental = true; // incredibly dumb hack to preserve the option - return total; + let total = 0; + fs.mkdirSync(destDir, { recursive: true }); + const srcDirs = typeof srcDir === 'string' ? [srcDir] : srcDir; + for (const dir of srcDirs) total += handle(dir); + if (incremental) opts.incremental = true; // incredibly dumb hack to preserve the option + return total; } function compileToFile(srcFile, destFile, opts) { - const incremental = opts.incremental; - delete opts.incremental; + const incremental = opts.incremental; + delete opts.incremental; - const srcFiles = typeof srcFile === 'string' ? [srcFile] : srcFile; + const srcFiles = typeof srcFile === 'string' ? [srcFile] : srcFile; - if (incremental && srcFiles.every(src => noRebuildNeeded(src, destFile))) { - opts.incremental = true; // incredibly dumb hack to preserve the option - return 0; - } + if (incremental && srcFiles.every(src => noRebuildNeeded(src, destFile))) { + opts.incremental = true; // incredibly dumb hack to preserve the option + return 0; + } - const results = []; + const results = []; - for (const src of srcFiles) { - if (!fs.existsSync(src)) continue; + for (const src of srcFiles) { + if (!fs.existsSync(src)) continue; - const res = babel.transformFileSync(src, opts); + const res = babel.transformFileSync(src, opts); - if (res) results.push(res); + if (res) results.push(res); - if (VERBOSE) console.log(src + " ->"); - } + if (VERBOSE) console.log(src + " ->"); + } - combineResults(results, { - file: path.basename(destFile), - sourceRoot: opts.sourceRoot, - }, opts).then(combined => { - outputFileSync(destFile, combined, opts); - }); + combineResults(results, { + file: path.basename(destFile), + sourceRoot: opts.sourceRoot, + }, opts).then(combined => { + outputFileSync(destFile, combined, opts); + }); - if (VERBOSE) console.log("-> " + destFile); - if (incremental) opts.incremental = true; // incredibly dumb hack to preserve the option - return results.length; + if (VERBOSE) console.log("-> " + destFile); + if (incremental) opts.incremental = true; // incredibly dumb hack to preserve the option + return results.length; } exports.compileToDir = compileToDir; diff --git a/build-tools/swap-configs b/build-tools/swap-configs index 51eb34579..3a57a9b98 100755 --- a/build-tools/swap-configs +++ b/build-tools/swap-configs @@ -3,7 +3,3 @@ cd "$(dirname "$0")" cd .. cp config/config.js config/config.js.old cp config/head-custom.html config/head-custom.html.old -mv -f config/config-test.js config/config.js -mv -f config/head-custom-test.html config/head-custom.html -mv -i config/config.js.old config/config-test.js -mv -i config/head-custom.html.old config/head-custom-test.html diff --git a/build-tools/update b/build-tools/update index 23d52a894..9ad2c8082 100755 --- a/build-tools/update +++ b/build-tools/update @@ -20,9 +20,10 @@ process.chdir(rootDir); const AUTOCONFIG_START = '/*** Begin automatically generated configuration ***/'; const AUTOCONFIG_END = '/*** End automatically generated configuration ***/'; +const UTF8 = { encoding: 'utf8' }; function escapeRegex(string) { - return string.replace(/[\/\*\.]/g, '\\$&'); + return string.replace(/[/*.]/g, '\\$&'); } /********************************************************* @@ -42,7 +43,7 @@ try { }); const origin = ('' + commit).trim(); version += ` (${head.slice(0, 8)}${head !== origin ? `/${origin.slice(0, 8)}` : ''})`; -} catch (e) {} +} catch {} const routes = JSON.parse(fs.readFileSync('config/routes.json')); const autoconfigRegex = new RegExp(`${escapeRegex(AUTOCONFIG_START)}[^]+${escapeRegex(AUTOCONFIG_END)}`); @@ -59,7 +60,7 @@ Config.routes = { ${AUTOCONFIG_END}`; // remove old automatically generated configuration and add the new one -let configBuf = fs.readFileSync('config/config.js', {encoding: 'utf8'}); +let configBuf = fs.readFileSync('config/config.js', UTF8); if (autoconfigRegex.test(configBuf)) { configBuf = configBuf.replace(autoconfigRegex, autoconfig); } else { @@ -74,11 +75,12 @@ console.log("DONE"); process.stdout.write("Compiling TS files... "); -let compileStartTime = process.hrtime(); +const compileStartTime = process.hrtime(); let compiledFiles = 0; // Babel can't find babelrc if we try to compile stuff in caches/pokemon-showdown/ fsr -let compileOpts = Object.assign(eval('(' + fs.readFileSync('.babelrc') + ')'), { +// eslint-disable-next-line no-eval +const compileOpts = Object.assign(eval('(' + fs.readFileSync('.babelrc') + ')'), { babelrc: false, incremental: true, ignore: ['play.pokemonshowdown.com/src/battle-animations.js', 'play.pokemonshowdown.com/src/battle-animations-moves.js'], @@ -95,7 +97,7 @@ if (process.argv[2] === 'full') { fs.statSync('play.pokemonshowdown.com/data/graphics.js'); // graphics.js exists, recompile it delete compileOpts.ignore; - } catch (e) {} + } catch {} } compiledFiles += compiler.compileToDir(`play.pokemonshowdown.com/src`, `play.pokemonshowdown.com/js`, compileOpts); @@ -148,18 +150,18 @@ function addCachebuster(_, attr, url, urlQuery) { let hash = Math.random(); // just in case creating the hash fails try { const filename = url.slice(1).replace('/' + routes.client + '/', ''); - const fstr = fs.readFileSync(filename, {encoding: 'utf8'}); + const fstr = fs.readFileSync(filename, UTF8); hash = crypto.createHash('md5').update(fstr).digest('hex').substr(0, 8); - } catch (e) {} + } catch {} return attr + '="' + url + '?' + hash + '"'; } else { // hardcoded to Replays rn; TODO: generalize let hash; try { - const fstr = fs.readFileSync('replay.pokemonshowdown.com/' + url, {encoding: 'utf8'}); + const fstr = fs.readFileSync('replay.pokemonshowdown.com/' + url, UTF8); hash = crypto.createHash('md5').update(fstr).digest('hex').substr(0, 8); - } catch (e) {} + } catch {} return attr + '="' + url + '?' + (hash || 'v1') + '"'; } @@ -169,13 +171,13 @@ function addCachebuster(_, attr, url, urlQuery) { } // add hashes to js and css files and rewrite URLs -let indexContents = fs.readFileSync('play.pokemonshowdown.com/index.template.html', {encoding: 'utf8'}); +let indexContents = fs.readFileSync('play.pokemonshowdown.com/index.template.html', UTF8); indexContents = indexContents.replace(URL_REGEX, addCachebuster); -let preactIndexContents = fs.readFileSync('play.pokemonshowdown.com/preactalpha.template.html', {encoding: 'utf8'}); +let preactIndexContents = fs.readFileSync('play.pokemonshowdown.com/preactalpha.template.html', UTF8); preactIndexContents = preactIndexContents.replace(URL_REGEX, addCachebuster); -let crossprotocolContents = fs.readFileSync('play.pokemonshowdown.com/crossprotocol.template.html', {encoding: 'utf8'}); +let crossprotocolContents = fs.readFileSync('play.pokemonshowdown.com/crossprotocol.template.html', UTF8); crossprotocolContents = crossprotocolContents.replace(URL_REGEX, addCachebuster); -let replayEmbedContents = fs.readFileSync('play.pokemonshowdown.com/js/replay-embed.template.js', {encoding: 'utf8'}); +let replayEmbedContents = fs.readFileSync('play.pokemonshowdown.com/js/replay-embed.template.js', UTF8); replayEmbedContents = replayEmbedContents.replace(/play\.pokemonshowdown\.com/g, routes.client); // add news, only if it's actually likely to exist @@ -199,11 +201,11 @@ indexContents = indexContents.replace(//g, news); let indexContents2 = ''; try { - let indexContentsOld = indexContents; + const indexContentsOld = indexContents; indexContents = indexContents.replace(//g, '' + fs.readFileSync('config/head-custom.html')); - indexContents2 = indexContentsOld.replace(//g, '' + fs.readFileSync('config/head-custom-test.html')); - indexContents2 = indexContents2.replace(/src="\/\/play.pokemonshowdown.com\/config\/config.js\?[a-z0-9]*"/, 'src="//play.pokemonshowdown.com/config/config-test.js?4"'); -} catch (e) {} + indexContents2 = indexContentsOld + .replace(//g, '' + fs.readFileSync('config/head-custom-test.html')); +} catch {} fs.writeFileSync('play.pokemonshowdown.com/index.html', indexContents); if (indexContents2) { @@ -213,7 +215,7 @@ fs.writeFileSync('play.pokemonshowdown.com/preactalpha.html', preactIndexContent fs.writeFileSync('play.pokemonshowdown.com/crossprotocol.html', crossprotocolContents); fs.writeFileSync('play.pokemonshowdown.com/js/replay-embed.js', replayEmbedContents); -let replaysContents = fs.readFileSync('replay.pokemonshowdown.com/index.template.php', {encoding: 'utf8'}); +let replaysContents = fs.readFileSync('replay.pokemonshowdown.com/index.template.php', UTF8); replaysContents = replaysContents.replace(URL_REGEX, addCachebuster); fs.writeFileSync('replay.pokemonshowdown.com/index.php', replaysContents); diff --git a/caches/README.md b/caches/README.md index 3e07b85a7..d0fb426f2 100644 --- a/caches/README.md +++ b/caches/README.md @@ -6,4 +6,4 @@ This directory is for caches. Everything here should be safe to delete. Things cached here: - `pokemon-showdown` a checkout of the server repo, used in the build process (mostly for stuff in `play.pokemonshowdown.com/data/`) -- `eslint-*.json` eslint cache files +- `eslintcache.json` eslint cache files diff --git a/config/config-example.js b/config/config-example.js index db07ffc04..df8551b4d 100644 --- a/config/config-example.js +++ b/config/config-example.js @@ -5,7 +5,7 @@ var Config = Config || {}; Config.bannedHosts = ['cool.jit.su', 'pokeball-nixonserver.rhcloud.com']; Config.whitelist = [ - 'wikipedia.org', + 'wikipedia.org' // The full list is maintained outside of this repository so changes to it // don't clutter the commit log. Feel free to copy our list for your own diff --git a/eslint-ps-standard.mjs b/eslint-ps-standard.mjs new file mode 100644 index 000000000..81f249395 --- /dev/null +++ b/eslint-ps-standard.mjs @@ -0,0 +1,435 @@ +/** + * Pokemon Showdown standard style + * + * This is Showdown's shared ESLint configuration. Each project overrides + * at least a little of it here and there, but these are the rules we use + * unless there's a good reason otherwise. + */ +// @ts-check + +import eslint from '@eslint/js'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; +import stylistic from '@stylistic/eslint-plugin'; + +/** @typedef {import('typescript-eslint').Config} ConfigFile */ +/** @typedef {Awaited[number]} Config */ +/** @typedef {NonNullable} Rules */ + +export { eslint, globals, tseslint, stylistic }; + +/** @type {Config} */ +export const plugin = { + plugins: { + '@stylistic': stylistic, + '@typescript-eslint': tseslint.plugin, + }, +}; + +/** @type {typeof tseslint.config} */ +export const configure = (...args) => [ + plugin, + ...tseslint.config(...args), +]; + +/** @type {NonNullable} */ +export const defaultRules = { + ...stylistic.configs.customize({ + braceStyle: '1tbs', + indent: 'tab', + semi: true, + jsx: true, + // ... + }).rules, + + // TODO rules to revisit + // ===================== + + // nice to have but we mostly know && || precedence so not urgent to fix + "@stylistic/no-mixed-operators": "off", + + // test only (should never be committed, but useful when testing) + // ============================================================== + // do we want unused args/destructures to start with _? unsure + "no-unused-vars": ["warn", { + args: "all", + argsIgnorePattern: ".", + caughtErrors: "all", + destructuredArrayIgnorePattern: ".", + ignoreRestSiblings: true, + }], + // "no-unused-vars": ["warn", { + // args: "all", + // argsIgnorePattern: "^_", + // caughtErrors: "all", + // destructuredArrayIgnorePattern: "^_", + // ignoreRestSiblings: true + // }], + "@stylistic/max-len": ["warn", { + "code": 120, "tabWidth": 0, + // DO NOT EDIT DIRECTLY: see bottom of file for source + "ignorePattern": "^\\s*(?:\\/\\/ \\s*)?(?:(?:export )?(?:let |const |readonly )?[a-zA-Z0-9_$.]+(?: \\+?=>? )|[a-zA-Z0-9$]+: \\[?|(?:return |throw )?(?:new )?(?:[a-zA-Z0-9$.]+\\()?)?(?:Utils\\.html|(?:this\\.)?(?:room\\.)?tr|\\$\\()?['\"`/]", + }], + "prefer-const": ["warn", { "destructuring": "all" }], + + // PS code (code specific to PS) + // ============================= + "@stylistic/new-parens": "off", // used for the `new class {...}` pattern + "no-prototype-builtins": "off", + + // defaults too strict + // =================== + "no-empty": ["error", { "allowEmptyCatch": true }], + "no-case-declarations": "off", + + // probably bugs + // ============= + "array-callback-return": "error", + "no-constructor-return": "error", + "no-dupe-class-members": "error", + "no-extend-native": "error", + "no-extra-bind": "warn", + "no-extra-label": "warn", + "no-eval": "error", + "no-implied-eval": "error", + "no-inner-declarations": ["error", "functions"], + "no-iterator": "error", + "no-fallthrough": ["error", { allowEmptyCase: true, reportUnusedFallthroughComment: true }], + "no-promise-executor-return": ["error", { allowVoid: true }], + "no-return-assign": "error", + "no-self-compare": "error", + "no-sequences": "error", + "no-shadow": "error", + "no-template-curly-in-string": "error", + "no-throw-literal": "warn", + "no-unmodified-loop-condition": "error", + // best way to read first key of object + // "no-unreachable-loop": "error", + // ternary is used to convert callbacks to Promises + // tagged templates are used for the SQL library + "no-unused-expressions": ["error", { allowTernary: true, allowTaggedTemplates: true, enforceForJSX: true }], + "no-useless-call": "error", + // "no-useless-assignment": "error", + "require-atomic-updates": "error", + + // syntax style (local syntactical, usually autofixable formatting decisions) + // =========================================================================== + "@stylistic/member-delimiter-style": ["error", { + multiline: { delimiter: "comma", requireLast: true }, + singleline: { delimiter: "comma", requireLast: false }, + overrides: { interface: { + multiline: { delimiter: "semi", requireLast: true }, + singleline: { delimiter: "semi", requireLast: false }, + } }, + }], + "default-case-last": "error", + "eqeqeq": ["error", "always", { null: "ignore" }], + "no-array-constructor": "error", + "no-duplicate-imports": "error", + "no-implicit-coercion": ["error", { allow: ["!!", "+"] }], + "no-multi-str": "error", + "no-object-constructor": "error", + "no-proto": "error", + "no-unneeded-ternary": "error", + "no-useless-computed-key": "error", + "no-useless-constructor": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "error", + "object-shorthand": ["error", "always"], + "operator-assignment": ["error", "always"], + "prefer-arrow-callback": "error", + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": "error", + "prefer-regex-literals": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "radix": ["error", "as-needed"], + + // syntax style, overriding base + // ============================= + "@stylistic/quotes": "off", + "@stylistic/quote-props": "off", + "@stylistic/function-call-spacing": "error", + "@stylistic/arrow-parens": ["error", "as-needed"], + "@stylistic/comma-dangle": ["error", { + "arrays": "always-multiline", + "objects": "always-multiline", + "imports": "always-multiline", + "exports": "always-multiline", + "functions": "never", + "importAttributes": "always-multiline", + "dynamicImports": "always-multiline", + "enums": "always-multiline", + "generics": "always-multiline", + "tuples": "always-multiline", + }], + "@stylistic/jsx-wrap-multilines": "off", + "@stylistic/jsx-closing-bracket-location": ["error", "line-aligned"], + // "@stylistic/jsx-closing-tag-location": ["error", "line-aligned"], + "@stylistic/jsx-closing-tag-location": "off", + "@stylistic/jsx-one-expression-per-line": "off", + "@stylistic/jsx-max-props-per-line": "off", + "@stylistic/jsx-function-call-newline": "off", + "no-restricted-syntax": ["error", + { selector: "CallExpression[callee.name='Symbol']", message: "Annoying to serialize, just use a string" }, + ], + + // whitespace + // ========== + "@stylistic/block-spacing": "error", + "@stylistic/operator-linebreak": ["error", "after"], + "@stylistic/max-statements-per-line": ["error", { max: 3, ignoredNodes: ['BreakStatement'] }], + "@stylistic/lines-between-class-members": "off", + "@stylistic/multiline-ternary": "off", + "@stylistic/object-curly-spacing": ["error", "always"], + "@stylistic/indent": ["error", "tab", { "flatTernaryExpressions": true }], +}; + +/** @type {NonNullable} */ +export const defaultRulesTS = { + ...defaultRules, + + // TODO: revisit + // we should do this someday but it'd have to be a gradual manual process + // "@typescript-eslint/explicit-module-boundary-types": "off", + // like above but slightly harder, so do that one first + // "@typescript-eslint/explicit-function-return-type": "off", + // probably we should settle on a standard someday + // "@typescript-eslint/member-ordering": "off", + // "@typescript-eslint/no-extraneous-class": "error", + // maybe we should consider this + "@typescript-eslint/consistent-indexed-object-style": "off", + + // typescript-eslint specific + // ========================== + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": defaultRules["no-unused-vars"], + "no-shadow": "off", + "@typescript-eslint/no-shadow": defaultRules["no-shadow"], + "no-dupe-class-members": "off", + "@typescript-eslint/no-dupe-class-members": defaultRules["no-dupe-class-members"], + "no-unused-expressions": "off", + "@typescript-eslint/no-unused-expressions": defaultRules["no-unused-expressions"], + + // defaults too strict + // =================== + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-non-null-assertion": "off", + + // probably bugs + // ============= + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-misused-new": "error", + // no way to get it to be less strict unfortunately + // "@typescript-eslint/no-misused-spread": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + + // naming style + // ============ + "@typescript-eslint/naming-convention": ["error", { + "selector": ["class", "interface", "typeAlias"], + "format": ["PascalCase"], + }], + + // syntax style (local syntactical, usually autofixable formatting decisions) + // =========================================================================== + "@typescript-eslint/no-namespace": ["error", { allowDeclarations: true }], + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/consistent-type-assertions": ["error", { "assertionStyle": "as" }], + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/consistent-type-imports": ["error", { fixStyle: "inline-type-imports" }], + "@typescript-eslint/explicit-member-accessibility": ["error", { "accessibility": "no-public" }], + "@typescript-eslint/parameter-properties": "error", + // `source` and `target` are frequently used as variables that may point to `this` + // or to another `Pokemon` object, depending on how the given method is invoked + "@typescript-eslint/no-this-alias": ["error", { "allowedNames": ["source", "target"] }], + // unfortunately this has lots of false positives without strict array/object property access + // "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", +}; + +/** @type {NonNullable} */ +export const defaultRulesTSChecked = { + ...defaultRulesTS, + + // style + // ===== + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/restrict-plus-operands": ["error", { + allowBoolean: false, allowNullish: false, allowNumberAndString: false, allowRegExp: false, + }], + "@typescript-eslint/restrict-template-expressions": ["error", { + allow: [{ name: ['Error', 'URL', 'URLSearchParams'], from: 'lib' }], + allowBoolean: false, allowNever: false, allowNullish: false, allowRegExp: false, + }], + + // we use `any` + // ============ + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unsafe-argument": "off", + + // yes-types syntax style, overriding base + // ======================================= + "@typescript-eslint/prefer-includes": "error", + "@typescript-eslint/prefer-nullish-coalescing": "off", + "@typescript-eslint/dot-notation": "off", + "@typescript-eslint/no-confusing-non-null-assertion": "off", +}; + +/** @type {NonNullable} */ +export const defaultRulesES3 = { + ...defaultRules, + // required in ES3 + // ================ + "no-var": "off", + "object-shorthand": ["error", "never"], + "prefer-arrow-callback": "off", + "prefer-exponentiation-operator": "off", + "prefer-object-has-own": "off", + "prefer-object-spread": "off", + "prefer-rest-params": "off", + "prefer-spread": "off", + "radix": "off", + "@stylistic/comma-dangle": "error", + "no-unused-vars": ["warn", { + args: "all", + argsIgnorePattern: ".", + caughtErrors: "all", + caughtErrorsIgnorePattern: "^e(rr)?$", + destructuredArrayIgnorePattern: ".", + ignoreRestSiblings: true, + }], + "no-restricted-syntax": ["error", + { selector: "TaggedTemplateExpression", message: "Hard to compile down to ES3" }, + { selector: "CallExpression[callee.name='Symbol']", message: "Annoying to serialize, just use a string" }, + ], + + // with no block scoping, coming up with original variable names is too hard + "no-redeclare": "off", + + // treat var as let + // unfortunately doesn't actually let me redeclare + // "block-scoped-var": "error", + "no-caller": "error", + "no-invalid-this": "error", + "no-new-wrappers": "error", + // Map/Set can be polyfilled but it's nontrivial and it's easier just to use bare objects + "no-restricted-globals": ["error", "Proxy", "Reflect", "Symbol", "WeakSet", "WeakMap", "Set", "Map"], + "unicode-bom": "error", +}; + +/** + * Actually very different from defaultRulesES3, because we don't have to + * worry about syntax that's easy to transpile to ES3 (which is basically + * all syntax). + * @type {NonNullable} + */ +export const defaultRulesES3TSChecked = { + ...defaultRulesTSChecked, + "radix": "off", + "no-restricted-globals": ["error", "Proxy", "Reflect", "Symbol", "WeakSet", "WeakMap", "Set", "Map"], + "no-restricted-syntax": ["error", "TaggedTemplateExpression", "YieldExpression", "AwaitExpression", "BigIntLiteral"], +}; + +/** + * @param {Config[]} configs + * @returns {Config} + */ +function extractPlugin(configs) { + return configs.find(config => !config.rules) || + (() => { throw new Error('No plugin found'); })(); +} +/** + * @param {Config[]} configs + * @returns {Rules} + */ +function extractRules(configs) { + const rules = {}; + for (const config of configs.filter(c => c.rules)) { + Object.assign(rules, config.rules); + } + return rules; +} +const tseslintPlugin = extractPlugin(tseslint.configs.stylisticTypeChecked); + +/** @type {{[k: string]: Config[]}} */ +export const configs = { + js: [{ + rules: { + ...eslint.configs.recommended.rules, + ...defaultRules, + }, + }], + ts: [tseslintPlugin, { + rules: { + ...eslint.configs.recommended.rules, + ...extractRules(tseslint.configs.recommendedTypeChecked), + ...extractRules(tseslint.configs.stylisticTypeChecked), + ...defaultRulesTSChecked, + }, + }], + es3: [{ + rules: { + ...eslint.configs.recommended.rules, + ...defaultRulesES3, + }, + }], + es3ts: [tseslintPlugin, { + rules: { + ...eslint.configs.recommended.rules, + ...extractRules(tseslint.configs.recommendedTypeChecked), + ...extractRules(tseslint.configs.stylisticTypeChecked), + ...defaultRulesES3TSChecked, + }, + }], +}; + +/* +SOURCE FOR IGNOREPATTERN (compile with https://regexfree.k55.io/ ) + + # indentation + ^\s* + # possibly commented out + (\/\/\ \s*)? + + ( + # define a variable, append to a variable, or define a single-arg arrow function + (export\ )? (let\ |const\ |readonly\ )? [a-zA-Z0-9_$.]+ (\ \+?=>?\ ) + | + # define a property (oversize arrays are only allowed in properties) + [a-zA-Z0-9$]+:\ \[? + | + # optionally return or throw + (return\ |throw\ )? + # call a function or constructor + (new\ )?([a-zA-Z0-9$.]+\()? + )? + + ( + Utils\.html + | + (this\.)?(room\.)?tr + | + \$\( + )? + + # start of string or regex + ['"`\/] + +*/ diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..71f81aa74 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,134 @@ +// @ts-check + +import { configs, configure, globals } from './eslint-ps-standard.mjs'; + +export default configure([ + { + ignores: [ + 'caches/**', + 'play.pokemonshowdown.com/config/config-test.js', + 'play.pokemonshowdown.com/src/battle-log-misc.js', + 'play.pokemonshowdown.com/js/replay-embed.js', + ], + }, + { + name: "JavaScript for browsers (ES3)", + files: [ + 'play.pokemonshowdown.com/js/client-battle.js', + 'play.pokemonshowdown.com/js/client-chat-tournament.js', + 'play.pokemonshowdown.com/js/client-chat.js', + 'play.pokemonshowdown.com/js/client-ladder.js', + 'play.pokemonshowdown.com/js/client-mainmenu.js', + 'play.pokemonshowdown.com/js/client-rooms.js', + 'play.pokemonshowdown.com/js/client-teambuilder.js', + 'play.pokemonshowdown.com/js/client-topbar.js', + 'play.pokemonshowdown.com/js/client.js', + 'play.pokemonshowdown.com/js/replay-embed.template.js', + 'play.pokemonshowdown.com/js/search.js', + 'play.pokemonshowdown.com/js/storage.js', + 'config/config-example.js', + ], + extends: [configs.es3], + languageOptions: { + ecmaVersion: 3, + sourceType: "script", + globals: { + ...globals.builtin, + ...globals.browser, + ...globals.node, + // Libraries + "_": false, "$": false, "Backbone": false, "d3": false, "html": false, "html4": false, "jQuery": false, "SockJS": false, "ColorThief": false, + + // Environment-specific + "fs": false, "gui": false, "ga": false, "macgap": false, "nwWindow": false, "webkitNotifications": false, "nw": false, + + // Battle stuff + "Battle": true, "Pokemon": true, "BattleSound": true, "BattleTooltips": true, "BattleLog": true, + "BattleAbilities": false, "BattleAliases": false, "BattleBackdrops": false, "BattleBackdropsFive": false, "BattleBackdropsFour": false, "BattleBackdropsThree": false, "BattleEffects": false, + "BattleFormats": false, "BattleFormatsData": false, "BattleLearnsets": false, "BattleItems": false, "BattleMoveAnims": false, "BattleMovedex": false, "BattleNatures": false, + "BattleOtherAnims": false, "BattlePokedex": false, "BattlePokemonSprites": false, "BattlePokemonSpritesBW": false, "BattleSearchCountIndex": false, "BattleSearchIndex": false, "BattleArticleTitles": false, + "BattleSearchIndexOffset": false, "BattleSearchIndexType": false, "BattleStatIDs": false, "BattleStatNames": false, "BattleStatusAnims": false, "BattleStatuses": false, "BattleTeambuilderTable": false, + "ModifiableValue": false, "BattleStatGuesser": false, "BattleStatOptimizer": false, "BattleText": true, "BattleTextAFD": false, "BattleTextNotAFD": false, + "BattleTextParser": false, + + // Generic global variables + "Config": false, "BattleSearch": false, "Storage": false, "Dex": false, "DexSearch": false, + "app": false, "toID": false, "toRoomid": false, "toUserid": false, "toName": false, "PSUtils": false, "MD5": false, + "ChatHistory": false, "Topbar": false, "UserList": false, + + // Rooms + "Room": false, "BattleRoom": false, "ChatRoom": false, "ConsoleRoom": false, "HTMLRoom": false, "LadderRoom": false, "MainMenuRoom": false, "RoomsRoom": false, "BattlesRoom": false, "TeambuilderRoom": false, + + // Tons of popups + "Popup": false, "ForfeitPopup": false, "BracketPopup": false, "LoginPasswordPopup": false, "UserPopup": false, "UserOptionsPopup": false, "UserOptions": false, "TeamPopup": false, + "AvatarsPopup": false, "CreditsPopup": false, "FormatPopup": false, "FormattingPopup": false, "LoginPopup": false, + "MovePopup": false, "SoundsPopup": false, "OptionsPopup": false, "PromptPopup": false, "ProxyPopup": false, "ReconnectPopup": false, + "RegisterPopup": false, "ReplayUploadedPopup": false, "RulesPopup": false, "TabListPopup": false, "TournamentBox": false, + "CustomBackgroundPopup": false, + + // Test client + "POKEMON_SHOWDOWN_TESTCLIENT_KEY": false, + }, + }, + rules: { + "@stylistic/max-len": "off", + // we use these for the big IIFEs that wrap entire files + "@stylistic/padded-blocks": "off", + // TODO: actually fix useless escapes + "no-useless-escape": "off", + "no-shadow-restricted-names": "error", + "no-shadow": "off", + }, + }, + { + name: "JavaScript for Node", + files: [ + '*.mjs', // look mom I'm linting myself! + 'build-tools/*.js', + 'build-tools/update', + 'build-tools/build-*', + ], + extends: [configs.js], + languageOptions: { + globals: { + ...globals.builtin, + ...globals.node, + }, + }, + rules: { + }, + }, + { + name: "TypeScript", + files: [ + 'play.pokemonshowdown.com/src/*.ts', + 'play.pokemonshowdown.com/src/*.tsx', + 'replay.pokemonshowdown.com/src/*.ts', + 'replay.pokemonshowdown.com/src/*.tsx', + ], + extends: [configs.es3ts], + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + rules: { + // temporary + "prefer-const": "off", + // we use these for grouping + "@stylistic/padded-blocks": "off", + // too many of these on client + "@typescript-eslint/no-floating-promises": "off", + // we use these for animations + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/restrict-template-expressions": ["error", { + allow: [ + { name: ['Error', 'URL', 'URLSearchParams'], from: 'lib' }, + { name: ['ModifiableValue'], from: 'file' }, + ], + allowBoolean: false, allowNever: false, allowNullish: false, allowRegExp: false, + }], + }, + }, +]); diff --git a/package-lock.json b/package-lock.json index ad3eb5e3c..03485df93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,20 +19,23 @@ "image-size": "^0.7.5" }, "devDependencies": { + "@stylistic/eslint-plugin": "^4.0.1", "@types/jquery": "^3.5.3", "@types/mocha": "^5.2.6", - "eslint": "^5.16.0", + "eslint": "^9.20.1", + "globals": "^16.0.0", "mocha": "^6.0.2", "preact": "^8.3.1", "source-map": "^0.7.3", - "tslint": "^5.20.1", - "typescript": "^5.7.3" + "typescript": "^5.7.3", + "typescript-eslint": "^8.24.1" } }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -42,40 +45,44 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -91,49 +98,42 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -142,18 +142,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz", - "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", + "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.26.9", "semver": "^6.3.1" }, "engines": { @@ -164,12 +163,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -180,9 +180,10 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", - "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -194,69 +195,41 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -266,32 +239,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -301,13 +277,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -316,106 +293,81 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", + "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.9" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -423,12 +375,44 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -438,13 +422,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -454,12 +439,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -473,6 +459,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -488,6 +475,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -495,70 +483,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -568,11 +499,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -581,128 +513,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -712,11 +529,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -729,6 +547,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -741,11 +560,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -755,14 +575,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" @@ -772,13 +592,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -788,11 +609,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -802,11 +624,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -816,12 +639,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -831,13 +655,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -847,17 +671,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", "globals": "^11.1.0" }, "engines": { @@ -867,13 +690,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -883,11 +716,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -897,12 +731,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -912,11 +747,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -925,13 +761,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -941,12 +793,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -956,12 +808,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -971,12 +823,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -986,13 +839,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1002,12 +856,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1017,11 +871,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1031,12 +886,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1046,11 +901,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1060,12 +916,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1075,13 +932,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1091,14 +948,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", - "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1108,12 +966,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1123,12 +982,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1138,11 +998,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1152,12 +1013,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1167,12 +1028,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1182,15 +1043,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz", - "integrity": "sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1200,12 +1060,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1215,12 +1076,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1230,13 +1091,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1246,11 +1107,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1260,12 +1122,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1275,14 +1138,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1292,11 +1155,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1306,15 +1170,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1324,11 +1189,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.25.9", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1338,12 +1204,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1353,11 +1236,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1367,12 +1251,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1382,11 +1267,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1396,11 +1282,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1410,11 +1297,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1424,14 +1312,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", + "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1441,11 +1331,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1455,12 +1346,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1470,12 +1362,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1485,12 +1378,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1500,89 +1394,79 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", - "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -1596,6 +1480,7 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1606,15 +1491,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1623,15 +1509,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, "node_modules/@babel/runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1640,31 +1522,30 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1672,23 +1553,240 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "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.11.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.11.0.tgz", + "integrity": "sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.20.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.20.0.tgz", + "integrity": "sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.6.tgz", + "integrity": "sha512-+0TjwR1eAUdZtvv/ir1mGX+v0tUoR3VEPB8Up0LLJC+whRW0GgBBtpbOkg/a/U4Dxa6l5a3l9AJ1aWIQVyoWJA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.11.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1702,6 +1800,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1710,49 +1809,360 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@types/jquery": { - "version": "3.5.29", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.29.tgz", - "integrity": "sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@stylistic/eslint-plugin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.0.1.tgz", + "integrity": "sha512-RwKkRKiDrF4ptiur54ckDhOByQYKYZ1dEmI5K8BJCmuGpauFJXzVL1UQYTA2zq702CqMFdYiJcVFJWfokIgFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.23.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@types/estree": { + "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/jquery": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.32.tgz", + "integrity": "sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==", + "dev": true, + "license": "MIT", "dependencies": { "@types/sizzle": "*" } }, + "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/mocha": { "version": "5.2.7", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/sizzle": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", - "dev": true + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.1.tgz", + "integrity": "sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/type-utils": "8.24.1", + "@typescript-eslint/utils": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.1.tgz", + "integrity": "sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/typescript-estree": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.1.tgz", + "integrity": "sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.1.tgz", + "integrity": "sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.24.1", + "@typescript-eslint/utils": "8.24.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.1.tgz", + "integrity": "sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.1.tgz", + "integrity": "sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/visitor-keys": "8.24.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.1.tgz", + "integrity": "sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.24.1", + "@typescript-eslint/types": "8.24.1", + "@typescript-eslint/typescript-estree": "8.24.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.1.tgz", + "integrity": "sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.24.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -1761,10 +2171,11 @@ } }, "node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1777,6 +2188,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" } @@ -1785,6 +2197,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "license": "MIT", "dependencies": { "es6-promisify": "^5.0.0" }, @@ -1797,6 +2210,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", @@ -1813,56 +2227,53 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/ansi-regex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "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, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -1872,15 +2283,18 @@ } }, "node_modules/array.prototype.reduce": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", - "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "is-string": "^1.0.7" }, "engines": { @@ -1891,19 +2305,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -1912,13 +2326,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/astral-regex": { + "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" } }, "node_modules/available-typed-arrays": { @@ -1926,6 +2341,7 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -1937,12 +2353,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", - "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.1", + "@babel/helper-define-polyfill-provider": "^0.6.3", "semver": "^6.3.1" }, "peerDependencies": { @@ -1950,53 +2367,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2005,13 +2394,15 @@ "node_modules/babel-plugin-remove-import-export": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-remove-import-export/-/babel-plugin-remove-import-export-1.1.1.tgz", - "integrity": "sha512-XBhHk/NDQQbNZcf1/ZbSG0M4ylz9cIz83EqzjyUlYUoSQW5GT7s847BJQV8xyEh6SjAvpJo0QBEuI4G5deMp1g==" + "integrity": "sha512-XBhHk/NDQQbNZcf1/ZbSG0M4ylz9cIz83EqzjyUlYUoSQW5GT7s847BJQV8xyEh6SjAvpJo0QBEuI4G5deMp1g==", + "license": "MIT" }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -2030,12 +2421,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "license": "MIT", "engines": { "node": "*" } @@ -2045,21 +2438,36 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "funding": [ { "type": "opencollective", @@ -2074,11 +2482,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -2090,28 +2499,51 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2125,6 +2557,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2134,14 +2567,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001597", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", - "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", + "version": "1.0.30001700", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", + "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", "funding": [ { "type": "opencollective", @@ -2155,50 +2589,32 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "restore-cursor": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, "node_modules/cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -2210,6 +2626,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2219,6 +2636,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -2233,6 +2651,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -2241,41 +2660,45 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", - "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", + "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", + "license": "MIT", "dependencies": { - "browserslist": "^4.22.3" + "browserslist": "^4.24.3" }, "funding": { "type": "opencollective", @@ -2283,36 +2706,81 @@ } }, "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" + "node": ">= 8" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2328,6 +2796,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2336,13 +2805,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2360,6 +2831,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -2377,88 +2849,106 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" } }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } }, "node_modules/electron-to-chromium": { - "version": "1.4.708", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.708.tgz", - "integrity": "sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA==" + "version": "1.5.102", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", + "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", + "license": "ISC" }, "node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-abstract": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", - "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.1", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -2468,14 +2958,17 @@ } }, "node_modules/es-abstract/node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -2489,16 +2982,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2508,33 +3000,50 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -2546,173 +3055,146 @@ "node_modules/es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" }, "node_modules/es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "license": "MIT", "dependencies": { "es6-promise": "^4.0.3" } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "9.20.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.1.tgz", + "integrity": "sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.11.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.20.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^6.14.0 || ^8.10.0 || >=9.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -2720,6 +3202,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2729,10 +3212,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -2745,6 +3229,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" }, @@ -2757,6 +3242,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2765,6 +3251,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -2773,6 +3260,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -2780,79 +3268,117 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" }, "node_modules/fast-deep-equal": { "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-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-text-encoding": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "license": "Apache-2.0" }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "node_modules/fastq": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", "dev": true, + "license": "ISC", "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" + "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "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": "^2.0.1" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^3.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat": { @@ -2860,6 +3386,7 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "is-buffer": "~2.0.3" }, @@ -2868,58 +3395,34 @@ } }, "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "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": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">=4" + "node": ">=16" } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -2928,17 +3431,49 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2947,6 +3482,7 @@ "version": "1.8.4", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-1.8.4.tgz", "integrity": "sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw==", + "license": "Apache-2.0", "dependencies": { "abort-controller": "^3.0.0", "extend": "^3.0.2", @@ -2958,6 +3494,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-1.0.0.tgz", "integrity": "sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ==", + "license": "MIT", "dependencies": { "gaxios": "^1.0.2", "json-bigint": "^0.3.0" @@ -2970,6 +3507,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2979,21 +3517,28 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3002,15 +3547,30 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -3020,40 +3580,59 @@ } }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=10.13.0" } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", + "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -3066,6 +3645,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-3.1.2.tgz", "integrity": "sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ==", + "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", "fast-text-encoding": "^1.0.0", @@ -3085,6 +3665,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -3093,6 +3674,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.5.tgz", "integrity": "sha512-50rTrqYPTPPwlu9TNl/HkJbBENEpbRzTOVLFJ4YWM86njZgXHFy+FP+tLRSd9m132Li9Dqi27Z3KIWDEv5y+EA==", + "deprecated": "Package is no longer maintained", + "license": "MIT", "dependencies": { "node-forge": "^0.10.0", "pify": "^4.0.0" @@ -3102,22 +3685,31 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.x" } @@ -3126,6 +3718,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.3.tgz", "integrity": "sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw==", + "license": "MIT", "dependencies": { "gaxios": "^1.0.4", "google-p12-pem": "^1.0.0", @@ -3138,20 +3731,26 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { @@ -3159,6 +3758,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -3167,10 +3767,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3179,10 +3783,11 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3195,6 +3800,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -3209,6 +3815,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3221,6 +3828,7 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -3229,6 +3837,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "license": "MIT", "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -3241,26 +3850,26 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, "node_modules/image-size": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "license": "MIT", "bin": { "image-size": "bin/image-size.js" }, @@ -3269,10 +3878,11 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3289,6 +3899,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -3297,7 +3908,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3307,75 +3920,54 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } + "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3385,25 +3977,30 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3431,6 +4028,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } @@ -3440,6 +4038,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3448,23 +4047,73 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3478,15 +4127,23 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, "engines": { "node": ">= 0.4" }, @@ -3494,13 +4151,51 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3510,13 +4205,16 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -3525,13 +4223,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3541,12 +4253,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3556,12 +4270,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3571,12 +4288,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -3585,13 +4303,47 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3601,67 +4353,82 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-bigint": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", + "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0" } }, + "node_modules/json-buffer": { + "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, + "license": "MIT" + }, "node_modules/json-schema-traverse": { "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", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3673,6 +4440,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -3683,53 +4451,78 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { "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.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.0.1" }, @@ -3737,18 +4530,132 @@ "node": ">=4" } }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -3756,20 +4663,12 @@ "node": ">=4.0.0" } }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3782,17 +4681,20 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, + "license": "MIT", "dependencies": { - "minimist": "^1.2.6" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" @@ -3803,6 +4705,7 @@ "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", @@ -3836,31 +4739,58 @@ "node": ">= 6.0.0" } }, + "node_modules/mocha/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/mocha/node_modules/debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "locate-path": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, "node_modules/mocha/node_modules/js-yaml": { @@ -3868,6 +4798,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3876,11 +4807,26 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/mocha/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3888,30 +4834,68 @@ "node": "*" } }, - "node_modules/mocha/node_modules/mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/mocha/node_modules/ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/mocha/node_modules/supports-color": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -3919,34 +4903,38 @@ "node": ">=6" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/mocha/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-environment-flags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" @@ -3957,6 +4945,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -3965,6 +4954,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3984,20 +4974,26 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.0.0" } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4007,6 +5003,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -4016,6 +5013,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -4027,16 +5025,19 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", - "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", "dev": true, + "license": "MIT", "dependencies": { "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "safe-array-concat": "^1.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" }, "engines": { "node": ">= 0.8" @@ -4050,73 +5051,77 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -4124,6 +5129,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4133,6 +5139,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" }, @@ -4141,12 +5148,13 @@ } }, "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-is-absolute": { @@ -4154,48 +5162,61 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true - }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -4205,44 +5226,84 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-8.5.3.tgz", "integrity": "sha512-O3kKP+1YdgqHOFsZF2a9JVdtqD+RPzCQc3rP+Ualf7V6rmRDchZ9MJbiGTT7LuyqFKZqlHSOyO/oMFmI2lVTsw==", "dev": true, - "hasInstallScript": true + "hasInstallScript": true, + "license": "MIT" }, "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -4253,26 +5314,31 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -4281,24 +5347,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, - "engines": { - "node": ">=6.5.0" - } - }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "license": "MIT", "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -4306,23 +5364,34 @@ "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" } }, "node_modules/require-directory": { @@ -4330,6 +5399,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4338,20 +5408,25 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4361,65 +5436,57 @@ "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" } }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, + "license": "MIT", "engines": { - "node": ">=4" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "queue-microtask": "^1.2.2" } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -4446,17 +5513,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "isarray": "^2.0.5" }, "engines": { "node": ">= 0.4" @@ -4465,16 +5533,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -4483,13 +5564,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -4507,6 +5590,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -4517,37 +5601,56 @@ "node": ">= 0.4" } }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4556,24 +5659,60 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/source-map": { @@ -4581,6 +5720,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -4589,13 +5729,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -4605,14 +5747,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4622,28 +5769,37 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4654,6 +5810,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -4662,29 +5819,36 @@ } }, "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4692,196 +5856,78 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" + "node": ">=8.0" } }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "node_modules/ts-api-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, + "license": "MIT", "engines": { - "node": ">=4.8.0" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" - } - }, - "node_modules/tslint/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + "typescript": ">=4.8.4" } }, "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4891,17 +5937,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -4911,17 +5959,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -4944,25 +5993,53 @@ "node": ">=14.17" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/typescript-eslint": { + "version": "8.24.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.24.1.tgz", + "integrity": "sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "@typescript-eslint/eslint-plugin": "8.24.1", + "@typescript-eslint/parser": "8.24.1", + "@typescript-eslint/utils": "8.24.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", "engines": { "node": ">=4" } @@ -4971,6 +6048,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -4980,9 +6058,10 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", "engines": { "node": ">=4" } @@ -4991,14 +6070,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "funding": [ { "type": "opencollective", @@ -5013,9 +6093,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -5029,6 +6110,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" } @@ -5036,40 +6118,97 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5079,18 +6218,21 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -5105,6 +6247,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2" } @@ -5114,6 +6257,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5123,6 +6267,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -5137,15 +6282,47 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -5160,6 +6337,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -5171,36 +6349,28 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } + "license": "ISC" }, "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" }, "node_modules/yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -5219,6 +6389,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -5229,6 +6400,7 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, + "license": "MIT", "dependencies": { "flat": "^4.1.0", "lodash": "^4.17.15", @@ -5243,15 +6415,83 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/yargs/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -5266,12 +6506,26 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 170c2107d..8fbd38cdf 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,9 @@ "url": "https://github.com/Zarel/Pokemon-Showdown-Client.git" }, "scripts": { - "lint": "eslint --config=.eslintrc.js --cache --cache-file=caches/eslint-base.json play.pokemonshowdown.com/js/ && eslint --config=build-tools/.eslintrc.js --cache --cache-file=caches/eslint-build.json build-tools/update build-tools/build-indexes && tslint --project .", - "test": "npm run lint && tsc && node build && mocha test/*.js", - "fix": "eslint --config=.eslintrc.js --fix js/ && eslint --config=build-tools/.eslintrc.js --fix build-tools/update build-tools/build-indexes", + "lint": "eslint --cache --cache-location caches/eslintcache.json", + "test": "node build && tsc && eslint --cache --cache-location caches/eslintcache.json --max-warnings 0 && mocha test/*.js", + "fix": "eslint --cache --cache-location caches/eslintcache.json --fix", "build": "node build", "build-full": "node build full" }, @@ -26,14 +26,16 @@ "image-size": "^0.7.5" }, "devDependencies": { + "@stylistic/eslint-plugin": "^4.0.1", "@types/jquery": "^3.5.3", "@types/mocha": "^5.2.6", - "eslint": "^5.16.0", + "eslint": "^9.20.1", + "globals": "^16.0.0", "mocha": "^6.0.2", "preact": "^8.3.1", "source-map": "^0.7.3", - "tslint": "^5.20.1", - "typescript": "^5.7.3" + "typescript": "^5.7.3", + "typescript-eslint": "^8.24.1" }, "private": true } diff --git a/play.pokemonshowdown.com/js/client-battle.js b/play.pokemonshowdown.com/js/client-battle.js index 6e2f220f1..144da9e04 100644 --- a/play.pokemonshowdown.com/js/client-battle.js +++ b/play.pokemonshowdown.com/js/client-battle.js @@ -39,7 +39,7 @@ this.battle.subscribe(function () { self.updateControls(); }); this.users = {}; - this.userCount = {users: 0}; + this.userCount = { users: 0 }; this.$userList = this.$('.userlist'); this.userList = new UserList({ el: this.$userList, @@ -76,7 +76,7 @@ }, requestLeave: function (e) { if ((this.side || this.requireForfeit) && this.battle && !this.battleEnded && !this.expired && !this.battle.forfeitPending) { - app.addPopup(ForfeitPopup, {room: this, sourceEl: e && e.currentTarget, gameType: 'battle'}); + app.addPopup(ForfeitPopup, { room: this, sourceEl: e && e.currentTarget, gameType: 'battle' }); return false; } return true; @@ -217,7 +217,8 @@ this.battle.stepQueue.push('|' + args.join('|')); break; } - } else if (logLine.substr(0, 7) === '|title|') { // eslint-disable-line no-empty + } else if (logLine.substr(0, 7) === '|title|') { + // empty } else if (logLine.substr(0, 5) === '|win|' || logLine === '|tie') { this.battleEnded = true; this.battle.stepQueue.push(logLine); @@ -410,8 +411,8 @@ }; if (this.request.forceSwitch !== true) { - var faintedLength = _.filter(this.request.forceSwitch, function (fainted) {return fainted;}).length; - var freedomDegrees = faintedLength - _.filter(switchables.slice(this.battle.pokemonControlled), function (mon) {return !mon.fainted;}).length; + var faintedLength = _.filter(this.request.forceSwitch, function (fainted) { return fainted; }).length; + var freedomDegrees = faintedLength - _.filter(switchables.slice(this.battle.pokemonControlled), function (mon) { return !mon.fainted; }).length; this.choice.freedomDegrees = Math.max(freedomDegrees, 0); this.choice.canSwitch = faintedLength - this.choice.freedomDegrees; } @@ -542,7 +543,7 @@ this.$('.timerbutton').replaceWith(this.getTimerHTML()); }, openTimer: function () { - app.addPopup(TimerPopup, {room: this}); + app.addPopup(TimerPopup, { room: this }); }, updateMoveControls: function (type) { var switchables = this.request && this.request.side ? this.battle.myPokemon : []; @@ -577,7 +578,7 @@ var canTerastallize = curActive.canTerastallize || switchables[pos].canTerastallize; if (canZMove && typeof canZMove[0] === 'string') { canZMove = _.map(canZMove, function (move) { - return {move: move, target: Dex.moves.get(move).target}; + return { move: move, target: Dex.moves.get(move).target }; }); } if (gigantamax) gigantamax = Dex.moves.get(gigantamax); @@ -641,7 +642,7 @@ } else if (moveTarget === 'normal' || moveTarget === 'adjacentAlly' || moveTarget === 'adjacentAllyOrSelf') { if (Math.abs(activePos - i) > 1) disabled = true; } - if (moveTarget !== 'adjacentAllyOrSelf' && activePos == i) disabled = true; + if (moveTarget !== 'adjacentAllyOrSelf' && activePos === i) disabled = true; if (disabled) { targetMenus[1] += ' '; @@ -840,7 +841,7 @@ } var switchables = this.request && this.request.side ? this.battle.myPokemon : []; - var nearActive = this.battle.nearSide.active; + // var nearActive = this.battle.nearSide.active; var isReviving = !!switchables[pos].reviving; var requestTitle = ''; @@ -1106,7 +1107,7 @@ request.requestType = 'wait'; } - this.choice = choiceText ? {waiting: true} : null; + this.choice = choiceText ? { waiting: true } : null; this.finalDecision = this.finalDecisionMove = this.finalDecisionSwitch = false; this.request = request; if (request.side) { @@ -1184,7 +1185,7 @@ this.send('/savereplay'); }, openBattleOptions: function () { - app.addPopup(BattleOptionsPopup, {battle: this.battle, room: this}); + app.addPopup(BattleOptionsPopup, { battle: this.battle, room: this }); }, clickReplayDownloadButton: function (e) { var filename = (this.battle.tier || 'Battle').replace(/[^A-Za-z0-9]/g, ''); @@ -1277,7 +1278,7 @@ var isTerastal = !!(this.$('input[name=terastallize]')[0] || '').checked; var target = e.getAttribute('data-target'); - var choosableTargets = {normal: 1, any: 1, adjacentAlly: 1, adjacentAllyOrSelf: 1, adjacentFoe: 1}; + var choosableTargets = { normal: 1, any: 1, adjacentAlly: 1, adjacentAllyOrSelf: 1, adjacentFoe: 1 }; if (this.battle.gameType === 'freeforall') delete choosableTargets['adjacentAllyOrSelf']; this.choice.choices.push('move ' + pos + (isMega ? ' mega' : '') + (isMegaX ? ' megax' : isMegaY ? ' megay' : '') + (isZMove ? ' zmove' : '') + (isUltraBurst ? ' ultra' : '') + (isDynamax ? ' dynamax' : '') + (isTerastal ? ' terastallize' : '')); @@ -1328,8 +1329,8 @@ } // After choosing the position to which a pokemon will switch in (Doubles/Triples end-game). - if (!this.request || this.request.requestType !== 'switch') return false; //?? - if (this.choice.canSwitch > _.filter(this.choice.choices, function (choice) {return choice;}).length) { + if (!this.request || this.request.requestType !== 'switch') return false; // ?? + if (this.choice.canSwitch > _.filter(this.choice.choices, function (choice) { return choice; }).length) { // More switches are pending. this.choice.type = 'switch2'; this.updateControlsForPlayer(); @@ -1414,8 +1415,10 @@ } } else if (this.request.requestType === 'move') { var requestDetails = this.request && this.request.side ? this.battle.myPokemon : []; - while (choices.length < this.battle.pokemonControlled && - (!nearActive[choices.length] || requestDetails[choices.length].commanding)) { + while ( + choices.length < this.battle.pokemonControlled && + (!nearActive[choices.length] || requestDetails[choices.length].commanding) + ) { choices.push('pass'); } diff --git a/play.pokemonshowdown.com/js/client-chat-tournament.js b/play.pokemonshowdown.com/js/client-chat-tournament.js index d7fb169b2..161036533 100644 --- a/play.pokemonshowdown.com/js/client-chat-tournament.js +++ b/play.pokemonshowdown.com/js/client-chat-tournament.js @@ -88,30 +88,30 @@ $wrapper.html( '
' + - ' Tournament' + - '
' + - '
Toggle
' + + ' Tournament' + + '
' + + '
Toggle
' + '
' + '
' + - '
' + - '
' + - '
' + - ' ' + - '
Waiting for battles to become available...
' + - '
' + - '
' + - '' + - '
' + - '
' + - '
' + - '
' + - '' + - '
' + - '
' + - '
' + - '' + - '
' + - '
' + + '
' + + '
' + + '
' + + ' ' + + '
Waiting for battles to become available...
' + + '
' + + '
' + + ' ' + + '
' + + '
' + + '
' + + '
' + + ' ' + + '
' + + '
' + + '
' + + ' ' + + '
' + + '
' + '
'); this.$title = $wrapper.find('.tournament-title'); @@ -609,7 +609,7 @@ }; var nodesByDepth = []; - var stack = [{node: data.rootNode, depth: 0}]; + var stack = [{ node: data.rootNode, depth: 0 }]; while (stack.length > 0) { var frame = stack.pop(); @@ -619,7 +619,7 @@ if (!frame.node.children) frame.node.children = []; frame.node.children.forEach(function (child) { - stack.push({node: child, depth: frame.depth + 1}); + stack.push({ node: child, depth: frame.depth + 1 }); }); } var maxDepth = nodesByDepth.length; @@ -653,10 +653,10 @@ var link = d3.svg.diagonal() .source(function (link) { - return {x: link.source.x, y: link.source.y + nodeSize.realWidth / 2}; + return { x: link.source.x, y: link.source.y + nodeSize.realWidth / 2 }; }) .target(function (link) { - return {x: link.target.x, y: link.target.y - nodeSize.realWidth / 2}; + return { x: link.target.x, y: link.target.y - nodeSize.realWidth / 2 }; }) .projection(function (link) { return [size.width - link.y, link.x]; @@ -793,20 +793,20 @@ }; TournamentBox.prototype.showBracketPopup = function (data, isStandalone) { if (isStandalone) - app.addPopup(BracketPopup, {$bracket: this.generateBracket(data)}); + app.addPopup(BracketPopup, { $bracket: this.generateBracket(data) }); else - this.bracketPopup = app.addPopup(BracketPopup, {parent: this, $bracket: this.generateBracket(data)}); + this.bracketPopup = app.addPopup(BracketPopup, { parent: this, $bracket: this.generateBracket(data) }); }; TournamentBox.prototype.renderChallengeUsers = function () { return ' '; }; TournamentBox.prototype.challengeUser = function (user, button) { - app.addPopup(UserPopup, {user: user, users: this.info.challenges, sourceEl: button}); + app.addPopup(UserPopup, { user: user, users: this.info.challenges, sourceEl: button }); }; TournamentBox.prototype.teamSelect = function (team, button) { - app.addPopup(TeamPopup, {team: team, format: this.info.teambuilderFormat, sourceEl: button, room: this.room.id, isMoreTeams: false, folderToggleOn: true, folderNotExpanded: []}); + app.addPopup(TeamPopup, { team: team, format: this.info.teambuilderFormat, sourceEl: button, room: this.room.id, isMoreTeams: false, folderToggleOn: true, folderNotExpanded: [] }); }; return TournamentBox; diff --git a/play.pokemonshowdown.com/js/client-chat.js b/play.pokemonshowdown.com/js/client-chat.js index fb4da9d3e..b85c379d9 100644 --- a/play.pokemonshowdown.com/js/client-chat.js +++ b/play.pokemonshowdown.com/js/client-chat.js @@ -215,7 +215,7 @@ var name = $(e.currentTarget).data('name') || $(e.currentTarget).text(); var away = $(e.currentTarget).data('away') || false; var status = $(e.currentTarget).data('status'); - app.addPopup(UserPopup, {roomGroup: roomGroup, name: name, away: away, status: status, sourceEl: e.currentTarget, position: position}); + app.addPopup(UserPopup, { roomGroup: roomGroup, name: name, away: away, status: status, sourceEl: e.currentTarget, position: position }); }, openPM: function (e) { e.preventDefault(); @@ -236,10 +236,10 @@ app.addPopup(AvatarsPopup); }, openSounds: function () { - app.addPopup(SoundsPopup, {type: 'semimodal'}); + app.addPopup(SoundsPopup, { type: 'semimodal' }); }, openOptions: function () { - app.addPopup(OptionsPopup, {type: 'semimodal'}); + app.addPopup(OptionsPopup, { type: 'semimodal' }); }, // highlight @@ -247,7 +247,7 @@ getHighlight: function (message) { var highlights = Dex.prefs('highlights') || {}; if (Array.isArray(highlights)) { - highlights = {global: highlights}; + highlights = { global: highlights }; // Migrate from the old highlight system Storage.prefs('highlights', highlights); } @@ -362,7 +362,7 @@ var currentLine = prefix.substr(prefix.lastIndexOf('\n') + 1); var shouldSearchCommands = !cmds || (cmds.length ? !!cmds.length && !cmds.filter(function (x) { return x.startsWith(currentLine); - }).length : prefix != this.tabComplete.prefix); + }).length : prefix !== this.tabComplete.prefix); var isCommandSearch = (currentLine.startsWith('/') && !currentLine.startsWith('//')) || currentLine.startsWith('!'); var resultsExist = this.tabComplete.lastSearch === text && this.tabComplete.commands; if (isCommandSearch && shouldSearchCommands && !resultsExist) { @@ -417,7 +417,7 @@ return bidx - aidx; } return -1; // a comes first - } else if (bidx != -1) { + } else if (bidx !== -1) { return 1; // b comes first } return (a[0] < b[0]) ? -1 : 1; // alphabetical order @@ -502,7 +502,7 @@ var self = this; var challenge = function (targets) { target = toID(targets[0]); - self.challengeData = {userid: target, format: targets.length > 1 ? targets.slice(1).join(',') : '', team: ''}; + self.challengeData = { userid: target, format: targets.length > 1 ? targets.slice(1).join(',') : '', team: '' }; app.on('response:userdetails', self.challengeUserdetails, self); app.send('/cmd userdetails ' + target); }; @@ -575,7 +575,7 @@ case 'open': if (this.checkBroadcast(cmd, text)) return false; var openUser = function (target) { - app.addPopup(UserPopup, {name: target}); + app.addPopup(UserPopup, { name: target }); }; target = toName(target); if (!target) { @@ -710,7 +710,7 @@ if (!userid) { var newsId = $(this).data('newsid'); if (newsId) { - $.cookie('showdown_readnews', '' + newsId, {expires: 365}); + $.cookie('showdown_readnews', '' + newsId, { expires: 365 }); } $(this).remove(); return; @@ -772,7 +772,7 @@ } this.add('Join/leave messages on room ' + room + ': ALWAYS ON'); } else { - serverShowjoins = {global: 1}; + serverShowjoins = { global: 1 }; this.add('Join/leave messages: ALWAYS ON'); } showjoins[Config.server.id] = serverShowjoins; @@ -791,7 +791,7 @@ } this.add('Join/leave messages on room ' + room + ': AUTOMATIC'); } else { - serverShowjoins = {global: 0}; + serverShowjoins = { global: 0 }; this.add('Join/leave messages: AUTOMATIC'); } showjoins[Config.server.id] = serverShowjoins; @@ -1373,10 +1373,10 @@ }, requestLeave: function (e) { if (app.rooms[''].games && app.rooms[''].games[this.id]) { - app.addPopup(ForfeitPopup, {room: this, sourceEl: e && e.currentTarget, gameType: (this.id.substring(0, 5) === 'help-' ? 'help' : 'game')}); + app.addPopup(ForfeitPopup, { room: this, sourceEl: e && e.currentTarget, gameType: (this.id.substring(0, 5) === 'help-' ? 'help' : 'game') }); return false; } else if (Dex.prefs('leavePopupRoom')) { - app.addPopup(ForfeitPopup, {room: this, sourceEl: e && e.currentTarget, gameType: 'room'}); + app.addPopup(ForfeitPopup, { room: this, sourceEl: e && e.currentTarget, gameType: 'room' }); return false; } return true; @@ -1385,7 +1385,7 @@ this.add(data); }, getUserGroup: function (userid) { - return (app.rooms[this.id].users[userid] || {group: ' '}).group; + return (app.rooms[this.id].users[userid] || { group: ' ' }).group; }, add: function (log) { if (typeof log === 'string') log = log.split('\n'); @@ -1500,7 +1500,6 @@ this.addJoinLeave('rename', row[1], row[2], true); break; - case 'users': this.parseUserList(row[1]); break; @@ -1738,9 +1737,9 @@ break; } if (j > 0) { - if (j == 1 && list.length == 2) { + if (j === 1 && list.length === 2) { message += ' and '; - } else if (j == list.length - 1) { + } else if (j === list.length - 1) { message += ', and '; } else { message += ', '; @@ -1900,7 +1899,7 @@ buf += this.getNoNamedUsersOnline(); } if (this.room.userCount.guests) { - buf += '
  • (' + this.room.userCount.guests + ' guest' + (this.room.userCount.guests == 1 ? '' : 's') + ')
  • '; + buf += '
  • (' + this.room.userCount.guests + ' guest' + (this.room.userCount.guests === 1 ? '' : 's') + ')
  • '; } this.$el.html(buf); }, @@ -1960,7 +1959,7 @@ text += '

      '; if (!window.BattleFormats) { @@ -196,7 +196,7 @@ this.update(); } }, { - COIL_B: {}, + COIL_B: {} }); }).call(this, jQuery); diff --git a/play.pokemonshowdown.com/js/client-mainmenu.js b/play.pokemonshowdown.com/js/client-mainmenu.js index 3106021cd..07c3869ff 100644 --- a/play.pokemonshowdown.com/js/client-mainmenu.js +++ b/play.pokemonshowdown.com/js/client-mainmenu.js @@ -12,7 +12,7 @@ 'click .closebutton': 'closePM', 'click .minimizebutton': 'minimizePM', 'click .pm-challenge': 'clickPMButtonBarChallenge', - 'click .pm-userOptions':'clickPMButtonBarUserOptions', + 'click .pm-userOptions': 'clickPMButtonBarUserOptions', 'click .pm-window': 'clickPMBackground', 'dblclick .pm-window h3': 'dblClickPMHeader', 'focus textarea': 'onFocusPM', @@ -347,7 +347,7 @@ $pmWindow = $(e.currentTarget).closest('.pm-window'); var newsId = $pmWindow.data('newsid'); if (newsId) { - $.cookie('showdown_readnews', '' + newsId, {expires: 365}); + $.cookie('showdown_readnews', '' + newsId, { expires: 365 }); } $pmWindow.remove(); return; @@ -414,7 +414,7 @@ clickUsername: function (e) { e.stopPropagation(); var name = $(e.currentTarget).data('name') || $(e.currentTarget).text(); - app.addPopup(UserPopup, {name: name, sourceEl: e.currentTarget}); + app.addPopup(UserPopup, { name: name, sourceEl: e.currentTarget }); }, clickPMButtonBarChallenge: function (e) { var name = $(e.currentTarget).closest('.pm-window').data('name'); @@ -426,7 +426,7 @@ e.stopPropagation(); var name = $(e.currentTarget).closest('.pm-window').data('name'); var userid = toID($(e.currentTarget).closest('.pm-window').data('name')); - app.addPopup(UserOptions, {name: name, userid: userid, sourceEl: e.currentTarget}); + app.addPopup(UserOptions, { name: name, userid: userid, sourceEl: e.currentTarget }); }, focusPM: function (name) { this.openPM(name).prependTo(this.$pmBox).find('textarea[name=message]').focus(); @@ -668,10 +668,10 @@ app.addPopup(AvatarsPopup); }, openSounds: function () { - app.addPopup(SoundsPopup, {type: 'semimodal'}); + app.addPopup(SoundsPopup, { type: 'semimodal' }); }, openOptions: function () { - app.addPopup(OptionsPopup, {type: 'semimodal'}); + app.addPopup(OptionsPopup, { type: 'semimodal' }); }, // challenges and searching @@ -1002,7 +1002,7 @@ } }, format: function (format, button) { - if (window.BattleFormats) app.addPopup(FormatPopup, {format: format, sourceEl: button}); + if (window.BattleFormats) app.addPopup(FormatPopup, { format: format, sourceEl: button }); }, adjustPrivacy: function (disallowSpectators) { Storage.prefs('disallowspectators', disallowSpectators); @@ -1012,7 +1012,7 @@ }, team: function (team, button) { var format = $(button).closest('form').find('button[name=format]').val(); - app.addPopup(TeamPopup, {team: team, format: format, sourceEl: button, folderToggleOn: true, folderNotExpanded: []}); + app.addPopup(TeamPopup, { team: team, format: format, sourceEl: button, folderToggleOn: true, folderNotExpanded: [] }); }, // format/team selection @@ -1142,7 +1142,7 @@ app.addPopupPrompt("Username", "Open", function (target) { if (!target) return; if (toID(target) === 'zarel') { - app.addPopup(Popup, {htmlMessage: "Zarel is very busy; please don't contact him this way. If you're looking for help, try joining the Help room?"}); + app.addPopup(Popup, { htmlMessage: "Zarel is very busy; please don't contact him this way. If you're looking for help, try joining the Help room?" }); return; } if (target === '~') { @@ -1150,7 +1150,7 @@ app.rooms[''].focusPM('~'); return; } - app.addPopup(UserPopup, {name: target}); + app.addPopup(UserPopup, { name: target }); }); } }, { @@ -1202,14 +1202,14 @@ case 'data-move': return '[outdated message type not supported]'; case 'text': - return {message: '
      ' + BattleLog.parseMessage(target) + '
      ', noNotify: true}; + return { message: '
      ' + BattleLog.parseMessage(target) + '
      ', noNotify: true }; case 'error': return '
      ' + BattleLog.escapeHTML(target) + '
      '; case 'html': if (!name) { - return {message: '
      ' + timestamp + '' + BattleLog.sanitizeHTML(target) + '
      ', noNotify: isNotPM}; + return { message: '
      ' + timestamp + '' + BattleLog.sanitizeHTML(target) + '
      ', noNotify: isNotPM }; } - return {message: '
      ' + timestamp + '' + clickableName + ': ' + BattleLog.sanitizeHTML(target) + '
      ', noNotify: isNotPM}; + return { message: '
      ' + timestamp + '' + clickableName + ': ' + BattleLog.sanitizeHTML(target) + '
      ', noNotify: isNotPM }; case 'uhtml': case 'uhtmlchange': var parts = target.split(','); @@ -1225,13 +1225,13 @@ $elements.remove(); $chatElem.append('
      ' + BattleLog.sanitizeHTML(html) + '
      '); } - return {message: '', noNotify: isNotPM}; + return { message: '', noNotify: isNotPM }; case 'raw': - return {message: '
      ' + BattleLog.sanitizeHTML(target) + '
      ', noNotify: isNotPM}; + return { message: '
      ' + BattleLog.sanitizeHTML(target) + '
      ', noNotify: isNotPM }; case 'nonotify': - return {message: '
      ' + timestamp + BattleLog.sanitizeHTML(target) + '
      ', noNotify: true}; + return { message: '
      ' + timestamp + BattleLog.sanitizeHTML(target) + '
      ', noNotify: true }; case 'challenge': - return {challenge: target}; + return { challenge: target }; default: // Not a command or unsupported. Parsed as a normal chat message. if (!name) { @@ -1246,7 +1246,7 @@ events: { 'keyup input[name=search]': 'updateSearch', 'click details': 'updateOpen', - 'click i.fa': 'updateStar', + 'click i.fa': 'updateStar' }, initialize: function (data) { this.data = data; @@ -1258,7 +1258,7 @@ "S/V Singles": true, "S/V Doubles": true, "Unofficial Metagames": true, "National Dex": true, "OM of the Month": true, "Other Metagames": true, "Randomized Format Spotlight": true, "RoA Spotlight": true, // For AFD - "Random Meta of the Decade": true, + "Random Meta of the Decade": true }; } if (!this.starred) this.starred = Storage.prefs('starredformats') || {}; @@ -1387,7 +1387,7 @@ if (!format.isTeambuilderFormat) return false; } else { if (format.effectType !== 'Format' || format.battleFormat) return false; - if (this.selectType != 'watch' && !format[this.selectType + 'Show']) return false; + if (this.selectType !== 'watch' && !format[this.selectType + 'Show']) return false; } return true; }, @@ -1531,7 +1531,7 @@ } else { bufs[curBuf] += '
    • '; count++; - if (count % bufBoundary === 0 && count != 0 && curBuf < 4) curBuf++; + if (count % bufBoundary === 0 && count !== 0 && curBuf < 4) curBuf++; } if (!isNoFolder) { for (var i = 0; i < teams.length; i++) { @@ -1578,11 +1578,11 @@ } }, events: { - 'click input[type=checkbox]': 'foldersToggle', + 'click input[type=checkbox]': 'foldersToggle' }, moreTeams: function () { this.close(); - app.addPopup(TeamPopup, {team: this.team, format: this.format, sourceEl: this.sourceEl, room: this.room, isMoreTeams: true, folderToggleOn: this.folderToggleOn, folderNotExpanded: this.folderNotExpanded}); + app.addPopup(TeamPopup, { team: this.team, format: this.format, sourceEl: this.sourceEl, room: this.room, isMoreTeams: true, folderToggleOn: this.folderToggleOn, folderNotExpanded: this.folderNotExpanded }); }, teambuilder: function () { var teamFormat = this.teamFormat; @@ -1599,19 +1599,18 @@ if (folder === key) { keyExists = true; return false; - } else { - return true; } + return true; }); if (!keyExists) { folderNotExpanded.push(key); } this.close(); - app.addPopup(TeamPopup, {team: this.team, format: this.format, sourceEl: this.sourceEl, room: this.room, isMoreTeams: this.isMoreTeams, folderToggleOn: this.folderToggleOn, folderNotExpanded: folderNotExpanded}); + app.addPopup(TeamPopup, { team: this.team, format: this.format, sourceEl: this.sourceEl, room: this.room, isMoreTeams: this.isMoreTeams, folderToggleOn: this.folderToggleOn, folderNotExpanded: folderNotExpanded }); }, foldersToggle: function () { this.close(); - app.addPopup(TeamPopup, {team: this.team, format: this.format, sourceEl: this.sourceEl, room: this.room, isMoreTeams: this.isMoreTeams, folderToggleOn: !this.folderToggleOn, folderNotExpanded: this.folderNotExpanded}); + app.addPopup(TeamPopup, { team: this.team, format: this.format, sourceEl: this.sourceEl, room: this.room, isMoreTeams: this.isMoreTeams, folderToggleOn: !this.folderToggleOn, folderNotExpanded: this.folderNotExpanded }); }, selectTeam: function (i) { i = +i; diff --git a/play.pokemonshowdown.com/js/client-rooms.js b/play.pokemonshowdown.com/js/client-rooms.js index a25f86028..6886e5ae0 100644 --- a/play.pokemonshowdown.com/js/client-rooms.js +++ b/play.pokemonshowdown.com/js/client-rooms.js @@ -117,8 +117,8 @@ if (rooms.userCount) { var userCount = Number(rooms.userCount); var battleCount = Number(rooms.battleCount); - var leftSide = ' '; - var rightSide = ''; + var leftSide = ' '; + var rightSide = ''; this.$('.roomlisttop').html('
      ' + leftSide + '' + rightSide + '
      '); } @@ -174,9 +174,11 @@ ); this.$('.roomlist').last().html( (otherRooms.length ? - '

      Chat rooms

      ' + otherRooms.sort(this.compareRooms).map(this.renderRoomBtn).join("") : '') + + '

      Chat rooms

      ' + otherRooms.sort(this.compareRooms).map(this.renderRoomBtn).join("") : '' + ) + (hiddenRooms.length && this.showMoreRooms ? - '

      Hidden rooms

      ' + hiddenRooms.sort(this.compareRooms).map(this.renderRoomBtn).join("") : '') + '

      Hidden rooms

      ' + hiddenRooms.sort(this.compareRooms).map(this.renderRoomBtn).join("") : '' + ) ); }, roomlist: function () { @@ -196,10 +198,10 @@ app.addPopupPrompt("Username", "Open", function (target) { if (!target) return; if (toID(target) === 'zarel') { - app.addPopup(Popup, {htmlMessage: "Zarel is very busy; please don't contact him this way. If you're looking for help, try joining the Help room?"}); + app.addPopup(Popup, { htmlMessage: "Zarel is very busy; please don't contact him this way. If you're looking for help, try joining the Help room?" }); return; } - app.addPopup(UserPopup, {name: target}); + app.addPopup(UserPopup, { name: target }); }); }, refresh: function () { @@ -243,9 +245,9 @@ return; } var self = this; - app.addPopup(FormatPopup, {format: format, sourceEl: button, selectType: 'watch', onselect: function (newFormat) { + app.addPopup(FormatPopup, { format: format, sourceEl: button, selectType: 'watch', onselect: function (newFormat) { self.changeFormat(newFormat); - }}); + } }); }, changeFormat: function (format) { this.format = format; diff --git a/play.pokemonshowdown.com/js/client-teambuilder.js b/play.pokemonshowdown.com/js/client-teambuilder.js index fd2593e4f..e10ca5f98 100644 --- a/play.pokemonshowdown.com/js/client-teambuilder.js +++ b/play.pokemonshowdown.com/js/client-teambuilder.js @@ -52,8 +52,8 @@ 'change .detailsform input': 'detailsChange', 'change .detailsform select': 'detailsChange', 'submit .detailsform': 'detailsChange', - 'click .changeform' : 'altForm', - 'click .altform' : 'altForm', + 'click .changeform': 'altForm', + 'click .altform': 'altForm', // stats 'keyup .statform input.numform': 'statChange', @@ -544,7 +544,7 @@ this.teamScrollPos = 0; } - //reset focus to searchbar + // reset focus to searchbar var teamSearchBar = this.$("#teamSearchBar"); var strLength = teamSearchBar.val().length; if (strLength) { @@ -555,7 +555,6 @@ updatePersistence: function (state) { if (state) { this.$('.storage-warning').html(''); - return; } }, greeting: function (answer, button) { @@ -640,9 +639,9 @@ if (format === '+') { e.stopImmediatePropagation(); var self = this; - app.addPopup(FormatPopup, {format: '', sourceEl: e.currentTarget, selectType: 'teambuilder', onselect: function (newFormat) { + app.addPopup(FormatPopup, { format: '', sourceEl: e.currentTarget, selectType: 'teambuilder', onselect: function (newFormat) { self.selectFolder(newFormat); - }}); + } }); return; } if (format === '++') { @@ -651,7 +650,7 @@ // app.addPopupPrompt("Folder name:", "Create folder", function (newFormat) { // self.selectFolder(newFormat + '/'); // }); - app.addPopup(PromptPopup, {message: "Folder name:", button: "Create folder", sourceEl: e.currentTarget, callback: function (name) { + app.addPopup(PromptPopup, { message: "Folder name:", button: "Create folder", sourceEl: e.currentTarget, callback: function (name) { name = $.trim(name); if (name.indexOf('/') >= 0 || name.indexOf('\\') >= 0) { app.addPopupMessage("Names can't contain slashes, since they're used as a folder separator."); @@ -663,7 +662,7 @@ } if (!name) return; self.selectFolder(name + '/'); - }}); + } }); return; } } else { @@ -678,7 +677,7 @@ if (this.curFolder.slice(-1) !== '/') return; var oldFolder = this.curFolder.slice(0, -1); var self = this; - app.addPopup(PromptPopup, {message: "Folder name:", button: "Rename folder", value: oldFolder, callback: function (name) { + app.addPopup(PromptPopup, { message: "Folder name:", button: "Rename folder", value: oldFolder, callback: function (name) { name = $.trim(name); if (name.indexOf('/') >= 0 || name.indexOf('\\') >= 0) { app.addPopupMessage("Names can't contain slashes, since they're used as a folder separator."); @@ -698,10 +697,10 @@ } if (!window.nodewebkit) Storage.saveTeams(); self.selectFolder(name + '/'); - }}); + } }); }, promptDeleteFolder: function () { - app.addPopup(DeleteFolderPopup, {folder: this.curFolder, room: this}); + app.addPopup(DeleteFolderPopup, { folder: this.curFolder, room: this }); }, deleteFolder: function (format, addName) { if (format.slice(-1) !== '/') return; @@ -1397,7 +1396,7 @@ evBuf += ''; } var width = stats[j] * 75 / 504; - if (j == 'hp') width = stats[j] * 75 / 704; + if (j === 'hp') width = stats[j] * 75 / 704; if (width > 75) width = 75; var color = Math.floor(stats[j] * 180 / 714); if (color > 360) color = 360; @@ -1430,7 +1429,7 @@ if (format) self.changeFormat(format.id); notes.shift(); } - var teamNotes = notes.join('\n'); // Not implemented yet + // var teamNotes = notes.join('\n'); // Not implemented yet var title = data.title; if (title && !title.startsWith('Untitled')) { @@ -1595,9 +1594,9 @@ return; } var self = this; - app.addPopup(FormatPopup, {format: format, sourceEl: button, selectType: 'teambuilder', onselect: function (newFormat) { + app.addPopup(FormatPopup, { format: format, sourceEl: button, selectType: 'teambuilder', onselect: function (newFormat) { self.changeFormat(newFormat); - }}); + } }); }, changeFormat: function (format) { this.curTeam.format = format; @@ -1683,7 +1682,7 @@ clipboardExpanded: false, clipboardExpand: function () { var $clipboard = $('.teambuilder-clipboard-data'); - $clipboard.animate({height: this.clipboardCount() * 34}, 500, function () { + $clipboard.animate({ height: this.clipboardCount() * 34 }, 500, function () { setTimeout(function () { $clipboard.focus(); }, 100); }); @@ -1693,7 +1692,7 @@ }, clipboardShrink: function () { var $clipboard = $('.teambuilder-clipboard-data'); - $clipboard.animate({height: 32}, 500); + $clipboard.animate({ height: 32 }, 500); setTimeout(function () { this.clipboardExpanded = false; @@ -1725,7 +1724,7 @@ if (this.clipboardCount() === 1) { var $clipboard = $('.teambuilder-clipboard-container').css('opacity', 0); $clipboard.slideDown(250, function () { - $clipboard.animate({opacity: 1}, 250); + $clipboard.animate({ opacity: 1 }, 250); }); } }, @@ -1734,7 +1733,7 @@ var self = this; var $clipboard = $('.teambuilder-clipboard-container'); - $clipboard.animate({opacity: 0}, 250, function () { + $clipboard.animate({ opacity: 0 }, 250, function () { $clipboard.slideUp(250, function () { self.clipboardUpdate(); }); @@ -2016,7 +2015,7 @@ if (!set.species) { buf += ' '; isAdd = true; - } else if (i == this.curSetLoc) { + } else if (i === this.curSetLoc) { buf += ' '; } else { buf += ' '; @@ -2048,7 +2047,7 @@ var set = this.curSet; if (!set) return; - var stats = {hp:'', atk:'', def:'', spa:'', spd:'', spe:''}; + var stats = { hp: '', atk: '', def: '', spa: '', spd: '', spe: '' }; var supportsEVs = !this.curTeam.format.includes('letsgo'); @@ -2066,7 +2065,7 @@ evBuf += ''; } var width = stats[stat] * 75 / 504; - if (stat == 'hp') width = stats[stat] * 75 / 704; + if (stat === 'hp') width = stats[stat] * 75 / 704; if (width > 75) width = 75; var color = Math.floor(stats[stat] * 180 / 714); if (color > 360) color = 360; @@ -2089,7 +2088,7 @@ for (var stat in stats) { if (stat === 'spd' && this.curTeam.gen === 1) continue; var width = stats[stat] * 180 / 504; - if (stat == 'hp') width = stats[stat] * 180 / 704; + if (stat === 'hp') width = stats[stat] * 180 / 704; if (width > 179) width = 179; var color = Math.floor(stats[stat] * 180 / 714); if (color > 360) color = 360; @@ -2311,7 +2310,7 @@ return; } - var stats = {hp:'', atk:'', def:'', spa:'', spd:'', spe:''}; + var stats = { hp: '', atk: '', def: '', spa: '', spd: '', spe: '' }; if (this.curTeam.gen === 1) delete stats.spd; if (!set) return; var nature = BattleNatures[set.nature || 'Serious']; @@ -2344,7 +2343,7 @@ for (var i in stats) { stats[i] = this.getStat(i); var width = stats[i] * 180 / 504; - if (i == 'hp') width = Math.floor(stats[i] * 180 / 704); + if (i === 'hp') width = Math.floor(stats[i] * 180 / 704); if (width > 179) width = 179; var color = Math.floor(stats[i] * 180 / 714); if (color > 360) color = 360; @@ -2709,7 +2708,7 @@ } else { var hpTypeX = 0; var i = 1; - var stats = {hp: 31, atk: 31, def: 31, spe: 31, spa: 31, spd: 31}; + var stats = { hp: 31, atk: 31, def: 31, spe: 31, spa: 31, spd: 31 }; for (var s in stats) { if (set.ivs[s] === undefined) set.ivs[s] = 31; hpTypeX += i * (set.ivs[s] % 2); @@ -2735,7 +2734,7 @@ var supportsEVs = !this.curTeam.format.includes('letsgo'); var supportsAVs = !supportsEVs && this.curTeam.format.endsWith('norestrictions'); if (supportsEVs) { - while (val > 0 && this.getStat(stat, set, val - 4) == result) val -= 4; + while (val > 0 && this.getStat(stat, set, val - 4) === result) val -= 4; } if (supportsEVs && !this.ignoreEVLimits && set.evs) { @@ -2848,7 +2847,7 @@ if (this.curTeam.gen > 1) { buf += '
      '; if (species.gender && !isHackmons) { - var genderTable = {'M': "Male", 'F': "Female", 'N': "Genderless"}; + var genderTable = { 'M': "Male", 'F': "Female", 'N': "Genderless" }; buf += genderTable[species.gender]; } else { buf += ' '; @@ -3050,7 +3049,7 @@ i = +$(e.currentTarget).closest('li').attr('value'); set = this.curSetList[i]; } - app.addPopup(AltFormPopup, {curSet: set, index: i, room: this}); + app.addPopup(AltFormPopup, { curSet: set, index: i, room: this }); }, /********************************************************* @@ -3125,7 +3124,6 @@ var entry = $firstResult.data('entry'); var val = entry.slice(entry.indexOf("|") + 1); this.chartSet(val, true); - return; } else if (e.keyCode === 38) { // up e.preventDefault(); e.stopPropagation(); @@ -3153,7 +3151,6 @@ } else if (e.keyCode === 27 || e.keyCode === 8) { // esc, backspace if (!e.currentTarget.value && this.search.removeFilter()) { this.search.find(''); - return; } } else if (e.keyCode === 188) { var $firstResult = this.$chart.find('a').first(); @@ -3163,7 +3160,6 @@ e.stopPropagation(); $(e.currentTarget).val('').select(); this.search.find(''); - return; } } }, @@ -3294,7 +3290,7 @@ set.item = 'Starf Berry'; set.ability = 'Harvest'; set.moves = ['Substitute', 'Horn Leech', 'Earthquake', 'Phantom Force']; - set.evs = {hp: 36, atk: 252, def: 0, spa: 0, spd: 0, spe: 220}; + set.evs = { hp: 36, atk: 252, def: 0, spa: 0, spd: 0, spe: 220 }; set.ivs = {}; set.nature = 'Jolly'; this.updateSetTop(); @@ -3328,7 +3324,7 @@ set.item = 'Leftovers'; set.ability = 'Battle Armor'; set.moves = ['Acupressure', 'Knock Off', 'Rest', 'Sleep Talk']; - set.evs = {hp: 248, atk: 0, def: 96, spa: 0, spd: 108, spe: 56}; + set.evs = { hp: 248, atk: 0, def: 96, spa: 0, spd: 108, spe: 56 }; set.ivs = {}; set.nature = 'Impish'; this.updateSetTop(); @@ -3428,7 +3424,7 @@ if (!this.canHyperTrain(set)) { var hpType = moveName.substr(13); - set.ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; + set.ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 }; if (this.curTeam.gen > 2) { var HPivs = this.curTeam.dex.types.get(hpType).HPivs; for (var i in HPivs) { @@ -3736,7 +3732,7 @@ buf += '
      '; buf += '
      '; - this.$el.html(buf).css({'max-width': (4 + spriteSize) * 7}); + this.$el.html(buf).css({ 'max-width': (4 + spriteSize) * 7 }); }, setForm: function (form) { var species = Dex.species.get(this.curSet.species); diff --git a/play.pokemonshowdown.com/js/client-topbar.js b/play.pokemonshowdown.com/js/client-topbar.js index 0aa787b22..1701d3e80 100644 --- a/play.pokemonshowdown.com/js/client-topbar.js +++ b/play.pokemonshowdown.com/js/client-topbar.js @@ -56,7 +56,7 @@ e.preventDefault(); e.stopPropagation(); var name = $(e.currentTarget).data('name'); - app.addPopup(UserPopup, {name: name, sourceEl: e.currentTarget}); + app.addPopup(UserPopup, { name: name, sourceEl: e.currentTarget }); }, toggleMute: function () { var muted = !Dex.prefs('mute'); @@ -224,7 +224,7 @@ e.preventDefault(); var $target = $(e.currentTarget); if ($target.hasClass('minilogo')) { - app.addPopup(TabListPopup, {sourceEl: e.currentTarget}); + app.addPopup(TabListPopup, { sourceEl: e.currentTarget }); return; } var id = $target.attr('href'); @@ -543,7 +543,7 @@ "हिंदी": 'hindi', "日本語": 'japanese', "简体中文": 'simplifiedchinese', - "中文": 'traditionalchinese', + "中文": 'traditionalchinese' }; buf += '

      `; } @@ -737,7 +737,7 @@ export class BattleScene implements BattleSceneStub { const side = this.battle.nearSide; if (side.ally) { - const side2 = side.ally!; + const side2 = side.ally; this.$leftbar.html(this.getSidebarHTML(side, 'near2') + this.getSidebarHTML(side2, 'near')); } else if (this.battle.sides.length > 2) { // FFA const side2 = this.battle.sides[side.n === 0 ? 3 : 2]; @@ -750,7 +750,7 @@ export class BattleScene implements BattleSceneStub { const side = this.battle.farSide; if (side.ally) { - const side2 = side.ally!; + const side2 = side.ally; this.$rightbar.html(this.getSidebarHTML(side, 'far2') + this.getSidebarHTML(side2, 'far')); } else if (this.battle.sides.length > 2) { // FFA const side2 = this.battle.sides[side.n === 0 ? 3 : 2]; @@ -802,17 +802,17 @@ export class BattleScene implements BattleSceneStub { const tooltips = this.battle.gameType === 'freeforall' ? { // FFA battles are visually rendered as triple battle with the center slots empty // so we swap the 2nd and 3rd tooltips on each side - p2b: {top: 70, left: 250, width: 80, height: 100, tooltip: 'activepokemon|1|1'}, - p2a: {top: 90, left: 390, width: 100, height: 100, tooltip: 'activepokemon|1|0'}, - p1a: {top: 200, left: 130, width: 120, height: 160, tooltip: 'activepokemon|0|0'}, - p1b: {top: 200, left: 350, width: 150, height: 160, tooltip: 'activepokemon|0|1'}, + p2b: { top: 70, left: 250, width: 80, height: 100, tooltip: 'activepokemon|1|1' }, + p2a: { top: 90, left: 390, width: 100, height: 100, tooltip: 'activepokemon|1|0' }, + p1a: { top: 200, left: 130, width: 120, height: 160, tooltip: 'activepokemon|0|0' }, + p1b: { top: 200, left: 350, width: 150, height: 160, tooltip: 'activepokemon|0|1' }, } : { - p2c: {top: 70, left: 250, width: 80, height: 100, tooltip: 'activepokemon|1|2'}, - p2b: {top: 85, left: 320, width: 90, height: 100, tooltip: 'activepokemon|1|1'}, - p2a: {top: 90, left: 390, width: 100, height: 100, tooltip: 'activepokemon|1|0'}, - p1a: {top: 200, left: 130, width: 120, height: 160, tooltip: 'activepokemon|0|0'}, - p1b: {top: 200, left: 250, width: 150, height: 160, tooltip: 'activepokemon|0|1'}, - p1c: {top: 200, left: 350, width: 150, height: 160, tooltip: 'activepokemon|0|2'}, + p2c: { top: 70, left: 250, width: 80, height: 100, tooltip: 'activepokemon|1|2' }, + p2b: { top: 85, left: 320, width: 90, height: 100, tooltip: 'activepokemon|1|1' }, + p2a: { top: 90, left: 390, width: 100, height: 100, tooltip: 'activepokemon|1|0' }, + p1a: { top: 200, left: 130, width: 120, height: 160, tooltip: 'activepokemon|0|0' }, + p1b: { top: 200, left: 250, width: 150, height: 160, tooltip: 'activepokemon|0|1' }, + p1c: { top: 200, left: 350, width: 150, height: 160, tooltip: 'activepokemon|0|2' }, }; for (const id in tooltips) { let layout = tooltips[id as 'p1a']; @@ -861,26 +861,26 @@ export class BattleScene implements BattleSceneStub { textBuf += pokemon.speciesForme; let url = spriteData.url; // if (this.paused) url.replace('/xyani', '/xy').replace('.gif', '.png'); - buf += ''; - buf2 += '
      '; + buf += ``; + buf2 += `
      `; const gender = pokemon.gender; if (gender === 'M' || gender === 'F') { buf2 += `${gender} `; } if (pokemon.level !== 100) { - buf2 += 'L' + pokemon.level + ''; + buf2 += `L${pokemon.level}`; } if (pokemon.item === '(mail)') { - buf2 += ' F'; + buf2 += ` F`; } else if (pokemon.item) { - buf2 += ' F'; + buf2 += ` F`; } buf2 += '
      '; } side.totalPokemon = side.pokemon.length; if (textBuf) { this.log.addDiv('chat battle-history', - '' + BattleLog.escapeHTML(side.name) + '\'s team: ' + BattleLog.escapeHTML(textBuf) + '' + `${BattleLog.escapeHTML(side.name)}'s team: ${BattleLog.escapeHTML(textBuf)}` ); } this.$sprites[spriteIndex].html(buf + buf2); @@ -916,21 +916,21 @@ export class BattleScene implements BattleSceneStub { } pseudoWeatherLeft(pWeather: WeatherState) { - let buf = '
      ' + Dex.moves.get(pWeather[0]).name; + let buf = `
      ${Dex.moves.get(pWeather[0]).name}`; if (!pWeather[1] && pWeather[2]) { pWeather[1] = pWeather[2]; pWeather[2] = 0; } if (this.battle.gen < 7 && this.battle.hardcoreMode) return buf; if (pWeather[2]) { - return buf + ' (' + pWeather[1] + ' or ' + pWeather[2] + ' turns)'; + return `${buf} (${pWeather[1]} or ${pWeather[2]} turns)`; } if (pWeather[1]) { - return buf + ' (' + pWeather[1] + ' turn' + (pWeather[1] === 1 ? '' : 's') + ')'; + return `${buf} (${pWeather[1]} turn${pWeather[1] === 1 ? '' : 's'})`; } return buf; // weather not found } - sideConditionLeft(cond: [string, number, number, number], isFoe: boolean, all?: boolean) { + sideConditionLeft(cond: Side['sideConditions'][string], isFoe: boolean, all?: boolean) { if (!cond[2] && !cond[3] && !all) return ''; let buf = `
      ${isFoe && !all ? "Foe's " : ""}${Dex.moves.get(cond[0]).name}`; if (this.battle.gen < 7 && this.battle.hardcoreMode) return buf; @@ -941,9 +941,9 @@ export class BattleScene implements BattleSceneStub { cond[3] = 0; } if (!cond[3]) { - return buf + ' (' + cond[2] + ' turn' + (cond[2] === 1 ? '' : 's') + ')'; + return `${buf} (${cond[2]} turn${cond[2] === 1 ? '' : 's'})`; } - return buf + ' (' + cond[2] + ' or ' + cond[3] + ' turns)'; + return `${buf} (${cond[2]} or ${cond[3]} turns)`; } weatherLeft() { if (this.battle.gen < 7 && this.battle.hardcoreMode) return ''; @@ -951,7 +951,7 @@ export class BattleScene implements BattleSceneStub { let weatherhtml = ``; if (this.battle.weather) { - const weatherNameTable: {[id: string]: string} = { + const weatherNameTable: { [id: string]: string } = { sunnyday: 'Sun', desolateland: 'Intense Sun', raindance: 'Rain', @@ -1030,7 +1030,7 @@ export class BattleScene implements BattleSceneStub { }, this.curWeather ? 300 : 100, () => { this.$weather.html('' + weatherhtml + ''); this.$weather.attr('class', weather ? 'weather ' + weather + 'weather' : 'weather'); - this.$weather.animate({opacity: isIntense || !weather ? 0.9 : 0.5}, 300); + this.$weather.animate({ opacity: isIntense || !weather ? 0.9 : 0.5 }, 300); }); this.curWeather = weather; } else { @@ -1043,7 +1043,7 @@ export class BattleScene implements BattleSceneStub { opacity: 0, }, this.curTerrain ? 400 : 1, () => { this.$terrain.attr('class', terrain ? 'weather ' + terrain + 'weather' : 'weather'); - this.$terrain.animate({top: 0, opacity: 1}, 400); + this.$terrain.animate({ top: 0, opacity: 1 }, 400); }); this.curTerrain = terrain; } @@ -1053,7 +1053,7 @@ export class BattleScene implements BattleSceneStub { this.$turn.html(''); return; } - this.$turn.html('
      Turn ' + this.battle.turn + '
      '); + this.$turn.html(`
      Turn ${this.battle.turn}
      `); } incrementTurn() { if (!this.animating) return; @@ -1061,7 +1061,7 @@ export class BattleScene implements BattleSceneStub { const turn = this.battle.turn; if (turn <= 0) return; const $prevTurn = this.$turn.children(); - const $newTurn = $('
      Turn ' + turn + '
      '); + const $newTurn = $(`
      Turn ${turn}
      `); $newTurn.css({ opacity: 0, left: 160, @@ -1071,7 +1071,7 @@ export class BattleScene implements BattleSceneStub { opacity: 1, left: 110, }, 500).animate({ - opacity: .4, + opacity: 0.4, }, 1500); $prevTurn.animate({ opacity: 0, @@ -1130,7 +1130,7 @@ export class BattleScene implements BattleSceneStub { yscale: 0, opacity: 0.1, }, this); - this.$spritesFront[spriteIndex].append(auroraveil.$el!); + this.$spritesFront[spriteIndex].append(auroraveil.$el); this.sideConditions[siden][id] = [auroraveil]; auroraveil.anim({ opacity: 0.7, @@ -1150,7 +1150,7 @@ export class BattleScene implements BattleSceneStub { yscale: 0, opacity: 0.1, }, this); - this.$spritesFront[spriteIndex].append(reflect.$el!); + this.$spritesFront[spriteIndex].append(reflect.$el); this.sideConditions[siden][id] = [reflect]; reflect.anim({ opacity: 0.7, @@ -1170,7 +1170,7 @@ export class BattleScene implements BattleSceneStub { yscale: 0, opacity: 0.1, }, this); - this.$spritesFront[spriteIndex].append(safeguard.$el!); + this.$spritesFront[spriteIndex].append(safeguard.$el); this.sideConditions[siden][id] = [safeguard]; safeguard.anim({ opacity: 0.7, @@ -1190,7 +1190,7 @@ export class BattleScene implements BattleSceneStub { yscale: 0, opacity: 0.1, }, this); - this.$spritesFront[spriteIndex].append(lightscreen.$el!); + this.$spritesFront[spriteIndex].append(lightscreen.$el); this.sideConditions[siden][id] = [lightscreen]; lightscreen.anim({ opacity: 0.7, @@ -1210,7 +1210,7 @@ export class BattleScene implements BattleSceneStub { yscale: 0, opacity: 0.1, }, this); - this.$spritesFront[spriteIndex].append(mist.$el!); + this.$spritesFront[spriteIndex].append(mist.$el); this.sideConditions[siden][id] = [mist]; mist.anim({ opacity: 0.7, @@ -1257,10 +1257,10 @@ export class BattleScene implements BattleSceneStub { scale: 0.2, }, this); - this.$spritesFront[spriteIndex].append(rock1.$el!); - this.$spritesFront[spriteIndex].append(rock2.$el!); - this.$spritesFront[spriteIndex].append(rock3.$el!); - this.$spritesFront[spriteIndex].append(rock4.$el!); + this.$spritesFront[spriteIndex].append(rock1.$el); + this.$spritesFront[spriteIndex].append(rock2.$el); + this.$spritesFront[spriteIndex].append(rock3.$el); + this.$spritesFront[spriteIndex].append(rock4.$el); this.sideConditions[siden][id] = [rock1, rock2, rock3, rock4]; break; case 'gmaxsteelsurge': @@ -1289,9 +1289,9 @@ export class BattleScene implements BattleSceneStub { scale: 0.8, }, this); - this.$spritesFront[spriteIndex].append(surge1.$el!); - this.$spritesFront[spriteIndex].append(surge2.$el!); - this.$spritesFront[spriteIndex].append(surge3.$el!); + this.$spritesFront[spriteIndex].append(surge1.$el); + this.$spritesFront[spriteIndex].append(surge2.$el); + this.$spritesFront[spriteIndex].append(surge3.$el); this.sideConditions[siden][id] = [surge1, surge2, surge3]; break; case 'spikes': @@ -1309,7 +1309,7 @@ export class BattleScene implements BattleSceneStub { z: side.z, scale: 0.3, }, this); - this.$spritesFront[spriteIndex].append(spike1.$el!); + this.$spritesFront[spriteIndex].append(spike1.$el); spikeArray.push(spike1); } if (spikeArray.length < 2 && levels >= 2) { @@ -1318,9 +1318,9 @@ export class BattleScene implements BattleSceneStub { x: x + 30, y: y - 45, z: side.z, - scale: .3, + scale: 0.3, }, this); - this.$spritesFront[spriteIndex].append(spike2.$el!); + this.$spritesFront[spriteIndex].append(spike2.$el); spikeArray.push(spike2); } if (spikeArray.length < 3 && levels >= 3) { @@ -1329,9 +1329,9 @@ export class BattleScene implements BattleSceneStub { x: x + 50, y: y - 40, z: side.z, - scale: .3, + scale: 0.3, }, this); - this.$spritesFront[spriteIndex].append(spike3.$el!); + this.$spritesFront[spriteIndex].append(spike3.$el); spikeArray.push(spike3); } break; @@ -1350,7 +1350,7 @@ export class BattleScene implements BattleSceneStub { z: side.z, scale: 0.3, }, this); - this.$spritesFront[spriteIndex].append(tspike1.$el!); + this.$spritesFront[spriteIndex].append(tspike1.$el); tspikeArray.push(tspike1); } if (tspikeArray.length < 2 && tspikeLevels >= 2) { @@ -1359,9 +1359,9 @@ export class BattleScene implements BattleSceneStub { x: x - 15, y: y - 35, z: side.z, - scale: .3, + scale: 0.3, }, this); - this.$spritesFront[spriteIndex].append(tspike2.$el!); + this.$spritesFront[spriteIndex].append(tspike2.$el); tspikeArray.push(tspike2); } break; @@ -1374,7 +1374,7 @@ export class BattleScene implements BattleSceneStub { opacity: 0.4, scale: 0.7, }, this); - this.$spritesFront[spriteIndex].append(web.$el!); + this.$spritesFront[spriteIndex].append(web.$el); this.sideConditions[siden][id] = [web]; break; } @@ -1399,7 +1399,7 @@ export class BattleScene implements BattleSceneStub { typeAnim(pokemon: Pokemon, types: string) { const result = BattleLog.escapeHTML(types).split('/').map(type => - '' + type + '' + `${type}` ).join(' '); this.resultAnim(pokemon, result, 'neutral'); } @@ -1425,7 +1425,7 @@ export class BattleScene implements BattleSceneStub { } abilityActivateAnim(pokemon: Pokemon, result: string) { if (!this.animating) return; - this.$fx.append('
      ' + result + '
      '); + this.$fx.append(`
      ${result}
      `); let $effect = this.$fx.children().last(); $effect.delay(this.timeOffset).css({ display: 'block', @@ -1459,7 +1459,7 @@ export class BattleScene implements BattleSceneStub { } if (damage === '100%' && pokemon.hp > 0) damage = '99%'; - this.resultAnim(pokemon, this.battle.hardcoreMode ? 'Damage' : '−' + damage, 'bad'); + this.resultAnim(pokemon, this.battle.hardcoreMode ? 'Damage' : `−${damage}`, 'bad'); $hp.animate({ width: w, @@ -1482,7 +1482,7 @@ export class BattleScene implements BattleSceneStub { callback = () => { $hp.removeClass('hp-red'); }; } - this.resultAnim(pokemon, this.battle.hardcoreMode ? 'Heal' : '+' + damage, 'good'); + this.resultAnim(pokemon, this.battle.hardcoreMode ? 'Heal' : `+${damage}`, 'good'); $hp.animate({ width: w, @@ -1685,7 +1685,7 @@ export class BattleScene implements BattleSceneStub { } this.battle = null!; } - static getHPColor(pokemon: {hp: number, maxhp: number}) { + static getHPColor(pokemon: { hp: number, maxhp: number }) { let ratio = pokemon.hp / pokemon.maxhp; if (ratio > 0.5) return 'g'; if (ratio > 0.2) return 'y'; @@ -1732,7 +1732,7 @@ export class Sprite { if (spriteData) { sp = spriteData; let rawHTML = sp.rawHTML || - ''; + ``; this.$el = $(rawHTML); } else { sp = { @@ -1746,7 +1746,7 @@ export class Sprite { this.x = pos.x; this.y = pos.y; this.z = pos.z; - if (pos.opacity !== 0 && spriteData) this.$el!.css(scene.pos(pos, sp)); + if (pos.opacity !== 0 && spriteData) this.$el.css(scene.pos(pos, sp)); if (!spriteData) { this.delay = function () { return this; }; @@ -1760,7 +1760,7 @@ export class Sprite { this.scene = null!; } delay(time: number) { - this.$el!.delay(time); + this.$el.delay(time); return this; } anim(end: ScenePos, transition?: string) { @@ -1774,17 +1774,17 @@ export class Sprite { ...end, }; if (end.time === 0) { - this.$el!.css(this.scene.pos(end, this.sp)); + this.$el.css(this.scene.pos(end, this.sp)); return this; } - this.$el!.animate(this.scene.posT(end, this.sp, transition, this), end.time!); + this.$el.animate(this.scene.posT(end, this.sp, transition, this), end.time!); return this; } } export class PokemonSprite extends Sprite { // HTML strings are constructed from this table and stored back in it to cache them - protected static statusTable: {[id: string]: [string, 'good' | 'bad' | 'neutral'] | null | string} = { + protected static statusTable: { [id: string]: [string, 'good' | 'bad' | 'neutral'] | null | string } = { formechange: null, typechange: null, typeadd: null, @@ -1921,7 +1921,7 @@ export class PokemonSprite extends Sprite { left = 0; top = 0; - effects: {[id: string]: Sprite[]} = {}; + effects: { [id: string]: Sprite[] } = {}; constructor(spriteData: SpriteData | null, pos: InitScenePos, scene: BattleScene, isFrontSprite: boolean) { super(spriteData, pos, scene); @@ -1985,7 +1985,7 @@ export class PokemonSprite extends Sprite { x: this.x, y: this.y, z: (this.isSubActive ? this.behind(30) : this.z), - opacity: (this.$sub ? .3 : 1), + opacity: (this.$sub ? 0.3 : 1), }, sp)); } animSub(instant?: boolean, noAnim?: boolean) { @@ -2043,14 +2043,14 @@ export class PokemonSprite extends Sprite { }, this.subsp!), 500); this.$sub = null; - this.anim({time: 500}); + this.anim({ time: 500 }); if (this.scene.animating) this.scene.waitFor(this.$el); } beforeMove() { if (!this.scene.animating) return false; if (!this.isSubActive) return false; this.isSubActive = false; - this.anim({time: 300}); + this.anim({ time: 300 }); this.$sub!.animate(this.scene.pos({ x: this.leftof(-50), y: this.y, @@ -2082,7 +2082,7 @@ export class PokemonSprite extends Sprite { z: this.behind(30), opacity: 0.3, }, this.sp), 300); - this.anim({time: 300}); + this.anim({ time: 300 }); }); return false; } @@ -2128,7 +2128,7 @@ export class PokemonSprite extends Sprite { if (this.$el) { this.$el.stop(true, false); this.$el.remove(); - const $newEl = $(''); + const $newEl = $(``); this.$el = $newEl; } @@ -2164,7 +2164,7 @@ export class PokemonSprite extends Sprite { x: this.x, y: this.y, z: this.behind(30), - opacity: .3, + opacity: 0.3, }, this.sp)); this.$sub.css(this.scene.pos({ x: this.x, @@ -2278,7 +2278,7 @@ export class PokemonSprite extends Sprite { x: this.x, y: this.y + 30, z: this.behind(50), - scale: .7, + scale: 0.7, }, { opacity: 1, x: this.x, @@ -2409,7 +2409,7 @@ export class PokemonSprite extends Sprite { left: this.statbarLeft - (this.isFrontSprite ? -100 : 100), opacity: 0, }, 300 / this.scene.acceleration, () => { - $statbar!.remove(); + $statbar.remove(); }); } } @@ -2447,7 +2447,7 @@ export class PokemonSprite extends Sprite { x: this.x, y: this.y - 40, z: this.z, - scale: .7, + scale: 0.7, time: 300 / this.scene.acceleration, }, { opacity: 0, @@ -2466,7 +2466,7 @@ export class PokemonSprite extends Sprite { left: this.statbarLeft + (this.isFrontSprite ? 50 : -50), opacity: 0, }, 300 / this.scene.acceleration, () => { - $statbar!.remove(); + $statbar.remove(); }); } } @@ -2500,7 +2500,7 @@ export class PokemonSprite extends Sprite { $statbar.animate({ opacity: 0, }, 300, () => { - $statbar!.remove(); + $statbar.remove(); }); } } @@ -2617,7 +2617,7 @@ export class PokemonSprite extends Sprite { opacity: 1, time: 100, }).anim({ - opacity: .4, + opacity: 0.4, time: 300, }); } @@ -2636,32 +2636,32 @@ export class PokemonSprite extends Sprite { x: this.x - 30, y: this.y - 40, z: this.z, - scale: .2, - opacity: .6, + scale: 0.2, + opacity: 0.6, }; const pos2 = { display: 'block', x: this.x + 40, y: this.y - 35, z: this.z, - scale: .2, - opacity: .6, + scale: 0.2, + opacity: 0.6, }; const pos3 = { display: 'block', x: this.x + 20, y: this.y - 25, z: this.z, - scale: .2, - opacity: .6, + scale: 0.2, + opacity: 0.6, }; const leechseed1 = new Sprite(BattleEffects.energyball, pos1, this.scene); const leechseed2 = new Sprite(BattleEffects.energyball, pos2, this.scene); const leechseed3 = new Sprite(BattleEffects.energyball, pos3, this.scene); - this.scene.$spritesFront[spriten].append(leechseed1.$el!); - this.scene.$spritesFront[spriten].append(leechseed2.$el!); - this.scene.$spritesFront[spriten].append(leechseed3.$el!); + this.scene.$spritesFront[spriten].append(leechseed1.$el); + this.scene.$spritesFront[spriten].append(leechseed2.$el); + this.scene.$spritesFront[spriten].append(leechseed3.$el); this.effects['leechseed'] = [leechseed1, leechseed2, leechseed3]; } else if (id === 'protect' || id === 'magiccoat') { const protect = new Sprite(BattleEffects.protect, { @@ -2671,15 +2671,15 @@ export class PokemonSprite extends Sprite { z: this.behind(-15), xscale: 1, yscale: 0, - opacity: .1, + opacity: 0.1, }, this.scene); - this.scene.$spritesFront[spriten].append(protect.$el!); + this.scene.$spritesFront[spriten].append(protect.$el); this.effects[id] = [protect]; protect.anim({ - opacity: .9, + opacity: 0.9, time: instant ? 0 : 400, }).anim({ - opacity: .4, + opacity: 0.4, time: instant ? 0 : 300, }); } @@ -2702,7 +2702,7 @@ export class PokemonSprite extends Sprite { dogarsCheck(pokemon: Pokemon) { if (pokemon.side.isFar) return; - if (pokemon.speciesForme === 'Koffing' && pokemon.name.match(/dogars/i)) { + if (pokemon.speciesForme === 'Koffing' && (/dogars/i.exec(pokemon.name))) { this.scene.setBgm(-1); } else if (this.scene.bgmNum === -1) { this.scene.rollBgm(); @@ -2734,7 +2734,7 @@ export class PokemonSprite extends Sprite { buf += (pokemon.level === 100 ? `` : ` L${pokemon.level}`); let symbol = ''; - if (pokemon.speciesForme.indexOf('-Mega') >= 0) symbol = 'mega'; + if (pokemon.speciesForme.includes('-Mega')) symbol = 'mega'; else if (pokemon.speciesForme === 'Kyogre-Primal') symbol = 'alpha'; else if (pokemon.speciesForme === 'Groudon-Primal') symbol = 'omega'; if (symbol) { @@ -2852,7 +2852,7 @@ export class PokemonSprite extends Sprite { private static getEffectTag(id: string) { let effect = PokemonSprite.statusTable[id]; if (typeof effect === 'string') return effect; - if (effect === null) return PokemonSprite.statusTable[id] = ''; + if (effect === null) return (PokemonSprite.statusTable[id] = ''); if (effect === undefined) { let label = `[[${id}]]`; if (Dex.species.get(id).exists) { @@ -2868,7 +2868,7 @@ export class PokemonSprite extends Sprite { } effect = [label, 'neutral']; } - return PokemonSprite.statusTable[id] = `${effect[0].replace(/ /g, ' ')} `; + return (PokemonSprite.statusTable[id] = `${effect[0].replace(/ /g, ' ')} `); } updateHPText(pokemon: Pokemon) { @@ -2879,11 +2879,11 @@ export class PokemonSprite extends Sprite { $hptext.hide(); $hptextborder.hide(); } else if (this.scene.battle.hardcoreMode || this.scene.battle.reportExactHP) { - $hptext.html(pokemon.hp + '/'); + $hptext.html(`${pokemon.hp}/`); $hptext.show(); $hptextborder.show(); } else { - $hptext.html(pokemon.hpWidth(100) + '%'); + $hptext.html(`${pokemon.hpWidth(100)}%`); $hptext.show(); $hptextborder.show(); } @@ -2897,7 +2897,6 @@ export class PokemonSprite extends Sprite { // slp: -webkit-filter: grayscale(100%); // frz: -webkit-filter: sepia(100%) hue-rotate(154deg) saturate(759%) brightness(23%); -// @ts-ignore Object.assign($.easing, { ballisticUp(x: number, t: number, b: number, c: number, d: number) { return -3 * x * x + 4 * x; @@ -2920,9 +2919,9 @@ interface AnimData { prepareAnim?(scene: BattleScene, args: PokemonSprite[]): void; residualAnim?(scene: BattleScene, args: PokemonSprite[]): void; } -export type AnimTable = {[k: string]: AnimData}; +export type AnimTable = { [k: string]: AnimData }; -const BattleEffects: {[k: string]: SpriteData} = { +const BattleEffects: { [k: string]: SpriteData } = { wisp: { url: 'wisp.png', w: 100, h: 100, @@ -4266,16 +4265,16 @@ export const BattleOtherAnims: AnimTable = { }, shake: { anim(scene, [attacker]) { - attacker.anim({x: attacker.x - 10, time: 200}); - attacker.anim({x: attacker.x + 10, time: 300}); - attacker.anim({x: attacker.x, time: 200}); + attacker.anim({ x: attacker.x - 10, time: 200 }); + attacker.anim({ x: attacker.x + 10, time: 300 }); + attacker.anim({ x: attacker.x, time: 200 }); }, }, dance: { anim(scene, [attacker]) { - attacker.anim({x: attacker.x - 10}); - attacker.anim({x: attacker.x + 10}); - attacker.anim({x: attacker.x}); + attacker.anim({ x: attacker.x - 10 }); + attacker.anim({ x: attacker.x + 10 }); + attacker.anim({ x: attacker.x }); }, }, consume: { @@ -6072,11 +6071,11 @@ export const BattleStatusAnims: AnimTable = { anim(scene, [attacker]) { scene.backgroundEffect('#000000', 700, 0.2); attacker.delay(300); - attacker.anim({x: attacker.x - 5, time: 50}); - attacker.anim({x: attacker.x + 5, time: 50}); - attacker.anim({x: attacker.x - 5, time: 50}); - attacker.anim({x: attacker.x + 5, time: 50}); - attacker.anim({x: attacker.x, time: 50}); + attacker.anim({ x: attacker.x - 5, time: 50 }); + attacker.anim({ x: attacker.x + 5, time: 50 }); + attacker.anim({ x: attacker.x - 5, time: 50 }); + attacker.anim({ x: attacker.x + 5, time: 50 }); + attacker.anim({ x: attacker.x, time: 50 }); scene.showEffect(attacker.sp, { x: attacker.x, @@ -6172,4 +6171,4 @@ export const BattleStatusAnims: AnimTable = { }, }, }; -BattleStatusAnims['focuspunch'] = {anim: BattleStatusAnims['flinch'].anim}; +BattleStatusAnims['focuspunch'] = { anim: BattleStatusAnims['flinch'].anim }; diff --git a/play.pokemonshowdown.com/src/battle-choices.ts b/play.pokemonshowdown.com/src/battle-choices.ts index 778c58c98..6fee431e4 100644 --- a/play.pokemonshowdown.com/src/battle-choices.ts +++ b/play.pokemonshowdown.com/src/battle-choices.ts @@ -12,8 +12,8 @@ * @license MIT */ -import type {Battle, ServerPokemon} from "./battle"; -import {Dex, toID, type ID} from "./battle-dex"; +import type { Battle, ServerPokemon } from "./battle"; +import { Dex, toID, type ID } from "./battle-dex"; export interface BattleRequestSideInfo { name: string; @@ -281,7 +281,7 @@ export class BattleChoiceBuilder { const index = this.choices.length; - if (choice === 'shift') return {choiceType: 'shift'}; + if (choice === 'shift') return { choiceType: 'shift' }; if (choice.startsWith('move ')) { if (request.requestType !== 'move') { @@ -397,7 +397,7 @@ export class BattleChoiceBuilder { const choiceid = toID(choice); let matchLevel = 0; let match = 0; - for (let i = 0 ; i < request.side.pokemon.length; i++) { + for (let i = 0; i < request.side.pokemon.length; i++) { const serverPokemon = request.side.pokemon[i]; let curMatchLevel = 0; if (choice === serverPokemon.name) { @@ -429,7 +429,7 @@ export class BattleChoiceBuilder { throw new Error(`Couldn't find Pokémon "${choice}" to switch to!`); } if (target.fainted) { - throw new Error(`${target} is fainted and cannot battle!`); + throw new Error(`${target.name} is fainted and cannot battle!`); } return current; } diff --git a/play.pokemonshowdown.com/src/battle-dex-data.ts b/play.pokemonshowdown.com/src/battle-dex-data.ts index fd303cec6..9ba4641e2 100644 --- a/play.pokemonshowdown.com/src/battle-dex-data.ts +++ b/play.pokemonshowdown.com/src/battle-dex-data.ts @@ -14,19 +14,19 @@ * @license MIT */ -import {Dex, toID} from "./battle-dex"; +import { Dex, toID } from "./battle-dex"; /** * String that contains only lowercase alphanumeric characters. */ -export type ID = string & {__isID: true}; +export type ID = string & { __isID: true }; export interface Nature { plus?: StatNameExceptHP; minus?: StatNameExceptHP; } -export const BattleNatures: {[k in NatureName]: Nature} = { +export const BattleNatures: { [k in NatureName]: Nature } = { Adamant: { plus: 'atk', minus: 'spa', @@ -113,7 +113,7 @@ export const BattleNatures: {[k in NatureName]: Nature} = { minus: 'atk', }, }; -export const BattleStatIDs: {[k: string]: StatName | undefined} = { +export const BattleStatIDs: { [k: string]: StatName | undefined } = { HP: 'hp', hp: 'hp', Atk: 'atk', @@ -148,7 +148,7 @@ export const BattleBaseSpeciesChart = [ "unown", "burmy", "shellos", "gastrodon", "deerling", "sawsbuck", "vivillon", "flabebe", "floette", "florges", "furfrou", "minior", "alcremie", "tatsugiri", "pokestarufo", "pokestarbrycenman", "pokestarmt", "pokestarmt2", "pokestartransport", "pokestargiant", "pokestarhumanoid", "pokestarmonster", "pokestarf00", "pokestarf002", "pokestarspirit", "pokestarblackdoor", "pokestarwhitedoor", "pokestarblackbelt", ] as ID[]; -export const BattlePokemonIconIndexes: {[id: string]: number} = { +export const BattlePokemonIconIndexes: { [id: string]: number } = { // alt forms egg: 1032 + 1, pikachubelle: 1032 + 2, @@ -628,7 +628,7 @@ export const BattlePokemonIconIndexes: {[id: string]: number} = { draggalong: 1512 + 77, }; -export const BattlePokemonIconIndexesLeft: {[id: string]: number} = { +export const BattlePokemonIconIndexesLeft: { [id: string]: number } = { pikachubelle: 1404 + 0, pikachupopstar: 1404 + 1, clefairy: 1404 + 2, @@ -738,7 +738,7 @@ export const BattlePokemonIconIndexesLeft: {[id: string]: number} = { blacephalon: 1404 + 105, }; -export const BattleAvatarNumbers: {[k: string]: string} = { +export const BattleAvatarNumbers: { [k: string]: string } = { 1: 'lucas', 2: 'dawn', 3: 'youngster-gen4dp', @@ -1240,10 +1240,10 @@ export class Move implements Effect { readonly zMove?: { basePower?: number, effect?: string, - boost?: {[stat in StatName]?: number}, + boost?: { [stat in StatName]?: number }, }; readonly isMax: boolean | string; - readonly maxMove: {basePower: number}; + readonly maxMove: { basePower: number }; readonly ohko: true | 'Ice' | null; readonly recoil: number[] | null; readonly heal: number[] | null; @@ -1252,7 +1252,7 @@ export class Move implements Effect { readonly basePowerCallback: boolean; readonly noPPBoosts: boolean; readonly status: string; - readonly secondaries: ReadonlyArray | null; + readonly secondaries: readonly any[] | null; readonly num: number; constructor(id: ID, name: string, data: any) { @@ -1291,43 +1291,43 @@ export class Move implements Effect { this.secondaries = data.secondaries || (data.secondary ? [data.secondary] : null); this.isMax = data.isMax || false; - this.maxMove = data.maxMove || {basePower: 0}; + this.maxMove = data.maxMove || { basePower: 0 }; if (this.category !== 'Status' && !this.maxMove?.basePower) { if (this.isZ || this.isMax) { - this.maxMove = {basePower: 1}; + this.maxMove = { basePower: 1 }; } else if (!this.basePower) { - this.maxMove = {basePower: 100}; + this.maxMove = { basePower: 100 }; } else if (['Fighting', 'Poison'].includes(this.type)) { if (this.basePower >= 150) { - this.maxMove = {basePower: 100}; + this.maxMove = { basePower: 100 }; } else if (this.basePower >= 110) { - this.maxMove = {basePower: 95}; + this.maxMove = { basePower: 95 }; } else if (this.basePower >= 75) { - this.maxMove = {basePower: 90}; + this.maxMove = { basePower: 90 }; } else if (this.basePower >= 65) { - this.maxMove = {basePower: 85}; + this.maxMove = { basePower: 85 }; } else if (this.basePower >= 55) { - this.maxMove = {basePower: 80}; + this.maxMove = { basePower: 80 }; } else if (this.basePower >= 45) { - this.maxMove = {basePower: 75}; - } else { - this.maxMove = {basePower: 70}; + this.maxMove = { basePower: 75 }; + } else { + this.maxMove = { basePower: 70 }; } } else { if (this.basePower >= 150) { - this.maxMove = {basePower: 150}; + this.maxMove = { basePower: 150 }; } else if (this.basePower >= 110) { - this.maxMove = {basePower: 140}; + this.maxMove = { basePower: 140 }; } else if (this.basePower >= 75) { - this.maxMove = {basePower: 130}; + this.maxMove = { basePower: 130 }; } else if (this.basePower >= 65) { - this.maxMove = {basePower: 120}; + this.maxMove = { basePower: 120 }; } else if (this.basePower >= 55) { - this.maxMove = {basePower: 110}; + this.maxMove = { basePower: 110 }; } else if (this.basePower >= 45) { - this.maxMove = {basePower: 100}; - } else { - this.maxMove = {basePower: 90}; + this.maxMove = { basePower: 100 }; + } else { + this.maxMove = { basePower: 90 }; } } } @@ -1468,7 +1468,7 @@ export class Species implements Effect { // basic data readonly num: number; - readonly types: ReadonlyArray; + readonly types: readonly TypeName[]; readonly abilities: Readonly<{ 0: string, 1?: string, H?: string, S?: string, }>; @@ -1482,21 +1482,21 @@ export class Species implements Effect { readonly heightm: number; readonly gender: GenderName; readonly color: string; - readonly genderRatio: Readonly<{M: number, F: number}> | null; - readonly eggGroups: ReadonlyArray; - readonly tags: ReadonlyArray; + readonly genderRatio: Readonly<{ M: number, F: number }> | null; + readonly eggGroups: readonly string[]; + readonly tags: readonly string[]; // format data - readonly otherFormes: ReadonlyArray | null; - readonly cosmeticFormes: ReadonlyArray | null; - readonly evos: ReadonlyArray | null; + readonly otherFormes: readonly string[] | null; + readonly cosmeticFormes: readonly string[] | null; + readonly evos: readonly string[] | null; readonly prevo: string; readonly evoType: 'trade' | 'useItem' | 'levelMove' | 'levelExtra' | 'levelFriendship' | 'levelHold' | 'other' | ''; readonly evoLevel: number; readonly evoMove: string; readonly evoItem: string; readonly evoCondition: string; - readonly requiredItems: ReadonlyArray; + readonly requiredItems: readonly string[]; readonly tier: string; readonly isTotem: boolean; readonly isMega: boolean; @@ -1521,15 +1521,15 @@ export class Species implements Effect { const baseId = toID(this.baseSpecies); this.formeid = (baseId === this.id ? '' : '-' + toID(this.forme)); this.spriteid = baseId + this.formeid; - if (this.spriteid.slice(-5) === 'totem') this.spriteid = this.spriteid.slice(0, -5); + if (this.spriteid.endsWith('totem')) this.spriteid = this.spriteid.slice(0, -5); if (this.spriteid === 'greninja-bond') this.spriteid = 'greninja'; - if (this.spriteid.slice(-1) === '-') this.spriteid = this.spriteid.slice(0, -1); + if (this.spriteid.endsWith('-')) this.spriteid = this.spriteid.slice(0, -1); this.baseForme = data.baseForme || ''; this.num = data.num || 0; this.types = data.types || ['???']; - this.abilities = data.abilities || {0: "No Ability"}; - this.baseStats = data.baseStats || {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}; + this.abilities = data.abilities || { 0: "No Ability" }; + this.baseStats = data.baseStats || { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 }; this.bst = this.baseStats.hp + this.baseStats.atk + this.baseStats.def + this.baseStats.spa + this.baseStats.spd + this.baseStats.spe; this.weightkg = data.weightkg || 0; diff --git a/play.pokemonshowdown.com/src/battle-dex-search.ts b/play.pokemonshowdown.com/src/battle-dex-search.ts index 71d58df8d..c7c12e87d 100644 --- a/play.pokemonshowdown.com/src/battle-dex-search.ts +++ b/play.pokemonshowdown.com/src/battle-dex-search.ts @@ -11,7 +11,7 @@ * @license MIT */ -import {Dex, ModdedDex, toID, type ID} from "./battle-dex"; +import { Dex, type ModdedDex, toID, type ID } from "./battle-dex"; type SearchType = ( 'pokemon' | 'type' | 'tier' | 'move' | 'item' | 'ability' | 'egggroup' | 'category' | 'article' @@ -217,7 +217,7 @@ export class DexSearch { /** searching for "Psychic type" will make the type come up over the move */ let qFilterType: 'type' | '' = ''; - if (query.slice(-4) === 'type') { + if (query.endsWith('type')) { if (query.slice(0, -4) in window.BattleTypeChart) { query = query.slice(0, -4); qFilterType = 'type'; @@ -265,7 +265,7 @@ export class DexSearch { // the alias text before any other passes. let queryAlias; if (query in BattleAliases) { - if (['sub', 'tr'].includes(query) || toID(BattleAliases[query]).slice(0, query.length) !== query) { + if (['sub', 'tr'].includes(query) || !toID(BattleAliases[query]).startsWith(query)) { queryAlias = toID(BattleAliases[query]); let aliasPassType: SearchPassType = (queryAlias === 'hiddenpower' ? 'exact' : 'normal'); searchPasses.unshift([aliasPassType, DexSearch.getClosest(queryAlias), queryAlias]); @@ -552,8 +552,8 @@ abstract class BattleTypedSearch { set: Dex.PokemonSet | null = null; protected formatType: 'doubles' | 'bdsp' | 'bdspdoubles' | 'bw1' | 'letsgo' | 'metronome' | 'natdex' | 'nfe' | - 'ssdlc1' | 'ssdlc1doubles' | 'predlc' | 'predlcdoubles' | 'predlcnatdex' | 'svdlc1' | 'svdlc1doubles' | - 'svdlc1natdex' | 'stadium' | 'lc' | null = null; + 'ssdlc1' | 'ssdlc1doubles' | 'predlc' | 'predlcdoubles' | 'predlcnatdex' | 'svdlc1' | 'svdlc1doubles' | + 'svdlc1natdex' | 'stadium' | 'lc' | null = null; /** * Cached copy of what the results list would be with only base filters @@ -565,7 +565,7 @@ abstract class BattleTypedSearch { * is wondering why a specific result isn't showing up. */ baseIllegalResults: SearchRow[] | null = null; - illegalReasons: {[id: string]: string} | null = null; + illegalReasons: { [id: string]: string } | null = null; results: SearchRow[] | null = null; protected readonly sortRow: SearchRow | null = null; @@ -576,7 +576,7 @@ abstract class BattleTypedSearch { this.baseResults = null; this.baseIllegalResults = null; - if (format.slice(0, 3) === 'gen') { + if (format.startsWith('gen')) { const gen = (Number(format.charAt(3)) || 6); format = (format.slice(4) || 'customgame') as ID; this.dex = Dex.forGen(gen); @@ -668,10 +668,10 @@ abstract class BattleTypedSearch { if (typeof speciesOrSet === 'string') { if (speciesOrSet) this.species = speciesOrSet; } else { - this.set = speciesOrSet as Dex.PokemonSet; + this.set = speciesOrSet; this.species = toID(this.set.species); } - if (!searchType || !this.set) return; + // if (!searchType || !this.set) return; } getResults(filters?: SearchFilter[] | null, sortCol?: string | null, reverseSort?: boolean): SearchRow[] { if (sortCol === 'type') { @@ -687,7 +687,7 @@ abstract class BattleTypedSearch { } if (!this.baseIllegalResults) { - const legalityFilter: {[id: string]: 1} = {}; + const legalityFilter: { [id: string]: 1 } = {}; for (const [resultType, value] of this.baseResults) { if (resultType === this.searchType) legalityFilter[value] = 1; } @@ -742,7 +742,7 @@ abstract class BattleTypedSearch { if (this.sortRow) { results = [this.sortRow, ...results]; } - if (illegalResults && illegalResults.length) { + if (illegalResults?.length) { results = [...results, ['header', "Illegal results"], ...illegalResults]; } return results; @@ -825,7 +825,7 @@ abstract class BattleTypedSearch { if (learnset && (moveid in learnset) && (!this.format.startsWith('tradebacks') ? learnset[moveid].includes(genChar) : learnset[moveid].includes(genChar) || (learnset[moveid].includes(`${gen + 1}`) && move.gen === gen)) && (!eggMovesOnly || (learnset[moveid].includes('e') && this.dex.gen === 9)) - ) { + ) { return true; } learnsetid = this.nextLearnsetid(learnsetid, speciesid, true); @@ -849,14 +849,14 @@ abstract class BattleTypedSearch { this.formatType === 'ssdlc1doubles' ? 'gen8dlc1doubles' : this.formatType === 'predlc' ? 'gen9predlc' : this.formatType === 'predlcdoubles' ? 'gen9predlcdoubles' : - this.formatType === 'predlcnatdex' ? 'gen9predlcnatdex' : + this.formatType === 'predlcnatdex' ? 'gen9predlcnatdex' : this.formatType === 'svdlc1' ? 'gen9dlc1' : this.formatType === 'svdlc1doubles' ? 'gen9dlc1doubles' : this.formatType === 'svdlc1natdex' ? 'gen9dlc1natdex' : this.formatType === 'natdex' ? `gen${gen}natdex` : this.formatType === 'stadium' ? `gen${gen}stadium${gen > 1 ? gen : ''}` : `gen${gen}`; - if (table && table[tableKey]) { + if (table?.[tableKey]) { table = table[tableKey]; } if (!table) return pokemon.tier; @@ -865,7 +865,7 @@ abstract class BattleTypedSearch { if (id in table.overrideTier) { return table.overrideTier[id]; } - if (id.slice(-5) === 'totem' && id.slice(0, -5) in table.overrideTier) { + if (id.endsWith('totem') && id.slice(0, -5) in table.overrideTier) { return table.overrideTier[id.slice(0, -5)]; } id = toID(pokemon.baseSpecies); @@ -884,7 +884,7 @@ abstract class BattleTypedSearch { } return true; } - abstract getTable(): {[id: string]: any}; + abstract getTable(): { [id: string]: any }; abstract getDefaultResults(): SearchRow[]; abstract getBaseResults(): SearchRow[]; abstract filter(input: SearchRow, filters: string[][]): boolean; @@ -951,13 +951,13 @@ class BattlePokemonSearch extends BattleTypedSearch<'pokemon'> { let table = BattleTeambuilderTable; if ((format.endsWith('cap') || format.endsWith('caplc')) && dex.gen < 9) { - table = table['gen' + dex.gen]; + table = table[`gen${dex.gen}`]; } else if (isVGCOrBS) { - table = table['gen' + dex.gen + 'vgc']; + table = table[`gen${dex.gen}vgc`]; } else if (dex.gen === 9 && isHackmons && !this.formatType) { table = table['bh']; } else if ( - table['gen' + dex.gen + 'doubles'] && dex.gen > 4 && + table[`gen${dex.gen}doubles`] && dex.gen > 4 && this.formatType !== 'letsgo' && this.formatType !== 'bdspdoubles' && this.formatType !== 'ssdlc1doubles' && this.formatType !== 'predlcdoubles' && this.formatType !== 'svdlc1doubles' && !this.formatType?.includes('natdex') && @@ -967,10 +967,10 @@ class BattlePokemonSearch extends BattleTypedSearch<'pokemon'> { format === 'partnersincrime' ) ) { - table = table['gen' + dex.gen + 'doubles']; + table = table[`gen${dex.gen}doubles`]; isDoublesOrBS = true; } else if (dex.gen < 9 && !this.formatType) { - table = table['gen' + dex.gen]; + table = table[`gen${dex.gen}`]; } else if (this.formatType?.startsWith('bdsp')) { table = table['gen8' + this.formatType]; } else if (this.formatType === 'letsgo') { @@ -978,13 +978,13 @@ class BattlePokemonSearch extends BattleTypedSearch<'pokemon'> { } else if (this.formatType === 'bw1') { table = table['gen5bw1']; } else if (this.formatType === 'natdex') { - table = table['gen' + dex.gen + 'natdex']; + table = table[`gen${dex.gen}natdex`]; } else if (this.formatType === 'metronome') { - table = table['gen' + dex.gen + 'metronome']; + table = table[`gen${dex.gen}metronome`]; } else if (this.formatType === 'nfe') { - table = table['gen' + dex.gen + 'nfe']; + table = table[`gen${dex.gen}nfe`]; } else if (this.formatType === 'lc') { - table = table['gen' + dex.gen + 'lc']; + table = table[`gen${dex.gen}lc`]; } else if (this.formatType?.startsWith('ssdlc1')) { if (this.formatType.includes('doubles')) { table = table['gen8dlc1doubles']; @@ -1008,7 +1008,7 @@ class BattlePokemonSearch extends BattleTypedSearch<'pokemon'> { table = table['gen9dlc1']; } } else if (this.formatType === 'stadium') { - table = table['gen' + dex.gen + 'stadium' + (dex.gen > 1 ? dex.gen : '')]; + table = table[`gen${dex.gen}stadium${dex.gen > 1 ? dex.gen : ''}`]; } if (!table.tierSet) { @@ -1019,7 +1019,7 @@ class BattlePokemonSearch extends BattleTypedSearch<'pokemon'> { table.tiers = null; } let tierSet: SearchRow[] = table.tierSet; - let slices: {[k: string]: number} = table.formatSlices; + let slices: { [k: string]: number } = table.formatSlices; if (format === 'ubers' || format === 'uber' || format === 'ubersuu' || format === 'nationaldexdoubles') { tierSet = tierSet.slice(slices.Uber); } else if (isVGCOrBS || (isHackmons && dex.gen === 9 && !this.formatType)) { @@ -1049,7 +1049,9 @@ class BattlePokemonSearch extends BattleTypedSearch<'pokemon'> { else if (format === 'pu') tierSet = tierSet.slice(slices.PU || slices.NU); else if (format === 'zu' && dex.gen === 5) tierSet = tierSet.slice(slices.PU || slices.NU); else if (format === 'zu') tierSet = tierSet.slice(slices.ZU || slices.PU || slices.NU); - else if (format === 'lc' || format === 'lcuu' || format.startsWith('lc') || (format !== 'caplc' && format.endsWith('lc'))) tierSet = tierSet.slice(slices.LC); + else if ( + format === 'lc' || format === 'lcuu' || format.startsWith('lc') || (format !== 'caplc' && format.endsWith('lc')) + ) tierSet = tierSet.slice(slices.LC); else if (format === 'cap' || format.endsWith('cap')) { tierSet = tierSet.slice(0, slices.AG || slices.Uber).concat(tierSet.slice(slices.OU)); } else if (format === 'caplc') { @@ -1276,11 +1278,11 @@ class BattleItemSearch extends BattleTypedSearch<'item'> { } else if (this.formatType === 'bw1') { table = table['gen5bw1']; } else if (this.formatType === 'natdex') { - table = table['gen' + this.dex.gen + 'natdex']; + table = table[`gen${this.dex.gen}natdex`]; } else if (this.formatType === 'metronome') { - table = table['gen' + this.dex.gen + 'metronome']; + table = table[`gen${this.dex.gen}metronome`]; } else if (this.dex.gen < 9) { - table = table['gen' + this.dex.gen]; + table = table[`gen${this.dex.gen}`]; } if (!table.itemSet) { table.itemSet = table.items.map((r: any) => { @@ -1635,7 +1637,7 @@ class BattleMoveSearch extends BattleTypedSearch<'move'> { let moves: string[] = []; let sketchMoves: string[] = []; let sketch = false; - let gen = '' + dex.gen; + let gen = `${dex.gen}`; let lsetTable = BattleTeambuilderTable; if (this.formatType?.startsWith('bdsp')) lsetTable = lsetTable['gen8bdsp']; if (this.formatType === 'letsgo') lsetTable = lsetTable['gen7letsgo']; @@ -1649,7 +1651,7 @@ class BattleMoveSearch extends BattleTypedSearch<'move'> { for (let moveid in learnset) { let learnsetEntry = learnset[moveid]; const move = dex.moves.get(moveid); - const minGenCode: {[gen: number]: string} = {6: 'p', 7: 'q', 8: 'g', 9: 'a'}; + const minGenCode: { [gen: number]: string } = { 6: 'p', 7: 'q', 8: 'g', 9: 'a' }; if (regionBornLegality && !learnsetEntry.includes(minGenCode[dex.gen])) { continue; } @@ -1661,7 +1663,7 @@ class BattleMoveSearch extends BattleTypedSearch<'move'> { } if ( !learnsetEntry.includes(gen) && - (!isTradebacks ? true : !(move.gen <= dex.gen && learnsetEntry.includes('' + (dex.gen + 1)))) + (!isTradebacks ? true : !(move.gen <= dex.gen && learnsetEntry.includes(`${dex.gen + 1}`))) ) { continue; } @@ -1819,7 +1821,7 @@ class BattleMoveSearch extends BattleTypedSearch<'move'> { const sortOrder = reverseSort ? -1 : 1; switch (sortCol) { case 'power': - let powerTable: {[id: string]: number | undefined} = { + let powerTable: { [id: string]: number | undefined } = { return: 102, frustration: 102, spitup: 300, trumpcard: 200, naturalgift: 80, grassknot: 120, lowkick: 120, gyroball: 150, electroball: 150, flail: 200, reversal: 200, present: 120, wringout: 120, crushgrip: 120, heatcrash: 120, heavyslam: 120, fling: 130, magnitude: 150, @@ -1861,7 +1863,7 @@ class BattleMoveSearch extends BattleTypedSearch<'move'> { class BattleCategorySearch extends BattleTypedSearch<'category'> { getTable() { - return {physical: 1, special: 1, status: 1}; + return { physical: 1, special: 1, status: 1 }; } getDefaultResults(): SearchRow[] { return [ diff --git a/play.pokemonshowdown.com/src/battle-dex.ts b/play.pokemonshowdown.com/src/battle-dex.ts index 61b378df1..b1d27921f 100644 --- a/play.pokemonshowdown.com/src/battle-dex.ts +++ b/play.pokemonshowdown.com/src/battle-dex.ts @@ -18,16 +18,15 @@ * @license MIT */ -import {Pokemon, type ServerPokemon} from "./battle"; +import { Pokemon, type ServerPokemon } from "./battle"; import { BattleAvatarNumbers, BattleBaseSpeciesChart, BattlePokemonIconIndexes, BattlePokemonIconIndexesLeft, BattleStatNames, Ability, Item, Move, Species, PureEffect, type ID, type Type, } from "./battle-dex-data"; -// tslint:disable-next-line -import * as DexData from "./battle-dex-data"; +import type * as DexData from "./battle-dex-data"; export declare namespace Dex { - /* tslint:disable:no-shadowed-variable */ + /* eslint-disable @typescript-eslint/no-shadow */ export type Ability = DexData.Ability; export type Item = DexData.Item; export type Move = DexData.Move; @@ -37,7 +36,7 @@ export declare namespace Dex { export type PureEffect = DexData.PureEffect; export type Effect = DexData.Effect; export type ID = DexData.ID; - /* tslint:enable:no-shadowed-variable */ + /* eslint-enable @typescript-eslint/no-shadow */ export type StatName = DexData.StatName; export type StatNameExceptHP = DexData.StatNameExceptHP; export type BoostStatName = DexData.BoostStatName; @@ -46,7 +45,7 @@ export declare namespace Dex { export type GenderName = DexData.GenderName; export type NatureName = DexData.NatureName; export type MoveTarget = DexData.MoveTarget; - export type StatsTable = {hp: number, atk: number, def: number, spa: number, spd: number, spe: number}; + export type StatsTable = { hp: number, atk: number, def: number, spa: number, spd: number, spe: number }; /** * Dex.PokemonSet can be sparse, in which case that entry should be * inferred from the rest of the set, according to sensible @@ -87,10 +86,11 @@ export declare namespace Dex { teraType?: string; } } -export type {ID}; +export type { ID }; declare const require: any; declare const global: any; +declare const process: any; if (typeof window === 'undefined') { // Node @@ -100,8 +100,7 @@ if (typeof window === 'undefined') { window.exports = window; } -// @ts-ignore -window.nodewebkit = !!(typeof process !== 'undefined' && process.versions && process.versions['node-webkit']); +window.nodewebkit = !!(typeof process !== 'undefined' && process.versions?.['node-webkit']); export function toID(text: any) { if (text?.id) { @@ -110,14 +109,14 @@ export function toID(text: any) { text = text.userid; } if (typeof text !== 'string' && typeof text !== 'number') return '' as ID; - return ('' + text).toLowerCase().replace(/[^a-z0-9]+/g, '') as ID; + return `${text}`.toLowerCase().replace(/[^a-z0-9]+/g, '') as ID; } export function toUserid(text: any) { return toID(text); } -type Comparable = number | string | boolean | Comparable[] | {reverse: Comparable}; +type Comparable = number | string | boolean | Comparable[] | { reverse: Comparable }; export const PSUtils = new class { /** * Like string.split(delimiter), but only recognizes the first `limit` @@ -129,7 +128,7 @@ export const PSUtils = new class { * * Returns an array of length exactly limit + 1. */ - splitFirst(str: string, delimiter: string, limit: number = 1) { + splitFirst(str: string, delimiter: string, limit = 1) { let splitStr: string[] = []; while (splitStr.length < limit) { let delimiterIndex = str.indexOf(delimiter); @@ -174,9 +173,9 @@ export const PSUtils = new class { return 0; } if (a.reverse) { - return PSUtils.compare((b as {reverse: string}).reverse, a.reverse); + return PSUtils.compare((b as { reverse: string }).reverse, a.reverse); } - throw new Error(`Passed value ${a} is not comparable`); + throw new Error(`Passed value ${a as any} is not comparable`); } /** * Sorts an array according to the callback's output on its elements. @@ -206,7 +205,7 @@ export function toRoomid(roomid: string) { export function toName(name: any) { if (typeof name !== 'string' && typeof name !== 'number') return ''; - name = ('' + name).replace(/[\|\s\[\]\,\u202e]+/g, ' ').trim(); + name = `${name}`.replace(/[|\s[\],\u202e]+/g, ' ').trim(); if (name.length > 18) name = name.substr(0, 18).trim(); // remove zalgo @@ -250,8 +249,8 @@ export const Dex = new class implements ModdedDex { readonly modid = 'gen9' as ID; readonly cache = null!; - readonly statNames: ReadonlyArray = ['hp', 'atk', 'def', 'spa', 'spd', 'spe']; - readonly statNamesExceptHP: ReadonlyArray = ['atk', 'def', 'spa', 'spd', 'spe']; + readonly statNames: readonly Dex.StatName[] = ['hp', 'atk', 'def', 'spa', 'spd', 'spe']; + readonly statNamesExceptHP: readonly Dex.StatNameExceptHP[] = ['atk', 'def', 'spa', 'spd', 'spe']; pokeballs: string[] | null = null; @@ -266,8 +265,8 @@ export const Dex = new class implements ModdedDex { return `${protocol}//${window.Config ? Config.routes.client : 'play.pokemonshowdown.com'}/fx/`; })(); - loadedSpriteData = {xy: 1, bw: 0}; - moddedDexes: {[mod: string]: ModdedDex} = {}; + loadedSpriteData = { xy: 1, bw: 0 }; + moddedDexes: { [mod: string]: ModdedDex } = {}; mod(modid: ID): ModdedDex { if (modid === 'gen9') return this; @@ -287,14 +286,14 @@ export const Dex = new class implements ModdedDex { if (window.BattleAvatarNumbers && avatar in BattleAvatarNumbers) { avatar = BattleAvatarNumbers[avatar]; } - if (avatar.charAt(0) === '#') { + if (avatar.startsWith('#')) { return Dex.resourcePrefix + 'sprites/trainers-custom/' + toID(avatar.substr(1)) + '.png'; } if (avatar.includes('.') && window.Config?.server?.registered) { // custom avatar served by the server let protocol = (Config.server.port === 443) ? 'https' : 'http'; return protocol + '://' + Config.server.host + ':' + Config.server.port + - '/avatars/' + encodeURIComponent(avatar).replace(/\%3F/g, '?'); + '/avatars/' + encodeURIComponent(avatar).replace(/%3F/g, '?'); } return Dex.resourcePrefix + 'sprites/trainers/' + Dex.sanitizeName(avatar || 'unknown') + '.png'; } @@ -318,14 +317,14 @@ export const Dex = new class implements ModdedDex { } prefs(prop: string) { - // @ts-ignore + // @ts-expect-error this is what I get for calling it Storage... return window.Storage?.prefs?.(prop); } getShortName(name: string) { let shortName = name.replace(/[^A-Za-z0-9]+$/, ''); - if (shortName.indexOf('(') >= 0) { - shortName += name.slice(shortName.length).replace(/[^\(\)]+/g, '').replace(/\(\)/g, ''); + if (shortName.includes('(')) { + shortName += name.slice(shortName.length).replace(/[^()]+/g, '').replace(/\(\)/g, ''); } return shortName; } @@ -379,7 +378,7 @@ export const Dex = new class implements ModdedDex { }; } - if (!data) data = {exists: false}; + if (!data) data = { exists: false }; let move = new Move(id, name, data); window.BattleMovedex[id] = move; return move; @@ -407,7 +406,7 @@ export const Dex = new class implements ModdedDex { if (!window.BattleItems) window.BattleItems = {}; let data = window.BattleItems[id]; if (data && typeof data.exists === 'boolean') return data; - if (!data) data = {exists: false}; + if (!data) data = { exists: false }; let item = new Item(id, name, data); window.BattleItems[id] = item; return item; @@ -429,7 +428,7 @@ export const Dex = new class implements ModdedDex { if (!window.BattleAbilities) window.BattleAbilities = {}; let data = window.BattleAbilities[id]; if (data && typeof data.exists === 'boolean') return data; - if (!data) data = {exists: false}; + if (!data) data = { exists: false }; let ability = new Ability(id, name, data); window.BattleAbilities[id] = ability; return ability; @@ -465,8 +464,8 @@ export const Dex = new class implements ModdedDex { if (data && typeof data.exists === 'boolean') { species = data; } else { - if (!data) data = {exists: false}; - if (!data.tier && id.slice(-5) === 'totem') { + if (!data) data = { exists: false }; + if (!data.tier && id.endsWith('totem')) { data.tier = this.species.get(id.slice(0, -5)).tier; } if (!data.tier && data.baseSpecies && toID(data.baseSpecies) !== id) { @@ -503,7 +502,7 @@ export const Dex = new class implements ModdedDex { if (!type || typeof type === 'string') { const id = toID(type) as string; const name = id.substr(0, 1).toUpperCase() + id.substr(1); - type = (window.BattleTypeChart && window.BattleTypeChart[id]) || {}; + type = window.BattleTypeChart?.[id] || {}; if (type.damageTaken) type.exists = true; if (!type.id) type.id = id; if (!type.name) type.name = name; @@ -525,14 +524,13 @@ export const Dex = new class implements ModdedDex { isName: (name: string | null): boolean => { const id = toID(name); if (name !== id.substr(0, 1).toUpperCase() + id.substr(1)) return false; - return (window.BattleTypeChart || {}).hasOwnProperty(id); + return window.BattleTypeChart?.hasOwnProperty(id); }, }; hasAbility(species: Species, ability: string) { for (const i in species.abilities) { - // @ts-ignore - if (ability === species.abilities[i]) return true; + if (ability === species.abilities[i as '0']) return true; } return false; } @@ -543,7 +541,7 @@ export const Dex = new class implements ModdedDex { let path = $('script[src*="pokedex-mini.js"]').attr('src') || ''; let qs = '?' + (path.split('?')[1] || ''); - path = (path.match(/.+?(?=data\/pokedex-mini\.js)/) || [])[0] || ''; + path = ((/.+?(?=data\/pokedex-mini\.js)/.exec(path)) || [])[0] || ''; let el = document.createElement('script'); el.src = path + 'data/pokedex-mini-bw.js' + qs; @@ -557,7 +555,7 @@ export const Dex = new class implements ModdedDex { noScale?: boolean, mod?: string, dynamax?: boolean, - } = {gen: 6}) { + } = { gen: 6 }) { const mechanicsGen = options.gen || 6; let isDynamax = !!options.dynamax; if (pokemon instanceof Pokemon) { @@ -706,7 +704,7 @@ export const Dex = new class implements ModdedDex { let allowAnim = !Dex.prefs('noanim') && !Dex.prefs('nogif'); if (allowAnim && spriteData.gen >= 6) spriteData.pixelated = false; if (allowAnim && animationData[facing] && spriteData.gen >= 5) { - if (facing.slice(-1) === 'f') name += '-f'; + if (facing.endsWith('f')) name += '-f'; dir = baseDir + 'ani' + dir; spriteData.w = animationData[facing].w; @@ -794,31 +792,32 @@ export const Dex = new class implements ModdedDex { let id = toID(pokemon); if (!pokemon || typeof pokemon === 'string') pokemon = null; - // @ts-ignore + // @ts-expect-error safe, but too lazy to cast if (pokemon?.speciesForme) id = toID(pokemon.speciesForme); - // @ts-ignore + // @ts-expect-error safe, but too lazy to cast if (pokemon?.species) id = toID(pokemon.species); - // @ts-ignore + // @ts-expect-error safe, but too lazy to cast if (pokemon?.volatiles?.formechange && !pokemon.volatiles.transform) { - // @ts-ignore + // @ts-expect-error safe, but too lazy to cast id = toID(pokemon.volatiles.formechange[1]); } let num = this.getPokemonIconNum(id, pokemon?.gender === 'F', facingLeft); let top = Math.floor(num / 12) * 30; let left = (num % 12) * 40; - let fainted = ((pokemon as Pokemon | ServerPokemon)?.fainted ? `;opacity:.3;filter:grayscale(100%) brightness(.5)` : ``); + let fainted = ((pokemon as Pokemon | ServerPokemon)?.fainted ? + `;opacity:.3;filter:grayscale(100%) brightness(.5)` : ``); return `background:transparent url(${Dex.resourcePrefix}sprites/pokemonicons-sheet.png?v18) no-repeat scroll -${left}px -${top}px${fainted}`; } - getTeambuilderSpriteData(pokemon: any, gen: number = 0): TeambuilderSpriteData { + getTeambuilderSpriteData(pokemon: any, gen = 0): TeambuilderSpriteData { let id = toID(pokemon.species); let spriteid = pokemon.spriteid; let species = Dex.species.get(pokemon.species); if (pokemon.species && !spriteid) { spriteid = species.spriteid || toID(pokemon.species); } - if (species.exists === false) return { spriteDir: 'sprites/gen5', spriteid: '0', x: 10, y: 5 }; + if (!species.exists) return { spriteDir: 'sprites/gen5', spriteid: '0', x: 10, y: 5 }; if (window.Config?.server?.afd || Dex.prefs('afd')) { return { spriteid, @@ -867,11 +866,11 @@ export const Dex = new class implements ModdedDex { return spriteData; } - getTeambuilderSprite(pokemon: any, gen: number = 0) { + getTeambuilderSprite(pokemon: any, gen = 0) { if (!pokemon) return ''; const data = this.getTeambuilderSpriteData(pokemon, gen); const shiny = (data.shiny ? '-shiny' : ''); - return 'background-image:url(' + Dex.resourcePrefix + data.spriteDir + shiny + '/' + data.spriteid + '.png);background-position:' + data.x + 'px ' + data.y + 'px;background-repeat:no-repeat'; + return `background-image:url(${Dex.resourcePrefix}${data.spriteDir}${shiny}/${data.spriteid}.png);background-position:${data.x}px ${data.y}px;background-repeat:no-repeat`; } getItemIcon(item: any) { @@ -881,7 +880,7 @@ export const Dex = new class implements ModdedDex { let top = Math.floor(num / 16) * 24; let left = (num % 16) * 24; - return 'background:transparent url(' + Dex.resourcePrefix + 'sprites/itemicons-sheet.png?v1) no-repeat scroll -' + left + 'px -' + top + 'px'; + return `background:transparent url(${Dex.resourcePrefix}sprites/itemicons-sheet.png?v1) no-repeat scroll -${left}px -${top}px`; } getTypeIcon(type: string | null, b?: boolean) { // b is just for utilichart.js @@ -911,7 +910,7 @@ export const Dex = new class implements ModdedDex { if (this.pokeballs) return this.pokeballs; this.pokeballs = []; if (!window.BattleItems) window.BattleItems = {}; - for (const data of Object.values(window.BattleItems) as AnyObject[]) { + for (const data of Object.values(window.BattleItems)) { if (!data.isPokeball) continue; this.pokeballs.push(data.name); } @@ -923,11 +922,11 @@ export class ModdedDex { readonly gen: number; readonly modid: ID; readonly cache = { - Moves: {} as any as {[k: string]: Move}, - Items: {} as any as {[k: string]: Item}, - Abilities: {} as any as {[k: string]: Ability}, - Species: {} as any as {[k: string]: Species}, - Types: {} as any as {[k: string]: Dex.Effect}, + Moves: {} as { [k: string]: Move }, + Items: {} as { [k: string]: Item }, + Abilities: {} as { [k: string]: Ability }, + Species: {} as { [k: string]: Species }, + Types: {} as { [k: string]: Dex.Effect }, }; pokeballs: string[] | null = null; constructor(modid: ID) { @@ -945,7 +944,7 @@ export class ModdedDex { } if (this.cache.Moves.hasOwnProperty(id)) return this.cache.Moves[id]; - let data = {...Dex.moves.get(name)}; + let data = { ...Dex.moves.get(name) }; for (let i = Dex.gen - 1; i >= this.gen; i--) { const table = window.BattleTeambuilderTable[`gen${i}`]; @@ -978,7 +977,7 @@ export class ModdedDex { } if (this.cache.Items.hasOwnProperty(id)) return this.cache.Items[id]; - let data = {...Dex.items.get(name)}; + let data = { ...Dex.items.get(name) }; for (let i = Dex.gen - 1; i >= this.gen; i--) { const table = window.BattleTeambuilderTable[`gen${i}`]; @@ -1008,7 +1007,7 @@ export class ModdedDex { } if (this.cache.Abilities.hasOwnProperty(id)) return this.cache.Abilities[id]; - let data = {...Dex.abilities.get(name)}; + let data = { ...Dex.abilities.get(name) }; for (let i = Dex.gen - 1; i >= this.gen; i--) { const table = window.BattleTeambuilderTable[`gen${i}`]; @@ -1038,7 +1037,7 @@ export class ModdedDex { } if (this.cache.Species.hasOwnProperty(id)) return this.cache.Species[id]; - let data = {...Dex.species.get(name)}; + let data = { ...Dex.species.get(name) }; for (let i = Dex.gen - 1; i >= this.gen; i--) { const table = window.BattleTeambuilderTable[`gen${i}`]; @@ -1053,12 +1052,12 @@ export class ModdedDex { } } if (this.gen < 3 || this.modid === 'gen7letsgo') { - data.abilities = {0: "No Ability"}; + data.abilities = { 0: "No Ability" }; } const table = window.BattleTeambuilderTable[this.modid]; if (id in table.overrideTier) data.tier = table.overrideTier[id]; - if (!data.tier && id.slice(-5) === 'totem') { + if (!data.tier && id.endsWith('totem')) { data.tier = this.species.get(id.slice(0, -5)).tier; } if (!data.tier && data.baseSpecies && toID(data.baseSpecies) !== id) { @@ -1074,22 +1073,22 @@ export class ModdedDex { types = { get: (name: string): Dex.Effect => { - const id = toID(name) as ID; + const id = toID(name); name = id.substr(0, 1).toUpperCase() + id.substr(1); if (this.cache.Types.hasOwnProperty(id)) return this.cache.Types[id]; - let data = {...Dex.types.get(name)}; + let data = { ...Dex.types.get(name) }; for (let i = 7; i >= this.gen; i--) { - const table = window.BattleTeambuilderTable['gen' + i]; + const table = window.BattleTeambuilderTable[`gen${i}`]; if (id in table.removeType) { data.exists = false; // don't bother correcting its attributes given it doesn't exist break; } if (id in table.overrideTypeChart) { - data = {...data, ...table.overrideTypeChart[id]}; + data = { ...data, ...table.overrideTypeChart[id] }; } } @@ -1102,7 +1101,7 @@ export class ModdedDex { if (this.pokeballs) return this.pokeballs; this.pokeballs = []; if (!window.BattleItems) window.BattleItems = {}; - for (const data of Object.values(window.BattleItems) as AnyObject[]) { + for (const data of Object.values(window.BattleItems)) { if (data.gen && data.gen > this.gen) continue; if (!data.isPokeball) continue; this.pokeballs.push(data.name); @@ -1148,9 +1147,9 @@ export const Teams = new class { // moves j = buf.indexOf('|', i); - set.moves = buf.substring(i, j).split(',').map(function (moveid) { - return Dex.moves.get(moveid).name; - }); + set.moves = buf.substring(i, j).split(',').map( + moveid => Dex.moves.get(moveid).name + ); i = j + 1; // nature @@ -1174,7 +1173,7 @@ export const Teams = new class { spe: Number(evs[5]) || 0, }; } else if (evstring === '0') { - set.evs = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}; + set.evs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 }; } } i = j + 1; @@ -1234,49 +1233,49 @@ export const Teams = new class { export(team: Dex.PokemonSet[] | string, gen: number, hidestats = false) { if (!team) return ''; if (typeof team === 'string') { - if (team.indexOf('\n') >= 0) return team; + if (team.includes('\n')) return team; team = this.unpack(team); } let text = ''; for (const curSet of team) { if (curSet.name && curSet.name !== curSet.species) { - text += '' + curSet.name + ' (' + curSet.species + ')'; + text += `${curSet.name} (${curSet.species})`; } else { - text += '' + curSet.species; + text += `${curSet.species}`; } if (curSet.gender === 'M') text += ' (M)'; if (curSet.gender === 'F') text += ' (F)'; if (curSet.item) { - text += ' @ ' + curSet.item; + text += ` @ ${curSet.item}`; } text += " \n"; if (curSet.ability) { - text += 'Ability: ' + curSet.ability + " \n"; + text += `Ability: ${curSet.ability} \n`; } if (curSet.level && curSet.level !== 100) { - text += 'Level: ' + curSet.level + " \n"; + text += `Level: ${curSet.level} \n`; } if (curSet.shiny) { text += 'Shiny: Yes \n'; } if (typeof curSet.happiness === 'number' && curSet.happiness !== 255 && !isNaN(curSet.happiness)) { - text += 'Happiness: ' + curSet.happiness + " \n"; + text += `Happiness: ${curSet.happiness} \n`; } if (curSet.pokeball) { - text += 'Pokeball: ' + curSet.pokeball + " \n"; + text += `Pokeball: ${curSet.pokeball} \n`; } if (curSet.hpType) { - text += 'Hidden Power: ' + curSet.hpType + " \n"; + text += `Hidden Power: ${curSet.hpType} \n`; } if (typeof curSet.dynamaxLevel === 'number' && curSet.dynamaxLevel !== 10 && !isNaN(curSet.dynamaxLevel)) { - text += 'Dynamax Level: ' + curSet.dynamaxLevel + " \n"; + text += `Dynamax Level: ${curSet.dynamaxLevel} \n`; } if (curSet.gigantamax) { text += 'Gigantamax: Yes \n'; } if (gen === 9) { const species = Dex.species.get(curSet.species); - text += 'Tera Type: ' + (species.forceTeraType || curSet.teraType || species.types[0]) + " \n"; + text += `Tera Type: ${species.forceTeraType || curSet.teraType || species.types[0]} \n`; } if (!hidestats) { let first = true; @@ -1290,14 +1289,14 @@ export const Teams = new class { } else { text += ' / '; } - text += '' + curSet.evs[j] + ' ' + BattleStatNames[j]; + text += `${curSet.evs[j]!} ${BattleStatNames[j]}`; } } if (!first) { text += " \n"; } if (curSet.nature) { - text += '' + curSet.nature + ' Nature' + " \n"; + text += `${curSet.nature} Nature \n`; } first = true; if (curSet.ivs) { @@ -1338,7 +1337,7 @@ export const Teams = new class { } else { text += ' / '; } - text += '' + curSet.ivs[stat] + ' ' + BattleStatNames[stat]; + text += `${curSet.ivs[stat]} ${BattleStatNames[stat]}`; } } } @@ -1348,11 +1347,11 @@ export const Teams = new class { } if (curSet.moves) { for (let move of curSet.moves) { - if (move.substr(0, 13) === 'Hidden Power ') { - move = move.substr(0, 13) + '[' + move.substr(13) + ']'; + if (move.startsWith('Hidden Power ')) { + move = `${move.slice(0, 13)}[${move.slice(13)}]`; } if (move) { - text += '- ' + move + " \n"; + text += `- ${move} \n`; } } } @@ -1364,6 +1363,6 @@ export const Teams = new class { if (typeof require === 'function') { // in Node - (global as any).Dex = Dex; - (global as any).toID = toID; + global.Dex = Dex; + global.toID = toID; } diff --git a/play.pokemonshowdown.com/src/battle-log.ts b/play.pokemonshowdown.com/src/battle-log.ts index e34002863..ea3797690 100644 --- a/play.pokemonshowdown.com/src/battle-log.ts +++ b/play.pokemonshowdown.com/src/battle-log.ts @@ -13,10 +13,10 @@ * @license MIT */ -import type {Battle} from './battle'; -import type {BattleScene} from './battle-animations'; -import {Dex, Teams, toID, toRoomid, toUserid, type ID} from './battle-dex'; -import {BattleTextParser, type Args, type KWArgs} from './battle-text-parser'; +import type { Battle } from './battle'; +import type { BattleScene } from './battle-animations'; +import { Dex, Teams, toID, toRoomid, toUserid, type ID } from './battle-dex'; +import { BattleTextParser, type Args, type KWArgs } from './battle-text-parser'; // Caja declare const html4: any; @@ -25,7 +25,7 @@ declare const html: any; // defined in battle-log-misc declare function MD5(input: string): string; declare function formatText(input: string, isTrusted?: boolean): string; -export {MD5, formatText}; +export { MD5, formatText }; export class BattleLog { elem: HTMLDivElement; @@ -113,7 +113,7 @@ export class BattleLog { if ( battle.seeking === Infinity ? battle.currentStep < battle.stepQueue.length - 2000 : - battle.turn < battle.seeking! - 100 + battle.turn < battle.seeking - 100 ) { this.addSeekEarlierButton(); return; @@ -154,7 +154,7 @@ export class BattleLog { const user = BattleTextParser.parseNameParts(args[1]); if (battle?.ignoreSpects && ' +'.includes(user.group)) return; const formattedUser = user.group + user.name; - const isJoin = (args[0].charAt(0) === 'j'); + const isJoin = (args[0].startsWith('j')); if (!this.joinLeave) { this.joinLeave = { joins: [], @@ -271,9 +271,11 @@ export class BattleLog { const exportedTeam = team.map(set => { let buf = Teams.export([set], battle.gen).replace(/\n/g, '
      '); if (set.name && set.name !== set.species) { - buf = buf.replace(set.name, BattleLog.sanitizeHTML(`
      ${set.name}`)); + buf = buf.replace(set.name, BattleLog.sanitizeHTML( + `
      ${set.name}`)); } else { - buf = buf.replace(set.species, `
      ${set.species}`); + buf = buf.replace(set.species, + `
      ${set.species}`); } if (set.item) { buf = buf.replace(set.item, `${set.item} `); @@ -380,7 +382,7 @@ export class BattleLog { const messages = message.split('\n').map(line => { line = BattleLog.escapeHTML(line); line = line.replace(/\*\*(.*)\*\*/, '$1'); - line = line.replace(/\|\|([^\|]*)\|\|([^\|]*)\|\|/, '$2'); + line = line.replace(/\|\|([^|]*)\|\|([^|]*)\|\|/, '$2'); if (line.startsWith(' ')) line = '' + line.trim() + ''; return line; }); @@ -550,7 +552,7 @@ export class BattleLog { return str.replace(/"/g, '"').replace(/>/g, '>').replace(/</g, '<').replace(/&/g, '&'); } - static colorCache: {[userid: string]: string} = {}; + static colorCache: { [userid: string]: string } = {}; /** @deprecated */ static hashColor(name: ID) { @@ -569,12 +571,12 @@ export class BattleLog { let S = parseInt(hash.substr(0, 4), 16) % 50 + 40; // 40 to 89 let L = Math.floor(parseInt(hash.substr(8, 4), 16) % 20 + 30); // 30 to 49 - let {R, G, B} = this.HSLToRGB(H, S, L); + let { R, G, B } = this.HSLToRGB(H, S, L); let lum = R * R * R * 0.2126 + G * G * G * 0.7152 + B * B * B * 0.0722; // 0.013 (dark blue) to 0.737 (yellow) let HLmod = (lum - 0.2) * -150; // -80 (yellow) to 28 (dark blue) if (HLmod > 18) HLmod = (HLmod - 18) * 2.5; - else if (HLmod < 0) HLmod = (HLmod - 0) / 3; + else if (HLmod < 0) HLmod /= 3; else HLmod = 0; // let mod = ';border-right: ' + Math.abs(HLmod) + 'px solid ' + (HLmod > 0 ? 'red' : '#0088FF'); let Hdist = Math.min(Math.abs(180 - H), Math.abs(240 - H)); @@ -584,7 +586,7 @@ export class BattleLog { L += HLmod; - let {R: r, G: g, B: b} = this.HSLToRGB(H, S, L); + let { R: r, G: g, B: b } = this.HSLToRGB(H, S, L); const toHex = (x: number) => { const hex = Math.round(x * 255).toString(16); return hex.length === 1 ? '0' + hex : hex; @@ -612,14 +614,15 @@ export class BattleLog { let R = R1 + m; let G = G1 + m; let B = B1 + m; - return {R, G, B}; + return { R, G, B }; } static prefs(name: string) { - // @ts-ignore + // @ts-expect-error optional, for old client if (window.Storage?.prefs) return Storage.prefs(name); - // @ts-ignore + // @ts-expect-error optional, for Preact client if (window.PS) return PS.prefs[name]; + // may be neither, for e.g. Replays return undefined; } @@ -641,7 +644,7 @@ export class BattleLog { let cmd = ''; let target = ''; - if (message.charAt(0) === '/') { + if (message.startsWith('/')) { if (message.charAt(1) === '/') { message = message.slice(1); } else { @@ -753,11 +756,11 @@ export class BattleLog { static interstice = (() => { const whitelist: string[] = Config.whitelist; const patterns = whitelist.map(entry => new RegExp( - `^(https?:)?//([A-Za-z0-9-]*\\.)?${entry.replace(/\./g, '\\.')}(/.*)?`, - 'i')); + `^(https?:)?//([A-Za-z0-9-]*\\.)?${entry.replace(/\./g, '\\.')}(/.*)?`, 'i' + )); return { isWhitelisted(uri: string) { - if (uri[0] === '/' && uri[1] !== '/') { + if (uri.startsWith('/') && uri[1] !== '/') { // domain-relative URIs are safe return true; } @@ -904,7 +907,7 @@ export class BattleLog { return { tagName: 'iframe', attribs: [ - 'src', `https://player.twitch.tv/?channel=${channelId}&parent=${location.hostname}&autoplay=false`, + 'src', `https://player.twitch.tv/?channel=${channelId!}&parent=${location.hostname}&autoplay=false`, 'allowfullscreen', 'true', 'height', `${height}`, 'width', `${width}`, ], }; @@ -912,7 +915,7 @@ export class BattleLog { // is a custom element that handles namecolors tagName = 'strong'; const color = this.usernameColor(toID(getAttrib('name'))); - const style = getAttrib('style'); + const style = getAttrib('style') || ''; setAttrib('style', `${style};color:${color}`); } else if (tagName === 'spotify') { // @@ -921,7 +924,7 @@ export class BattleLog { return { tagName: 'iframe', - attribs: ['src', `https://open.spotify.com/embed/track/${songId}`, 'width', '300', 'height', '380', 'frameborder', '0', 'allowtransparency', 'true', 'allow', 'encrypted-media'], + attribs: ['src', `https://open.spotify.com/embed/track/${songId!}`, 'width', '300', 'height', '380', 'frameborder', '0', 'allowtransparency', 'true', 'allow', 'encrypted-media'], }; } else if (tagName === 'youtube') { // @@ -936,8 +939,8 @@ export class BattleLog { if (Number(height) < 200) { height = window.innerWidth >= 400 ? '225' : '200'; } - const videoId = /(?:\?v=|\/embed\/)([A-Za-z0-9_\-]+)/.exec(src)?.[1]; - if (!videoId) return {tagName: 'img', attribs: ['alt', `invalid src for `]}; + const videoId = /(?:\?v=|\/embed\/)([A-Za-z0-9_-]+)/.exec(src)?.[1]; + if (!videoId) return { tagName: 'img', attribs: ['alt', `invalid src for `] }; const time = /(?:\?|&)(?:t|start)=([0-9]+)/.exec(src)?.[1]; this.players.push(null); @@ -950,7 +953,7 @@ export class BattleLog { 'width', width, 'height', height, 'src', `https://www.youtube.com/embed/${videoId}?enablejsapi=1&playsinline=1${time ? `&start=${time}` : ''}`, 'frameborder', '0', 'allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture', 'allowfullscreen', 'allowfullscreen', - 'time', (time || 0) + "", + 'time', `${time || 0}`, ], }; } else if (tagName === 'formatselect') { @@ -1026,7 +1029,7 @@ export class BattleLog { setAttrib('rel', 'noopener'); } } - return {tagName, attribs}; + return { tagName, attribs }; }; } static localizeTime(full: string, date: string, time: string, timezone?: string) { @@ -1081,7 +1084,8 @@ export class BattleLog { // allows T, however it's more practical to also allow spaces. return sanitized.replace( /
    ; } } diff --git a/play.pokemonshowdown.com/src/battle-sound.ts b/play.pokemonshowdown.com/src/battle-sound.ts index c5fbab049..b070fc243 100644 --- a/play.pokemonshowdown.com/src/battle-sound.ts +++ b/play.pokemonshowdown.com/src/battle-sound.ts @@ -1,4 +1,4 @@ -import {PS} from "./client-main"; +import { PS } from "./client-main"; export class BattleBGM { /** @@ -102,7 +102,7 @@ export class BattleBGM { } export const BattleSound = new class { - soundCache: {[url: string]: HTMLAudioElement | undefined} = {}; + soundCache: { [url: string]: HTMLAudioElement | undefined } = {}; bgm: BattleBGM[] = []; @@ -171,7 +171,7 @@ export const BattleSound = new class { loudnessPercentToAmplitudePercent(loudnessPercent: number) { // 10 dB is perceived as approximately twice as loud let decibels = 10 * Math.log(loudnessPercent / 100) / Math.log(2); - return Math.pow(10, decibels / 20) * 100; + return 10 ** (decibels / 20) * 100; } setBgmVolume(bgmVolume: number) { this.bgmVolume = this.loudnessPercentToAmplitudePercent(bgmVolume); diff --git a/play.pokemonshowdown.com/src/battle-text-parser.ts b/play.pokemonshowdown.com/src/battle-text-parser.ts index 0e24274ee..cf940653b 100644 --- a/play.pokemonshowdown.com/src/battle-text-parser.ts +++ b/play.pokemonshowdown.com/src/battle-text-parser.ts @@ -8,10 +8,10 @@ * @license MIT */ -import {toID, type ID} from "./battle-dex"; +import { toID, type ID } from "./battle-dex"; export type Args = [string, ...string[]]; -export type KWArgs = {[kw: string]: string}; +export type KWArgs = { [kw: string]: string }; export type SideID = 'p1' | 'p2' | 'p3' | 'p4'; export class BattleTextParser { @@ -64,22 +64,22 @@ export class BattleTextParser { return line.slice(1).split('|') as [string, ...string[]]; } - static parseBattleLine(line: string): {args: Args, kwArgs: KWArgs} { + static parseBattleLine(line: string): { args: Args, kwArgs: KWArgs } { let args = this.parseLine(line, true); - if (args) return {args, kwArgs: {}}; + if (args) return { args, kwArgs: {} }; args = line.slice(1).split('|') as [string, ...string[]]; const kwArgs: KWArgs = {}; while (args.length > 1) { const lastArg = args[args.length - 1]; - if (lastArg.charAt(0) !== '[') break; + if (!lastArg.startsWith('[')) break; const bracketPos = lastArg.indexOf(']'); if (bracketPos <= 0) break; // default to '.' so it evaluates to boolean true kwArgs[lastArg.slice(1, bracketPos)] = lastArg.slice(bracketPos + 1).trim() || '.'; args.pop(); } - return BattleTextParser.upgradeArgs({args, kwArgs}); + return BattleTextParser.upgradeArgs({ args, kwArgs }); } static parseNameParts(text: string) { @@ -102,7 +102,7 @@ export class BattleTextParser { status = status.slice(1); } } - return {group, name, away, status}; + return { group, name, away, status }; } /** @@ -110,19 +110,19 @@ export class BattleTextParser { * them to modern versions. Used to keep battle.ts itself cleaner. Not * guaranteed to mutate or not mutate its inputs. */ - static upgradeArgs({args, kwArgs}: {args: Args, kwArgs: KWArgs}): {args: Args, kwArgs: KWArgs} { + static upgradeArgs({ args, kwArgs }: { args: Args, kwArgs: KWArgs }): { args: Args, kwArgs: KWArgs } { switch (args[0]) { case '-activate': { - if (kwArgs.item || kwArgs.move || kwArgs.number || kwArgs.ability) return {args, kwArgs}; + if (kwArgs.item || kwArgs.move || kwArgs.number || kwArgs.ability) return { args, kwArgs }; let [, pokemon, effect, arg3, arg4] = args; let target = kwArgs.of; const id = BattleTextParser.effectId(effect); - if (kwArgs.block) return {args: ['-fail', pokemon], kwArgs}; + if (kwArgs.block) return { args: ['-fail', pokemon], kwArgs }; - if (id === 'wonderguard') return {args: ['-immune', pokemon], kwArgs: {from: 'ability:Wonder Guard'}}; + if (id === 'wonderguard') return { args: ['-immune', pokemon], kwArgs: { from: 'ability:Wonder Guard' } }; - if (id === 'beatup' && kwArgs.of) return {args, kwArgs: {name: kwArgs.of}}; + if (id === 'beatup' && kwArgs.of) return { args, kwArgs: { name: kwArgs.of } }; if ([ 'ingrain', 'quickguard', 'wideguard', 'craftyshield', 'matblock', 'protect', 'mist', 'safeguard', @@ -131,22 +131,22 @@ export class BattleTextParser { ].includes(id)) { if (target) { kwArgs.of = pokemon; - return {args: ['-block', target, effect, arg3], kwArgs}; + return { args: ['-block', target, effect, arg3], kwArgs }; } - return {args: ['-block', pokemon, effect, arg3], kwArgs}; + return { args: ['-block', pokemon, effect, arg3], kwArgs }; } if (id === 'charge') { - return {args: ['-singlemove', pokemon, effect], kwArgs: {of: target}}; + return { args: ['-singlemove', pokemon, effect], kwArgs: { of: target } }; } if ([ 'bind', 'wrap', 'clamp', 'whirlpool', 'firespin', 'magmastorm', 'sandtomb', 'infestation', 'snaptrap', 'thundercage', 'trapped', ].includes(id)) { - return {args: ['-start', pokemon, effect], kwArgs: {of: target}}; + return { args: ['-start', pokemon, effect], kwArgs: { of: target } }; } if (id === 'fairylock') { - return {args: ['-fieldactivate', effect], kwArgs: {}}; + return { args: ['-fieldactivate', effect], kwArgs: {} }; } if (id === 'symbiosis' || id === 'poltergeist') { @@ -168,7 +168,7 @@ export class BattleTextParser { case '-fail': { if (kwArgs.from === 'ability: Flower Veil') { - return {args: ['-block', kwArgs.of, 'ability: Flower Veil'], kwArgs: {of: args[1]}}; + return { args: ['-block', kwArgs.of, 'ability: Flower Veil'], kwArgs: { of: args[1] } }; } break; } @@ -187,7 +187,7 @@ export class BattleTextParser { let [, pokemon, effect, move] = args; if (['ability: Damp', 'ability: Dazzling', 'ability: Queenly Majesty', 'ability: Armor Tail'].includes(effect)) { args[0] = '-block'; - return {args: ['-block', pokemon, effect, move, kwArgs.of], kwArgs: {}}; + return { args: ['-block', pokemon, effect, move, kwArgs.of], kwArgs: {} }; } break; } @@ -211,15 +211,15 @@ export class BattleTextParser { case '-nothing': // OLD: |-nothing // NEW: |-activate||move:Splash - return {args: ['-activate', '', 'move:Splash'], kwArgs}; + return { args: ['-activate', '', 'move:Splash'], kwArgs }; } - return {args, kwArgs}; + return { args, kwArgs }; } extractMessage(buf: string) { let out = ''; for (const line of buf.split('\n')) { - const {args, kwArgs} = BattleTextParser.parseBattleLine(line); + const { args, kwArgs } = BattleTextParser.parseBattleLine(line); out += this.parseArgs(args, kwArgs) || ''; } return out; @@ -229,13 +229,13 @@ export class BattleTextParser { if (this.lowercaseRegExp === undefined) { const prefixes = ['pokemon', 'opposingPokemon', 'team', 'opposingTeam', 'party', 'opposingParty'].map(templateId => { const template = BattleText.default[templateId]; - if (template.charAt(0) === template.charAt(0).toUpperCase()) return ''; + if (template.startsWith(template.charAt(0).toUpperCase())) return ''; const bracketIndex = template.indexOf('['); if (bracketIndex >= 0) return template.slice(0, bracketIndex); return template; }).filter(prefix => prefix); if (prefixes.length) { - let buf = `((?:^|\n)(?: | \\\(|\\\[)?)(` + + let buf = `((?:^|\n)(?: | \\(|\\[)?)(` + prefixes.map(BattleTextParser.escapeRegExp).join('|') + `)`; this.lowercaseRegExp = new RegExp(buf, 'g'); @@ -302,7 +302,7 @@ export class BattleTextParser { return ''; } - team(side: string, isFar: boolean = false) { + team(side: string, isFar = false) { side = side.slice(0, 2); if (side === this.perspective || side === BattleTextParser.allyID(side as SideID)) { return !isFar ? BattleText.default.team : BattleText.default.opposingTeam; @@ -358,7 +358,7 @@ export class BattleTextParser { let id = BattleTextParser.effectId(namespace); if (BattleText[id] && type in BattleText[id]) { if (BattleText[id][type].charAt(1) === '.') type = BattleText[id][type].slice(2) as ID; - if (BattleText[id][type].charAt(0) === '#') id = BattleText[id][type].slice(1) as ID; + if (BattleText[id][type].startsWith('#')) id = BattleText[id][type].slice(1) as ID; if (!BattleText[id][type]) return ''; return BattleText[id][type] + '\n'; } @@ -380,7 +380,7 @@ export class BattleTextParser { static stat(stat: string) { const entry = BattleText[stat || "stats"]; - if (!entry || !entry.statName) return `???stat:${stat}???`; + if (!entry?.statName) return `???stat:${stat}???`; return entry.statName; } @@ -417,7 +417,7 @@ export class BattleTextParser { return 'postMajor'; } } - return (cmd.charAt(0) === '-' ? 'postMajor' : ''); + return (cmd.startsWith('-') ? 'postMajor' : ''); } sectionBreak(args: Args, kwArgs: KWArgs) { @@ -601,7 +601,8 @@ export class BattleTextParser { let id = BattleTextParser.effectId(effect); if (id === 'typechange') { const template = this.template('typeChange', kwArgs.from); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[TYPE]', arg3).replace('[SOURCE]', this.pokemon(kwArgs.of)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[TYPE]', arg3) + .replace('[SOURCE]', this.pokemon(kwArgs.of)); } if (id === 'typeadd') { const template = this.template('typeAdd', kwArgs.from); @@ -629,13 +630,14 @@ export class BattleTextParser { if (kwArgs.damage) templateId = 'activate'; if (kwArgs.block) templateId = 'block'; if (kwArgs.upkeep) templateId = 'upkeep'; - if (id === 'mist' && this.gen <= 2) templateId = 'startGen' + this.gen; + if (id === 'mist' && this.gen <= 2) templateId = `startGen${this.gen}`; if (id === 'reflect' || id === 'lightscreen') templateId = 'startGen1'; if (templateId === 'start' && kwArgs.from?.startsWith('item:')) { templateId += 'FromItem'; } const template = this.template(templateId, kwArgs.from, effect); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[EFFECT]', this.effect(effect)).replace('[MOVE]', arg3).replace('[SOURCE]', this.pokemon(kwArgs.of)).replace('[ITEM]', this.effect(kwArgs.from)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[EFFECT]', this.effect(effect)) + .replace('[MOVE]', arg3).replace('[SOURCE]', this.pokemon(kwArgs.of)).replace('[ITEM]', this.effect(kwArgs.from)); } case '-end': { @@ -652,7 +654,8 @@ export class BattleTextParser { template = this.template('endFromItem', effect); } if (!template) template = this.template(templateId, effect); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[EFFECT]', this.effect(effect)).replace('[SOURCE]', this.pokemon(kwArgs.of)).replace('[ITEM]', this.effect(kwArgs.from)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[EFFECT]', this.effect(effect)) + .replace('[SOURCE]', this.pokemon(kwArgs.of)).replace('[ITEM]', this.effect(kwArgs.from)); } case '-ability': { @@ -671,7 +674,8 @@ export class BattleTextParser { if (kwArgs.from) { line1 = this.maybeAbility(kwArgs.from, pokemon) + line1; const template = this.template('changeAbility', kwArgs.from); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ABILITY]', this.effect(ability)).replace('[SOURCE]', this.pokemon(kwArgs.of)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ABILITY]', this.effect(ability)) + .replace('[SOURCE]', this.pokemon(kwArgs.of)); } const id = BattleTextParser.effectId(ability); if (id === 'unnerve') { @@ -702,12 +706,14 @@ export class BattleTextParser { const line1 = this.maybeAbility(kwArgs.from, kwArgs.of || pokemon); if (['thief', 'covet', 'bestow', 'magician', 'pickpocket'].includes(id)) { const template = this.template('takeItem', kwArgs.from); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ITEM]', this.effect(item)).replace('[SOURCE]', this.pokemon(target || kwArgs.of)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ITEM]', this.effect(item)) + .replace('[SOURCE]', this.pokemon(target || kwArgs.of)); } if (id === 'frisk') { const hasTarget = kwArgs.of && pokemon && kwArgs.of !== pokemon; const template = this.template(hasTarget ? 'activate' : 'activateNoTarget', "Frisk"); - return line1 + template.replace('[POKEMON]', this.pokemon(kwArgs.of)).replace('[ITEM]', this.effect(item)).replace('[TARGET]', this.pokemon(pokemon)); + return line1 + template.replace('[POKEMON]', this.pokemon(kwArgs.of)).replace('[ITEM]', this.effect(item)) + .replace('[TARGET]', this.pokemon(pokemon)); } if (kwArgs.from) { const template = this.template('addItem', kwArgs.from); @@ -727,7 +733,8 @@ export class BattleTextParser { const id = BattleTextParser.effectId(kwArgs.from); if (id === 'gem') { const template = this.template('useGem', item); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ITEM]', this.effect(item)).replace('[MOVE]', kwArgs.move); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ITEM]', this.effect(item)) + .replace('[MOVE]', kwArgs.move); } if (id === 'stealeat') { const template = this.template('removeItem', "Bug Bite"); @@ -735,7 +742,8 @@ export class BattleTextParser { } if (kwArgs.from) { const template = this.template('removeItem', kwArgs.from); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ITEM]', this.effect(item)).replace('[SOURCE]', this.pokemon(kwArgs.of)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ITEM]', this.effect(item)) + .replace('[SOURCE]', this.pokemon(kwArgs.of)); } if (kwArgs.weaken) { const template = this.template('activateWeaken'); @@ -792,7 +800,8 @@ export class BattleTextParser { } let template = this.template('start', effect, 'NODEFAULT'); if (!template) template = this.template('start').replace('[EFFECT]', this.effect(effect)); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[SOURCE]', this.pokemon(kwArgs.of)).replace('[TEAM]', this.team(pokemon.slice(0, 2))); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[SOURCE]', this.pokemon(kwArgs.of)) + .replace('[TEAM]', this.team(pokemon.slice(0, 2))); } case '-sidestart': { @@ -922,9 +931,11 @@ export class BattleTextParser { line1 += this.ability(kwArgs.ability2, target); } if (kwArgs.move || kwArgs.number || kwArgs.item || kwArgs.name) { - template = template.replace('[MOVE]', kwArgs.move).replace('[NUMBER]', kwArgs.number).replace('[ITEM]', kwArgs.item).replace('[NAME]', kwArgs.name); + template = template.replace('[MOVE]', kwArgs.move).replace('[NUMBER]', kwArgs.number) + .replace('[ITEM]', kwArgs.item).replace('[NAME]', kwArgs.name); } - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[TARGET]', this.pokemon(target)).replace('[SOURCE]', this.pokemon(kwArgs.of)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[TARGET]', this.pokemon(target)) + .replace('[SOURCE]', this.pokemon(kwArgs.of)); } case '-prepare': { @@ -948,7 +959,8 @@ export class BattleTextParser { } if (kwArgs.from.startsWith('item:')) { template = this.template(kwArgs.of ? 'damageFromPokemon' : 'damageFromItem'); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ITEM]', this.effect(kwArgs.from)).replace('[SOURCE]', this.pokemon(kwArgs.of)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[ITEM]', this.effect(kwArgs.from)) + .replace('[SOURCE]', this.pokemon(kwArgs.of)); } if (kwArgs.partiallytrapped || id === 'bind' || id === 'wrap') { template = this.template('damageFromPartialTrapping'); @@ -964,7 +976,8 @@ export class BattleTextParser { let template = this.template('heal', kwArgs.from, 'NODEFAULT'); const line1 = this.maybeAbility(kwArgs.from, kwArgs.of || pokemon); if (template) { - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[SOURCE]', this.pokemon(kwArgs.of)).replace('[NICKNAME]', kwArgs.wisher); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[SOURCE]', this.pokemon(kwArgs.of)) + .replace('[NICKNAME]', kwArgs.wisher); } if (kwArgs.from && !kwArgs.from.startsWith('ability:')) { @@ -989,7 +1002,8 @@ export class BattleTextParser { templateId += (kwArgs.multiple ? 'MultipleFromZEffect' : 'FromZEffect'); } else if (amount && kwArgs.from?.startsWith('item:')) { const template = this.template(templateId + 'FromItem', kwArgs.from); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[STAT]', BattleTextParser.stat(stat)).replace('[ITEM]', this.effect(kwArgs.from)); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[STAT]', BattleTextParser.stat(stat)) + .replace('[ITEM]', this.effect(kwArgs.from)); } const template = this.template(templateId, kwArgs.from); return line1 + template.replace(/\[POKEMON\]/g, this.pokemon(pokemon)).replace('[STAT]', BattleTextParser.stat(stat)); @@ -1055,9 +1069,10 @@ export class BattleTextParser { const line1 = this.maybeAbility(effect, kwArgs.of || pokemon); let id = BattleTextParser.effectId(effect); let templateId = 'block'; - if (id === 'mist' && this.gen <= 2) templateId = 'blockGen' + this.gen; + if (id === 'mist' && this.gen <= 2) templateId = `blockGen${this.gen}`; const template = this.template(templateId, effect); - return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)).replace('[SOURCE]', this.pokemon(attacker || kwArgs.of)).replace('[MOVE]', move); + return line1 + template.replace('[POKEMON]', this.pokemon(pokemon)) + .replace('[SOURCE]', this.pokemon(attacker || kwArgs.of)).replace('[MOVE]', move); } case '-fail': { @@ -1199,5 +1214,5 @@ declare const require: any; declare const global: any; if (typeof require === 'function') { // in Node - (global as any).BattleTextParser = BattleTextParser; + global.BattleTextParser = BattleTextParser; } diff --git a/play.pokemonshowdown.com/src/battle-tooltips.ts b/play.pokemonshowdown.com/src/battle-tooltips.ts index c169fb1ca..19c61211f 100644 --- a/play.pokemonshowdown.com/src/battle-tooltips.ts +++ b/play.pokemonshowdown.com/src/battle-tooltips.ts @@ -8,12 +8,12 @@ * @license MIT */ -import {Pokemon, type Battle, type ServerPokemon} from "./battle"; -import {Dex, ModdedDex, toID, type ID} from "./battle-dex"; -import type {BattleScene} from "./battle-animations"; -import {BattleLog} from "./battle-log"; -import {BattleNatures} from "./battle-dex-data"; -import {BattleTextParser} from "./battle-text-parser"; +import { Pokemon, type Battle, type ServerPokemon } from "./battle"; +import { Dex, type ModdedDex, toID, type ID } from "./battle-dex"; +import type { BattleScene } from "./battle-animations"; +import { BattleLog } from "./battle-log"; +import { BattleNatures } from "./battle-dex-data"; +import { BattleTextParser } from "./battle-text-parser"; class ModifiableValue { value = 0; @@ -197,7 +197,7 @@ export class BattleTooltips { if (!BattleTooltips.isLocked) BattleTooltips.hideTooltip(); } - listen(elem: HTMLElement | JQuery) { + listen(elem: HTMLElement | JQuery) { const $elem = $(elem); $elem.on('mouseover', '.has-tooltip', this.showTooltipEvent); $elem.on('click', '.has-tooltip', this.clickTooltipEvent); @@ -359,9 +359,9 @@ export class BattleTooltips { // let side = this.battle.mySide.ally; let activeIndex = parseInt(args[1], 10); let pokemon = null; - /*if (activeIndex < side.pokemon.length) { + /* if (activeIndex < side.pokemon.length) { pokemon = side.pokemon[activeIndex] || side.ally ? side.ally.pokemon[activeIndex] : null; - }*/ + } */ let serverPokemon = this.battle.myAllyPokemon ? this.battle.myAllyPokemon[activeIndex] : null; buf = this.showPokemonTooltip(pokemon, serverPokemon); break; @@ -373,7 +373,7 @@ export class BattleTooltips { default: // "throws" an error without crashing Promise.resolve(new Error(`unrecognized type`)); - buf = `

    ${new Error(`unrecognized type`).stack}

    `; + buf = `

    ${new Error(`unrecognized type`).stack!}

    `; } this.placeTooltip(buf, elem, ownHeight, type); @@ -412,7 +412,7 @@ export class BattleTooltips { try { const selection = window.getSelection()!; if (selection.type === 'Range') return; - } catch (err) {} + } catch {} BattleTooltips.hideTooltip(); }); } else { @@ -422,7 +422,7 @@ export class BattleTooltips { left: x, top: y, }); - innerHTML = `
    ${innerHTML}
    `; + innerHTML = `
    ${innerHTML}
    `; $wrapper.html(innerHTML).appendTo(document.body); BattleTooltips.elem = $wrapper.find('.tooltip')[0] as HTMLDivElement; BattleTooltips.isLocked = false; @@ -461,7 +461,7 @@ export class BattleTooltips { BattleTooltips.hideTooltip(); } - static zMoveEffects: {[zEffect: string]: string} = { + static zMoveEffects: { [zEffect: string]: string } = { 'clearnegativeboost': "Restores negative stat stages to 0", 'crit2': "Crit ratio +2", 'heal': "Restores HP 100%", @@ -476,15 +476,14 @@ export class BattleTooltips { } let boostText = ''; if (move.zMove!.boost) { - let boosts = Object.keys(move.zMove!.boost) as Dex.StatName[]; - boostText = boosts.map(stat => - BattleTextParser.stat(stat) + ' +' + move.zMove!.boost![stat] + boostText = Object.entries(move.zMove!.boost).map(([stat, boost]) => + `${BattleTextParser.stat(stat)} +${boost}` ).join(', '); } return boostText; } - static zMoveTable: {[type in Dex.TypeName]: string} = { + static zMoveTable: { [type in Dex.TypeName]: string } = { Poison: "Acid Downpour", Fighting: "All-Out Pummeling", Dark: "Black Hole Eclipse", @@ -507,7 +506,7 @@ export class BattleTooltips { "???": "", }; - static maxMoveTable: {[type in Dex.TypeName]: string} = { + static maxMoveTable: { [type in Dex.TypeName]: string } = { Poison: "Max Ooze", Fighting: "Max Knuckle", Dark: "Max Darkness", @@ -623,7 +622,7 @@ export class BattleTooltips { }); } - text += '

    ' + move.name + '
    '; + text += `

    ${move.name}
    `; text += Dex.getTypeIcon(moveType); text += ` ${Dex.getCategoryIcon(category)}

    `; @@ -635,16 +634,16 @@ export class BattleTooltips { // Otherwise, it is just shown as in singles. // The trick is that we need to calculate it first for each Pokémon to see if it changes. let prevBasePower: string | null = null; - let basePower: string = ''; + let basePower = ''; let difference = false; let basePowers = []; for (const active of foeActive) { if (!active) continue; value = this.getMoveBasePower(move, moveType, value, active); - basePower = '' + value; + basePower = `${value}`; if (prevBasePower === null) prevBasePower = basePower; if (prevBasePower !== basePower) difference = true; - basePowers.push('Base power vs ' + active.name + ': ' + basePower); + basePowers.push(`Base power vs ${active.name}: ${basePower}`); } if (difference) { text += '

    ' + basePowers.join('
    ') + '

    '; @@ -655,7 +654,7 @@ export class BattleTooltips { if (!showingMultipleBasePowers && category !== 'Status') { let activeTarget = foeActive[0] || foeActive[1] || foeActive[2]; value = this.getMoveBasePower(move, moveType, value, activeTarget); - text += '

    Base power: ' + value + '

    '; + text += `

    Base power: ${value}

    `; } let accuracy = this.getMoveAccuracy(move, value); @@ -683,22 +682,22 @@ export class BattleTooltips { calls = 'Swift'; } let calledMove = this.battle.dex.moves.get(calls); - text += 'Calls ' + Dex.getTypeIcon(this.getMoveType(calledMove, value)[0]) + ' ' + calledMove.name; + text += `Calls ${Dex.getTypeIcon(this.getMoveType(calledMove, value)[0])} ${calledMove.name}`; } - text += '

    Accuracy: ' + accuracy + '

    '; - if (zEffect) text += '

    Z-Effect: ' + zEffect + '

    '; + text += `

    Accuracy: ${accuracy}

    `; + if (zEffect) text += `

    Z-Effect: ${zEffect}

    `; if (this.battle.hardcoreMode) { - text += '

    ' + move.shortDesc + '

    '; + text += `

    ${move.shortDesc}

    `; } else { text += '

    '; if (move.priority > 1) { - text += 'Nearly always moves first (priority +' + move.priority + ').

    '; + text += `Nearly always moves first (priority +${move.priority}).

    `; } else if (move.priority <= -1) { - text += 'Nearly always moves last (priority −' + (-move.priority) + ').

    '; + text += `Nearly always moves last (priority −${-move.priority}).

    `; } else if (move.priority === 1) { - text += 'Usually moves first (priority +' + move.priority + ').

    '; + text += `Usually moves first (priority +${move.priority}).

    `; } else { if (move.id === 'grassyglide' && this.battle.hasPseudoWeather('Grassy Terrain')) { text += 'Usually moves first (priority +1).

    '; @@ -803,7 +802,7 @@ export class BattleTooltips { let name = BattleLog.escapeHTML(pokemon.name); if (pokemon.speciesForme !== pokemon.name) { - name += ' (' + BattleLog.escapeHTML(pokemon.speciesForme) + ')'; + name += ` (${BattleLog.escapeHTML(pokemon.speciesForme)})`; } let levelBuf = (pokemon.level !== 100 ? ` L${pokemon.level}` : ``); @@ -843,25 +842,31 @@ export class BattleTooltips { text += '

    HP: (fainted)

    '; } else if (this.battle.hardcoreMode) { if (serverPokemon) { - text += '

    HP: ' + serverPokemon.hp + '/' + serverPokemon.maxhp + (pokemon.status ? ' ' + pokemon.status.toUpperCase() + '' : '') + '

    '; + const status = pokemon.status ? ` ${pokemon.status.toUpperCase()}` : ''; + text += `

    HP: ${serverPokemon.hp}/${serverPokemon.maxhp}${status}

    `; } } else { let exacthp = ''; if (serverPokemon) { - exacthp = ' (' + serverPokemon.hp + '/' + serverPokemon.maxhp + ')'; + exacthp = ` (${serverPokemon.hp}/${serverPokemon.maxhp})`; } else if (pokemon.maxhp === 48) { - exacthp = ' (' + pokemon.hp + '/' + pokemon.maxhp + ' pixels)'; + exacthp = ` (${pokemon.hp}/${pokemon.maxhp} pixels)`; } - text += '

    HP: ' + Pokemon.getHPText(pokemon, this.battle.reportExactHP) + exacthp + (pokemon.status ? ' ' + pokemon.status.toUpperCase() + '' : ''); + const status = pokemon.status ? ` ${pokemon.status.toUpperCase()}` : ''; + text += `

    HP: ${Pokemon.getHPText(pokemon, this.battle.reportExactHP)}${exacthp}${status}`; if (clientPokemon) { if (pokemon.status === 'tox') { if (pokemon.ability === 'Poison Heal' || pokemon.ability === 'Magic Guard') { - text += ' Would take if ability removed: ' + Math.floor(100 / 16 * Math.min(clientPokemon.statusData.toxicTurns + 1, 15)) + '%'; + text += ` Would take if ability removed: ${Math.floor( + 100 / 16 * Math.min(clientPokemon.statusData.toxicTurns + 1, 15) + )}%`; } else { - text += ' Next damage: ' + Math.floor(100 / (clientPokemon.volatiles['dynamax'] ? 32 : 16) * Math.min(clientPokemon.statusData.toxicTurns + 1, 15)) + '%'; + text += ` Next damage: ${Math.floor( + 100 / (clientPokemon.volatiles['dynamax'] ? 32 : 16) * Math.min(clientPokemon.statusData.toxicTurns + 1, 15) + )}%`; } } else if (pokemon.status === 'slp') { - text += ' Turns asleep: ' + clientPokemon.statusData.sleepTurns; + text += ` Turns asleep: ${clientPokemon.statusData.sleepTurns}`; } } text += '

    '; @@ -940,7 +945,7 @@ export class BattleTooltips { text += `${this.getPPUseText(row)}
    `; } if (clientPokemon.moveTrack.filter(([moveName]) => { - if (moveName.charAt(0) === '*') return false; + if (moveName.startsWith('*')) return false; const move = this.battle.dex.moves.get(moveName); return !move.isZ && !move.isMax && move.name !== 'Mimic'; }).length > 4) { @@ -995,7 +1000,7 @@ export class BattleTooltips { } calculateModifiedStats(clientPokemon: Pokemon | null, serverPokemon: ServerPokemon, statStagesOnly?: boolean) { - let stats = {...serverPokemon.stats}; + let stats = { ...serverPokemon.stats }; let pokemon = clientPokemon || serverPokemon; const isPowerTrick = clientPokemon?.volatiles['powertrick']; for (const statName of Dex.statNamesExceptHP) { @@ -1049,7 +1054,9 @@ export class BattleTooltips { } let item = toID(serverPokemon.item); - let speedHalvingEVItems = ['machobrace', 'poweranklet', 'powerband', 'powerbelt', 'powerbracer', 'powerlens', 'powerweight']; + let speedHalvingEVItems = [ + 'machobrace', 'poweranklet', 'powerband', 'powerbelt', 'powerbracer', 'powerlens', 'powerweight', + ]; if ( (ability === 'klutz' && !speedHalvingEVItems.includes(item)) || this.battle.hasPseudoWeather('Magic Room') || @@ -1188,9 +1195,9 @@ export class BattleTooltips { const isNFE = this.battle.dex.species.get(serverPokemon.speciesForme).evos?.some(evo => { const evoSpecies = this.battle.dex.species.get(evo); return !evoSpecies.isNonstandard || - evoSpecies.isNonstandard === this.battle.dex.species.get(serverPokemon.speciesForme)?.isNonstandard || - // Pokemon with Hisui evolutions - evoSpecies.isNonstandard === "Unobtainable"; + evoSpecies.isNonstandard === this.battle.dex.species.get(serverPokemon.speciesForme)?.isNonstandard || + // Pokemon with Hisui evolutions + evoSpecies.isNonstandard === "Unobtainable"; }); if (item === 'eviolite' && (isNFE || this.battle.dex.species.get(serverPokemon.speciesForme).id === 'dipplin')) { stats.def = Math.floor(stats.def * 1.5); @@ -1362,7 +1369,7 @@ export class BattleTooltips { chainedSpeedModifier *= modifier; } // Chained modifiers round down on 0.5 - stats.spe = stats.spe * chainedSpeedModifier; + stats.spe *= chainedSpeedModifier; stats.spe = stats.spe % 1 > 0.5 ? Math.ceil(stats.spe) : Math.floor(stats.spe); if (pokemon.status === 'par' && ability !== 'quickfeet') { @@ -1381,7 +1388,7 @@ export class BattleTooltips { if (!serverPokemon || isTransformed) { if (!clientPokemon) throw new Error('Must pass either clientPokemon or serverPokemon'); let [min, max] = this.getSpeedRange(clientPokemon); - return '

    Spe ' + min + ' to ' + max + ' (before items/abilities/modifiers)

    '; + return `

    Spe ${min} to ${max} (before items/abilities/modifiers)

    `; } const stats = serverPokemon.stats; const modifiedStats = this.calculateModifiedStats(clientPokemon, serverPokemon); @@ -1394,8 +1401,8 @@ export class BattleTooltips { if (this.battle.gen === 1 && statName === 'spd') continue; let statLabel = this.battle.gen === 1 && statName === 'spa' ? 'spc' : statName; buf += statName === 'atk' ? '' : ' / '; - buf += '' + BattleText[statLabel].statShortName + ' '; - buf += '' + stats[statName]; + buf += `${BattleText[statLabel].statShortName} `; + buf += `${stats[statName]}`; if (modifiedStats[statName] !== stats[statName]) hasModifiedStat = true; } buf += '

    '; @@ -1410,13 +1417,13 @@ export class BattleTooltips { if (this.battle.gen === 1 && statName === 'spd') continue; let statLabel = this.battle.gen === 1 && statName === 'spa' ? 'spc' : statName; buf += statName === 'atk' ? '' : ' / '; - buf += '' + BattleText[statLabel].statShortName + ' '; + buf += `${BattleText[statLabel].statShortName} `; if (modifiedStats[statName] === stats[statName]) { - buf += '' + modifiedStats[statName]; + buf += `${modifiedStats[statName]}`; } else if (modifiedStats[statName] < stats[statName]) { - buf += '' + modifiedStats[statName] + ''; + buf += `${modifiedStats[statName]}`; } else { - buf += '' + modifiedStats[statName] + ''; + buf += `${modifiedStats[statName]}`; } } buf += '

    '; @@ -1427,7 +1434,7 @@ export class BattleTooltips { let [moveName, ppUsed] = moveTrackRow; let move; let maxpp; - if (moveName.charAt(0) === '*') { + if (moveName.startsWith('*')) { // Transformed move move = this.battle.dex.moves.get(moveName.substr(1)); maxpp = 5; @@ -1436,11 +1443,11 @@ export class BattleTooltips { maxpp = (move.pp === 1 || move.noPPBoosts ? move.pp : move.pp * 8 / 5); if (this.battle.gen < 3) maxpp = Math.min(61, maxpp); } - const bullet = moveName.charAt(0) === '*' || move.isZ ? '' : '•'; + const bullet = moveName.startsWith('*') || move.isZ ? '' : '•'; if (ppUsed === Infinity) { return `${bullet} ${move.name} (0/${maxpp})`; } - if (ppUsed || moveName.charAt(0) === '*') { + if (ppUsed || moveName.startsWith('*')) { return `${bullet} ${move.name} (${maxpp - ppUsed}/${maxpp})`; } return `${bullet} ${move.name} ${showKnown ? ' (revealed)' : ''}`; @@ -1448,7 +1455,7 @@ export class BattleTooltips { ppUsed(move: Dex.Move, pokemon: Pokemon) { for (let [moveName, ppUsed] of pokemon.moveTrack) { - if (moveName.charAt(0) === '*') moveName = moveName.substr(1); + if (moveName.startsWith('*')) moveName = moveName.substr(1); if (move.name === moveName) return ppUsed; } return 0; @@ -1472,7 +1479,7 @@ export class BattleTooltips { if (rules['Frantic Fusions Mod']) { const fusionSpecies = this.battle.dex.species.get(pokemon.name); if (fusionSpecies.exists && fusionSpecies.name !== species.name) { - baseSpe = baseSpe + tr(fusionSpecies.baseStats.spe / 4); + baseSpe += tr(fusionSpecies.baseStats.spe / 4); if (baseSpe < 1) baseSpe = 1; if (baseSpe > 255) baseSpe = 255; } @@ -1648,7 +1655,7 @@ export class BattleTooltips { // There aren't any max moves with the sound flag, but if there were, Liquid Voice would make them water type const isSound = !!( forMaxMove ? - this.getMaxMoveFromType(moveType, forMaxMove !== true && forMaxMove || undefined) : move + this.getMaxMoveFromType(moveType, forMaxMove !== true && forMaxMove || undefined) : move ).flags['sound']; if (isSound && value.abilityModify(0, 'Liquid Voice')) { moveType = 'Water'; @@ -1716,7 +1723,7 @@ export class BattleTooltips { getMoveAccuracy(move: Dex.Move, value: ModifiableValue, target?: Pokemon) { value.reset(move.accuracy === true ? 0 : move.accuracy, true); - let pokemon = value.pokemon!; + let pokemon = value.pokemon; // Sure-hit accuracy if (move.id === 'toxic' && this.battle.gen >= 6 && this.pokemonHasType(pokemon, 'Poison')) { value.set(0, "Poison type"); @@ -1859,7 +1866,7 @@ export class BattleTooltips { // Takes into account the target for some moves. // If it is unsure of the actual base power, it gives an estimate. getMoveBasePower(move: Dex.Move, moveType: Dex.TypeName, value: ModifiableValue, target: Pokemon | null = null) { - const pokemon = value.pokemon!; + const pokemon = value.pokemon; const serverPokemon = value.serverPokemon; // apply modifiers for moves that depend on the actual stats @@ -2059,9 +2066,9 @@ export class BattleTooltips { // Base power based on times hit if (move.id === 'ragefist') { value.set(Math.min(350, 50 + 50 * pokemon.timesAttacked), - pokemon.timesAttacked > 0 - ? `Hit ${pokemon.timesAttacked} time${pokemon.timesAttacked > 1 ? 's' : ''}` - : undefined); + pokemon.timesAttacked > 0 ? + `Hit ${pokemon.timesAttacked} time${pokemon.timesAttacked > 1 ? 's' : ''}` : + undefined); } if (!value.value) return value; @@ -2236,16 +2243,16 @@ export class BattleTooltips { if (this.battle.tier.includes('Super Staff Bros')) { if (move.id === 'bodycount') { value.set(50 + 50 * pokemon.side.faintCounter, - pokemon.side.faintCounter > 0 - ? `${pokemon.side.faintCounter} teammate${pokemon.side.faintCounter > 1 ? 's' : ''} KOed` - : undefined); + pokemon.side.faintCounter > 0 ? + `${pokemon.side.faintCounter} teammate${pokemon.side.faintCounter > 1 ? 's' : ''} KOed` : + undefined); } // Base power based on times hit if (move.id === 'vengefulmood') { value.set(Math.min(140, 60 + 20 * pokemon.timesAttacked), - pokemon.timesAttacked > 0 - ? `Hit ${pokemon.timesAttacked} time${pokemon.timesAttacked > 1 ? 's' : ''}` - : undefined); + pokemon.timesAttacked > 0 ? + `Hit ${pokemon.timesAttacked} time${pokemon.timesAttacked > 1 ? 's' : ''}` : + undefined); } if (move.id === 'alting' && pokemon.shiny) { value.set(69, 'Shiny'); @@ -2305,14 +2312,14 @@ export class BattleTooltips { return value; } - static incenseTypes: {[itemName: string]: Dex.TypeName} = { + static incenseTypes: { [itemName: string]: Dex.TypeName } = { 'Odd Incense': 'Psychic', 'Rock Incense': 'Rock', 'Rose Incense': 'Grass', 'Sea Incense': 'Water', 'Wave Incense': 'Water', }; - static itemTypes: {[itemName: string]: Dex.TypeName} = { + static itemTypes: { [itemName: string]: Dex.TypeName } = { 'Black Belt': 'Fighting', 'Black Glasses': 'Dark', 'Charcoal': 'Fire', @@ -2332,7 +2339,7 @@ export class BattleTooltips { 'Spell Tag': 'Ghost', 'Twisted Spoon': 'Psychic', }; - static orbUsers: {[speciesForme: string]: string[]} = { + static orbUsers: { [speciesForme: string]: string[] } = { 'Latias': ['Soul Dew'], 'Latios': ['Soul Dew'], 'Dialga': ['Adamant Crystal', 'Adamant Orb'], @@ -2340,7 +2347,7 @@ export class BattleTooltips { 'Giratina': ['Griseous Core', 'Griseous Orb'], 'Venomicon': ['Vile Vial'], }; - static orbTypes: {[itemName: string]: Dex.TypeName[]} = { + static orbTypes: { [itemName: string]: Dex.TypeName[] } = { 'Soul Dew': ['Psychic', 'Dragon'], 'Adamant Crystal': ['Steel', 'Dragon'], 'Adamant Orb': ['Steel', 'Dragon'], @@ -2399,12 +2406,14 @@ export class BattleTooltips { } if (speciesName === 'Ogerpon') { const speciesForme = value.pokemon.getSpeciesForme(); - if ((speciesForme.startsWith('Ogerpon-Wellspring') && itemName === 'Wellspring Mask') || + if ( + (speciesForme.startsWith('Ogerpon-Wellspring') && itemName === 'Wellspring Mask') || (speciesForme.startsWith('Ogerpon-Hearthflame') && itemName === 'Hearthflame Mask') || - (speciesForme.startsWith('Ogerpon-Cornerstone') && itemName === 'Cornerstone Mask')) { - value.itemModify(1.2); - return value; - } + (speciesForme.startsWith('Ogerpon-Cornerstone') && itemName === 'Cornerstone Mask') + ) { + value.itemModify(1.2); + return value; + } } // Gems @@ -2422,14 +2431,14 @@ export class BattleTooltips { return value; } - getPokemonTypes(pokemon: Pokemon | ServerPokemon, preterastallized = false): ReadonlyArray { + getPokemonTypes(pokemon: Pokemon | ServerPokemon, preterastallized = false): readonly Dex.TypeName[] { if (!(pokemon as Pokemon).getTypes) { return this.battle.dex.species.get(pokemon.speciesForme).types; } return (pokemon as Pokemon).getTypeList(undefined, preterastallized); } - pokemonHasType(pokemon: Pokemon | ServerPokemon, type: Dex.TypeName, types?: ReadonlyArray) { + pokemonHasType(pokemon: Pokemon | ServerPokemon, type: Dex.TypeName, types?: readonly Dex.TypeName[]) { if (!types) types = this.getPokemonTypes(pokemon); for (const curType of types) { if (curType === type) return true; @@ -2446,7 +2455,7 @@ export class BattleTooltips { return ally.effectiveAbility(serverPokemon); } getPokemonAbilityData(clientPokemon: Pokemon | null, serverPokemon: ServerPokemon | null | undefined) { - const abilityData: {ability: string, baseAbility: string, possibilities: string[]} = { + const abilityData: { ability: string, baseAbility: string, possibilities: string[] } = { ability: '', baseAbility: '', possibilities: [], }; if (clientPokemon) { @@ -2459,16 +2468,14 @@ export class BattleTooltips { const speciesForme = clientPokemon.getSpeciesForme() || serverPokemon?.speciesForme || ''; const species = this.battle.dex.species.get(speciesForme); if (species.exists && species.abilities) { - abilityData.possibilities = [species.abilities['0']]; - if (species.abilities['1']) abilityData.possibilities.push(species.abilities['1']); - if (species.abilities['H']) abilityData.possibilities.push(species.abilities['H']); - if (species.abilities['S']) abilityData.possibilities.push(species.abilities['S']); + abilityData.possibilities = Object.values(species.abilities); if (this.battle.rules['Frantic Fusions Mod']) { const fusionSpecies = this.battle.dex.species.get(clientPokemon.name); if (fusionSpecies.exists && fusionSpecies.name !== species.name) { - abilityData.possibilities = Array.from( - new Set(abilityData.possibilities.concat(Object.values(fusionSpecies.abilities))) - ); + for (const newAbility of Object.values(fusionSpecies.abilities)) { + if (abilityData.possibilities.includes(newAbility)) continue; + abilityData.possibilities.push(newAbility); + } } } } @@ -2537,13 +2544,13 @@ class BattleStatGuesser { guess(set: Dex.PokemonSet) { let role = this.guessRole(set); let comboEVs = this.guessEVs(set, role); - let evs = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}; + let evs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 }; for (let stat in evs) { evs[stat as Dex.StatName] = comboEVs[stat as Dex.StatName] || 0; } let plusStat = comboEVs.plusStat || ''; let minusStat = comboEVs.minusStat || ''; - return {role, evs, plusStat, minusStat, moveCount: this.moveCount, hasMove: this.hasMove}; + return { role, evs, plusStat, minusStat, moveCount: this.moveCount, hasMove: this.hasMove }; } guessRole(set: Dex.PokemonSet) { if (!set) return '?'; @@ -2569,7 +2576,7 @@ class BattleStatGuesser { 'specialBulk': 0, 'physicalBulk': 0, }; - let hasMove: {[moveid: string]: 1} = {}; + let hasMove: { [moveid: string]: 1 } = {}; let itemid = toID(set.item); let item = this.dex.items.get(itemid); let abilityid = toID(set.ability); @@ -2835,7 +2842,7 @@ class BattleStatGuesser { diff -= change; } if (diff <= 0) return evTotal; - let evPriority = {def: 1, spd: 1, hp: 1, atk: 1, spa: 1, spe: 1}; + let evPriority = { def: 1, spd: 1, hp: 1, atk: 1, spa: 1, spe: 1 }; let prioStat: Dex.StatName; for (prioStat in evPriority) { if (prioStat === stat) continue; @@ -2857,7 +2864,7 @@ class BattleStatGuesser { } guessEVs( set: Dex.PokemonSet, role: string - ): Partial & {plusStat?: Dex.StatName | '', minusStat?: Dex.StatName | ''} { + ): Partial & { plusStat?: Dex.StatName | '', minusStat?: Dex.StatName | '' } { if (!set) return {}; if (role === '?') return {}; let species = this.dex.species.get(set.species || set.name!); @@ -2866,13 +2873,13 @@ class BattleStatGuesser { let hasMove = this.hasMove; let moveCount = this.moveCount; - let evs: Dex.StatsTable & {plusStat?: Dex.StatName | '', minusStat?: Dex.StatName | ''} = { + let evs: Dex.StatsTable & { plusStat?: Dex.StatName | '', minusStat?: Dex.StatName | '' } = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, }; let plusStat: Dex.StatName | '' = ''; let minusStat: Dex.StatName | '' = ''; - let statChart: {[role: string]: [Dex.StatName, Dex.StatName]} = { + let statChart: { [role: string]: [Dex.StatName, Dex.StatName] } = { 'Bulky Band': ['atk', 'hp'], 'Fast Band': ['spe', 'atk'], 'Bulky Specs': ['spa', 'hp'], @@ -2906,7 +2913,7 @@ class BattleStatGuesser { if (this.supportsAVs) { // Let's Go, AVs enabled - evs = {hp: 200, atk: 200, def: 200, spa: 200, spd: 200, spe: 200}; + evs = { hp: 200, atk: 200, def: 200, spa: 200, spd: 200, spe: 200 }; if (!moveCount['PhysicalAttack']) evs.atk = 0; if (!moveCount['SpecialAttack']) evs.spa = 0; if (hasMove['gyroball'] || hasMove['trickroom']) evs.spe = 0; @@ -2915,7 +2922,7 @@ class BattleStatGuesser { // no change } else if (this.ignoreEVLimits) { // Gen 1-2, hackable EVs (like Hackmons) - evs = {hp: 252, atk: 252, def: 252, spa: 252, spd: 252, spe: 252}; + evs = { hp: 252, atk: 252, def: 252, spa: 252, spd: 252, spe: 252 }; if (!moveCount['PhysicalAttack']) evs.atk = 0; if (!moveCount['SpecialAttack'] && this.dex.gen > 1) evs.spa = 0; if (hasMove['gyroball'] || hasMove['trickroom']) evs.spe = 0; @@ -2946,14 +2953,14 @@ class BattleStatGuesser { let SRresistances = ['Ground', 'Steel', 'Fighting']; let SRweak = 0; if (set.ability !== 'Magic Guard' && set.ability !== 'Mountaineer') { - if (SRweaknesses.indexOf(species.types[0]) >= 0) { + if (SRweaknesses.includes(species.types[0])) { SRweak++; - } else if (SRresistances.indexOf(species.types[0]) >= 0) { + } else if (SRresistances.includes(species.types[0])) { SRweak--; } - if (SRweaknesses.indexOf(species.types[1]) >= 0) { + if (SRweaknesses.includes(species.types[1])) { SRweak++; - } else if (SRresistances.indexOf(species.types[1]) >= 0) { + } else if (SRresistances.includes(species.types[1])) { SRweak--; } } @@ -2965,10 +2972,10 @@ class BattleStatGuesser { hpDivisibility = 4; } else if (set.item === 'Leftovers' || set.item === 'Black Sludge') { hpDivisibility = 0; - } else if (hasMove['bellydrum'] && (set.item || '').slice(-5) === 'Berry') { + } else if (hasMove['bellydrum'] && (set.item || '').endsWith('Berry')) { hpDivisibility = 2; hpShouldBeDivisible = true; - } else if (hasMove['substitute'] && (set.item || '').slice(-5) === 'Berry') { + } else if (hasMove['substitute'] && (set.item || '').endsWith('Berry')) { hpDivisibility = 4; hpShouldBeDivisible = true; } else if (SRweak >= 2 || hasMove['bellydrum']) { @@ -3044,7 +3051,6 @@ class BattleStatGuesser { if (ev) evs['spe'] = ev; } } - } if (hasMove['gyroball'] || hasMove['trickroom']) { @@ -3085,11 +3091,11 @@ class BattleStatGuesser { let baseStat = species.baseStats[stat]; - let iv = (set.ivs && set.ivs[stat]); + let iv = set.ivs?.[stat]; if (typeof iv !== 'number') iv = 31; if (this.dex.gen <= 2) iv &= 30; - let ev = (set.evs && set.evs[stat]); + let ev = set.evs?.[stat]; if (typeof ev !== 'number') ev = (this.dex.gen > 2 ? 0 : 252); if (evOverride !== undefined) ev = evOverride; @@ -3160,7 +3166,7 @@ function BattleStatOptimizer(set: Dex.PokemonSet, formatid: ID) { return ev; }; - const origSpread = {evs: set.evs, ...origNature}; + const origSpread = { evs: set.evs, ...origNature }; let origLeftoverEVs = 508; for (const stat of Dex.statNames) { origLeftoverEVs -= origSpread.evs?.[stat] || 0; @@ -3185,12 +3191,12 @@ function BattleStatOptimizer(set: Dex.PokemonSet, formatid: ID) { if (!minusTooLow) { for (const stat of Dex.statNamesExceptHP) { if (origStats[stat] < origStats[bestMinus]) { - const minEVs = getMinEVs(stat, {minus: stat}); + const minEVs = getMinEVs(stat, { minus: stat }); if (minEVs > 252) continue; // This number can go negative at this point, but we'll make up for it later (and check to make sure) savedEVs = (origSpread.evs[stat] || 0) - minEVs; if (origNature.minus) { - savedEVs += (origSpread.evs[origNature.minus] || 0) - getMinEVs(origNature.minus, {minus: stat}); + savedEVs += (origSpread.evs[origNature.minus] || 0) - getMinEVs(origNature.minus, { minus: stat }); } bestMinus = stat; bestMinusMinEVs = minEVs; @@ -3201,17 +3207,17 @@ function BattleStatOptimizer(set: Dex.PokemonSet, formatid: ID) { for (const stat of Dex.statNamesExceptHP) { // Don't move the plus to an uninvested stat if (stat !== origNature.plus && origSpread.evs[stat] && stat !== bestMinus) { - const minEVs = getMinEVs(stat, {plus: stat}); + const minEVs = getMinEVs(stat, { plus: stat }); let plusEVsSaved = (origNature.minus === stat ? getMinEVs(stat, {}) : origSpread.evs[stat] || 0) - minEVs; if (bestPlus && bestPlus !== bestMinus) { - plusEVsSaved += bestPlusMinEVs! - getMinEVs(bestPlus, {plus: stat, minus: bestMinus}); + plusEVsSaved += bestPlusMinEVs! - getMinEVs(bestPlus, { plus: stat, minus: bestMinus }); } if (plusEVsSaved > 0 && savedEVs + plusEVsSaved > 0) { savedEVs += plusEVsSaved; bestPlus = stat; bestPlusMinEVs = minEVs; } else if (plusEVsSaved === 0 && (bestPlus || savedEVs > 0) || plusEVsSaved > 0 && savedEVs + plusEVsSaved === 0) { - if (!bestPlus || getStat(stat, getMinEVs(stat, {plus: stat}), {plus: stat}) > origStats[stat]) { + if (!bestPlus || getStat(stat, getMinEVs(stat, { plus: stat }), { plus: stat }) > origStats[stat]) { savedEVs += plusEVsSaved; bestPlus = stat; bestPlusMinEVs = minEVs; @@ -3226,7 +3232,7 @@ function BattleStatOptimizer(set: Dex.PokemonSet, formatid: ID) { evs: Partial, plus?: Dex.StatNameExceptHP, minus?: Dex.StatNameExceptHP, - } = {evs: {...origSpread.evs}, plus: bestPlus, minus: bestMinus}; + } = { evs: { ...origSpread.evs }, plus: bestPlus, minus: bestMinus }; if (bestPlus !== origNature.plus || bestMinus !== origNature.minus) { newSpread.evs[bestPlus] = bestPlusMinEVs!; newSpread.evs[bestMinus] = bestMinusMinEVs!; @@ -3239,7 +3245,7 @@ function BattleStatOptimizer(set: Dex.PokemonSet, formatid: ID) { for (const stat of Dex.statNames) { if (!newSpread.evs[stat]) delete newSpread.evs[stat]; } - return {...newSpread, savedEVs}; + return { ...newSpread, savedEVs }; } else if (!plusTooHigh && !minusTooLow) { if (Math.floor(getStat(bestPlus, bestMinusMinEVs!, newSpread) / 11) <= Math.ceil(origStats[bestMinus] / 9)) { // We're not gaining more points from our plus than we're losing to our minus @@ -3254,7 +3260,7 @@ function BattleStatOptimizer(set: Dex.PokemonSet, formatid: ID) { for (const stat of Dex.statNames) { if (!newSpread.evs[stat]) delete newSpread.evs[stat]; } - return {...newSpread, savedEVs}; + return { ...newSpread, savedEVs }; } } } @@ -3266,6 +3272,6 @@ declare const require: any; declare const global: any; if (typeof require === 'function') { // in Node - (global as any).BattleStatGuesser = BattleStatGuesser; - (global as any).BattleStatOptimizer = BattleStatOptimizer; + global.BattleStatGuesser = BattleStatGuesser; + global.BattleStatOptimizer = BattleStatOptimizer; } diff --git a/play.pokemonshowdown.com/src/battle.ts b/play.pokemonshowdown.com/src/battle.ts index 93a9dab07..7ab0c71b8 100644 --- a/play.pokemonshowdown.com/src/battle.ts +++ b/play.pokemonshowdown.com/src/battle.ts @@ -28,16 +28,16 @@ */ // import $ from 'jquery'; -import {BattleSceneStub} from './battle-scene-stub'; -import {BattleLog} from './battle-log'; -import {BattleScene, PokemonSprite, BattleStatusAnims} from './battle-animations'; -import {Dex, Teams, toID, toUserid, type ID, type ModdedDex} from './battle-dex'; -import {BattleTextParser, type Args, type KWArgs, type SideID} from './battle-text-parser'; +import { BattleSceneStub } from './battle-scene-stub'; +import { BattleLog } from './battle-log'; +import { BattleScene, type PokemonSprite, BattleStatusAnims } from './battle-animations'; +import { Dex, Teams, toID, toUserid, type ID, type ModdedDex } from './battle-dex'; +import { BattleTextParser, type Args, type KWArgs, type SideID } from './battle-text-parser'; +declare const app: { user: AnyObject, rooms: AnyObject, ignore?: AnyObject } | undefined; /** [id, element?, ...misc] */ -export type EffectState = any[] & {0: ID}; -/** [name, minTimeLeft, maxTimeLeft] */ -export type WeatherState = [string, number, number]; +export type EffectState = any[] & { 0: ID }; +export type WeatherState = [name: string, minTimeLeft: number, maxTimeLeft: number]; export type HPColor = 'r' | 'y' | 'g'; export class Pokemon implements PokemonDetails, PokemonHealth { @@ -93,20 +93,20 @@ export class Pokemon implements PokemonDetails, PokemonHealth { itemEffect = ''; prevItem = ''; prevItemEffect = ''; - terastallized: string | '' = ''; + terastallized = ''; teraType = ''; - boosts: {[stat: string]: number} = {}; + boosts: { [stat: string]: number } = {}; status: Dex.StatusName | 'tox' | '' | '???' = ''; statusStage = 0; - volatiles: {[effectid: string]: EffectState} = {}; - turnstatuses: {[effectid: string]: EffectState} = {}; - movestatuses: {[effectid: string]: EffectState} = {}; + volatiles: { [effectid: string]: EffectState } = {}; + turnstatuses: { [effectid: string]: EffectState } = {}; + movestatuses: { [effectid: string]: EffectState } = {}; lastMove = ''; /** [[moveName, ppUsed]] */ moveTrack: [string, number][] = []; - statusData = {sleepTurns: 0, toxicTurns: 0}; + statusData = { sleepTurns: 0, toxicTurns: 0 }; timesAttacked = 0; sprite: PokemonSprite; @@ -174,7 +174,7 @@ export class Pokemon implements PokemonDetails, PokemonHealth { if (range[0] === range[1]) { let percentage = Math.abs(range[0] * 100); if (Math.floor(percentage) === percentage) { - return percentage + '%'; + return `${percentage}%`; } return percentage.toFixed(precision) + '%'; } @@ -187,7 +187,7 @@ export class Pokemon implements PokemonDetails, PokemonHealth { lower = (range[0] * 100).toFixed(precision); upper = (range[1] * 100).toFixed(precision); } - return '' + lower + separator + upper + '%'; + return `${lower}${separator}${upper}%`; } // Returns [min, max] damage dealt as a proportion of total HP from 0 to 1 getDamageRange(damage: any): [number, number] { @@ -216,7 +216,7 @@ export class Pokemon implements PokemonDetails, PokemonHealth { healthParse(hpstring: string, parsedamage?: boolean, heal?: boolean): [number, number, number] | [number, number, number, number, HPColor] | null { // returns [delta, denominator, percent(, oldnum, oldcolor)] or null - if (!hpstring || !hpstring.length) return null; + if (!hpstring?.length) return null; let parenIndex = hpstring.lastIndexOf('('); if (parenIndex >= 0) { // old style damage and health reporting @@ -266,7 +266,7 @@ export class Pokemon implements PokemonDetails, PokemonHealth { if (!details) return false; if (details === this.details) return true; if (this.searchid) return false; - if (details.indexOf(', shiny') >= 0) { + if (details.includes(', shiny')) { if (this.checkDetails(details.replace(', shiny', ''))) return true; } // the actual forme was hidden on Team Preview @@ -340,7 +340,7 @@ export class Pokemon implements PokemonDetails, PokemonHealth { rememberMove(moveName: string, pp = 1, recursionSource?: string) { if (recursionSource === this.ident) return; moveName = Dex.moves.get(moveName).name; - if (moveName.charAt(0) === '*') return; + if (moveName.startsWith('*')) return; if (moveName === 'Struggle') return; if (this.volatiles.transform) { // make sure there is no infinite recursion if both Pokemon are transformed into each other @@ -422,7 +422,7 @@ export class Pokemon implements PokemonDetails, PokemonHealth { this.boosts = {}; this.clearVolatiles(); for (let i = 0; i < this.moveTrack.length; i++) { - if (this.moveTrack[i][0].charAt(0) === '*') { + if (this.moveTrack[i][0].startsWith('*')) { this.moveTrack.splice(i, 1); i--; } @@ -477,8 +477,8 @@ export class Pokemon implements PokemonDetails, PokemonHealth { this.removeVolatile('typeadd' as ID); } } - getTypes(serverPokemon?: ServerPokemon, preterastallized = false): [ReadonlyArray, Dex.TypeName | ''] { - let types: ReadonlyArray; + getTypes(serverPokemon?: ServerPokemon, preterastallized = false): [readonly Dex.TypeName[], Dex.TypeName | ''] { + let types: readonly Dex.TypeName[]; if (!preterastallized && this.terastallized && this.terastallized !== 'Stellar') { types = [this.terastallized as Dex.TypeName]; } else if (this.volatiles.typechange) { @@ -588,8 +588,8 @@ export class Pokemon implements PokemonDetails, PokemonHealth { return Pokemon.getHPText(this, this.side.battle.reportExactHP, precision); } static getHPText(pokemon: PokemonHealth, exactHP: boolean, precision = 1) { - if (exactHP) return pokemon.hp + '/' + pokemon.maxhp; - if (pokemon.maxhp === 100) return pokemon.hp + '%'; + if (exactHP) return `${pokemon.hp}/${pokemon.maxhp}`; + if (pokemon.maxhp === 100) return `${pokemon.hp}%`; if (pokemon.maxhp !== 48) return (100 * pokemon.hp / pokemon.maxhp).toFixed(precision) + '%'; let range = Pokemon.getPixelRange(pokemon.hp, pokemon.hpcolor); return Pokemon.getFormattedRange(range, precision, '–'); @@ -610,9 +610,9 @@ export class Side { isFar: boolean; foe: Side = null!; ally: Side | null = null; - avatar: string = 'unknown'; + avatar = 'unknown'; badges: string[] = []; - rating: string = ''; + rating = ''; totalPokemon = 6; x = 0; y = 0; @@ -625,8 +625,9 @@ export class Side { lastPokemon = null as Pokemon | null; pokemon = [] as Pokemon[]; - /** [effectName, levels, minDuration, maxDuration] */ - sideConditions: {[id: string]: [string, number, number, number]} = {}; + sideConditions: { + [id: string]: [effectName: string, levels: number, minDuration: number, maxDuration: number], + } = {}; faintCounter = 0; constructor(battle: Battle, n: number) { @@ -765,7 +766,7 @@ export class Side { } if (this.pokemon.length > this.totalPokemon || this.battle.speciesClause) { // check for Illusion - let existingTable: {[searchid: string]: number} = {}; + let existingTable: { [searchid: string]: number } = {}; let toRemove = -1; for (let poke1i = 0; poke1i < this.pokemon.length; poke1i++) { let poke1 = this.pokemon[poke1i]; @@ -777,9 +778,9 @@ export class Side { toRemove = poke2i; } else if (poke === poke2) { toRemove = poke1i; - } else if (this.active.indexOf(poke1) >= 0) { + } else if (this.active.includes(poke1)) { toRemove = poke2i; - } else if (this.active.indexOf(poke2) >= 0) { + } else if (this.active.includes(poke2)) { toRemove = poke1i; } else if (poke1.fainted && !poke2.fainted) { toRemove = poke2i; @@ -797,7 +798,7 @@ export class Side { for (const curPoke of this.pokemon) { if (curPoke === poke) continue; if (curPoke.fainted) continue; - if (this.active.indexOf(curPoke) >= 0) continue; + if (this.active.includes(curPoke)) continue; if (curPoke.speciesForme === 'Zoroark' || curPoke.speciesForme === 'Zorua' || curPoke.ability === 'Illusion') { illusionFound = curPoke; break; @@ -811,7 +812,7 @@ export class Side { for (const curPoke of this.pokemon) { if (curPoke === poke) continue; if (curPoke.fainted) continue; - if (this.active.indexOf(curPoke) >= 0) continue; + if (this.active.includes(curPoke)) continue; illusionFound = curPoke; break; } @@ -871,7 +872,7 @@ export class Side { pokemon.hpcolor = oldpokemon.hpcolor; pokemon.status = oldpokemon.status; pokemon.copyVolatileFrom(oldpokemon, true); - pokemon.statusData = {...oldpokemon.statusData}; + pokemon.statusData = { ...oldpokemon.statusData }; if (oldpokemon.terastallized) { pokemon.terastallized = oldpokemon.terastallized; pokemon.teraType = oldpokemon.terastallized; @@ -901,7 +902,7 @@ export class Side { pokemon.removeVolatile('formechange' as ID); } if (!['batonpass', 'zbatonpass', 'shedtail', 'teleport'].includes(effect.id)) { - this.battle.log(['switchout', pokemon.ident], {from: effect.id}); + this.battle.log(['switchout', pokemon.ident], { from: effect.id }); } pokemon.statusData.toxicTurns = 0; if (this.battle.gen === 5) pokemon.statusData.sleepTurns = 0; @@ -1099,7 +1100,7 @@ export class Battle { gameType: 'singles' | 'doubles' | 'triples' | 'multi' | 'freeforall' = 'singles'; compatMode = true; rated: string | boolean = false; - rules: {[ruleName: string]: 1 | 0} = {}; + rules: { [ruleName: string]: 1 | undefined } = {}; isBlitz = false; reportExactHP = false; endLastTurnPending = false; @@ -1131,8 +1132,8 @@ export class Battle { paused: boolean; constructor(options: { - $frame?: JQuery, - $logFrame?: JQuery, + $frame?: JQuery, + $logFrame?: JQuery, id?: ID, log?: string[] | string, paused?: boolean, @@ -1184,9 +1185,9 @@ export class Battle { } if (width && width < 640) { const scale = (width / 640); - this.scene.$frame?.css('transform', 'scale(' + scale + ')'); + this.scene.$frame?.css('transform', `scale(${scale})`); this.scene.$frame?.css('transform-origin', 'top left'); - this.scene.$frame?.css('margin-bottom', '' + (360 * scale - 360) + 'px'); + this.scene.$frame?.css('margin-bottom', `${360 * scale - 360}px`); // this.$foeHint.css('transform', 'scale(' + scale + ')'); } else { this.scene.$frame?.css('transform', 'none'); @@ -1433,25 +1434,24 @@ export class Battle { if (this.gameType === 'freeforall') { // TODO: Add FFA support return; - } else { - let side1 = this.sides[0]; - let side2 = this.sides[1]; - for (const id of sideConditions) { - if (side1.sideConditions[id] && side2.sideConditions[id]) { - [side1.sideConditions[id], side2.sideConditions[id]] = [ - side2.sideConditions[id], side1.sideConditions[id], - ]; - this.scene.addSideCondition(side1.n, id as ID); - this.scene.addSideCondition(side2.n, id as ID); - } else if (side1.sideConditions[id] && !side2.sideConditions[id]) { - side2.sideConditions[id] = side1.sideConditions[id]; - this.scene.addSideCondition(side2.n, id as ID); - side1.removeSideCondition(id); - } else if (side2.sideConditions[id] && !side1.sideConditions[id]) { - side1.sideConditions[id] = side2.sideConditions[id]; - this.scene.addSideCondition(side1.n, id as ID); - side2.removeSideCondition(id); - } + } + let side1 = this.sides[0]; + let side2 = this.sides[1]; + for (const id of sideConditions) { + if (side1.sideConditions[id] && side2.sideConditions[id]) { + [side1.sideConditions[id], side2.sideConditions[id]] = [ + side2.sideConditions[id], side1.sideConditions[id], + ]; + this.scene.addSideCondition(side1.n, id as ID); + this.scene.addSideCondition(side2.n, id as ID); + } else if (side1.sideConditions[id] && !side2.sideConditions[id]) { + side2.sideConditions[id] = side1.sideConditions[id]; + this.scene.addSideCondition(side2.n, id as ID); + side1.removeSideCondition(id); + } else if (side2.sideConditions[id] && !side1.sideConditions[id]) { + side1.sideConditions[id] = side2.sideConditions[id]; + this.scene.addSideCondition(side1.n, id as ID); + side2.removeSideCondition(id); } } } @@ -1498,7 +1498,7 @@ export class Battle { pokemon.item = move.isZ; let item = Dex.items.get(move.isZ); if (item.zMoveFrom) moveName = item.zMoveFrom; - } else if (move.name.slice(0, 2) === 'Z-') { + } else if (move.name.startsWith('Z-')) { moveName = moveName.slice(2); move = Dex.moves.get(moveName); if (window.BattleItems) { @@ -1733,8 +1733,7 @@ export class Battle { } let damageinfo = '' + Pokemon.getFormattedRange(range, damage[1] === 100 ? 0 : 1, '\u2013'); if (damage[1] !== 100) { - let hover = '' + ((damage[0] < 0) ? '\u2212' : '') + - Math.abs(damage[0]) + '/' + damage[1]; + let hover = `${(damage[0] < 0) ? '\u2212' : ''}${Math.abs(damage[0])}/${damage[1]}`; if (damage[1] === 48) { // this is a hack hover += ' pixels'; } @@ -1780,7 +1779,7 @@ export class Battle { break; case 'revivalblessing': this.scene.runResidualAnim('wish' as ID, poke); - const {siden} = this.parsePokemonId(args[1]); + const { siden } = this.parsePokemonId(args[1]); const side = this.sides[siden]; poke.fainted = false; poke.status = ''; @@ -2216,7 +2215,6 @@ export class Battle { } this.log(args, kwArgs); break; - } case '-cureteam': { // For old gens when the whole team was always cured let poke = this.getPokemon(args[1])!; @@ -2240,7 +2238,7 @@ export class Battle { if (possibleTargets.length === 1) { poke = possibleTargets[0]!; } else { - this.activateAbility(ofpoke!, "Frisk"); + this.activateAbility(ofpoke, "Frisk"); this.log(args, kwArgs); break; } @@ -2263,7 +2261,7 @@ export class Battle { this.scene.resultAnim(poke, item.name, 'neutral'); break; case 'frisk': - this.activateAbility(ofpoke!, "Frisk"); + this.activateAbility(ofpoke, "Frisk"); if (poke && poke !== ofpoke) { // used for gen 6 poke.itemEffect = 'frisked'; this.scene.resultAnim(poke, item.name, 'neutral'); @@ -2448,7 +2446,7 @@ export class Battle { let commaIndex = newSpeciesForme.indexOf(','); if (commaIndex !== -1) { let level = newSpeciesForme.substr(commaIndex + 1).trim(); - if (level.charAt(0) === 'L') { + if (level.startsWith('L')) { poke.level = parseInt(level.substr(1), 10); } newSpeciesForme = args[2].substr(0, commaIndex); @@ -2483,7 +2481,7 @@ export class Battle { this.activateAbility(poke, effect); } - poke.boosts = {...tpoke.boosts}; + poke.boosts = { ...tpoke.boosts }; poke.copyTypesFrom(tpoke, true); poke.ability = tpoke.ability; poke.timesAttacked = tpoke.timesAttacked; @@ -2742,7 +2740,7 @@ export class Battle { break; case 'skydrop': if (kwArgs.interrupt) { - this.scene.anim(poke, {time: 100}); + this.scene.anim(poke, { time: 100 }); } break; case 'confusion': @@ -2953,7 +2951,7 @@ export class Battle { case 'gravity': poke.removeVolatile('magnetrise' as ID); poke.removeVolatile('telekinesis' as ID); - this.scene.anim(poke, {time: 100}); + this.scene.anim(poke, { time: 100 }); break; case 'skillswap': case 'wanderingspirit': if (this.gen <= 4) break; @@ -3139,7 +3137,8 @@ export class Battle { default: { throw new Error(`Unrecognized minor action: ${args[0]}`); break; - }} + } + } } /* parseSpriteData(name) { @@ -3256,17 +3255,17 @@ export class Battle { siden = parseInt(name.charAt(1), 10) - 1; name = name.slice(4); } else if (/^p[1-9][a-f]: /.test(name)) { - const slotChart: {[k: string]: number} = {a: 0, b: 1, c: 2, d: 3, e: 4, f: 5}; + const slotChart: { [k: string]: number } = { a: 0, b: 1, c: 2, d: 3, e: 4, f: 5 }; siden = parseInt(name.charAt(1), 10) - 1; slot = slotChart[name.charAt(2)]; name = name.slice(5); pokemonid = `p${siden + 1}: ${name}`; } - return {name, siden, slot, pokemonid}; + return { name, siden, slot, pokemonid }; } getSwitchedPokemon(pokemonid: string, details: string) { if (pokemonid === '??') throw new Error(`pokemonid not passed`); - const {name, siden, slot, pokemonid: parsedPokemonid} = this.parsePokemonId(pokemonid); + const { name, siden, slot, pokemonid: parsedPokemonid } = this.parsePokemonId(pokemonid); pokemonid = parsedPokemonid; const searchid = `${pokemonid}|${details}`; @@ -3300,12 +3299,12 @@ export class Battle { return pokemon; } rememberTeamPreviewPokemon(sideid: string, details: string) { - const {siden} = this.parsePokemonId(sideid); + const { siden } = this.parsePokemonId(sideid); return this.sides[siden].addPokemon('', '', details); } - findCorrespondingPokemon(serverPokemon: {ident: string, details: string}) { - const {siden} = this.parsePokemonId(serverPokemon.ident); + findCorrespondingPokemon(serverPokemon: { ident: string, details: string }) { + const { siden } = this.parsePokemonId(serverPokemon.ident); const searchid = `${serverPokemon.ident}|${serverPokemon.details}`; for (const pokemon of this.sides[siden].pokemon) { if (pokemon.searchid === searchid) { @@ -3318,7 +3317,7 @@ export class Battle { if (!pokemonid || pokemonid === '??' || pokemonid === 'null' || pokemonid === 'false') { return null; } - const {siden, slot, pokemonid: parsedPokemonid} = this.parsePokemonId(pokemonid); + const { siden, slot, pokemonid: parsedPokemonid } = this.parsePokemonId(pokemonid); pokemonid = parsedPokemonid; /** if true, don't match an active pokemon */ @@ -3400,10 +3399,10 @@ export class Battle { } case 'tier': { this.tier = args[1]; - if (this.tier.slice(-13) === 'Random Battle') { + if (this.tier.endsWith('Random Battle')) { this.speciesClause = true; } - if (this.tier.slice(-8) === ' (Blitz)') { + if (this.tier.endsWith(' (Blitz)')) { this.messageFadeTime = 40; this.isBlitz = true; } @@ -3480,26 +3479,26 @@ export class Battle { } case 'inactive': { if (!this.kickingInactive) this.kickingInactive = true; - if (args[1].slice(0, 11) === "Time left: ") { + if (args[1].startsWith("Time left: ")) { let [time, totalTime, graceTime] = args[1].split(' | '); this.kickingInactive = parseInt(time.slice(11), 10) || true; this.totalTimeLeft = parseInt(totalTime, 10); this.graceTimeLeft = parseInt(graceTime || '', 10) || 0; if (this.totalTimeLeft === this.kickingInactive) this.totalTimeLeft = 0; return; - } else if (args[1].slice(0, 9) === "You have ") { + } else if (args[1].startsWith("You have ")) { // this is ugly but parseInt is documented to work this way // so I'm going to be lazy and not chop off the rest of the // sentence this.kickingInactive = parseInt(args[1].slice(9), 10) || true; return; - } else if (args[1].slice(-14) === ' seconds left.') { + } else if (args[1].endsWith(' seconds left.')) { let hasIndex = args[1].indexOf(' has '); let userid = window.app?.user?.get('userid'); if (toID(args[1].slice(0, hasIndex)) === userid) { this.kickingInactive = parseInt(args[1].slice(hasIndex + 5), 10) || true; } - } else if (args[1].slice(-27) === ' 15 seconds left this turn.') { + } else if (args[1].endsWith(' 15 seconds left this turn.')) { if (this.isBlitz) return; } this.log(args, undefined, preempt); @@ -3598,7 +3597,7 @@ export class Battle { break; } case 'poke': { - let pokemon = this.rememberTeamPreviewPokemon(args[1], args[2])!; + let pokemon = this.rememberTeamPreviewPokemon(args[1], args[2]); if (args[3] === 'mail') { pokemon.item = '(mail)'; } else if (args[3] === 'item') { @@ -3607,7 +3606,7 @@ export class Battle { break; } case 'updatepoke': { - const {siden} = this.parsePokemonId(args[1]); + const { siden } = this.parsePokemonId(args[1]); const side = this.sides[siden]; for (let i = 0; i < side.pokemon.length; i++) { const pokemon = side.pokemon[i]; @@ -3629,8 +3628,8 @@ export class Battle { const side = this.getSide(args[1]); side.clearPokemon(); for (const set of team) { - const details = set.species + (!set.level || set.level === 100 ? '' : ', L' + set.level) + - (!set.gender || set.gender === 'N' ? '' : ', ' + set.gender) + (set.shiny ? ', shiny' : ''); + const details = set.species + (!set.level || set.level === 100 ? '' : `, L${set.level}`) + + (!set.gender || set.gender === 'N' ? '' : `, ${set.gender}`) + (set.shiny ? ', shiny' : ''); const pokemon = side.addPokemon('', '', details); if (set.item) pokemon.item = set.item; if (set.ability) pokemon.rememberAbility(set.ability); @@ -3644,14 +3643,14 @@ export class Battle { } case 'switch': case 'drag': case 'replace': { this.endLastTurn(); - let poke = this.getSwitchedPokemon(args[1], args[2])!; + let poke = this.getSwitchedPokemon(args[1], args[2]); let slot = poke.slot; poke.healthParse(args[3]); poke.removeVolatile('itemremoved' as ID); - poke.terastallized = args[2].match(/tera:([a-z]+)$/i)?.[1] || ''; + poke.terastallized = (/tera:([a-z]+)$/i.exec(args[2]))?.[1] || ''; if (args[0] === 'switch') { if (poke.side.active[slot]) { - poke.side.switchOut(poke.side.active[slot]!, kwArgs); + poke.side.switchOut(poke.side.active[slot], kwArgs); } poke.side.switchIn(poke, kwArgs); } else if (args[0] === 'replace') { @@ -3746,7 +3745,8 @@ export class Battle { default: { this.log(args, kwArgs, preempt); break; - }} + } + } } run(str: string, preempt?: boolean) { @@ -3756,7 +3756,7 @@ export class Battle { return; } if (!str) return; - const {args, kwArgs} = BattleTextParser.parseBattleLine(str); + const { args, kwArgs } = BattleTextParser.parseBattleLine(str); if (this.scene.maybeCloseMessagebar(args, kwArgs)) { this.currentStep--; @@ -3768,19 +3768,19 @@ export class Battle { let nextArgs: Args = ['']; let nextKwargs: KWArgs = {}; const nextLine = this.stepQueue[this.currentStep + 1] || ''; - if (nextLine.slice(0, 2) === '|-') { - ({args: nextArgs, kwArgs: nextKwargs} = BattleTextParser.parseBattleLine(nextLine)); + if (nextLine.startsWith('|-')) { + ({ args: nextArgs, kwArgs: nextKwargs } = BattleTextParser.parseBattleLine(nextLine)); } if (this.debug) { - if (args[0].charAt(0) === '-' || args[0] === 'detailschange') { + if (args[0].startsWith('-') || args[0] === 'detailschange') { this.runMinor(args, kwArgs, nextArgs, nextKwargs); } else { this.runMajor(args, kwArgs, preempt); } } else { try { - if (args[0].charAt(0) === '-' || args[0] === 'detailschange') { + if (args[0].startsWith('-') || args[0] === 'detailschange') { this.runMinor(args, kwArgs, nextArgs, nextKwargs); } else { this.runMajor(args, kwArgs, preempt); @@ -3893,7 +3893,8 @@ export class Battle { let interruptionCount: number; do { - this.waitForAnimations = true; + // modified in this.run() but idk how to tell TS that + this.waitForAnimations = true as this['waitForAnimations']; if (this.currentStep >= this.stepQueue.length) { this.atQueueEnd = true; if (!this.ended && this.isReplay) this.prematureEnd(); @@ -3954,6 +3955,6 @@ declare const require: any; declare const global: any; if (typeof require === 'function') { // in Node - (global as any).Battle = Battle; - (global as any).Pokemon = Pokemon; + global.Battle = Battle; + global.Pokemon = Pokemon; } diff --git a/play.pokemonshowdown.com/src/client-connection.ts b/play.pokemonshowdown.com/src/client-connection.ts index 7dac3cf62..9bda6f874 100644 --- a/play.pokemonshowdown.com/src/client-connection.ts +++ b/play.pokemonshowdown.com/src/client-connection.ts @@ -5,9 +5,10 @@ * @license MIT */ -import {PS} from "./client-main"; +import { PS } from "./client-main"; -declare var SockJS: any; +declare const SockJS: any; +declare const POKEMON_SHOWDOWN_TESTCLIENT_KEY: string | undefined; export class PSConnection { socket: any = null; @@ -20,7 +21,7 @@ export class PSConnection { const server = PS.server; const port = server.protocol === 'https' ? '' : ':' + server.port; const url = server.protocol + '://' + server.host + port + server.prefix; - const socket = this.socket = new SockJS(url, [], {timeout: 5 * 60 * 1000}); + const socket = this.socket = new SockJS(url, [], { timeout: 5 * 60 * 1000 }); socket.onopen = () => { console.log('\u2705 (CONNECTED)'); this.connected = true; @@ -60,17 +61,15 @@ export class PSConnection { PS.connection = new PSConnection(); export const PSLoginServer = new class { - query(data: PostData): Promise<{[k: string]: any} | null> { + query(data: PostData): Promise<{ [k: string]: any } | null> { let url = '/~~' + PS.server.id + '/action.php'; if (location.pathname.endsWith('.html')) { url = 'https://' + Config.routes.client + url; - // @ts-ignore if (typeof POKEMON_SHOWDOWN_TESTCLIENT_KEY === 'string') { - // @ts-ignore - data.sid = POKEMON_SHOWDOWN_TESTCLIENT_KEY.replace(/\%2C/g, ','); + data.sid = POKEMON_SHOWDOWN_TESTCLIENT_KEY.replace(/%2C/g, ','); } } - return Net(url).get({method: data ? 'POST' : 'GET', body: data}).then( + return Net(url).get({ method: data ? 'POST' : 'GET', body: data }).then( res => res ? JSON.parse(res.slice(1)) : null ).catch( () => null @@ -96,7 +95,7 @@ class HttpError extends Error { this.body = body; try { (Error as any).captureStackTrace(this, HttpError); - } catch (err) {} + } catch {} } } class NetRequest { diff --git a/play.pokemonshowdown.com/src/client-core.ts b/play.pokemonshowdown.com/src/client-core.ts index df91bd4a2..0d1b243ad 100644 --- a/play.pokemonshowdown.com/src/client-core.ts +++ b/play.pokemonshowdown.com/src/client-core.ts @@ -13,76 +13,12 @@ * @license AGPLv3 */ -/********************************************************************** - * Polyfills - *********************************************************************/ - -if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement, fromIndex) { - for (let i = (fromIndex || 0); i < this.length; i++) { - if (this[i] === searchElement) return i; - } - return -1; - }; -} -if (!Array.prototype.includes) { - Array.prototype.includes = function (thing) { - return this.indexOf(thing) !== -1; - }; -} -if (!String.prototype.includes) { - String.prototype.includes = function (thing) { - return this.indexOf(thing) !== -1; - }; -} -if (!String.prototype.startsWith) { - String.prototype.startsWith = function (thing) { - return this.slice(0, thing.length) === thing; - }; -} -if (!String.prototype.endsWith) { - String.prototype.endsWith = function (thing) { - return this.slice(-thing.length) === thing; - }; -} -if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - }; -} -if (!Object.assign) { - Object.assign = function (thing: any, rest: any) { - for (let i = 1; i < arguments.length; i++) { - let source = arguments[i]; - for (let k in source) { - thing[k] = source[k]; - } - } - return thing; - }; -} -if (!Object.create) { - Object.create = function (proto: any) { - function F() {} - F.prototype = proto; - return new (F as any)(); - }; -} -if (!window.console) { - // in IE8, the console object is only defined when devtools is open - // I don't actually know if this will cause problems when you open devtools, - // but that's something I can figure out if I ever bother testing in IE8 - (window as any).console = { - log() {}, - }; -} - /********************************************************************** * PS Models *********************************************************************/ // PS's model classes are defined here -const PSURL = `${document.location!.protocol !== 'http:' ? 'https:' : ''}//${Config.routes.client}/`; +const PSURL = `${document.location.protocol !== 'http:' ? 'https:' : ''}//${Config.routes.client}/`; export class PSSubscription { observable: PSModel | PSStreamModel; @@ -179,7 +115,7 @@ declare const ColorThief: any; const PSBackground = new class extends PSStreamModel { id = ''; curId = ''; - attrib: {url: string, title: string, artist: string} | null = null; + attrib: { url: string, title: string, artist: string } | null = null; changeCount = 0; menuColors: string[] | null = null; @@ -318,7 +254,7 @@ const PSBackground = new class extends PSStreamModel { "", ]; } - if (!menuColors && bgUrl.charAt(0) === '#') { + if (!menuColors && bgUrl.startsWith('#')) { const r = parseInt(bgUrl.slice(1, 3), 16) / 255; const g = parseInt(bgUrl.slice(3, 5), 16) / 255; const b = parseInt(bgUrl.slice(5, 7), 16) / 255; @@ -396,7 +332,7 @@ PSBackground.subscribe(bgUrl => { if (bgUrl !== null) { let background; - if (bgUrl.charAt(0) === '#') { + if (bgUrl.startsWith('#')) { background = bgUrl; } else if (PSBackground.curId !== 'custom') { background = `#546bac url(${bgUrl}) no-repeat left center fixed`; @@ -424,7 +360,7 @@ PSBackground.subscribe(bgUrl => { buttonStyleElem = new HTMLStyleElement(); buttonStyleElem.id = 'mainmenubuttoncolors'; buttonStyleElem.textContent = cssBuf; - document.head!.appendChild(buttonStyleElem); + document.head.appendChild(buttonStyleElem); } } else { buttonStyleElem.textContent = cssBuf; diff --git a/play.pokemonshowdown.com/src/client-main.ts b/play.pokemonshowdown.com/src/client-main.ts index 2fd42cd9f..0f9e8de8e 100644 --- a/play.pokemonshowdown.com/src/client-main.ts +++ b/play.pokemonshowdown.com/src/client-main.ts @@ -9,13 +9,13 @@ * @license AGPLv3 */ -import { PSConnection, PSLoginServer } from './client-connection'; -import {PSModel, PSStreamModel} from './client-core'; -import type {PSRouter} from './panels'; -import type {ChatRoom} from './panel-chat'; -import type {MainMenuRoom} from './panel-mainmenu'; -import {toID, type ID} from './battle-dex'; -import {BattleTextParser, type Args} from './battle-text-parser'; +import { type PSConnection, PSLoginServer } from './client-connection'; +import { PSModel, PSStreamModel } from './client-core'; +import type { PSRouter } from './panels'; +import type { ChatRoom } from './panel-chat'; +import type { MainMenuRoom } from './panel-mainmenu'; +import { toID, type ID } from './battle-dex'; +import { BattleTextParser, type Args } from './battle-text-parser'; /********************************************************************** * Prefs @@ -24,9 +24,9 @@ import {BattleTextParser, type Args} from './battle-text-parser'; /** * String that contains only lowercase alphanumeric characters. */ -export type RoomID = string & {__isRoomID: true}; +export type RoomID = string & { __isRoomID: true }; -const PSPrefsDefaults: {[key: string]: any} = {}; +const PSPrefsDefaults: { [key: string]: any } = {}; /** * Tracks user preferences, stored in localStorage. Contains most local @@ -54,7 +54,7 @@ class PSPrefs extends PSStreamModel { * table. Uses 1 and 0 instead of true/false for JSON packing * reasons. */ - showjoins: {[serverid: string]: {[roomid: string]: 1 | 0}} | null = null; + showjoins: { [serverid: string]: { [roomid: string]: 1 | 0 } } | null = null; /** * true = one panel, false = two panels, left and right */ @@ -66,7 +66,7 @@ class PSPrefs extends PSStreamModel { notifvolume = 50; storageEngine: 'localStorage' | 'iframeLocalStorage' | '' = ''; - storage: {[k: string]: any} = {}; + storage: { [k: string]: any } = {}; readonly origin = `https://${Config.routes.client}`; constructor() { super(); @@ -116,9 +116,9 @@ class PSPrefs extends PSStreamModel { fixPrefs(newPrefs: any) { const oldShowjoins = newPrefs['showjoins']; if (oldShowjoins !== undefined && typeof oldShowjoins !== 'object') { - const showjoins: {[serverid: string]: {[roomid: string]: 1 | 0}} = {}; - const serverShowjoins: {[roomid: string]: 1 | 0} = {global: (oldShowjoins ? 1 : 0)}; - const showroomjoins = newPrefs['showroomjoins'] as {[roomid: string]: boolean}; + const showjoins: { [serverid: string]: { [roomid: string]: 1 | 0 } } = {}; + const serverShowjoins: { [roomid: string]: 1 | 0 } = { global: (oldShowjoins ? 1 : 0) }; + const showroomjoins = newPrefs['showroomjoins'] as { [roomid: string]: boolean }; for (const roomid in showroomjoins) { serverShowjoins[roomid] = (showroomjoins[roomid] ? 1 : 0); } @@ -172,7 +172,7 @@ class PSTeams extends PSStreamModel<'team' | 'format'> { /** false if it uses the ladder in the website */ usesLocalLadder = false; list: Team[] = []; - byKey: {[key: string]: Team | undefined} = {}; + byKey: { [key: string]: Team | undefined } = {}; deletedTeams: [Team, number][] = []; constructor() { super(); @@ -204,7 +204,7 @@ class PSTeams extends PSStreamModel<'team' | 'format'> { return; } - if (buffer.charAt(0) === '[' && !buffer.trim().includes('\n')) { + if (buffer.startsWith('[') && !buffer.trim().includes('\n')) { this.unpackOldBuffer(buffer); return; } @@ -243,7 +243,6 @@ class PSTeams extends PSStreamModel<'team' | 'format'> { unpackOldBuffer(buffer: string) { alert(`Your team storage format is too old for PS. You'll need to upgrade it at https://${Config.routes.client}/recoverteams.html`); this.list = []; - return; } packAll(teams: Team[]) { return teams.map(team => ( @@ -264,7 +263,7 @@ class PSTeams extends PSStreamModel<'team' | 'format'> { let slashIndex = line.lastIndexOf('/', pipeIndex); if (slashIndex < 0) slashIndex = bracketIndex; // line.slice(slashIndex + 1, pipeIndex) will be '' let format = bracketIndex > 0 ? line.slice(0, bracketIndex) : 'gen7'; - if (format.slice(0, 3) !== 'gen') format = 'gen6' + format; + if (!format.startsWith('gen')) format = 'gen6' + format; const name = line.slice(slashIndex + 1, pipeIndex); return { name, @@ -290,7 +289,7 @@ class PSUser extends PSModel { avatar = "1"; setName(fullName: string, named: boolean, avatar: string) { const loggingIn = (!this.named && named); - const {name, group} = BattleTextParser.parseNameParts(fullName); + const { name, group } = BattleTextParser.parseNameParts(fullName); this.name = name; this.group = group; this.userid = toID(name); @@ -340,7 +339,7 @@ class PSServer { registered = Config.defaultserver.registered; prefix = '/showdown'; protocol: 'http' | 'https' = Config.defaultserver.httpport ? 'https' : 'http'; - groups: {[symbol: string]: PSGroup} = { + groups: { [symbol: string]: PSGroup } = { '~': { name: "Administrator (~)", type: 'leadership', @@ -458,14 +457,14 @@ export class PSRoom extends PSStreamModel implements RoomOptions { * In particular, this is `true` after sending `/join`, and `false` * after sending `/leave`, even before the server responds. */ - connected: boolean = false; + connected = false; /** * Can this room even be connected to at all? * `true` = pass messages from the server to subscribers * `false` = throw an error if we receive messages from the server */ readonly canConnect: boolean = false; - connectWhenLoggedIn: boolean = false; + connectWhenLoggedIn = false; onParentEvent: ((eventId: 'focus' | 'keydown', e?: Event) => false | void) | null = null; width = 0; @@ -491,7 +490,7 @@ export class PSRoom extends PSStreamModel implements RoomOptions { if (options.rightPopup) this.rightPopup = true; if (options.connected) this.connected = true; } - notify(options: {title: string, body?: string, noAutoDismiss?: boolean, id?: string}) { + notify(options: { title: string, body?: string, noAutoDismiss?: boolean, id?: string }) { if (options.noAutoDismiss && !options.id) { throw new Error(`Must specify id for manual dismissing`); } @@ -528,7 +527,7 @@ export class PSRoom extends PSStreamModel implements RoomOptions { break; } case 'tempnotify': { const [, id, title, body, toHighlight] = args; - this.notify({title, body, id}); + this.notify({ title, body, id }); break; } case 'tempnotifyoff': { const [, id] = args; @@ -540,7 +539,8 @@ export class PSRoom extends PSStreamModel implements RoomOptions { } else { throw new Error(`This room is not designed to receive messages`); } - }} + } + } } handleMessage(line: string) { if (!line.startsWith('/') || line.startsWith('//')) return false; @@ -551,7 +551,8 @@ export class PSRoom extends PSStreamModel implements RoomOptions { case 'logout': { PS.user.logOut(); return true; - }} + } + } return false; } send(msg: string, direct?: boolean) { @@ -570,7 +571,7 @@ export class PSRoom extends PSStreamModel implements RoomOptions { class PlaceholderRoom extends PSRoom { queue = [] as Args[]; - override readonly classType: 'placeholder' = 'placeholder'; + override readonly classType = 'placeholder'; override receiveLine(args: Args) { this.queue.push(args); } @@ -580,7 +581,7 @@ class PlaceholderRoom extends PSRoom { * PS *********************************************************************/ -type RoomType = {Model?: typeof PSRoom, Component: any, title?: string}; +type RoomType = { Model?: typeof PSRoom, Component: any, title?: string }; /** * This model updates: @@ -609,7 +610,7 @@ export const PS = new class extends PSModel { router: PSRouter = null!; - rooms: {[roomid: string]: PSRoom | undefined} = {}; + rooms: { [roomid: string]: PSRoom | undefined } = {}; roomTypes: { [type: string]: RoomType | undefined, } = {}; @@ -667,7 +668,7 @@ export const PS = new class extends PSModel { * the Rooms panel and clicking "Hide") * * Will NOT be true if only one panel fits onto the screen at the - * moment, but resizing will display multiple panels – for that, + * moment, but resizing will display multiple panels – for that, * check `PS.leftRoomWidth === 0` */ onePanelMode = false; @@ -688,7 +689,7 @@ export const PS = new class extends PSModel { * for security reasons it's impossible to know what they are until * they're dropped. */ - dragging: {type: 'room', roomid: RoomID} | null = null; + dragging: { type: 'room', roomid: RoomID } | null = null; /** Tracks whether or not to display the "Use arrow keys" hint */ arrowKeysUsed = false; @@ -841,7 +842,8 @@ export const PS = new class extends PSModel { } this.update(); continue; - }} + } + } if (room) room.receiveLine(args); } if (room) room.update(isInit ? [`initdone`] : null); @@ -1062,7 +1064,7 @@ export const PS = new class extends PSModel { options.id = `pm-${options.id.slice(10)}` as RoomID; options.challengeMenuOpen = true; } - if (options.id.startsWith('pm-') && options.id.indexOf('-', 3) < 0) { + if (options.id.startsWith('pm-') && !options.id.includes('-', 3)) { const userid1 = PS.user.userid; const userid2 = options.id.slice(3); options.id = `pm-${[userid1, userid2].sort().join('-')}` as RoomID; @@ -1174,7 +1176,7 @@ export const PS = new class extends PSModel { } join(roomid: RoomID, side?: PSRoomLocation | null, noFocus?: boolean) { if (this.room.id === roomid) return; - this.addRoom({id: roomid, side}, noFocus); + this.addRoom({ id: roomid, side }, noFocus); this.update(); } leave(roomid: RoomID) { diff --git a/play.pokemonshowdown.com/src/globals.d.ts b/play.pokemonshowdown.com/src/globals.d.ts index c3e53c289..c7e5aa588 100644 --- a/play.pokemonshowdown.com/src/globals.d.ts +++ b/play.pokemonshowdown.com/src/globals.d.ts @@ -1,26 +1,28 @@ +/* eslint-disable @typescript-eslint/consistent-type-imports */ + // dex data /////////// -declare var BattleText: {[id: string]: {[templateName: string]: string}}; -declare var BattleFormats: {[id: string]: import('./panel-teamdropdown').FormatData}; -declare var BattlePokedex: any; -declare var BattleMovedex: any; -declare var BattleAbilities: any; -declare var BattleItems: any; -declare var BattleAliases: any; -declare var BattleStatuses: any; -declare var BattlePokemonSprites: any; -declare var BattlePokemonSpritesBW: any; -declare var NonBattleGames: {[id: string]: string}; +declare const BattleText: { [id: string]: { [templateName: string]: string } }; +declare const BattleFormats: { [id: string]: import('./panel-teamdropdown').FormatData }; +declare const BattlePokedex: any; +declare const BattleMovedex: any; +declare const BattleAbilities: any; +declare const BattleItems: any; +declare const BattleAliases: any; +declare const BattleStatuses: any; +declare const BattlePokemonSprites: any; +declare const BattlePokemonSpritesBW: any; +declare const NonBattleGames: { [id: string]: string }; // PS globals ///////////// -declare var Config: any; -declare var Replays: any; -declare var exports: any; -type AnyObject = {[k: string]: any}; -declare var app: {user: AnyObject, rooms: AnyObject, ignore?: AnyObject}; +declare const Config: any; +declare const Replays: any; +declare const exports: any; +type AnyObject = { [k: string]: any }; +declare const app: { user: AnyObject, rooms: AnyObject, ignore?: AnyObject }; interface Window { [k: string]: any; diff --git a/play.pokemonshowdown.com/src/miniedit.ts b/play.pokemonshowdown.com/src/miniedit.ts index c62e6f55f..26144c75d 100644 --- a/play.pokemonshowdown.com/src/miniedit.ts +++ b/play.pokemonshowdown.com/src/miniedit.ts @@ -14,7 +14,7 @@ const MAX_UNDO_HISTORY = 100; export type MiniEditPlugin = new (editor: MiniEdit) => unknown; -export type MiniEditSelection = {start: number, end: number} | null; +export type MiniEditSelection = { start: number, end: number } | null; export class MiniEdit { static plugins: MiniEditPlugin[] = []; @@ -31,7 +31,6 @@ export class MiniEdit { * it doesn't already exist and the user types a newline at the end * of the text, it wouldn't appear. */ - // tslint:disable-next-line _setContent: (text: string) => void; pushHistory?: (text: string, selection: MiniEditSelection) => void; onKeyDown = (ev: KeyboardEvent) => { @@ -41,7 +40,9 @@ export class MiniEdit { } }; - constructor(el: HTMLElement, options: {setContent: MiniEdit['_setContent'], onKeyDown?: (ev: KeyboardEvent) => void}) { + constructor( + el: HTMLElement, options: { setContent: MiniEdit['_setContent'], onKeyDown?: (ev: KeyboardEvent) => void } + ) { this.element = el; this._setContent = options.setContent; @@ -55,7 +56,6 @@ export class MiniEdit { }); this.element.addEventListener('keydown', this.onKeyDown); - // tslint:disable-next-line for (const Plugin of MiniEdit.plugins) new Plugin(this); } @@ -79,7 +79,7 @@ export class MiniEdit { this.pushHistory?.(text, selection); } getValue(): string { - let text = this.element.textContent || ''; + const text = this.element.textContent || ''; if (text.endsWith('\n')) return text.slice(0, -1); return text; } @@ -90,7 +90,7 @@ export class MiniEdit { const selection = this.getSelection()!; const oldContent = this.getValue(); const newText = oldContent.slice(0, selection.start) + text + oldContent.slice(selection.end); - this.setValue(newText, {start: selection.start + text.length, end: selection.start + text.length}); + this.setValue(newText, { start: selection.start + text.length, end: selection.start + text.length }); } getSelection(): MiniEditSelection { @@ -116,7 +116,7 @@ export class MiniEdit { }); } - return (start === null || end === null) ? null : {start, end}; + return (start === null || end === null) ? null : { start, end }; } setSelection(sel: MiniEditSelection): void { @@ -149,7 +149,7 @@ export class MiniEdit { } } select(): void { - this.setSelection({start: 0, end: this.getValue().length}); + this.setSelection({ start: 0, end: this.getValue().length }); } } @@ -174,11 +174,11 @@ export class MiniEditUndoPlugin { editor: MiniEdit; undoIndex: number | null = null; ignoreInput = false; - history: {text: string, selection: MiniEditSelection}[] = []; + history: { text: string, selection: MiniEditSelection }[] = []; constructor(editor: MiniEdit) { this.editor = editor; - this.history.push({text: editor.getValue(), selection: {start: 0, end: 0}}); + this.history.push({ text: editor.getValue(), selection: { start: 0, end: 0 } }); this.editor.pushHistory = this.onPushHistory; editor.element.addEventListener('keydown', this.onKeyDown); @@ -197,7 +197,7 @@ export class MiniEditUndoPlugin { this.undoIndex = null; } - this.history.push({text, selection}); + this.history.push({ text, selection }); if (this.history.length > MAX_UNDO_HISTORY) this.history.shift(); }; @@ -227,7 +227,7 @@ export class MiniEditUndoPlugin { return; } - const {text, selection} = this.history[this.undoIndex]; + const { text, selection } = this.history[this.undoIndex]; this.ignoreInput = true; this.editor.setValue(text, selection); }; diff --git a/play.pokemonshowdown.com/src/panel-battle.tsx b/play.pokemonshowdown.com/src/panel-battle.tsx index e50890190..aa10abc54 100644 --- a/play.pokemonshowdown.com/src/panel-battle.tsx +++ b/play.pokemonshowdown.com/src/panel-battle.tsx @@ -6,18 +6,18 @@ */ import preact from "../js/lib/preact"; -import {PS, PSRoom, type RoomOptions, type RoomID} from "./client-main"; -import {PSPanelWrapper, PSRoomPanel} from "./panels"; -import {ChatLog, ChatRoom, ChatTextEntry, ChatUserList} from "./panel-chat"; -import {FormatDropdown} from "./panel-mainmenu"; -import {Battle, Pokemon, type ServerPokemon} from "./battle"; -import {BattleScene} from "./battle-animations"; +import { PS, PSRoom, type RoomOptions, type RoomID } from "./client-main"; +import { PSPanelWrapper, PSRoomPanel } from "./panels"; +import { ChatLog, ChatRoom, ChatTextEntry, ChatUserList } from "./panel-chat"; +import { FormatDropdown } from "./panel-mainmenu"; +import { Battle, type Pokemon, type ServerPokemon } from "./battle"; +import { BattleScene } from "./battle-animations"; import { Dex, toID } from "./battle-dex"; import { BattleChoiceBuilder, type BattleMoveRequest, type BattleRequest, type BattleRequestSideInfo, - type BattleSwitchRequest, type BattleTeamRequest + type BattleSwitchRequest, type BattleTeamRequest, } from "./battle-choices"; -import type {Args} from "./battle-text-parser"; +import type { Args } from "./battle-text-parser"; type BattleDesc = { id: RoomID, @@ -69,29 +69,41 @@ class BattlesPanel extends PSRoomPanel { override render() { const room = this.props.room; return
    - +

    - + {} +

    - {/* + {/* */} -
    {!room.battles ? +
    {!room.battles ? (

    Loading...

    - : !room.battles.length ? + ) : !room.battles.length ? (

    No battles are going on

    - : + ) : ( room.battles.map(battle => this.renderBattleLink(battle)) - }
    + )}
    ; } @@ -129,7 +141,7 @@ class BattleRoom extends ChatRoom { return true; } case 'ffto': case 'fastfowardto': { let turnNum = Number(target); - if (target.charAt(0) === '+' || turnNum < 0) { + if (target.startsWith('+') || turnNum < 0) { turnNum += this.battle.turn; if (turnNum < 0) turnNum = 0; } else if (target === 'end') { @@ -169,7 +181,8 @@ class BattleRoom extends ChatRoom { if (this.choices.isDone()) this.send(`/choose ${this.choices.toString()}`, true); this.update(null); return true; - }} + } + } return super.handleMessage(line); } } @@ -184,7 +197,7 @@ class BattleDiv extends preact.Component { } function MoveButton(props: { - children: string, cmd: string, moveData: {pp: number, maxpp: number}, type: Dex.TypeName, tooltip: string, + children: string, cmd: string, moveData: { pp: number, maxpp: number }, type: Dex.TypeName, tooltip: string, }) { return ; @@ -213,14 +226,14 @@ function PokemonButton(props: { return - : room.battle.paused ? + ) : room.battle.paused ? ( - : + ) : ( - } {} - - {} - - + )} {} + + {} + +

    - +

    ; } @@ -392,7 +415,7 @@ class BattlePanel extends PSRoomPanel { return ; } const tooltip = `zmove|${moveData.name}|${pokemonIndex}`; - return + return {zMoveData.name} ; }); @@ -475,7 +498,7 @@ class BattlePanel extends PSRoomPanel {
    {team.map((serverPokemon, i) => { return ; })}
    @@ -660,15 +683,17 @@ class BattlePanel extends PSRoomPanel { return
    - {choices.alreadySwitchingIn.length > 0 ? + {choices.alreadySwitchingIn.length > 0 ? ( [, - " What about the rest of your team? "] - : + " What about the rest of your team? "] + ) : ( "How will you start the battle? " - } + )}
    -

    Choose {choices.alreadySwitchingIn.length <= 0 ? `lead` : `slot ${choices.alreadySwitchingIn.length + 1}`}

    +

    + Choose {choices.alreadySwitchingIn.length <= 0 ? `lead` : `slot ${choices.alreadySwitchingIn.length + 1}`} +

    {this.renderTeamControls(request, choices)}
    @@ -681,7 +706,8 @@ class BattlePanel extends PSRoomPanel {
    ; - }} + } + } return null; } override render() { @@ -689,7 +715,9 @@ class BattlePanel extends PSRoomPanel { return - + {} diff --git a/play.pokemonshowdown.com/src/panel-chat.tsx b/play.pokemonshowdown.com/src/panel-chat.tsx index ca8106509..f6640b456 100644 --- a/play.pokemonshowdown.com/src/panel-chat.tsx +++ b/play.pokemonshowdown.com/src/panel-chat.tsx @@ -6,20 +6,20 @@ */ import preact from "../js/lib/preact"; -import type {PSSubscription} from "./client-core"; -import {PS, PSRoom, type RoomOptions, type RoomID, type Team} from "./client-main"; -import {PSPanelWrapper, PSRoomPanel} from "./panels"; -import {TeamForm} from "./panel-mainmenu"; -import {BattleLog} from "./battle-log"; -import type {Battle} from "./battle"; -import {MiniEdit} from "./miniedit"; -import {PSUtils, toID, type ID} from "./battle-dex"; +import type { PSSubscription } from "./client-core"; +import { PS, PSRoom, type RoomOptions, type RoomID, type Team } from "./client-main"; +import { PSPanelWrapper, PSRoomPanel } from "./panels"; +import { TeamForm } from "./panel-mainmenu"; +import { BattleLog } from "./battle-log"; +import type { Battle } from "./battle"; +import { MiniEdit } from "./miniedit"; +import { PSUtils, toID, type ID } from "./battle-dex"; -declare const formatText: any; +declare const formatText: any; // from js/server/chat-formatter.js export class ChatRoom extends PSRoom { override readonly classType: 'chat' | 'battle' = 'chat'; - users: {[userid: string]: string} = {}; + users: { [userid: string]: string } = {}; userCount = 0; override readonly canConnect = true; @@ -92,7 +92,8 @@ export class ChatRoom extends PSRoom { this.challengedFormat = null; this.update(null); return false; - }} + } + } return super.handleMessage(line); } openChallenge() { @@ -219,7 +220,7 @@ export class ChatTextEntry extends preact.Component<{ getValue() { return this.miniedit ? this.miniedit.getValue() : this.textbox.value; } - setValue(value: string, selection?: {start: number, end: number}) { + setValue(value: string, selection?: { start: number, end: number }) { if (this.miniedit) { this.miniedit.setValue(value, selection); } else { @@ -256,7 +257,7 @@ export class ChatTextEntry extends preact.Component<{ } handleKey(ev: KeyboardEvent) { const cmdKey = ((ev.metaKey ? 1 : 0) + (ev.ctrlKey ? 1 : 0) === 1) && !ev.altKey && !ev.shiftKey; - const anyModifier = ev.ctrlKey || ev.altKey || ev.metaKey || ev.shiftKey; + // const anyModifier = ev.ctrlKey || ev.altKey || ev.metaKey || ev.shiftKey; if (ev.keyCode === 13 && !ev.shiftKey) { // Enter key return this.submit(); } else if (ev.keyCode === 13 && this.miniedit) { // enter @@ -285,19 +286,19 @@ export class ChatTextEntry extends preact.Component<{ } getSelection() { return this.miniedit ? - (this.miniedit.getSelection() || {start: 0, end: 0}) : - {start: this.textbox.selectionStart, end: this.textbox.selectionEnd}; + (this.miniedit.getSelection() || { start: 0, end: 0 }) : + { start: this.textbox.selectionStart, end: this.textbox.selectionEnd }; } setSelection(start: number, end: number) { if (this.miniedit) { - this.miniedit.setSelection({start, end}); + this.miniedit.setSelection({ start, end }); } else { this.textbox.setSelectionRange?.(start, end); } } toggleFormatChar(formatChar: string) { let value = this.getValue(); - let {start, end} = this.getSelection(); + let { start, end } = this.getSelection(); // make sure start and end aren't midway through the syntax if (value.charAt(start) === formatChar && value.charAt(start - 1) === formatChar && @@ -333,23 +334,23 @@ export class ChatTextEntry extends preact.Component<{ end -= 2; } - this.setValue(value, {start, end}); + this.setValue(value, { start, end }); return true; } override render() { const OLD_TEXTBOX = false; return
    - + {OLD_TEXTBOX ?