this repo has no description

Compare changes

Choose any two refs to compare.

+4 -8
.github/workflows/browser.yml
··· 10 name: Browser extension builds 11 runs-on: ubuntu-latest 12 steps: 13 - - uses: actions/checkout@v3 14 - 15 - - uses: pnpm/action-setup@v2 16 - with: 17 - version: 9 18 - run_install: false 19 - - uses: actions/setup-node@v3 20 with: 21 - node-version: 18 22 cache: pnpm 23 24 - name: Install dependencies
··· 10 name: Browser extension builds 11 runs-on: ubuntu-latest 12 steps: 13 + - uses: actions/checkout@v4 14 + - uses: pnpm/action-setup@v4 15 + - uses: actions/setup-node@v4 16 with: 17 + node-version: 22 18 cache: pnpm 19 20 - name: Install dependencies
+4 -8
.github/workflows/lint.yml
··· 9 name: Lint commits 10 runs-on: ubuntu-latest 11 steps: 12 - - uses: actions/checkout@v3 13 - 14 - - uses: pnpm/action-setup@v2 15 - with: 16 - version: 9 17 - run_install: false 18 - - uses: actions/setup-node@v3 19 with: 20 - node-version: 18 21 cache: pnpm 22 23 - name: Install dependencies
··· 9 name: Lint commits 10 runs-on: ubuntu-latest 11 steps: 12 + - uses: actions/checkout@v4 13 + - uses: pnpm/action-setup@v4 14 + - uses: actions/setup-node@v4 15 with: 16 + node-version: 22 17 cache: pnpm 18 19 - name: Install dependencies
+4 -8
.github/workflows/nightly.yml
··· 15 name: Nightly builds on GitHub Pages 16 runs-on: ubuntu-latest 17 steps: 18 - - uses: actions/checkout@v3 19 - 20 - - uses: pnpm/action-setup@v2 21 - with: 22 - version: 9 23 - run_install: false 24 - - uses: actions/setup-node@v3 25 with: 26 - node-version: 18 27 cache: pnpm 28 29 - name: Install dependencies
··· 15 name: Nightly builds on GitHub Pages 16 runs-on: ubuntu-latest 17 steps: 18 + - uses: actions/checkout@v4 19 + - uses: pnpm/action-setup@v4 20 + - uses: actions/setup-node@v4 21 with: 22 + node-version: 22 23 cache: pnpm 24 25 - name: Install dependencies
+16
.github/workflows/nix.yml
···
··· 1 + name: Check Nix flake 2 + on: [push, pull_request] 3 + 4 + permissions: 5 + checks: write 6 + 7 + jobs: 8 + nix: 9 + name: Check Nix flake 10 + runs-on: ubuntu-latest 11 + steps: 12 + - uses: actions/checkout@v4 13 + - uses: DeterminateSystems/nix-installer-action@main 14 + 15 + - name: Build default flake output 16 + run: nix build
+4 -8
.github/workflows/release.yml
··· 13 name: Release builds to GitHub Releases 14 runs-on: ubuntu-latest 15 steps: 16 - - uses: actions/checkout@v3 17 - 18 - - uses: pnpm/action-setup@v2 19 - with: 20 - version: 9 21 - run_install: false 22 - - uses: actions/setup-node@v3 23 with: 24 - node-version: 18 25 cache: pnpm 26 27 - name: Install dependencies
··· 13 name: Release builds to GitHub Releases 14 runs-on: ubuntu-latest 15 steps: 16 + - uses: actions/checkout@v4 17 + - uses: pnpm/action-setup@v4 18 + - uses: actions/setup-node@v4 19 with: 20 + node-version: 22 21 cache: pnpm 22 23 - name: Install dependencies
+5 -11
.github/workflows/types.yml
··· 11 name: Publish types on npm 12 runs-on: ubuntu-latest 13 steps: 14 - - uses: actions/checkout@v3 15 - 16 - - uses: pnpm/action-setup@v2 17 - with: 18 - version: 9 19 - run_install: false 20 - - uses: actions/setup-node@v3 21 with: 22 - node-version: 18 23 cache: pnpm 24 registry-url: https://registry.npmjs.org 25 ··· 31 run: pnpm run build 32 33 - name: Publish types 34 - run: | 35 - cd packages/types 36 - pnpm publish --access public --no-git-checks 37 env: 38 NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
··· 11 name: Publish types on npm 12 runs-on: ubuntu-latest 13 steps: 14 + - uses: actions/checkout@v4 15 + - uses: pnpm/action-setup@v4 16 + - uses: actions/setup-node@v4 17 with: 18 + node-version: 22 19 cache: pnpm 20 registry-url: https://registry.npmjs.org 21 ··· 27 run: pnpm run build 28 29 - name: Publish types 30 + run: pnpm publish --filter=./packages/types --access public --no-git-checks 31 env: 32 NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+1 -1
.gitignore
··· 3 dist.tar.gz 4 .DS_Store 5 eslint_report.json 6 - 7 # Nix 8 /result 9 *.drv
··· 3 dist.tar.gz 4 .DS_Store 5 eslint_report.json 6 + .eslintcache 7 # Nix 8 /result 9 *.drv
+4 -4
.prettierrc
··· 1 { 2 - "printWidth": 120, 3 - "trailingComma": "none", 4 - "tabWidth": 2, 5 - "singleQuote": false 6 }
··· 1 { 2 + "printWidth": 120, 3 + "trailingComma": "none", 4 + "tabWidth": 2, 5 + "singleQuote": false 6 }
+3 -7
CHANGELOG.md
··· 1 - # Core 2 - - Updated mappings 3 4 - # Libraries 5 - - Support for message accessories in Component Editor 6 - - Settings sections now allow for a function to compute position (thanks @MeguminSama!) 7 - - Error boundary component in Common 8 - - `spacepack.lazyLoad` now supports `\i` in regular expressions
··· 1 + ## Core 2 3 + - Updated mappings 4 + - Fixed using remapped paths as patch finds not working
+4 -73
flake.lock
··· 18 "type": "github" 19 } 20 }, 21 - "flake-utils_2": { 22 - "inputs": { 23 - "systems": "systems_2" 24 - }, 25 - "locked": { 26 - "lastModified": 1701680307, 27 - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", 28 - "owner": "numtide", 29 - "repo": "flake-utils", 30 - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", 31 - "type": "github" 32 - }, 33 - "original": { 34 - "owner": "numtide", 35 - "repo": "flake-utils", 36 - "type": "github" 37 - } 38 - }, 39 "nixpkgs": { 40 "locked": { 41 - "lastModified": 1728067476, 42 - "narHash": "sha256-/uJcVXuBt+VFCPQIX+4YnYrHaubJSx4HoNsJVNRgANM=", 43 "owner": "NixOS", 44 "repo": "nixpkgs", 45 - "rev": "6e6b3dd395c3b1eb9be9f2d096383a8d05add030", 46 "type": "github" 47 }, 48 "original": { 49 "owner": "NixOS", 50 - "ref": "nixos-24.05", 51 - "repo": "nixpkgs", 52 - "type": "github" 53 - } 54 - }, 55 - "nixpkgs_2": { 56 - "locked": { 57 - "lastModified": 1736344531, 58 - "narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=", 59 - "owner": "nixos", 60 - "repo": "nixpkgs", 61 - "rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912", 62 - "type": "github" 63 - }, 64 - "original": { 65 - "owner": "nixos", 66 "ref": "nixos-unstable", 67 "repo": "nixpkgs", 68 "type": "github" 69 } 70 }, 71 - "pnpm2nix": { 72 - "inputs": { 73 - "flake-utils": "flake-utils_2", 74 - "nixpkgs": "nixpkgs_2" 75 - }, 76 - "locked": { 77 - "lastModified": 1736457458, 78 - "narHash": "sha256-eiw+hAsxavEgBfhwrktNI2hwvgeVDzBDYClx/yqka78=", 79 - "owner": "NotNite", 80 - "repo": "pnpm2nix-nzbr", 81 - "rev": "4ac61c6a50623da937dca005e3dbcb8862aafb83", 82 - "type": "github" 83 - }, 84 - "original": { 85 - "owner": "NotNite", 86 - "repo": "pnpm2nix-nzbr", 87 - "type": "github" 88 - } 89 - }, 90 "root": { 91 "inputs": { 92 "flake-utils": "flake-utils", 93 - "nixpkgs": "nixpkgs", 94 - "pnpm2nix": "pnpm2nix" 95 } 96 }, 97 "systems": { 98 - "locked": { 99 - "lastModified": 1681028828, 100 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 101 - "owner": "nix-systems", 102 - "repo": "default", 103 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 104 - "type": "github" 105 - }, 106 - "original": { 107 - "owner": "nix-systems", 108 - "repo": "default", 109 - "type": "github" 110 - } 111 - }, 112 - "systems_2": { 113 "locked": { 114 "lastModified": 1681028828, 115 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
··· 18 "type": "github" 19 } 20 }, 21 "nixpkgs": { 22 "locked": { 23 + "lastModified": 1744232761, 24 + "narHash": "sha256-gbl9hE39nQRpZaLjhWKmEu5ejtQsgI5TWYrIVVJn30U=", 25 "owner": "NixOS", 26 "repo": "nixpkgs", 27 + "rev": "f675531bc7e6657c10a18b565cfebd8aa9e24c14", 28 "type": "github" 29 }, 30 "original": { 31 "owner": "NixOS", 32 "ref": "nixos-unstable", 33 "repo": "nixpkgs", 34 "type": "github" 35 } 36 }, 37 "root": { 38 "inputs": { 39 "flake-utils": "flake-utils", 40 + "nixpkgs": "nixpkgs" 41 } 42 }, 43 "systems": { 44 "locked": { 45 "lastModified": 1681028828, 46 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+3 -4
flake.nix
··· 2 description = "Yet another Discord mod"; 3 4 inputs = { 5 - nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; 6 flake-utils.url = "github:numtide/flake-utils"; 7 - pnpm2nix.url = "github:NotNite/pnpm2nix-nzbr"; 8 }; 9 10 - outputs = { self, nixpkgs, flake-utils, pnpm2nix }: 11 - let overlay = import ./nix/overlay.nix { inherit pnpm2nix; }; 12 in flake-utils.lib.eachDefaultSystem (system: 13 let 14 pkgs = import nixpkgs {
··· 2 description = "Yet another Discord mod"; 3 4 inputs = { 5 + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 6 flake-utils.url = "github:numtide/flake-utils"; 7 }; 8 9 + outputs = { self, nixpkgs, flake-utils }: 10 + let overlay = import ./nix/overlay.nix { }; 11 in flake-utils.lib.eachDefaultSystem (system: 12 let 13 pkgs = import nixpkgs {
+46 -17
nix/default.nix
··· 1 - { pkgs, mkPnpmPackage }: 2 3 - mkPnpmPackage rec { 4 - workspace = ./..; 5 src = ./..; 6 7 - # Work around a bug with how it expects dist 8 - components = [ 9 - "packages/core" 10 - "packages/core-extensions" 11 - "packages/injector" 12 - "packages/node-preload" 13 - "packages/types" 14 - "packages/web-preload" 15 ]; 16 - distDirs = [ "dist" ]; 17 18 - copyNodeModules = true; 19 - buildPhase = "pnpm run build"; 20 - installPhase = "cp -r dist $out"; 21 22 - meta = with pkgs.lib; { 23 description = "Yet another Discord mod"; 24 homepage = "https://moonlight-mod.github.io/"; 25 license = licenses.lgpl3; 26 maintainers = with maintainers; [ notnite ]; 27 }; 28 - }
··· 1 + { 2 + lib, 3 + stdenv, 4 + nodejs_22, 5 + pnpm_10, 6 + }: 7 8 + stdenv.mkDerivation (finalAttrs: { 9 + pname = "moonlight"; 10 + version = (builtins.fromJSON (builtins.readFile ./../package.json)).version; 11 + 12 src = ./..; 13 14 + outputs = [ "out" "firefox" ]; 15 + 16 + nativeBuildInputs = [ 17 + nodejs_22 18 + pnpm_10.configHook 19 ]; 20 + 21 + pnpmDeps = pnpm_10.fetchDeps { 22 + inherit (finalAttrs) pname version src; 23 + hash = "sha256-I+zRCUqJabpGJRFBGW0NrM9xzyzeCjioF54zlCpynBU="; 24 + }; 25 + 26 + env = { 27 + NODE_ENV = "production"; 28 + MOONLIGHT_VERSION = "v${finalAttrs.version}"; 29 + }; 30 + 31 + buildPhase = '' 32 + runHook preBuild 33 + 34 + pnpm run build 35 + pnpm run browser-mv2 36 + 37 + runHook postBuild 38 + ''; 39 + 40 + installPhase = '' 41 + runHook preInstall 42 43 + cp -r dist $out 44 + 45 + mkdir -p $firefox/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ 46 + mv $out/browser-mv2 $firefox/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/{0fb6d66f-f22d-4555-a87b-34ef4bea5e2a} 47 + 48 + runHook postInstall 49 + ''; 50 51 + meta = with lib; { 52 description = "Yet another Discord mod"; 53 homepage = "https://moonlight-mod.github.io/"; 54 license = licenses.lgpl3; 55 maintainers = with maintainers; [ notnite ]; 56 }; 57 + })
+3 -6
nix/overlay.nix
··· 1 - { pnpm2nix }: 2 3 let 4 nameTable = { ··· 29 ''; 30 31 packageJson = '' 32 - {"name":"discord","main":"./injector.js","private":true} 33 ''; 34 35 in old.installPhase + "\n" + '' ··· 49 ''; 50 }); 51 in final: prev: rec { 52 - moonlight-mod = final.callPackage ./default.nix { 53 - pkgs = final; 54 - mkPnpmPackage = pnpm2nix.packages.${final.system}.mkPnpmPackage; 55 - }; 56 discord = mkOverride prev moonlight-mod "discord"; 57 discord-ptb = mkOverride prev moonlight-mod "discord-ptb"; 58 discord-canary = mkOverride prev moonlight-mod "discord-canary";
··· 1 + { ... }: 2 3 let 4 nameTable = { ··· 29 ''; 30 31 packageJson = '' 32 + {"name":"${name}","main":"./injector.js","private":true} 33 ''; 34 35 in old.installPhase + "\n" + '' ··· 49 ''; 50 }); 51 in final: prev: rec { 52 + moonlight-mod = final.callPackage ./default.nix { }; 53 discord = mkOverride prev moonlight-mod "discord"; 54 discord-ptb = mkOverride prev moonlight-mod "discord-ptb"; 55 discord-canary = mkOverride prev moonlight-mod "discord-canary";
+23 -12
package.json
··· 1 { 2 "name": "moonlight", 3 - "version": "1.3.9", 4 "description": "Yet another Discord mod", 5 - "homepage": "https://moonlight-mod.github.io/", 6 "license": "LGPL-3.0-or-later", 7 "repository": { 8 "type": "git", 9 "url": "git+https://github.com/moonlight-mod/moonlight.git" ··· 11 "bugs": { 12 "url": "https://github.com/moonlight-mod/moonlight/issues" 13 }, 14 "scripts": { 15 "build": "node build.mjs", 16 "dev": "node build.mjs --watch", ··· 18 "browser": "node build.mjs --browser", 19 "browser-mv2": "node build.mjs --browser --mv2", 20 "lint": "eslint packages", 21 - "lint:fix": "eslint packages --fix", 22 - "lint:report": "eslint --output-file eslint_report.json --format json packages", 23 "typecheck": "tsc --noEmit", 24 "check": "pnpm run lint && pnpm run typecheck", 25 - "prepare": "husky install" 26 }, 27 "devDependencies": { 28 - "esbuild": "^0.19.3", 29 - "esbuild-copy-static-files": "^0.1.0", 30 - "eslint": "^9.12.0", 31 - "@moonlight-mod/eslint-config": "github:moonlight-mod/eslint-config", 32 - "husky": "^8.0.3", 33 - "prettier": "^3.1.0", 34 - "typescript": "^5.3.2" 35 } 36 }
··· 1 { 2 "name": "moonlight", 3 + "version": "1.3.14", 4 + "packageManager": "pnpm@10.7.1", 5 "description": "Yet another Discord mod", 6 "license": "LGPL-3.0-or-later", 7 + "homepage": "https://moonlight-mod.github.io/", 8 "repository": { 9 "type": "git", 10 "url": "git+https://github.com/moonlight-mod/moonlight.git" ··· 12 "bugs": { 13 "url": "https://github.com/moonlight-mod/moonlight/issues" 14 }, 15 + "engineStrict": true, 16 + "engines": { 17 + "node": ">=22", 18 + "pnpm": ">=10", 19 + "npm": "pnpm", 20 + "yarn": "pnpm" 21 + }, 22 "scripts": { 23 "build": "node build.mjs", 24 "dev": "node build.mjs --watch", ··· 26 "browser": "node build.mjs --browser", 27 "browser-mv2": "node build.mjs --browser --mv2", 28 "lint": "eslint packages", 29 + "lint:fix": "pnpm lint --fix", 30 + "lint:report": "pnpm lint --output-file eslint_report.json --format json", 31 "typecheck": "tsc --noEmit", 32 "check": "pnpm run lint && pnpm run typecheck", 33 + "prepare": "husky install", 34 + "updates": "pnpm taze -r" 35 }, 36 "devDependencies": { 37 + "@moonlight-mod/eslint-config": "catalog:dev", 38 + "@types/node": "catalog:dev", 39 + "esbuild": "catalog:dev", 40 + "esbuild-copy-static-files": "catalog:dev", 41 + "eslint": "catalog:dev", 42 + "husky": "catalog:dev", 43 + "prettier": "catalog:dev", 44 + "taze": "catalog:dev", 45 + "typescript": "catalog:dev" 46 } 47 }
+2 -1
packages/browser/blockLoading.json
··· 6 "type": "block" 7 }, 8 "condition": { 9 - "urlFilter": "*://discord.com/assets/*.js", 10 "resourceTypes": ["script"] 11 } 12 }
··· 6 "type": "block" 7 }, 8 "condition": { 9 + "requestDomains": ["discord.com", "discordapp.com"], 10 + "urlFilter": "*/assets/*.js", 11 "resourceTypes": ["script"] 12 } 13 }
+10 -4
packages/browser/manifest.json
··· 1 { 2 "manifest_version": 3, 3 "name": "moonlight", 4 "description": "Yet another Discord mod", 5 - "version": "1.3.9", 6 "permissions": ["declarativeNetRequestWithHostAccess", "webRequest", "scripting", "webNavigation"], 7 - "host_permissions": ["https://moonlight-mod.github.io/*", "https://api.github.com/*", "https://*.discord.com/*"], 8 "content_scripts": [ 9 { 10 "js": ["index.js"], 11 - "matches": ["https://*.discord.com/*"], 12 "run_at": "document_start", 13 "world": "MAIN" 14 } ··· 34 "web_accessible_resources": [ 35 { 36 "resources": ["index.js"], 37 - "matches": ["https://*.discord.com/*"] 38 } 39 ] 40 }
··· 1 { 2 + "$schema": "https://json.schemastore.org/chrome-manifest", 3 "manifest_version": 3, 4 "name": "moonlight", 5 "description": "Yet another Discord mod", 6 + "version": "1.3.14", 7 "permissions": ["declarativeNetRequestWithHostAccess", "webRequest", "scripting", "webNavigation"], 8 + "host_permissions": [ 9 + "https://moonlight-mod.github.io/*", 10 + "https://api.github.com/*", 11 + "https://*.discord.com/*", 12 + "https://*.discordapp.com/*" 13 + ], 14 "content_scripts": [ 15 { 16 "js": ["index.js"], 17 + "matches": ["https://*.discord.com/*", "https://*.discordapp.com/*"], 18 "run_at": "document_start", 19 "world": "MAIN" 20 } ··· 40 "web_accessible_resources": [ 41 { 42 "resources": ["index.js"], 43 + "matches": ["https://*.discord.com/*", "https://*.discordapp.com/*"] 44 } 45 ] 46 }
+12 -6
packages/browser/manifestv2.json
··· 1 { 2 "manifest_version": 2, 3 "name": "moonlight", 4 "description": "Yet another Discord mod", 5 - "version": "1.3.9", 6 "permissions": [ 7 "webRequest", 8 "webRequestBlocking", 9 "scripting", 10 "webNavigation", 11 - "https://*.discord.com/assets/*.js", 12 "https://moonlight-mod.github.io/*", 13 - "https://api.github.com/*", 14 - "https://*.discord.com/*" 15 ], 16 "background": { 17 "scripts": ["background.js"] ··· 19 "content_scripts": [ 20 { 21 "js": ["index.js"], 22 - "matches": ["https://*.discord.com/*"], 23 "run_at": "document_start", 24 "world": "MAIN" 25 } 26 - ] 27 }
··· 1 { 2 + "$schema": "https://json.schemastore.org/chrome-manifest", 3 "manifest_version": 2, 4 "name": "moonlight", 5 "description": "Yet another Discord mod", 6 + "version": "1.3.14", 7 "permissions": [ 8 "webRequest", 9 "webRequestBlocking", 10 "scripting", 11 "webNavigation", 12 + "https://*.discord.com/*", 13 + "https://*.discordapp.com/*", 14 "https://moonlight-mod.github.io/*", 15 + "https://api.github.com/*" 16 ], 17 "background": { 18 "scripts": ["background.js"] ··· 20 "content_scripts": [ 21 { 22 "js": ["index.js"], 23 + "matches": ["https://*.discord.com/*", "https://*.discordapp.com/*"], 24 "run_at": "document_start", 25 "world": "MAIN" 26 } 27 + ], 28 + "browser_specific_settings": { 29 + "gecko": { 30 + "id": "{0fb6d66f-f22d-4555-a87b-34ef4bea5e2a}" 31 + } 32 + } 33 }
+12 -2
packages/browser/package.json
··· 1 { 2 "name": "@moonlight-mod/browser", 3 "private": true, 4 "dependencies": { 5 "@moonlight-mod/core": "workspace:*", 6 "@moonlight-mod/types": "workspace:*", 7 "@moonlight-mod/web-preload": "workspace:*", 8 - "@zenfs/core": "^1.8.8", 9 - "@zenfs/dom": "^1.1.3" 10 } 11 }
··· 1 { 2 "name": "@moonlight-mod/browser", 3 "private": true, 4 + "engines": { 5 + "node": ">=22", 6 + "pnpm": ">=10", 7 + "npm": "pnpm", 8 + "yarn": "pnpm" 9 + }, 10 "dependencies": { 11 "@moonlight-mod/core": "workspace:*", 12 "@moonlight-mod/types": "workspace:*", 13 "@moonlight-mod/web-preload": "workspace:*", 14 + "@zenfs/core": "catalog:prod", 15 + "@zenfs/dom": "catalog:prod" 16 + }, 17 + "engineStrict": true, 18 + "devDependencies": { 19 + "@types/chrome": "catalog:dev" 20 } 21 }
+55 -70
packages/browser/src/background-mv2.js
··· 1 /* eslint-disable no-console */ 2 /* eslint-disable no-undef */ 3 4 - const starterUrls = ["web.", "sentry."]; 5 - let blockLoading = true; 6 - let doing = false; 7 - let collectedUrls = new Set(); 8 9 - chrome.webNavigation.onBeforeNavigate.addListener(async (details) => { 10 - const url = new URL(details.url); 11 - if (!blockLoading && url.hostname.endsWith("discord.com")) { 12 - console.log("Blocking", details.url); 13 - blockLoading = true; 14 - collectedUrls.clear(); 15 - } 16 - }); 17 18 - async function doTheThing(urls, tabId) { 19 - console.log("Doing", urls, tabId); 20 21 - blockLoading = false; 22 23 - try { 24 - await chrome.scripting.executeScript({ 25 - target: { tabId }, 26 - world: "MAIN", 27 - args: [urls], 28 - func: async (urls) => { 29 - try { 30 - await window._moonlightBrowserInit(); 31 - } catch (e) { 32 - console.log(e); 33 - } 34 35 - const scripts = [...document.querySelectorAll("script")].filter( 36 - (script) => script.src && urls.some((url) => url.includes(script.src)) 37 - ); 38 39 - // backwards 40 - urls.reverse(); 41 - for (const url of urls) { 42 - const script = scripts.find((script) => url.includes(script.src)); 43 - console.log("adding new script", script); 44 45 - const newScript = document.createElement("script"); 46 - for (const { name, value } of script.attributes) { 47 - newScript.setAttribute(name, value); 48 } 49 - 50 - script.remove(); 51 - document.documentElement.appendChild(newScript); 52 - } 53 - } 54 - }); 55 - } catch (e) { 56 - console.log(e); 57 - } 58 - 59 - doing = false; 60 - collectedUrls.clear(); 61 - } 62 - 63 - chrome.webRequest.onBeforeRequest.addListener( 64 - async (details) => { 65 - if (starterUrls.some((url) => details.url.includes(url))) { 66 - console.log("Adding", details.url); 67 - collectedUrls.add(details.url); 68 } 69 70 - if (collectedUrls.size === starterUrls.length) { 71 - if (doing) return; 72 - if (!blockLoading) return; 73 - doing = true; 74 - const urls = [...collectedUrls]; 75 - const tabId = details.tabId; 76 - 77 - // yes this is a load-bearing sleep 78 - setTimeout(() => doTheThing(urls, tabId), 0); 79 - } 80 - 81 - if (blockLoading) return { cancel: true }; 82 }, 83 { 84 - urls: ["https://*.discord.com/assets/*.js"] 85 }, 86 ["blocking"] 87 ); ··· 94 ) 95 }; 96 }, 97 - { urls: ["https://*.discord.com/*"] }, 98 ["blocking", "responseHeaders"] 99 );
··· 1 /* eslint-disable no-console */ 2 /* eslint-disable no-undef */ 3 4 + const scriptUrls = ["web.", "sentry."]; 5 + let blockedScripts = new Set(); 6 7 + chrome.webRequest.onBeforeRequest.addListener( 8 + async (details) => { 9 + if (details.tabId === -1) return; 10 11 + const url = new URL(details.url); 12 + const hasUrl = scriptUrls.some((scriptUrl) => { 13 + return ( 14 + details.url.includes(scriptUrl) && 15 + !url.searchParams.has("inj") && 16 + (url.host.endsWith("discord.com") || url.host.endsWith("discordapp.com")) 17 + ); 18 + }); 19 + if (hasUrl) blockedScripts.add(details.url); 20 21 + if (blockedScripts.size === scriptUrls.length) { 22 + const blockedScriptsCopy = Array.from(blockedScripts); 23 + blockedScripts.clear(); 24 25 + setTimeout(async () => { 26 + console.log("Starting moonlight"); 27 + await chrome.scripting.executeScript({ 28 + target: { tabId: details.tabId }, 29 + world: "MAIN", 30 + args: [blockedScriptsCopy], 31 + func: async (blockedScripts) => { 32 + console.log("Initializing moonlight"); 33 + try { 34 + await window._moonlightBrowserInit(); 35 + } catch (e) { 36 + console.error(e); 37 + } 38 39 + console.log("Readding scripts"); 40 + try { 41 + const scripts = [...document.querySelectorAll("script")].filter( 42 + (script) => script.src && blockedScripts.some((url) => url.includes(script.src)) 43 + ); 44 45 + blockedScripts.reverse(); 46 + for (const url of blockedScripts) { 47 + if (url.includes("/sentry.")) continue; 48 49 + const script = scripts.find((script) => url.includes(script.src)); 50 + const newScript = document.createElement("script"); 51 + for (const attr of script.attributes) { 52 + if (attr.name === "src") attr.value += "?inj"; 53 + newScript.setAttribute(attr.name, attr.value); 54 + } 55 + script.remove(); 56 + document.documentElement.appendChild(newScript); 57 + } 58 + } catch (e) { 59 + console.error(e); 60 + } 61 } 62 + }); 63 + }, 0); 64 } 65 66 + if (hasUrl) return { cancel: true }; 67 }, 68 { 69 + urls: ["https://*.discord.com/assets/*.js", "https://*.discordapp.com/assets/*.js"] 70 }, 71 ["blocking"] 72 ); ··· 79 ) 80 }; 81 }, 82 + { urls: ["https://*.discord.com/*", "https://*.discordapp.com/*"] }, 83 ["blocking", "responseHeaders"] 84 );
+37 -39
packages/browser/src/background.js
··· 1 /* eslint-disable no-console */ 2 /* eslint-disable no-undef */ 3 4 - const starterUrls = ["web.", "sentry."]; 5 - let blockLoading = true; 6 - let doing = false; 7 - let collectedUrls = new Set(); 8 9 chrome.webNavigation.onBeforeNavigate.addListener(async (details) => { 10 const url = new URL(details.url); 11 - if (!blockLoading && url.hostname.endsWith("discord.com")) { 12 await chrome.declarativeNetRequest.updateEnabledRulesets({ 13 enableRulesetIds: ["modifyResponseHeaders", "blockLoading"] 14 }); 15 - blockLoading = true; 16 - collectedUrls.clear(); 17 } 18 }); 19 20 chrome.webRequest.onBeforeRequest.addListener( 21 async (details) => { 22 if (details.tabId === -1) return; 23 - if (starterUrls.some((url) => details.url.includes(url))) { 24 - console.log("Adding", details.url); 25 - collectedUrls.add(details.url); 26 - } 27 28 - if (collectedUrls.size === starterUrls.length) { 29 - if (doing) return; 30 - if (!blockLoading) return; 31 - doing = true; 32 - const urls = [...collectedUrls]; 33 - console.log("Doing", urls); 34 35 console.log("Running moonlight script"); 36 try { ··· 40 files: ["index.js"] 41 }); 42 } catch (e) { 43 - console.log(e); 44 } 45 46 console.log("Initializing moonlight"); ··· 52 try { 53 await window._moonlightBrowserInit(); 54 } catch (e) { 55 - console.log(e); 56 } 57 } 58 }); ··· 60 console.log(e); 61 } 62 63 - console.log("Updating rulesets"); 64 try { 65 - blockLoading = false; 66 await chrome.declarativeNetRequest.updateEnabledRulesets({ 67 disableRulesetIds: ["blockLoading"], 68 enableRulesetIds: ["modifyResponseHeaders"] 69 }); 70 } catch (e) { 71 - console.log(e); 72 } 73 74 console.log("Readding scripts"); ··· 76 await chrome.scripting.executeScript({ 77 target: { tabId: details.tabId }, 78 world: "MAIN", 79 - args: [urls], 80 - func: async (urls) => { 81 const scripts = [...document.querySelectorAll("script")].filter( 82 - (script) => script.src && urls.some((url) => url.includes(script.src)) 83 ); 84 85 - // backwards 86 - urls.reverse(); 87 - for (const url of urls) { 88 - const script = scripts.find((script) => url.includes(script.src)); 89 - console.log("adding new script", script); 90 91 const newScript = document.createElement("script"); 92 - for (const { name, value } of script.attributes) { 93 - newScript.setAttribute(name, value); 94 } 95 - 96 script.remove(); 97 document.documentElement.appendChild(newScript); 98 } 99 } 100 }); 101 } catch (e) { 102 - console.log(e); 103 } 104 - 105 - console.log("Done"); 106 - doing = false; 107 - collectedUrls.clear(); 108 } 109 }, 110 { 111 - urls: ["*://*.discord.com/assets/*.js"] 112 } 113 );
··· 1 /* eslint-disable no-console */ 2 /* eslint-disable no-undef */ 3 4 + const scriptUrls = ["web.", "sentry."]; 5 + let blockedScripts = new Set(); 6 7 chrome.webNavigation.onBeforeNavigate.addListener(async (details) => { 8 const url = new URL(details.url); 9 + if ( 10 + !url.searchParams.has("inj") && 11 + (url.hostname.endsWith("discord.com") || url.hostname.endsWith("discordapp.com")) 12 + ) { 13 + console.log("Enabling block ruleset"); 14 await chrome.declarativeNetRequest.updateEnabledRulesets({ 15 enableRulesetIds: ["modifyResponseHeaders", "blockLoading"] 16 }); 17 } 18 }); 19 20 chrome.webRequest.onBeforeRequest.addListener( 21 async (details) => { 22 if (details.tabId === -1) return; 23 24 + const url = new URL(details.url); 25 + const hasUrl = scriptUrls.some((scriptUrl) => { 26 + return ( 27 + details.url.includes(scriptUrl) && 28 + !url.searchParams.has("inj") && 29 + (url.hostname.endsWith("discord.com") || url.hostname.endsWith("discordapp.com")) 30 + ); 31 + }); 32 + 33 + if (hasUrl) blockedScripts.add(details.url); 34 + 35 + if (blockedScripts.size === scriptUrls.length) { 36 + const blockedScriptsCopy = Array.from(blockedScripts); 37 + blockedScripts.clear(); 38 39 console.log("Running moonlight script"); 40 try { ··· 44 files: ["index.js"] 45 }); 46 } catch (e) { 47 + console.error(e); 48 } 49 50 console.log("Initializing moonlight"); ··· 56 try { 57 await window._moonlightBrowserInit(); 58 } catch (e) { 59 + console.error(e); 60 } 61 } 62 }); ··· 64 console.log(e); 65 } 66 67 + console.log("Disabling block ruleset"); 68 try { 69 await chrome.declarativeNetRequest.updateEnabledRulesets({ 70 disableRulesetIds: ["blockLoading"], 71 enableRulesetIds: ["modifyResponseHeaders"] 72 }); 73 } catch (e) { 74 + console.error(e); 75 } 76 77 console.log("Readding scripts"); ··· 79 await chrome.scripting.executeScript({ 80 target: { tabId: details.tabId }, 81 world: "MAIN", 82 + args: [blockedScriptsCopy], 83 + func: async (blockedScripts) => { 84 const scripts = [...document.querySelectorAll("script")].filter( 85 + (script) => script.src && blockedScripts.some((url) => url.includes(script.src)) 86 ); 87 88 + blockedScripts.reverse(); 89 + for (const url of blockedScripts) { 90 + if (url.includes("/sentry.")) continue; 91 92 + const script = scripts.find((script) => url.includes(script.src)); 93 const newScript = document.createElement("script"); 94 + for (const attr of script.attributes) { 95 + if (attr.name === "src") attr.value += "?inj"; 96 + newScript.setAttribute(attr.name, attr.value); 97 } 98 script.remove(); 99 document.documentElement.appendChild(newScript); 100 } 101 } 102 }); 103 } catch (e) { 104 + console.error(e); 105 } 106 } 107 }, 108 { 109 + urls: ["*://*.discord.com/assets/*.js", "*://*.discordapp.com/assets/*.js"] 110 } 111 );
+4
packages/browser/src/index.ts
··· 90 dirname(path) { 91 const parts = getParts(path); 92 return "/" + parts.slice(0, parts.length - 1).join("/"); 93 } 94 }, 95 // TODO
··· 90 dirname(path) { 91 const parts = getParts(path); 92 return "/" + parts.slice(0, parts.length - 1).join("/"); 93 + }, 94 + basename(path) { 95 + const parts = getParts(path); 96 + return parts[parts.length - 1]; 97 } 98 }, 99 // TODO
+1
packages/browser/tsconfig.json
··· 1 { 2 "extends": "../../tsconfig.json", 3 "compilerOptions": { 4 "module": "ES2022" 5 } 6 }
··· 1 { 2 "extends": "../../tsconfig.json", 3 "compilerOptions": { 4 + "lib": ["DOM", "ESNext", "ESNext.AsyncIterable"], 5 "module": "ES2022" 6 } 7 }
+7
packages/core/package.json
··· 4 "exports": { 5 "./*": "./src/*.ts" 6 }, 7 "dependencies": { 8 "@moonlight-mod/types": "workspace:*" 9 }
··· 4 "exports": { 5 "./*": "./src/*.ts" 6 }, 7 + "engineStrict": true, 8 + "engines": { 9 + "node": ">=22", 10 + "pnpm": ">=10", 11 + "npm": "pnpm", 12 + "yarn": "pnpm" 13 + }, 14 "dependencies": { 15 "@moonlight-mod/types": "workspace:*" 16 }
+1 -4
packages/core/src/extension.ts
··· 129 const ret: DetectedExtension[] = []; 130 const seen = new Set<string>(); 131 132 - const coreExtensionsFs: Record<string, string> = JSON.parse( 133 - // @ts-expect-error shut up 134 - _moonlight_coreExtensionsStr 135 - ); 136 const coreExtensions = Array.from(new Set(Object.keys(coreExtensionsFs).map((x) => x.split("/")[0]))); 137 138 for (const ext of coreExtensions) {
··· 129 const ret: DetectedExtension[] = []; 130 const seen = new Set<string>(); 131 132 + const coreExtensionsFs: Record<string, string> = JSON.parse(_moonlight_coreExtensionsStr); 133 const coreExtensions = Array.from(new Set(Object.keys(coreExtensionsFs).map((x) => x.split("/")[0]))); 134 135 for (const ext of coreExtensions) {
+3
packages/core/src/fs.ts
··· 48 }, 49 dirname(dir) { 50 return path.dirname(dir); 51 } 52 }; 53 }
··· 48 }, 49 dirname(dir) { 50 return path.dirname(dir); 51 + }, 52 + basename(dir) { 53 + return path.basename(dir); 54 } 55 }; 56 }
+39 -28
packages/core/src/patch.ts
··· 66 const moduleCache: Record<string, string> = {}; 67 const patched: Record<string, Array<string>> = {}; 68 69 - function patchModules(entry: WebpackJsonpEntry[1]) { 70 - function patchModule(id: string, patchId: string, replaced: string) { 71 - // Store what extensions patched what modules for easier debugging 72 - patched[id] = patched[id] || []; 73 - patched[id].push(patchId); 74 75 - // Webpack module arguments are minified, so we replace them with consistent names 76 - // We have to wrap it so things don't break, though 77 - const patchedStr = patched[id].sort().join(", "); 78 79 - const wrapped = 80 - `(${replaced}).apply(this, arguments)\n` + 81 - `// Patched by moonlight: ${patchedStr}\n` + 82 - `//# sourceURL=Webpack-Module-${id}`; 83 84 - try { 85 - const func = new Function("module", "exports", "require", wrapped) as WebpackModuleFunc; 86 - entry[id] = func; 87 - entry[id].__moonlight = true; 88 - return true; 89 - } catch (e) { 90 - logger.warn("Error constructing function for patch", patchId, e); 91 - patched[id].pop(); 92 - return false; 93 - } 94 } 95 96 // Populate the module cache 97 for (const [id, func] of Object.entries(entry)) { 98 if (!Object.hasOwn(moduleCache, id) && func.__moonlight !== true) { ··· 108 const origModuleString = moduleCache[id]; 109 let moduleString = origModuleString; 110 const patchedStr = []; 111 - const mappedName = moonlight.moonmap.modules[id]; 112 let modified = false; 113 let swappedModule = false; 114 ··· 154 } 155 156 if (replaced === moduleString) { 157 - logger.warn("Patch replacement failed", id, patch); 158 isPatched = false; 159 if (patch.hardFail) { 160 hardFailed = true; ··· 185 } 186 187 if (modified) { 188 - if (!swappedModule) patchModule(id, patchedStr.join(", "), moduleString); 189 - moduleCache[id] = moduleString; 190 moonlight.patched.set(id, exts); 191 } 192 ··· 194 const parsed = moonlight.lunast.parseScript(id, moduleString); 195 if (parsed != null) { 196 for (const [parsedId, parsedScript] of Object.entries(parsed)) { 197 - if (patchModule(parsedId, "lunast", parsedScript)) { 198 moduleCache[parsedId] = parsedScript; 199 } 200 } ··· 205 206 if (moonlightNode.config.patchAll === true) { 207 if ((typeof id !== "string" || !id.includes("_")) && !entry[id].__moonlight) { 208 - const wrapped = `(${moduleCache[id]}).apply(this, arguments)\n` + `//# sourceURL=Webpack-Module-${id}`; 209 entry[id] = new Function("module", "exports", "require", wrapped) as WebpackModuleFunc; 210 entry[id].__moonlight = true; 211 } ··· 328 } 329 330 for (const [name, func] of Object.entries(moonlight.moonmap.getWebpackModules("window.moonlight.moonmap"))) { 331 injectedWpModules.push({ id: name, run: func }); 332 modules[name] = func; 333 inject = true;
··· 66 const moduleCache: Record<string, string> = {}; 67 const patched: Record<string, Array<string>> = {}; 68 69 + function createSourceURL(id: string) { 70 + const remapped = Object.entries(moonlight.moonmap.modules).find((m) => m[1] === id)?.[0]; 71 72 + if (remapped) { 73 + return `// Webpack Module: ${id}\n//# sourceURL=${remapped}`; 74 + } 75 76 + return `//# sourceURL=Webpack-Module/${id.slice(0, 3)}/${id}`; 77 + } 78 79 + function patchModule(id: string, patchId: string, replaced: string, entry: WebpackJsonpEntry[1]) { 80 + // Store what extensions patched what modules for easier debugging 81 + patched[id] = patched[id] ?? []; 82 + patched[id].push(patchId); 83 + 84 + // Webpack module arguments are minified, so we replace them with consistent names 85 + // We have to wrap it so things don't break, though 86 + const patchedStr = patched[id].sort().join(", "); 87 + 88 + const wrapped = 89 + `(${replaced}).apply(this, arguments)\n` + `// Patched by moonlight: ${patchedStr}\n` + createSourceURL(id); 90 + 91 + try { 92 + const func = new Function("module", "exports", "require", wrapped) as WebpackModuleFunc; 93 + entry[id] = func; 94 + entry[id].__moonlight = true; 95 + return true; 96 + } catch (e) { 97 + logger.warn("Error constructing function for patch", patchId, e); 98 + patched[id].pop(); 99 + return false; 100 } 101 + } 102 103 + function patchModules(entry: WebpackJsonpEntry[1]) { 104 // Populate the module cache 105 for (const [id, func] of Object.entries(entry)) { 106 if (!Object.hasOwn(moduleCache, id) && func.__moonlight !== true) { ··· 116 const origModuleString = moduleCache[id]; 117 let moduleString = origModuleString; 118 const patchedStr = []; 119 + const mappedName = Object.entries(moonlight.moonmap.modules).find((m) => m[1] === id)?.[0]; 120 let modified = false; 121 let swappedModule = false; 122 ··· 162 } 163 164 if (replaced === moduleString) { 165 + logger.warn("Patch replacement failed", id, patchId, patch); 166 isPatched = false; 167 if (patch.hardFail) { 168 hardFailed = true; ··· 193 } 194 195 if (modified) { 196 + let shouldCache = true; 197 + if (!swappedModule) shouldCache = patchModule(id, patchedStr.join(", "), moduleString, entry); 198 + if (shouldCache) moduleCache[id] = moduleString; 199 moonlight.patched.set(id, exts); 200 } 201 ··· 203 const parsed = moonlight.lunast.parseScript(id, moduleString); 204 if (parsed != null) { 205 for (const [parsedId, parsedScript] of Object.entries(parsed)) { 206 + if (patchModule(parsedId, "lunast", parsedScript, entry)) { 207 moduleCache[parsedId] = parsedScript; 208 } 209 } ··· 214 215 if (moonlightNode.config.patchAll === true) { 216 if ((typeof id !== "string" || !id.includes("_")) && !entry[id].__moonlight) { 217 + const wrapped = `(${moduleCache[id]}).apply(this, arguments)\n` + createSourceURL(id); 218 entry[id] = new Function("module", "exports", "require", wrapped) as WebpackModuleFunc; 219 entry[id].__moonlight = true; 220 } ··· 337 } 338 339 for (const [name, func] of Object.entries(moonlight.moonmap.getWebpackModules("window.moonlight.moonmap"))) { 340 + // @ts-expect-error probably should fix the type on this idk 341 + func.__moonlight = true; 342 injectedWpModules.push({ id: name, run: func }); 343 modules[name] = func; 344 inject = true;
+4 -1
packages/core/tsconfig.json
··· 1 { 2 - "extends": "../../tsconfig.json" 3 }
··· 1 { 2 + "extends": "../../tsconfig.json", 3 + "compilerOptions": { 4 + "lib": ["ESNext", "DOM"] 5 + } 6 }
+9 -2
packages/core-extensions/package.json
··· 1 { 2 "name": "@moonlight-mod/core-extensions", 3 "private": true, 4 "dependencies": { 5 "@moonlight-mod/core": "workspace:*", 6 "@moonlight-mod/types": "workspace:*", 7 - "microdiff": "^1.5.0", 8 - "nanotar": "^0.1.1" 9 } 10 }
··· 1 { 2 "name": "@moonlight-mod/core-extensions", 3 "private": true, 4 + "engineStrict": true, 5 + "engines": { 6 + "node": ">=22", 7 + "pnpm": ">=10", 8 + "npm": "pnpm", 9 + "yarn": "pnpm" 10 + }, 11 "dependencies": { 12 "@moonlight-mod/core": "workspace:*", 13 "@moonlight-mod/types": "workspace:*", 14 + "microdiff": "catalog:prod", 15 + "nanotar": "catalog:prod" 16 } 17 }
+12 -3
packages/core-extensions/src/commands/index.ts
··· 53 } 54 }, 55 { 56 - find: ".icon,bot:null===", 57 replace: { 58 - match: /(\.useMemo\(\(\)=>{)(if\((\i)\.type)/, 59 - replacement: (_, before, after, section) => `${before} 60 if (${section}.id==="${APPLICATION_ID}") return "https://moonlight-mod.github.io/favicon.png"; 61 ${after}` 62 } ··· 67 replace: { 68 match: /(\i)\.type===\i\.\i\.BUILT_IN/, 69 replacement: (orig, section) => `${section}.id!=="${APPLICATION_ID}"&&${orig}` 70 } 71 } 72 ];
··· 53 } 54 }, 55 { 56 + find: ".icon,bot:null==", 57 replace: { 58 + match: /(\.useMemo\(\(\)=>{(var \i;)?)((return |if\()(\i)\.type)/, 59 + replacement: (_, before, beforeVar, after, afterIf, section) => `${before} 60 if (${section}.id==="${APPLICATION_ID}") return "https://moonlight-mod.github.io/favicon.png"; 61 ${after}` 62 } ··· 67 replace: { 68 match: /(\i)\.type===\i\.\i\.BUILT_IN/, 69 replacement: (orig, section) => `${section}.id!=="${APPLICATION_ID}"&&${orig}` 70 + } 71 + }, 72 + 73 + // tell it this app id is authorized 74 + { 75 + find: /let{customInstallUrl:\i,installParams:\i,integrationTypesConfig:\i}/, 76 + replace: { 77 + match: /\|\|(\i)===\i\.\i\.BUILT_IN/, 78 + replacement: (orig, id) => `${orig}||${id}==="${APPLICATION_ID}"` 79 } 80 } 81 ];
+3
packages/core-extensions/src/common/index.ts
··· 6 }, 7 ErrorBoundary: { 8 dependencies: [{ id: "react" }] 9 } 10 };
··· 6 }, 7 ErrorBoundary: { 8 dependencies: [{ id: "react" }] 9 + }, 10 + icons: { 11 + dependencies: [{ id: "react" }, { id: "discord/components/common/index" }] 12 } 13 };
+1 -1
packages/core-extensions/src/common/manifest.json
··· 4 "apiLevel": 2, 5 "meta": { 6 "name": "Common", 7 - "tagline": "A *lot* of common clientmodding utilities from the Discord client", 8 "authors": ["Cynosphere", "NotNite"], 9 "tags": ["library"] 10 },
··· 4 "apiLevel": 2, 5 "meta": { 6 "name": "Common", 7 + "tagline": "Common client modding utilities for the Discord client", 8 "authors": ["Cynosphere", "NotNite"], 9 "tags": ["library"] 10 },
+1 -2
packages/core-extensions/src/common/webpackModules/ErrorBoundary.tsx
··· 29 const { noop, fallback: FallbackComponent, children, message } = this.props; 30 const { errored, error, componentStack } = this.state; 31 32 - if (noop) return null; 33 if (FallbackComponent) return <FallbackComponent children={children} {...this.state} />; 34 35 if (errored) { 36 - return ( 37 <div className={`moonlight-error-boundary`}> 38 <h3>{message ?? "An error occurred rendering this component:"}</h3> 39 <code className="hljs">{`${error}\n\nComponent stack:\n${componentStack}`}</code>
··· 29 const { noop, fallback: FallbackComponent, children, message } = this.props; 30 const { errored, error, componentStack } = this.state; 31 32 if (FallbackComponent) return <FallbackComponent children={children} {...this.state} />; 33 34 if (errored) { 35 + return noop ? null : ( 36 <div className={`moonlight-error-boundary`}> 37 <h3>{message ?? "An error occurred rendering this component:"}</h3> 38 <code className="hljs">{`${error}\n\nComponent stack:\n${componentStack}`}</code>
+31
packages/core-extensions/src/common/webpackModules/icons.ts
···
··· 1 + import { Icons, IconSize } from "@moonlight-mod/types/coreExtensions/common"; 2 + import { tokens } from "@moonlight-mod/wp/discord/components/common/index"; 3 + 4 + // This is defined in a Webpack module but we copy it here to be less breakage-prone 5 + const sizes: Partial<Record<IconSize, number>> = { 6 + xxs: 12, 7 + xs: 16, 8 + sm: 18, 9 + md: 24, 10 + lg: 32, 11 + refresh_sm: 20 12 + }; 13 + 14 + export const icons: Icons = { 15 + parseProps(props) { 16 + // NOTE: var() fallback is non-standard behavior, just for safety reasons 17 + const color = props?.color ?? tokens?.colors?.["INTERACTIVE_NORMAL"] ?? "var(--interactive-normal)"; 18 + 19 + const size = sizes[props?.size ?? "md"]; 20 + 21 + return { 22 + // note: this default size is also non-standard behavior, just for safety 23 + width: size ?? props?.width ?? sizes.md!, 24 + height: size ?? props?.width ?? sizes.md!, 25 + 26 + fill: typeof color === "string" ? color : color.css, 27 + className: props?.colorClass ?? "" 28 + }; 29 + } 30 + }; 31 + export default icons;
+8 -7
packages/core-extensions/src/componentEditor/index.ts
··· 15 replacement: 'children:require("componentEditor_dmList").default._patchItems([' 16 }, 17 { 18 - match: /(?<=onMouseDown:\i}\))]/, 19 replacement: "],arguments[0])" 20 } 21 ], ··· 27 find: ".lostPermission", 28 replace: [ 29 { 30 - match: /(?<=\(0,\i\.jsxs\)\(\i\.Fragment,{)children:(\[\i\(\),.+?\i\(\)])/, 31 replacement: (_, decorators) => 32 `children:require("componentEditor_memberList").default._patchDecorators(${decorators},arguments[0])` 33 }, ··· 44 find: '},"new-member")),', 45 replace: [ 46 { 47 - match: /(?<=\.BADGES]=)(\i);/, 48 - replacement: (_, badges) => 49 - `require("componentEditor_messages").default._patchUsernameBadges(${badges},arguments[0]);` 50 }, 51 { 52 match: /(?<=className:\i,)badges:(\i)/, ··· 54 `badges:require("componentEditor_messages").default._patchBadges(${badges},arguments[0])` 55 }, 56 { 57 - match: /(?<=username:\(0,\i\.jsxs\)\(\i\.Fragment,{)children:(\[.+?,\i])/, 58 replacement: (_, elements) => 59 - `children:require("componentEditor_messages").default._patchUsername(${elements},arguments[0])` 60 } 61 ] 62 },
··· 15 replacement: 'children:require("componentEditor_dmList").default._patchItems([' 16 }, 17 { 18 + match: /(?<=(onMouseDown|nameplate):\i}\))]/, 19 replacement: "],arguments[0])" 20 } 21 ], ··· 27 find: ".lostPermission", 28 replace: [ 29 { 30 + match: 31 + /(?<=\(0,\i\.jsxs\)\(\i\.Fragment,{)children:(\[\(0,\i\.jsx\)\(\i,{user:\i}\),.+?onClickPremiumGuildIcon:\i}\)])/, 32 replacement: (_, decorators) => 33 `children:require("componentEditor_memberList").default._patchDecorators(${decorators},arguments[0])` 34 }, ··· 45 find: '},"new-member")),', 46 replace: [ 47 { 48 + match: /(?<=\.BADGES](=|:))(\i)(;|})/, 49 + replacement: (_, leading, badges, trailing) => 50 + `require("componentEditor_messages").default._patchUsernameBadges(${badges},arguments[0])${trailing}` 51 }, 52 { 53 match: /(?<=className:\i,)badges:(\i)/, ··· 55 `badges:require("componentEditor_messages").default._patchBadges(${badges},arguments[0])` 56 }, 57 { 58 + match: /(?<=username:\(0,\i\.jsxs\)\(\i\.Fragment,{)children:(\[.+?])}\),usernameSpanId:/, 59 replacement: (_, elements) => 60 + `children:require("componentEditor_messages").default._patchUsername(${elements},arguments[0])}),usernameSpanId:` 61 } 62 ] 63 },
+21 -4
packages/core-extensions/src/experiments/index.ts
··· 20 { 21 find: ".HEADER_BAR)", 22 replace: { 23 - match: /&&\((.)\?\(0,/, 24 replacement: (_, isStaff) => 25 `&&(((moonlight.getConfigOption("experiments","devtools")??false)?true:${isStaff})?(0,` 26 } 27 }, 28 29 // Enable further staff-locked options 30 { 31 find: "shouldShowLurkerModeUpsellPopout:", 32 replace: { 33 - match: /\.useReducedMotion,isStaff:(.),/, 34 - replacement: (_, isStaff) => 35 - `.useReducedMotion,isStaff:(moonlight.getConfigOption("experiments","staffSettings")??false)?true:${isStaff},` 36 } 37 } 38 ];
··· 20 { 21 find: ".HEADER_BAR)", 22 replace: { 23 + match: /&&\((\i)\?\(0,/, 24 replacement: (_, isStaff) => 25 `&&(((moonlight.getConfigOption("experiments","devtools")??false)?true:${isStaff})?(0,` 26 } 27 }, 28 + // staff help menu - visual refresh 29 + { 30 + find: '("AppTitleBar")', 31 + replace: { 32 + match: /{hasBugReporterAccess:(\i)}=\i\.\i\.useExperiment\({location:"HeaderBar"},{autoTrackExposure:!1}\);/, 33 + replacement: (orig, isStaff) => 34 + `${orig}if(moonlight.getConfigOption("experiments","devtools")??false)${isStaff}=true;` 35 + } 36 + }, 37 + { 38 + find: 'navId:"staff-help-popout",', 39 + replace: { 40 + match: /isDiscordDeveloper:(\i)}\),/, 41 + replacement: (_, isStaff) => 42 + `isDiscordDeveloper:(moonlight.getConfigOption("experiments","devtools")??false)||${isStaff}}),` 43 + } 44 + }, 45 46 // Enable further staff-locked options 47 { 48 find: "shouldShowLurkerModeUpsellPopout:", 49 replace: { 50 + match: /\.useReducedMotion,isStaff:(\i)(,|})/, 51 + replacement: (_, isStaff, trail) => 52 + `.useReducedMotion,isStaff:(moonlight.getConfigOption("experiments","staffSettings")??false)?true:${isStaff}${trail}` 53 } 54 } 55 ];
+9 -3
packages/core-extensions/src/moonbase/index.tsx
··· 8 { 9 // CvQlAA mapped to ERRORS_ACTION_TO_TAKE 10 // FIXME: Better patch find? 11 - match: /,(\(0,(.)\.jsx\))\("p",{children:.\.intl\.string\(.\..\.CvQlAA\)}\)/, 12 replacement: (_, createElement, ReactJSX) => 13 `,${createElement}(require("moonbase_crashScreen")?.UpdateText??${ReactJSX}.Fragment,{state:this.state,setState:this.setState.bind(this)})` 14 }, 15 16 // wrap actions field to display error details 17 { 18 - match: /(?<=return(\(0,(.)\.jsx\))\(.+?,)action:(.),className:/, 19 replacement: (_, createElement, ReactJSX, action) => 20 `action:require("moonbase_crashScreen")?.wrapAction?${createElement}(require("moonbase_crashScreen").wrapAction,{action:${action},state:this.state}):${action},className:` 21 }, ··· 23 // add update button 24 // +hivLS -> ERRORS_RELOAD 25 { 26 - match: /(?<=\["\+hivLS"\]\)}\),(\(0,(.)\.jsx\))\(.,{}\))/, 27 replacement: (_, createElement, ReactJSX) => 28 `,${createElement}(require("moonbase_crashScreen")?.UpdateButton??${ReactJSX}.Fragment,{state:this.state,setState:this.setState.bind(this)})` 29 } ··· 42 { id: "react" }, 43 { id: "discord/components/common/index" }, 44 { ext: "moonbase", id: "stores" }, 45 { id: "discord/modules/guild_settings/web/AppCard.css" }, 46 { ext: "contextMenu", id: "contextMenu" }, 47 { id: "discord/modules/modals/Modals" }, ··· 49 '"Missing channel in Channel.openChannelContextMenu"', 50 ".forumOrHome]:" 51 ] 52 }, 53 54 settings: { ··· 67 dependencies: [ 68 { id: "react" }, 69 { ext: "moonbase", id: "stores" }, 70 { ext: "notices", id: "notices" }, 71 { 72 ext: "spacepack",
··· 8 { 9 // CvQlAA mapped to ERRORS_ACTION_TO_TAKE 10 // FIXME: Better patch find? 11 + match: /,(\(0,(\i)\.jsx\))\("p",{children:\i\.\i\.string\(\i\.\i\.CvQlAA\)}\)/, 12 replacement: (_, createElement, ReactJSX) => 13 `,${createElement}(require("moonbase_crashScreen")?.UpdateText??${ReactJSX}.Fragment,{state:this.state,setState:this.setState.bind(this)})` 14 }, 15 16 // wrap actions field to display error details 17 { 18 + match: /(?<=return(\(0,(\i)\.jsx\))\(.+?,)action:(\i),className:/, 19 replacement: (_, createElement, ReactJSX, action) => 20 `action:require("moonbase_crashScreen")?.wrapAction?${createElement}(require("moonbase_crashScreen").wrapAction,{action:${action},state:this.state}):${action},className:` 21 }, ··· 23 // add update button 24 // +hivLS -> ERRORS_RELOAD 25 { 26 + match: /(?<=\["\+hivLS"\]\)}\),(\(0,(\i)\.jsx\))\(\i,{}\))/, 27 replacement: (_, createElement, ReactJSX) => 28 `,${createElement}(require("moonbase_crashScreen")?.UpdateButton??${ReactJSX}.Fragment,{state:this.state,setState:this.setState.bind(this)})` 29 } ··· 42 { id: "react" }, 43 { id: "discord/components/common/index" }, 44 { ext: "moonbase", id: "stores" }, 45 + { ext: "moonbase", id: "ThemeDarkIcon" }, 46 { id: "discord/modules/guild_settings/web/AppCard.css" }, 47 { ext: "contextMenu", id: "contextMenu" }, 48 { id: "discord/modules/modals/Modals" }, ··· 50 '"Missing channel in Channel.openChannelContextMenu"', 51 ".forumOrHome]:" 52 ] 53 + }, 54 + 55 + ThemeDarkIcon: { 56 + dependencies: [{ ext: "common", id: "icons" }, { id: "react" }] 57 }, 58 59 settings: { ··· 72 dependencies: [ 73 { id: "react" }, 74 { ext: "moonbase", id: "stores" }, 75 + { ext: "moonbase", id: "ThemeDarkIcon" }, 76 { ext: "notices", id: "notices" }, 77 { 78 ext: "spacepack",
+12 -21
packages/core-extensions/src/moonbase/native.ts
··· 15 16 export const userAgent = `moonlight/${moonlightGlobal.version} (https://github.com/moonlight-mod/moonlight)`; 17 18 async function getStableRelease(): Promise<{ 19 name: string; 20 assets: { ··· 24 }> { 25 const req = await fetch(githubApiUrl, { 26 cache: "no-store", 27 - headers: { 28 - "User-Agent": userAgent 29 - } 30 }); 31 return await req.json(); 32 } ··· 43 } else if (moonlightGlobal.branch === MoonlightBranch.NIGHTLY) { 44 const req = await fetch(nightlyRefUrl, { 45 cache: "no-store", 46 - headers: { 47 - "User-Agent": userAgent 48 - } 49 }); 50 const ref = (await req.text()).split("\n")[0]; 51 return ref !== moonlightGlobal.version ? ref : null; ··· 71 logger.debug(`Downloading ${asset.browser_download_url}`); 72 const req = await fetch(asset.browser_download_url, { 73 cache: "no-store", 74 - headers: { 75 - "User-Agent": userAgent 76 - } 77 }); 78 79 return [await req.arrayBuffer(), json.name]; ··· 83 logger.debug(`Downloading ${nightlyZipUrl}`); 84 const zipReq = await fetch(nightlyZipUrl, { 85 cache: "no-store", 86 - headers: { 87 - "User-Agent": userAgent 88 - } 89 }); 90 91 const refReq = await fetch(nightlyRefUrl, { 92 cache: "no-store", 93 - headers: { 94 - "User-Agent": userAgent 95 - } 96 }); 97 const ref = (await refReq.text()).split("\n")[0]; 98 ··· 139 try { 140 const req = await fetch(repo, { 141 cache: "no-store", 142 - headers: { 143 - "User-Agent": userAgent 144 - } 145 }); 146 const json = await req.json(); 147 ret[repo] = json; ··· 156 async installExtension(manifest, url, repo) { 157 const req = await fetch(url, { 158 cache: "no-store", 159 - headers: { 160 - "User-Agent": userAgent 161 - } 162 }); 163 164 const dir = moonlightGlobal.getExtensionDir(manifest.id);
··· 15 16 export const userAgent = `moonlight/${moonlightGlobal.version} (https://github.com/moonlight-mod/moonlight)`; 17 18 + // User-Agent header causes trouble on Firefox 19 + const isBrowser = globalThis.moonlightNode != null && globalThis.moonlightNode.isBrowser; 20 + const sharedHeaders: Record<string, string> = {}; 21 + if (!isBrowser) sharedHeaders["User-Agent"] = userAgent; 22 + 23 async function getStableRelease(): Promise<{ 24 name: string; 25 assets: { ··· 29 }> { 30 const req = await fetch(githubApiUrl, { 31 cache: "no-store", 32 + headers: sharedHeaders 33 }); 34 return await req.json(); 35 } ··· 46 } else if (moonlightGlobal.branch === MoonlightBranch.NIGHTLY) { 47 const req = await fetch(nightlyRefUrl, { 48 cache: "no-store", 49 + headers: sharedHeaders 50 }); 51 const ref = (await req.text()).split("\n")[0]; 52 return ref !== moonlightGlobal.version ? ref : null; ··· 72 logger.debug(`Downloading ${asset.browser_download_url}`); 73 const req = await fetch(asset.browser_download_url, { 74 cache: "no-store", 75 + headers: sharedHeaders 76 }); 77 78 return [await req.arrayBuffer(), json.name]; ··· 82 logger.debug(`Downloading ${nightlyZipUrl}`); 83 const zipReq = await fetch(nightlyZipUrl, { 84 cache: "no-store", 85 + headers: sharedHeaders 86 }); 87 88 const refReq = await fetch(nightlyRefUrl, { 89 cache: "no-store", 90 + headers: sharedHeaders 91 }); 92 const ref = (await refReq.text()).split("\n")[0]; 93 ··· 134 try { 135 const req = await fetch(repo, { 136 cache: "no-store", 137 + headers: sharedHeaders 138 }); 139 const json = await req.json(); 140 ret[repo] = json; ··· 149 async installExtension(manifest, url, repo) { 150 const req = await fetch(url, { 151 cache: "no-store", 152 + headers: sharedHeaders 153 }); 154 155 const dir = moonlightGlobal.getExtensionDir(manifest.id);
+6 -2
packages/core-extensions/src/moonbase/style.css
··· 251 padding-top: 0.5rem; 252 } 253 254 .moonbase-dev-avatar { 255 width: 2rem; 256 border-radius: 50%; ··· 260 gap: 0.5rem; 261 } 262 263 - .moonbase-about-text { 264 - padding-top: 0.5rem; 265 }
··· 251 padding-top: 0.5rem; 252 } 253 254 + .moonbase-dev { 255 + height: 4rem; 256 + } 257 + 258 .moonbase-dev-avatar { 259 width: 2rem; 260 border-radius: 50%; ··· 264 gap: 0.5rem; 265 } 266 267 + .moonbase-about-page { 268 + gap: 1rem; 269 }
+36
packages/core-extensions/src/moonbase/webpackModules/ThemeDarkIcon.tsx
···
··· 1 + // RIP to ThemeDarkIcon ????-2025 2 + // <Cynthia> Failed to remap "ThemeDarkIcon" in "discord/components/common/index" 3 + // <NotNite> bro are you fucking kidding me 4 + // <NotNite> that's literally the icon we use for the update banner 5 + 6 + import React from "@moonlight-mod/wp/react"; 7 + import icons from "@moonlight-mod/wp/common_icons"; 8 + import type { IconProps } from "@moonlight-mod/types/coreExtensions/common"; 9 + 10 + export default function ThemeDarkIcon(props?: IconProps) { 11 + const parsed = icons.parseProps(props); 12 + 13 + return ( 14 + <svg 15 + aria-hidden="true" 16 + role="img" 17 + xmlns="http://www.w3.org/2000/svg" 18 + width={parsed.width} 19 + height={parsed.height} 20 + fill="none" 21 + viewBox="0 0 24 24" 22 + > 23 + <path 24 + fill={parsed.fill} 25 + className={parsed.className} 26 + d="M20.52 18.96c.32-.4-.01-.96-.52-.96A11 11 0 0 1 9.77 2.94c.31-.78-.3-1.68-1.1-1.43a11 11 0 1 0 11.85 17.45Z" 27 + /> 28 + 29 + <path 30 + fill={parsed.fill} 31 + className={parsed.className} 32 + d="m17.73 9.27-.76-2.02a.5.5 0 0 0-.94 0l-.76 2.02-2.02.76a.5.5 0 0 0 0 .94l2.02.76.76 2.02a.5.5 0 0 0 .94 0l.76-2.02 2.02-.76a.5.5 0 0 0 0-.94l-2.02-.76ZM19.73 2.62l.45 1.2 1.2.45c.21.08.21.38 0 .46l-1.2.45-.45 1.2a.25.25 0 0 1-.46 0l-.45-1.2-1.2-.45a.25.25 0 0 1 0-.46l1.2-.45.45-1.2a.25.25 0 0 1 .46 0Z" 33 + /> 34 + </svg> 35 + ); 36 + }
+21 -5
packages/core-extensions/src/moonbase/webpackModules/crashScreen.tsx
··· 6 import { ConfigExtension, DetectedExtension } from "@moonlight-mod/types"; 7 import DiscoveryClasses from "@moonlight-mod/wp/discord/modules/discovery/web/Discovery.css"; 8 9 - const MODULE_REGEX = /Webpack-Module-(\d+)/g; 10 11 const logger = moonlight.getLogger("moonbase/crashScreen"); 12 ··· 84 } 85 86 function ExtensionDisableCard({ ext }: { ext: DetectedExtension }) { 87 - function disableWithDependents() { 88 const disable = new Set<string>(); 89 disable.add(ext.id); 90 for (const [id, dependencies] of moonlightNode.processedExtensions.dependencyGraph) { ··· 105 msg += "?"; 106 107 if (confirm(msg)) { 108 - moonlightNode.writeConfig(config); 109 window.location.reload(); 110 } 111 } ··· 139 const causes = React.useMemo(() => { 140 const causes = new Set<string>(); 141 if (state.error.stack) { 142 - for (const [, id] of state.error.stack.matchAll(MODULE_REGEX)) 143 for (const ext of moonlight.patched.get(id) ?? []) causes.add(ext); 144 } 145 - for (const [, id] of state.info.componentStack.matchAll(MODULE_REGEX)) 146 for (const ext of moonlight.patched.get(id) ?? []) causes.add(ext); 147 return [...causes]; 148 }, []); 149
··· 6 import { ConfigExtension, DetectedExtension } from "@moonlight-mod/types"; 7 import DiscoveryClasses from "@moonlight-mod/wp/discord/modules/discovery/web/Discovery.css"; 8 9 + const MODULE_REGEX = /Webpack-Module\/(\d+)\/(\d+)/g; 10 11 const logger = moonlight.getLogger("moonbase/crashScreen"); 12 ··· 84 } 85 86 function ExtensionDisableCard({ ext }: { ext: DetectedExtension }) { 87 + async function disableWithDependents() { 88 const disable = new Set<string>(); 89 disable.add(ext.id); 90 for (const [id, dependencies] of moonlightNode.processedExtensions.dependencyGraph) { ··· 105 msg += "?"; 106 107 if (confirm(msg)) { 108 + await moonlightNode.writeConfig(config); 109 window.location.reload(); 110 } 111 } ··· 139 const causes = React.useMemo(() => { 140 const causes = new Set<string>(); 141 if (state.error.stack) { 142 + for (const [, , id] of state.error.stack.matchAll(MODULE_REGEX)) 143 for (const ext of moonlight.patched.get(id) ?? []) causes.add(ext); 144 } 145 + for (const [, , id] of state.info.componentStack.matchAll(MODULE_REGEX)) 146 for (const ext of moonlight.patched.get(id) ?? []) causes.add(ext); 147 + 148 + for (const [path, id] of Object.entries(moonlight.moonmap.modules)) { 149 + const MAPPING_REGEX = new RegExp( 150 + // @ts-expect-error Only Firefox has RegExp.escape 151 + `(${RegExp.escape ? RegExp.escape(path) : path.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")})`, 152 + "g" 153 + ); 154 + 155 + if (state.error.stack) { 156 + for (const match of state.error.stack.matchAll(MAPPING_REGEX)) 157 + if (match) for (const ext of moonlight.patched.get(id) ?? []) causes.add(ext); 158 + } 159 + for (const match of state.info.componentStack.matchAll(MAPPING_REGEX)) 160 + if (match) for (const ext of moonlight.patched.get(id) ?? []) causes.add(ext); 161 + } 162 + 163 return [...causes]; 164 }, []); 165
+2 -2
packages/core-extensions/src/moonbase/webpackModules/settings.tsx
··· 19 onReset={() => { 20 MoonbaseSettingsStore.reset(); 21 }} 22 - onSave={() => { 23 - MoonbaseSettingsStore.writeConfig(); 24 }} 25 /> 26 );
··· 19 onReset={() => { 20 MoonbaseSettingsStore.reset(); 21 }} 22 + onSave={async () => { 23 + await MoonbaseSettingsStore.writeConfig(); 24 }} 25 /> 26 );
+30 -10
packages/core-extensions/src/moonbase/webpackModules/stores.ts
··· 13 import { mainRepo } from "@moonlight-mod/types/constants"; 14 import { checkExtensionCompat, ExtensionCompat } from "@moonlight-mod/core/extension/loader"; 15 import { CustomComponent } from "@moonlight-mod/types/coreExtensions/moonbase"; 16 import { getConfigOption, setConfigOption } from "@moonlight-mod/core/util/config"; 17 import diff from "microdiff"; 18 ··· 78 }; 79 } 80 81 this.checkUpdates(); 82 } 83 84 async checkUpdates() { ··· 239 let val = this.config.extensions[ext.id]; 240 241 if (val == null) { 242 - this.config.extensions[ext.id] = { enabled }; 243 this.modified = this.isModified(); 244 this.emitChange(); 245 return; ··· 499 return returnedAdvice; 500 } 501 502 - writeConfig() { 503 - this.submitting = true; 504 - this.restartAdvice = this.#computeRestartAdvice(); 505 - const modifiedRepos = diff(this.savedConfig.repositories, this.config.repositories); 506 507 - moonlightNode.writeConfig(this.config); 508 - this.savedConfig = this.clone(this.config); 509 510 - this.submitting = false; 511 this.modified = false; 512 - this.emitChange(); 513 514 - if (modifiedRepos.length !== 0) this.checkUpdates(); 515 } 516 517 reset() {
··· 13 import { mainRepo } from "@moonlight-mod/types/constants"; 14 import { checkExtensionCompat, ExtensionCompat } from "@moonlight-mod/core/extension/loader"; 15 import { CustomComponent } from "@moonlight-mod/types/coreExtensions/moonbase"; 16 + import { NodeEventType } from "@moonlight-mod/types/core/event"; 17 import { getConfigOption, setConfigOption } from "@moonlight-mod/core/util/config"; 18 import diff from "microdiff"; 19 ··· 79 }; 80 } 81 82 + // This is async but we're calling it without 83 this.checkUpdates(); 84 + 85 + // Update our state if another extension edited the config programatically 86 + moonlightNode.events.addEventListener(NodeEventType.ConfigSaved, (config) => { 87 + if (!this.submitting) { 88 + this.config = this.clone(config); 89 + // NOTE: This is also async but we're calling it without 90 + this.processConfigChanged(); 91 + } 92 + }); 93 } 94 95 async checkUpdates() { ··· 250 let val = this.config.extensions[ext.id]; 251 252 if (val == null) { 253 + this.config.extensions[ext.id] = enabled; 254 this.modified = this.isModified(); 255 this.emitChange(); 256 return; ··· 510 return returnedAdvice; 511 } 512 513 + async writeConfig() { 514 + try { 515 + this.submitting = true; 516 + this.emitChange(); 517 518 + await moonlightNode.writeConfig(this.config); 519 + await this.processConfigChanged(); 520 + } finally { 521 + this.submitting = false; 522 + this.emitChange(); 523 + } 524 + } 525 526 + private async processConfigChanged() { 527 + this.savedConfig = this.clone(this.config); 528 + this.restartAdvice = this.#computeRestartAdvice(); 529 this.modified = false; 530 531 + const modifiedRepos = diff(this.savedConfig.repositories, this.config.repositories); 532 + if (modifiedRepos.length !== 0) await this.checkUpdates(); 533 + 534 + this.emitChange(); 535 } 536 537 reset() {
+23 -41
packages/core-extensions/src/moonbase/webpackModules/ui/about.tsx
··· 1 import { 2 - Card, 3 Text, 4 useThemeContext, 5 Button, ··· 10 import Flex from "@moonlight-mod/wp/discord/uikit/Flex"; 11 import React from "@moonlight-mod/wp/react"; 12 import MarkupUtils from "@moonlight-mod/wp/discord/modules/markup/MarkupUtils"; 13 - import AppCardClasses from "@moonlight-mod/wp/discord/modules/guild_settings/web/AppCard.css"; 14 import spacepack from "@moonlight-mod/wp/spacepack_spacepack"; 15 16 const wordmark = "https://raw.githubusercontent.com/moonlight-mod/moonlight/refs/heads/main/img/wordmark.png"; ··· 27 28 function Dev({ name, picture, link }: { name: string; picture: string; link: string }) { 29 return ( 30 - <Card editable={true} className={AppCardClasses.card}> 31 - <div className={AppCardClasses.cardHeader + " moonbase-dev"}> 32 - <Flex direction={Flex.Direction.HORIZONTAL} align={Flex.Align.CENTER}> 33 - <img src={picture} alt={name} className="moonbase-dev-avatar" /> 34 35 - <Flex direction={Flex.Direction.VERTICAL} align={Flex.Align.CENTER}> 36 - <a href={link} rel="noreferrer noopener" target="_blank" tabIndex={-1}> 37 - <Text variant="text-md/semibold">{name}</Text> 38 - </a> 39 - </Flex> 40 - </Flex> 41 - </div> 42 - </Card> 43 ); 44 } 45 ··· 82 } 83 84 export default function AboutPage() { 85 - const darkTheme = useThemeContext()?.theme === "dark"; 86 87 return ( 88 - <div> 89 - <Flex direction={Flex.Direction.VERTICAL} align={Flex.Align.CENTER}> 90 - <img src={darkTheme ? wordmarkLight : wordmark} alt="moonlight wordmark" className="moonbase-wordmark" /> 91 - <Text variant="heading-lg/medium">created by:</Text> 92 - <div className="moonbase-devs"> 93 - <Dev name="Cynosphere" picture="https://github.com/Cynosphere.png" link="https://github.com/Cynosphere" /> 94 - <Dev name="NotNite" picture="https://github.com/NotNite.png" link="https://github.com/NotNite" /> 95 - <Dev name="adryd" picture="https://github.com/adryd325.png" link="https://github.com/adryd325" /> 96 - <Dev 97 - name="redstonekasi" 98 - picture="https://github.com/redstonekasi.png" 99 - link="https://github.com/redstonekasi" 100 - /> 101 - </div> 102 103 - <Flex direction={Flex.Direction.HORIZONTAL} align={Flex.Align.CENTER} className="moonbase-gap"> 104 - <IconButton text="View source" icon={AngleBracketsIcon} link="https://github.com/moonlight-mod/moonlight" /> 105 - <IconButton text="Open the docs" icon={BookCheckIcon} link="https://moonlight-mod.github.io/" /> 106 - <IconButton 107 - text="Join the server" 108 - icon={ClydeIcon} 109 - link="https://discord.gg/FdZBTFCP6F" 110 - openInClient={true} 111 - /> 112 - </Flex> 113 </Flex> 114 115 - <Flex direction={Flex.Direction.VERTICAL} align={Flex.Align.START} className="moonbase-about-text"> 116 <Text variant="text-sm/normal"> 117 {parse(`moonlight \`${window.moonlight.version}\` on \`${window.moonlight.branch}\``)} 118 </Text> ··· 123 )} 124 </Text> 125 </Flex> 126 - </div> 127 ); 128 }
··· 1 import { 2 Text, 3 useThemeContext, 4 Button, ··· 9 import Flex from "@moonlight-mod/wp/discord/uikit/Flex"; 10 import React from "@moonlight-mod/wp/react"; 11 import MarkupUtils from "@moonlight-mod/wp/discord/modules/markup/MarkupUtils"; 12 import spacepack from "@moonlight-mod/wp/spacepack_spacepack"; 13 14 const wordmark = "https://raw.githubusercontent.com/moonlight-mod/moonlight/refs/heads/main/img/wordmark.png"; ··· 25 26 function Dev({ name, picture, link }: { name: string; picture: string; link: string }) { 27 return ( 28 + <Button onClick={() => window.open(link)} color={Button.Colors.PRIMARY} className="moonbase-dev"> 29 + <Flex direction={Flex.Direction.HORIZONTAL} align={Flex.Align.CENTER} className="moonbase-gap"> 30 + <img src={picture} alt={name} className="moonbase-dev-avatar" /> 31 32 + <Text variant="text-md/semibold">{name}</Text> 33 + </Flex> 34 + </Button> 35 ); 36 } 37 ··· 74 } 75 76 export default function AboutPage() { 77 + const darkTheme = useThemeContext()?.theme !== "light"; 78 79 return ( 80 + <Flex direction={Flex.Direction.VERTICAL} align={Flex.Align.CENTER} className="moonbase-about-page"> 81 + <img src={darkTheme ? wordmarkLight : wordmark} alt="moonlight wordmark" className="moonbase-wordmark" /> 82 83 + <Text variant="heading-lg/medium">created by:</Text> 84 + <div className="moonbase-devs"> 85 + <Dev name="Cynosphere" picture="https://github.com/Cynosphere.png" link="https://github.com/Cynosphere" /> 86 + <Dev name="NotNite" picture="https://github.com/NotNite.png" link="https://github.com/NotNite" /> 87 + <Dev name="adryd" picture="https://github.com/adryd325.png" link="https://github.com/adryd325" /> 88 + <Dev name="redstonekasi" picture="https://github.com/redstonekasi.png" link="https://github.com/redstonekasi" /> 89 + </div> 90 + 91 + <Flex direction={Flex.Direction.HORIZONTAL} align={Flex.Align.CENTER} className="moonbase-gap"> 92 + <IconButton text="View source" icon={AngleBracketsIcon} link="https://github.com/moonlight-mod/moonlight" /> 93 + <IconButton text="Open the docs" icon={BookCheckIcon} link="https://moonlight-mod.github.io/" /> 94 + <IconButton text="Join the server" icon={ClydeIcon} link="https://discord.gg/FdZBTFCP6F" openInClient={true} /> 95 </Flex> 96 97 + <Flex direction={Flex.Direction.VERTICAL} align={Flex.Align.START}> 98 <Text variant="text-sm/normal"> 99 {parse(`moonlight \`${window.moonlight.version}\` on \`${window.moonlight.branch}\``)} 100 </Text> ··· 105 )} 106 </Text> 107 </Flex> 108 + </Flex> 109 ); 110 }
+6 -1
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/card.tsx
··· 28 import MarkupClasses from "@moonlight-mod/wp/discord/modules/messages/web/Markup.css"; 29 import BuildOverrideClasses from "@moonlight-mod/wp/discord/modules/build_overrides/web/BuildOverride.css"; 30 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 31 import ExtensionInfo from "./info"; 32 import Settings from "./settings"; 33 import { doGenericExtensionPopup, doMissingExtensionPopup } from "./popup"; ··· 322 })} 323 </Text> 324 )} 325 - {tab === ExtensionPage.Settings && <Settings ext={ext} />} 326 </Flex> 327 </div> 328 </Card>
··· 28 import MarkupClasses from "@moonlight-mod/wp/discord/modules/messages/web/Markup.css"; 29 import BuildOverrideClasses from "@moonlight-mod/wp/discord/modules/build_overrides/web/BuildOverride.css"; 30 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 31 + import ErrorBoundary from "@moonlight-mod/wp/common_ErrorBoundary"; 32 import ExtensionInfo from "./info"; 33 import Settings from "./settings"; 34 import { doGenericExtensionPopup, doMissingExtensionPopup } from "./popup"; ··· 323 })} 324 </Text> 325 )} 326 + {tab === ExtensionPage.Settings && ( 327 + <ErrorBoundary> 328 + <Settings ext={ext} /> 329 + </ErrorBoundary> 330 + )} 331 </Flex> 332 </div> 333 </Card>
+2 -2
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/filterBar.tsx
··· 234 {...props} 235 size={Button.Sizes.MIN} 236 color={Button.Colors.CUSTOM} 237 - className={`${ForumsClasses.sortDropdown} moonbase-retry-button ${checkingUpdates ? "moonbase-speen" : ""}`} 238 innerClassName={ForumsClasses.sortDropdownInner} 239 onClick={() => { 240 (async () => { ··· 249 })(); 250 }} 251 > 252 - <RetryIcon size={"custom"} width={16} /> 253 </Button> 254 )} 255 </Tooltip>
··· 234 {...props} 235 size={Button.Sizes.MIN} 236 color={Button.Colors.CUSTOM} 237 + className={`${ForumsClasses.sortDropdown} moonbase-retry-button`} 238 innerClassName={ForumsClasses.sortDropdownInner} 239 onClick={() => { 240 (async () => { ··· 249 })(); 250 }} 251 > 252 + <RetryIcon size={"custom"} width={16} className={checkingUpdates ? "moonbase-speen" : ""} /> 253 </Button> 254 )} 255 </Tooltip>
+7 -2
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/index.tsx
··· 15 import PanelButton from "@moonlight-mod/wp/discord/components/common/PanelButton"; 16 17 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 18 import { ExtensionCompat } from "@moonlight-mod/core/extension/loader"; 19 import HelpMessage from "../HelpMessage"; 20 ··· 144 )} 145 146 {filteredWithUpdates.map((ext) => ( 147 - <ExtensionCard uniqueId={ext.uniqueId} key={ext.uniqueId} selectTag={selectTag} /> 148 ))} 149 {filteredWithUpdates.length > 0 && filteredWithoutUpdates.length > 0 && ( 150 <FormDivider className="moonbase-update-divider" /> 151 )} 152 {filteredWithoutUpdates.map((ext) => ( 153 - <ExtensionCard uniqueId={ext.uniqueId} key={ext.uniqueId} selectTag={selectTag} /> 154 ))} 155 </> 156 );
··· 15 import PanelButton from "@moonlight-mod/wp/discord/components/common/PanelButton"; 16 17 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 18 + import ErrorBoundary from "@moonlight-mod/wp/common_ErrorBoundary"; 19 import { ExtensionCompat } from "@moonlight-mod/core/extension/loader"; 20 import HelpMessage from "../HelpMessage"; 21 ··· 145 )} 146 147 {filteredWithUpdates.map((ext) => ( 148 + <ErrorBoundary> 149 + <ExtensionCard uniqueId={ext.uniqueId} key={ext.uniqueId} selectTag={selectTag} /> 150 + </ErrorBoundary> 151 ))} 152 {filteredWithUpdates.length > 0 && filteredWithoutUpdates.length > 0 && ( 153 <FormDivider className="moonbase-update-divider" /> 154 )} 155 {filteredWithoutUpdates.map((ext) => ( 156 + <ErrorBoundary> 157 + <ExtensionCard uniqueId={ext.uniqueId} key={ext.uniqueId} selectTag={selectTag} /> 158 + </ErrorBoundary> 159 ))} 160 </> 161 );
+4 -1
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/settings.tsx
··· 33 import Flex from "@moonlight-mod/wp/discord/uikit/Flex"; 34 import MarkupUtils from "@moonlight-mod/wp/discord/modules/markup/MarkupUtils"; 35 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 36 37 let GuildSettingsRoleEditClasses: any; 38 spacepack ··· 377 } 378 379 return ( 380 - <Component value={value} setValue={(value) => MoonbaseSettingsStore.setExtensionConfig(ext.id, name, value)} /> 381 ); 382 } 383
··· 33 import Flex from "@moonlight-mod/wp/discord/uikit/Flex"; 34 import MarkupUtils from "@moonlight-mod/wp/discord/modules/markup/MarkupUtils"; 35 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 36 + import ErrorBoundary from "@moonlight-mod/wp/common_ErrorBoundary"; 37 38 let GuildSettingsRoleEditClasses: any; 39 spacepack ··· 378 } 379 380 return ( 381 + <ErrorBoundary> 382 + <Component value={value} setValue={(value) => MoonbaseSettingsStore.setExtensionConfig(ext.id, name, value)} /> 383 + </ErrorBoundary> 384 ); 385 } 386
+1 -1
packages/core-extensions/src/moonbase/webpackModules/ui/update.tsx
··· 7 import MarkupUtils from "@moonlight-mod/wp/discord/modules/markup/MarkupUtils"; 8 import Flex from "@moonlight-mod/wp/discord/uikit/Flex"; 9 import { 10 - ThemeDarkIcon, 11 Button, 12 Text, 13 ModalRoot, ··· 19 openModal 20 } from "@moonlight-mod/wp/discord/components/common/index"; 21 import MarkupClasses from "@moonlight-mod/wp/discord/modules/messages/web/Markup.css"; 22 23 const strings: Record<UpdateState, string> = { 24 [UpdateState.Ready]: "A new version of moonlight is available.",
··· 7 import MarkupUtils from "@moonlight-mod/wp/discord/modules/markup/MarkupUtils"; 8 import Flex from "@moonlight-mod/wp/discord/uikit/Flex"; 9 import { 10 Button, 11 Text, 12 ModalRoot, ··· 18 openModal 19 } from "@moonlight-mod/wp/discord/components/common/index"; 20 import MarkupClasses from "@moonlight-mod/wp/discord/modules/messages/web/Markup.css"; 21 + import ThemeDarkIcon from "@moonlight-mod/wp/moonbase_ThemeDarkIcon"; 22 23 const strings: Record<UpdateState, string> = { 24 [UpdateState.Ready]: "A new version of moonlight is available.",
+1 -1
packages/core-extensions/src/moonbase/webpackModules/updates.tsx
··· 3 import Notices from "@moonlight-mod/wp/notices_notices"; 4 import { MoonlightBranch } from "@moonlight-mod/types"; 5 import React from "@moonlight-mod/wp/react"; 6 - import { ThemeDarkIcon } from "@moonlight-mod/wp/discord/components/common/index"; 7 8 function plural(str: string, num: number) { 9 return `${str}${num > 1 ? "s" : ""}`;
··· 3 import Notices from "@moonlight-mod/wp/notices_notices"; 4 import { MoonlightBranch } from "@moonlight-mod/types"; 5 import React from "@moonlight-mod/wp/react"; 6 + import ThemeDarkIcon from "@moonlight-mod/wp/moonbase_ThemeDarkIcon"; 7 8 function plural(str: string, num: number) { 9 return `${str}${num > 1 ? "s" : ""}`;
+5
packages/core-extensions/src/moonbase/wp.d.ts
··· 5 declare module "@moonlight-mod/wp/moonbase_stores" { 6 export * from "core-extensions/src/moonbase/webpackModules/stores"; 7 }
··· 5 declare module "@moonlight-mod/wp/moonbase_stores" { 6 export * from "core-extensions/src/moonbase/webpackModules/stores"; 7 } 8 + 9 + declare module "@moonlight-mod/wp/moonbase_ThemeDarkIcon" { 10 + import ThemeDarkIcon from "core-extensions/src/moonbase/webpackModules/ThemeDarkIcon"; 11 + export = ThemeDarkIcon; 12 + }
+13 -1
packages/core-extensions/src/nativeFixes/host.ts
··· 29 app.commandLine.appendSwitch("disable-background-timer-throttling"); 30 } 31 32 if (process.platform === "linux") { 33 if (moonlightHost.getConfigOption<boolean>("nativeFixes", "linuxAutoscroll") ?? false) { 34 app.commandLine.appendSwitch("enable-blink-features", "MiddleClickAutoscroll"); ··· 37 if (moonlightHost.getConfigOption<boolean>("nativeFixes", "linuxSpeechDispatcher") ?? true) { 38 app.commandLine.appendSwitch("enable-speech-dispatcher"); 39 } 40 } 41 42 // NOTE: Only tested if this appears on Windows, it should appear on all when 43 // hardware acceleration is disabled 44 const noAccel = app.commandLine.hasSwitch("disable-gpu-compositing"); 45 if ((moonlightHost.getConfigOption<boolean>("nativeFixes", "vaapi") ?? true) && !noAccel) { 46 - if (process.platform === "linux") 47 // These will eventually be renamed https://source.chromium.org/chromium/chromium/src/+/5482210941a94d70406b8da962426e4faca7fce4 48 enabledFeatures.push("VaapiVideoEncoder", "VaapiVideoDecoder", "VaapiVideoDecodeLinuxGL"); 49 } 50 51 app.commandLine.appendSwitch("enable-features", [...new Set(enabledFeatures)].join(","));
··· 29 app.commandLine.appendSwitch("disable-background-timer-throttling"); 30 } 31 32 + if (moonlightHost.getConfigOption<boolean>("nativeFixes", "vulkan") ?? false) { 33 + enabledFeatures.push("Vulkan", "DefaultANGLEVulkan", "VulkanFromANGLE"); 34 + } 35 + 36 if (process.platform === "linux") { 37 if (moonlightHost.getConfigOption<boolean>("nativeFixes", "linuxAutoscroll") ?? false) { 38 app.commandLine.appendSwitch("enable-blink-features", "MiddleClickAutoscroll"); ··· 41 if (moonlightHost.getConfigOption<boolean>("nativeFixes", "linuxSpeechDispatcher") ?? true) { 42 app.commandLine.appendSwitch("enable-speech-dispatcher"); 43 } 44 + 45 + if (moonlightHost.getConfigOption<boolean>("nativeFixes", "linuxHevcSupport") ?? true) { 46 + enabledFeatures.push("PlatformHEVCDecoderSupport"); 47 + } 48 } 49 50 // NOTE: Only tested if this appears on Windows, it should appear on all when 51 // hardware acceleration is disabled 52 const noAccel = app.commandLine.hasSwitch("disable-gpu-compositing"); 53 if ((moonlightHost.getConfigOption<boolean>("nativeFixes", "vaapi") ?? true) && !noAccel) { 54 + if (process.platform === "linux") { 55 // These will eventually be renamed https://source.chromium.org/chromium/chromium/src/+/5482210941a94d70406b8da962426e4faca7fce4 56 enabledFeatures.push("VaapiVideoEncoder", "VaapiVideoDecoder", "VaapiVideoDecodeLinuxGL"); 57 + 58 + if (moonlightHost.getConfigOption<boolean>("nativeFixes", "vaapiIgnoreDriverChecks") ?? false) 59 + enabledFeatures.push("VaapiIgnoreDriverChecks"); 60 + } 61 } 62 63 app.commandLine.appendSwitch("enable-features", [...new Set(enabledFeatures)].join(","));
+21
packages/core-extensions/src/nativeFixes/manifest.json
··· 23 "type": "boolean", 24 "default": true 25 }, 26 "linuxAutoscroll": { 27 "advice": "restart", 28 "displayName": "Enable middle click autoscroll on Linux", ··· 44 "type": "boolean", 45 "default": true 46 }, 47 "linuxUpdater": { 48 "advice": "restart", 49 "displayName": "Linux Updater", 50 "description": "Actually implements updating Discord on Linux. Has no effect on other operating systems", 51 "type": "boolean", 52 "default": false 53 } 54 }, 55 "apiLevel": 2
··· 23 "type": "boolean", 24 "default": true 25 }, 26 + "vulkan": { 27 + "advice": "restart", 28 + "displayName": "Enable Vulkan renderer", 29 + "description": "Uses the Vulkan backend for rendering", 30 + "type": "boolean", 31 + "default": false 32 + }, 33 "linuxAutoscroll": { 34 "advice": "restart", 35 "displayName": "Enable middle click autoscroll on Linux", ··· 51 "type": "boolean", 52 "default": true 53 }, 54 + "vaapiIgnoreDriverChecks": { 55 + "advice": "restart", 56 + "displayName": "Ignore VAAPI driver checks on Linux", 57 + "description": "Forces hardware video acceleration on some graphics drivers at the cost of stability. Has no effect on other operating systems", 58 + "type": "boolean", 59 + "default": false 60 + }, 61 "linuxUpdater": { 62 "advice": "restart", 63 "displayName": "Linux Updater", 64 "description": "Actually implements updating Discord on Linux. Has no effect on other operating systems", 65 "type": "boolean", 66 "default": false 67 + }, 68 + "linuxHevcSupport": { 69 + "advice": "restart", 70 + "displayName": "HEVC support on Linux", 71 + "description": "You might also need to enable Vulkan renderer. Has no effect on other operating systems", 72 + "type": "boolean", 73 + "default": true 74 } 75 }, 76 "apiLevel": 2
+83 -15
packages/core-extensions/src/quietLoggers/index.ts
··· 18 { 19 find: '("GatewaySocket")', 20 replace: { 21 - match: /.\.(info|log)(\(.+?\))(;|,)/g, 22 - replacement: (_, type, body, trail) => `(()=>{})${body}${trail}` 23 } 24 } 25 ]; ··· 30 // Patches to simply remove a logger call 31 const stubPatches = [ 32 // "sh" is not a valid locale. 33 - ["is not a valid locale", /(.)\.error\(""\.concat\((.)," is not a valid locale\."\)\)/g], 34 - ['"[BUILD INFO] Release Channel: "', /new .{1,2}\.Z\(\)\.log\("\[BUILD INFO\] Release Channel: ".+?\)\),/], 35 - ['.APP_NATIVE_CRASH,"Storage"', /console\.log\("AppCrashedFatalReport lastCrash:",.,.\);/], 36 - ['.APP_NATIVE_CRASH,"Storage"', 'console.log("AppCrashedFatalReport: getLastCrash not supported.");'], 37 - ['"[NATIVE INFO] ', /new .{1,2}\.Z\(\)\.log\("\[NATIVE INFO] .+?\)\);/], 38 - ['"Spellchecker"', /.\.info\("Switching to ".+?"\(unavailable\)"\);?/g], 39 - ['throw Error("Messages are still loading.");', /console\.warn\("Unsupported Locale",.\),/], 40 - ["}_dispatchWithDevtools(", /.\.totalTime>.{1,2}&&.\.verbose\(.+?\);/], 41 - ['"NativeDispatchUtils"', /null==.&&.\.warn\("Tried getting Dispatch instance before instantiated"\),/], 42 - ['("DatabaseManager")', /.\.log\("removing database \(user: ".+?\)\),/], 43 [ 44 '"Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch. Action: "', 45 - /.\.has\(.\.type\)&&.\.log\(.+?\.type\)\),/ 46 ], 47 - ['console.warn("Window state not initialized"', /console\.warn\("Window state not initialized",.\),/] 48 ]; 49 50 const simplePatches = [ ··· 56 { 57 find: ".Messages.SELF_XSS_HEADER", 58 replace: { 59 - match: /\(null!=.{1,2}&&"0\.0\.0"===.{1,2}\.remoteApp\.getVersion\(\)\)/, 60 replacement: "(true)" 61 } 62 }, 63 // Highlight.js deprecation warnings 64 { 65 find: "Deprecated as of", ··· 92 replace: { 93 match: patch[0], 94 replacement: patch[1] 95 }, 96 prerequisite: notXssDefensesOnly 97 }))
··· 18 { 19 find: '("GatewaySocket")', 20 replace: { 21 + match: /\i\.(log|info)\(/g, 22 + replacement: "(()=>{})(" 23 + } 24 + }, 25 + { 26 + find: '"_connect called with already existing websocket"', 27 + replace: { 28 + match: /\i\.(log|info|verbose)\(/g, 29 + replacement: "(()=>{})(" 30 } 31 } 32 ]; ··· 37 // Patches to simply remove a logger call 38 const stubPatches = [ 39 // "sh" is not a valid locale. 40 + ["is not a valid locale", /void \i\.error\(""\.concat\(\i," is not a valid locale\."\)\)/g], 41 + ['"[BUILD INFO] Release Channel: "', /new \i\.Z\(\)\.log\("\[BUILD INFO\] Release Channel: ".+?\)\),/], 42 + ['.APP_NATIVE_CRASH,"Storage"', /console\.log\("AppCrashedFatalReport lastCrash:",\i,\i\);/], 43 + ['.APP_NATIVE_CRASH,"Storage"', 'void console.log("AppCrashedFatalReport: getLastCrash not supported.")'], 44 + ['"[NATIVE INFO] ', /new \i\.Z\(\)\.log\("\[NATIVE INFO] .+?\)\);/], 45 + ['"Spellchecker"', /\i\.info\("Switching to ".+?"\(unavailable\)"\);?/g], 46 + ['throw Error("Messages are still loading.");', /console\.warn\("Unsupported Locale",\i\),/], 47 + ["}_dispatchWithDevtools(", /\i\.totalTime>\i&&\i\.verbose\(.+?\);/], 48 + ['"NativeDispatchUtils"', /null==\i&&\i\.warn\("Tried getting Dispatch instance before instantiated"\),/], 49 [ 50 '"Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch. Action: "', 51 + /\i\.has\(\i\.type\)&&\i\.log\(.+?\.type\)\),/ 52 ], 53 + ['console.warn("Window state not initialized"', /console\.warn\("Window state not initialized",\i\),/], 54 + ['.name="MaxListenersExceededWarning",', /(?<=\.length),\i\(\i\)/], 55 + [ 56 + '"The answer for life the universe and everything is:"', 57 + /\i\.info\("The answer for life the universe and everything is:",\i\),/ 58 + ], 59 + [ 60 + '"isLibdiscoreBlockedDomainsEnabled called but libdiscore is not loaded"', 61 + /,\i\.verbose\("isLibdiscoreBlockedDomainsEnabledThisSession: ".concat\(\i\)\)/ 62 + ], 63 + [ 64 + '"Unable to determine render window for element"', 65 + /console\.warn\("Unable to determine render window for element",\i\),/ 66 + ], 67 + [ 68 + '"Unable to determine render window for element"', 69 + /console\.warn\('Unable to find element constructor "'\.concat\(\i,'" in'\),\i\),/ 70 + ], 71 + [ 72 + '"[PostMessageTransport] Protocol error: event data should be an Array!"', 73 + /void console\.warn\("\[PostMessageTransport] Protocol error: event data should be an Array!"\)/ 74 + ], 75 + [ 76 + '("ComponentDispatchUtils")', 77 + /new \i\.Z\("ComponentDispatchUtils"\)\.warn\("ComponentDispatch\.resubscribe: Resubscribe without existing subscription",\i\),/ 78 + ] 79 + ]; 80 + 81 + const stripLoggers = [ 82 + '("OverlayRenderStore")', 83 + '("FetchBlockedDomain")', 84 + '="UserSettingsProtoLastWriteTimes",', 85 + '("MessageActionCreators")', 86 + '("Routing/Utils")', 87 + '("DatabaseManager")', 88 + '("KeyboardLayoutMapUtils")', 89 + '("ChannelMessages")', 90 + '("MessageQueue")', 91 + '("RTCLatencyTestManager")', 92 + '("OverlayStoreV3")', 93 + '("OverlayBridgeStore")', 94 + '("AuthenticationStore")', 95 + '("ConnectionStore")', 96 + '"Dispatched INITIAL_GUILD "', 97 + '"handleIdentify called"', 98 + '("Spotify")' 99 ]; 100 101 const simplePatches = [ ··· 107 { 108 find: ".Messages.SELF_XSS_HEADER", 109 replace: { 110 + match: /\(null!=\i&&"0\.0\.0"===\i\.remoteApp\.getVersion\(\)\)/, 111 replacement: "(true)" 112 } 113 }, 114 + { 115 + find: '("ComponentDispatchUtils")', 116 + replace: { 117 + match: 118 + /new \i\.Z\("ComponentDispatchUtils"\)\.warn\("ComponentDispatch\.subscribe: Attempting to add a duplicate listener",\i\)/, 119 + replacement: "void 0" 120 + }, 121 + prerequisite: notXssDefensesOnly 122 + }, 123 // Highlight.js deprecation warnings 124 { 125 find: "Deprecated as of", ··· 152 replace: { 153 match: patch[0], 154 replacement: patch[1] 155 + }, 156 + prerequisite: notXssDefensesOnly 157 + })), 158 + ...stripLoggers.map((find) => ({ 159 + find, 160 + replace: { 161 + match: /(\i|this\.logger)\.(log|warn|error|info|verbose)\(/g, 162 + replacement: "(()=>{})(" 163 }, 164 prerequisite: notXssDefensesOnly 165 }))
+1 -1
packages/core-extensions/src/settings/index.ts
··· 12 { 13 find: 'navId:"user-settings-cog",', 14 replace: { 15 - match: /children:\[(.)\.map\(.+?\),children:.\((.)\)/, 16 replacement: (orig, sections, section) => 17 `${orig.replace( 18 /Object\.values\(.\..+?\)/,
··· 12 { 13 find: 'navId:"user-settings-cog",', 14 replace: { 15 + match: /children:\[(\i)\.map\(.+?\),.*?children:\i\((\i)\)/, 16 replacement: (orig, sections, section) => 17 `${orig.replace( 18 /Object\.values\(.\..+?\)/,
+4 -2
packages/core-extensions/src/settings/webpackModules/settings.ts
··· 1 import { SettingsSection, Settings as SettingsType } from "@moonlight-mod/types/coreExtensions/settings"; 2 3 export const Settings: SettingsType = { 4 ourSections: [], 5 sectionNames: [], 6 sectionMenuItems: {}, 7 8 - addSection: (section, label, element, color = null, pos, notice) => { 9 const data: SettingsSection = { 10 section, 11 label, 12 color, 13 element, 14 pos: pos ?? -4, 15 - notice: notice 16 }; 17 18 Settings.ourSections.push(data);
··· 1 import { SettingsSection, Settings as SettingsType } from "@moonlight-mod/types/coreExtensions/settings"; 2 + import UserSettingsModalActionCreators from "@moonlight-mod/wp/discord/actions/UserSettingsModalActionCreators"; 3 4 export const Settings: SettingsType = { 5 ourSections: [], 6 sectionNames: [], 7 sectionMenuItems: {}, 8 9 + addSection: (section, label, element, color = null, pos, notice, onClick) => { 10 const data: SettingsSection = { 11 section, 12 label, 13 color, 14 element, 15 pos: pos ?? -4, 16 + notice: notice, 17 + onClick: onClick ?? (() => UserSettingsModalActionCreators.open(section)) 18 }; 19 20 Settings.ourSections.push(data);
+1 -1
packages/core-extensions/src/spacepack/webpackModules/spacepack.ts
··· 37 "module", 38 "exports", 39 "require", 40 - `(${funcStr}).apply(this, arguments)\n` + `//# sourceURL=Webpack-Module-${module}` 41 ) as WebpackModuleFunc; 42 }, 43
··· 37 "module", 38 "exports", 39 "require", 40 + `(${funcStr}).apply(this, arguments)\n` + `//# sourceURL=Webpack-Module/${module.slice(0, 3)}/${module}` 41 ) as WebpackModuleFunc; 42 }, 43
+4 -1
packages/core-extensions/tsconfig.json
··· 1 { 2 - "extends": "../../tsconfig.json" 3 }
··· 1 { 2 + "extends": "../../tsconfig.json", 3 + "compilerOptions": { 4 + "lib": ["ESNext", "DOM", "DOM.Iterable"] 5 + } 6 }
+10 -3
packages/injector/package.json
··· 1 { 2 "name": "@moonlight-mod/injector", 3 "private": true, 4 "dependencies": { 5 - "@moonlight-mod/types": "workspace:*", 6 - "@moonlight-mod/core": "workspace:*" 7 - } 8 }
··· 1 { 2 "name": "@moonlight-mod/injector", 3 "private": true, 4 + "engines": { 5 + "node": ">=22", 6 + "pnpm": ">=10", 7 + "npm": "pnpm", 8 + "yarn": "pnpm" 9 + }, 10 "dependencies": { 11 + "@moonlight-mod/core": "workspace:*", 12 + "@moonlight-mod/types": "workspace:*" 13 + }, 14 + "engineStrict": true 15 }
+8 -1
packages/node-preload/package.json
··· 1 { 2 "name": "@moonlight-mod/node-preload", 3 "private": true, 4 "dependencies": { 5 "@moonlight-mod/core": "workspace:*", 6 "@moonlight-mod/types": "workspace:*" 7 - } 8 }
··· 1 { 2 "name": "@moonlight-mod/node-preload", 3 "private": true, 4 + "engines": { 5 + "node": ">=22", 6 + "pnpm": ">=10", 7 + "npm": "pnpm", 8 + "yarn": "pnpm" 9 + }, 10 "dependencies": { 11 "@moonlight-mod/core": "workspace:*", 12 "@moonlight-mod/types": "workspace:*" 13 + }, 14 + "engineStrict": true 15 }
+4 -1
packages/node-preload/tsconfig.json
··· 1 { 2 - "extends": "../../tsconfig.json" 3 }
··· 1 { 2 + "extends": "../../tsconfig.json", 3 + "compilerOptions": { 4 + "lib": ["DOM", "ESNext", "DOM.Iterable"] 5 + } 6 }
+14 -7
packages/types/package.json
··· 1 { 2 "name": "@moonlight-mod/types", 3 - "version": "1.3.12", 4 - "main": "./src/index.ts", 5 - "types": "./src/index.ts", 6 "exports": { 7 ".": "./src/index.ts", 8 "./import": "./src/import.d.ts", 9 "./*": "./src/*.ts" 10 }, 11 "dependencies": { 12 - "@moonlight-mod/lunast": "^1.0.0", 13 - "@moonlight-mod/mappings": "^1.1.18", 14 - "@moonlight-mod/moonmap": "^1.0.4", 15 "@types/react": "^18.3.10", 16 - "csstype": "^3.1.2", 17 "standalone-electron-types": "^1.0.0" 18 } 19 }
··· 1 { 2 "name": "@moonlight-mod/types", 3 + "version": "1.3.17", 4 "exports": { 5 ".": "./src/index.ts", 6 "./import": "./src/import.d.ts", 7 "./*": "./src/*.ts" 8 }, 9 + "main": "./src/index.ts", 10 + "types": "./src/index.ts", 11 + "engineStrict": false, 12 + "engines": { 13 + "node": ">=22", 14 + "pnpm": ">=10", 15 + "npm": "pnpm", 16 + "yarn": "pnpm" 17 + }, 18 "dependencies": { 19 + "@moonlight-mod/lunast": "^1.0.1", 20 + "@moonlight-mod/mappings": "^1.1.25", 21 + "@moonlight-mod/moonmap": "^1.0.5", 22 "@types/react": "^18.3.10", 23 + "csstype": "^3.1.3", 24 "standalone-electron-types": "^1.0.0" 25 } 26 }
+22
packages/types/src/coreExtensions/common.ts
··· 1 export type ErrorBoundaryProps = React.PropsWithChildren<{ 2 noop?: boolean; 3 fallback?: React.FC<any>; ··· 9 error?: Error; 10 componentStack?: string; 11 };
··· 1 + import type { IconProps, IconSize } from "@moonlight-mod/mappings/discord/components/common/index"; 2 + 3 export type ErrorBoundaryProps = React.PropsWithChildren<{ 4 noop?: boolean; 5 fallback?: React.FC<any>; ··· 11 error?: Error; 12 componentStack?: string; 13 }; 14 + 15 + export type ErrorBoundary = React.ComponentClass<ErrorBoundaryProps, ErrorBoundaryState>; 16 + 17 + export type ParsedIconProps = { 18 + width: number; 19 + height: number; 20 + fill: string; 21 + className: string; 22 + }; 23 + 24 + export interface Icons { 25 + /** 26 + * Parse icon props into their actual width/height. 27 + * @param props The icon props 28 + */ 29 + parseProps(props?: IconProps): ParsedIconProps; 30 + } 31 + 32 + // Re-export so extension developers don't need to depend on mappings 33 + export type { IconProps, IconSize };
+4 -1
packages/types/src/coreExtensions/settings.ts
··· 16 element: React.FunctionComponent; 17 pos: number | ((sections: SettingsSection[]) => number); 18 notice?: NoticeProps; 19 _moonlight_submenu?: () => ReactElement | ReactElement[]; 20 }; 21 ··· 32 * @param color A color to use for the section 33 * @param pos The position in the settings menu to place the section 34 * @param notice A notice to display when in the section 35 */ 36 addSection: ( 37 section: string, ··· 39 element: React.FunctionComponent, 40 color?: string | null, 41 pos?: number | ((sections: SettingsSection[]) => number), 42 - notice?: NoticeProps 43 ) => void; 44 45 /**
··· 16 element: React.FunctionComponent; 17 pos: number | ((sections: SettingsSection[]) => number); 18 notice?: NoticeProps; 19 + onClick?: () => void; 20 _moonlight_submenu?: () => ReactElement | ReactElement[]; 21 }; 22 ··· 33 * @param color A color to use for the section 34 * @param pos The position in the settings menu to place the section 35 * @param notice A notice to display when in the section 36 + * @param onClick A custom action to execute when clicked from the context menu 37 */ 38 addSection: ( 39 section: string, ··· 41 element: React.FunctionComponent, 42 color?: string | null, 43 pos?: number | ((sections: SettingsSection[]) => number), 44 + notice?: NoticeProps, 45 + onClick?: () => void 46 ) => void; 47 48 /**
+4
packages/types/src/discord/require.ts
··· 1 import { AppPanels } from "../coreExtensions/appPanels"; 2 import { Commands } from "../coreExtensions/commands"; 3 import { DMList, MemberList, Messages } from "../coreExtensions/componentEditor"; 4 import { ContextMenu, EvilItemParser } from "../coreExtensions/contextMenu"; 5 import { Markdown } from "../coreExtensions/markdown"; ··· 13 declare function WebpackRequire(id: "appPanels_appPanels"): AppPanels; 14 15 declare function WebpackRequire(id: "commands_commands"): Commands; 16 17 declare function WebpackRequire(id: "componentEditor_dmList"): DMList; 18 declare function WebpackRequire(id: "componentEditor_memberList"): MemberList;
··· 1 import { AppPanels } from "../coreExtensions/appPanels"; 2 import { Commands } from "../coreExtensions/commands"; 3 + import { ErrorBoundary, Icons } from "../coreExtensions/common"; 4 import { DMList, MemberList, Messages } from "../coreExtensions/componentEditor"; 5 import { ContextMenu, EvilItemParser } from "../coreExtensions/contextMenu"; 6 import { Markdown } from "../coreExtensions/markdown"; ··· 14 declare function WebpackRequire(id: "appPanels_appPanels"): AppPanels; 15 16 declare function WebpackRequire(id: "commands_commands"): Commands; 17 + 18 + declare function WebpackRequire(id: "common_ErrorBoundary"): ErrorBoundary; 19 + declare function WebpackRequire(id: "common_icons"): Icons; 20 21 declare function WebpackRequire(id: "componentEditor_dmList"): DMList; 22 declare function WebpackRequire(id: "componentEditor_memberList"): MemberList;
+1
packages/types/src/fs.ts
··· 15 16 join: (...parts: string[]) => string; 17 dirname: (path: string) => string; 18 };
··· 15 16 join: (...parts: string[]) => string; 17 dirname: (path: string) => string; 18 + basename: (path: string) => string; 19 };
+10 -1
packages/types/src/import.d.ts
··· 10 export default commands; 11 } 12 13 - declare module "@moonlight-mod/wp/common_ErrorBoundary"; 14 declare module "@moonlight-mod/wp/common_stores"; 15 16 declare module "@moonlight-mod/wp/componentEditor_dmList" {
··· 10 export default commands; 11 } 12 13 + declare module "@moonlight-mod/wp/common_ErrorBoundary" { 14 + import { CoreExtensions } from "@moonlight-mod/types"; 15 + const ErrorBoundary: CoreExtensions.Common.ErrorBoundary; 16 + export = ErrorBoundary; 17 + } 18 + declare module "@moonlight-mod/wp/common_icons" { 19 + import { CoreExtensions } from "@moonlight-mod/types"; 20 + export const icons: CoreExtensions.Common.Icons; 21 + export default icons; 22 + } 23 declare module "@moonlight-mod/wp/common_stores"; 24 25 declare module "@moonlight-mod/wp/componentEditor_dmList" {
+1
packages/types/src/index.ts
··· 32 var moonlightNode: MoonlightNode; 33 var moonlightNodeSandboxed: MoonlightNodeSandboxed; 34 var moonlight: MoonlightWeb; 35 36 var _moonlightBrowserInit: undefined | (() => Promise<void>); 37 var _moonlightWebLoad: undefined | (() => Promise<void>);
··· 32 var moonlightNode: MoonlightNode; 33 var moonlightNodeSandboxed: MoonlightNodeSandboxed; 34 var moonlight: MoonlightWeb; 35 + var _moonlight_coreExtensionsStr: string; 36 37 var _moonlightBrowserInit: undefined | (() => Promise<void>); 38 var _moonlightWebLoad: undefined | (() => Promise<void>);
+9 -6
packages/types/src/mappings.d.ts
··· 75 export default _default; 76 } 77 78 declare module "@moonlight-mod/wp/discord/components/common/FileUpload" { 79 import { MappedModules } from "@moonlight-mod/mappings"; 80 const _default: MappedModules["discord/components/common/FileUpload"]["default"]; ··· 130 export const error: MappedModules["discord/components/common/HelpMessage.css"]["error"]; 131 } 132 133 declare module "@moonlight-mod/wp/discord/components/common/PanelButton" { 134 import { MappedModules } from "@moonlight-mod/mappings"; 135 const _default: MappedModules["discord/components/common/PanelButton"]["default"]; ··· 186 export const Image: MappedModules["discord/components/common/index"]["Image"]; 187 export const tokens: MappedModules["discord/components/common/index"]["tokens"]; 188 export const useVariableSelect: MappedModules["discord/components/common/index"]["useVariableSelect"]; 189 - export const useMultiSelectState: MappedModules["discord/components/common/index"]["useMultiSelectState"]; 190 - export const useSingleSelectState: MappedModules["discord/components/common/index"]["useSingleSelectState"]; 191 export const useMultiSelect: MappedModules["discord/components/common/index"]["useMultiSelect"]; 192 - export const useSingleSelect: MappedModules["discord/components/common/index"]["useSingleSelect"]; 193 export const multiSelect: MappedModules["discord/components/common/index"]["multiSelect"]; 194 export const openModal: MappedModules["discord/components/common/index"]["openModal"]; 195 export const openModalLazy: MappedModules["discord/components/common/index"]["openModalLazy"]; ··· 223 export const ScienceIcon: MappedModules["discord/components/common/index"]["ScienceIcon"]; 224 export const ScreenIcon: MappedModules["discord/components/common/index"]["ScreenIcon"]; 225 export const StarIcon: MappedModules["discord/components/common/index"]["StarIcon"]; 226 - export const ThemeDarkIcon: MappedModules["discord/components/common/index"]["ThemeDarkIcon"]; 227 export const TrashIcon: MappedModules["discord/components/common/index"]["TrashIcon"]; 228 export const WarningIcon: MappedModules["discord/components/common/index"]["WarningIcon"]; 229 export const WindowLaunchIcon: MappedModules["discord/components/common/index"]["WindowLaunchIcon"]; ··· 612 export const closeAllModals: MappedModules["discord/modules/modals/Modals"]["closeAllModals"]; 613 export const closeAllModalsForContext: MappedModules["discord/modules/modals/Modals"]["closeAllModalsForContext"]; 614 export const closeModal: MappedModules["discord/modules/modals/Modals"]["closeModal"]; 615 - export const closeModalInAllContexts: MappedModules["discord/modules/modals/Modals"]["closeModalInAllContexts"]; 616 export const getInteractingModalContext: MappedModules["discord/modules/modals/Modals"]["getInteractingModalContext"]; 617 export const hasAnyModalOpen: MappedModules["discord/modules/modals/Modals"]["hasAnyModalOpen"]; 618 export const hasAnyModalOpenSelector: MappedModules["discord/modules/modals/Modals"]["hasAnyModalOpenSelector"]; 619 export const hasModalOpen: MappedModules["discord/modules/modals/Modals"]["hasModalOpen"]; 620 export const hasModalOpenSelector: MappedModules["discord/modules/modals/Modals"]["hasModalOpenSelector"]; 621 - export const modalContextFromAppContext: MappedModules["discord/modules/modals/Modals"]["modalContextFromAppContext"]; 622 export const openModal: MappedModules["discord/modules/modals/Modals"]["openModal"]; 623 export const openModalLazy: MappedModules["discord/modules/modals/Modals"]["openModalLazy"]; 624 export const updateModal: MappedModules["discord/modules/modals/Modals"]["updateModal"];
··· 75 export default _default; 76 } 77 78 + declare module "@moonlight-mod/wp/discord/components/common/Card" { 79 + import { MappedModules } from "@moonlight-mod/mappings"; 80 + const _default: MappedModules["discord/components/common/Card"]["default"]; 81 + export default _default; 82 + export const Types: MappedModules["discord/components/common/Card"]["Types"]; 83 + } 84 + 85 declare module "@moonlight-mod/wp/discord/components/common/FileUpload" { 86 import { MappedModules } from "@moonlight-mod/mappings"; 87 const _default: MappedModules["discord/components/common/FileUpload"]["default"]; ··· 137 export const error: MappedModules["discord/components/common/HelpMessage.css"]["error"]; 138 } 139 140 + declare module "@moonlight-mod/wp/discord/components/common/Image" {} 141 + 142 declare module "@moonlight-mod/wp/discord/components/common/PanelButton" { 143 import { MappedModules } from "@moonlight-mod/mappings"; 144 const _default: MappedModules["discord/components/common/PanelButton"]["default"]; ··· 195 export const Image: MappedModules["discord/components/common/index"]["Image"]; 196 export const tokens: MappedModules["discord/components/common/index"]["tokens"]; 197 export const useVariableSelect: MappedModules["discord/components/common/index"]["useVariableSelect"]; 198 export const useMultiSelect: MappedModules["discord/components/common/index"]["useMultiSelect"]; 199 export const multiSelect: MappedModules["discord/components/common/index"]["multiSelect"]; 200 export const openModal: MappedModules["discord/components/common/index"]["openModal"]; 201 export const openModalLazy: MappedModules["discord/components/common/index"]["openModalLazy"]; ··· 229 export const ScienceIcon: MappedModules["discord/components/common/index"]["ScienceIcon"]; 230 export const ScreenIcon: MappedModules["discord/components/common/index"]["ScreenIcon"]; 231 export const StarIcon: MappedModules["discord/components/common/index"]["StarIcon"]; 232 export const TrashIcon: MappedModules["discord/components/common/index"]["TrashIcon"]; 233 export const WarningIcon: MappedModules["discord/components/common/index"]["WarningIcon"]; 234 export const WindowLaunchIcon: MappedModules["discord/components/common/index"]["WindowLaunchIcon"]; ··· 617 export const closeAllModals: MappedModules["discord/modules/modals/Modals"]["closeAllModals"]; 618 export const closeAllModalsForContext: MappedModules["discord/modules/modals/Modals"]["closeAllModalsForContext"]; 619 export const closeModal: MappedModules["discord/modules/modals/Modals"]["closeModal"]; 620 export const getInteractingModalContext: MappedModules["discord/modules/modals/Modals"]["getInteractingModalContext"]; 621 export const hasAnyModalOpen: MappedModules["discord/modules/modals/Modals"]["hasAnyModalOpen"]; 622 export const hasAnyModalOpenSelector: MappedModules["discord/modules/modals/Modals"]["hasAnyModalOpenSelector"]; 623 export const hasModalOpen: MappedModules["discord/modules/modals/Modals"]["hasModalOpen"]; 624 export const hasModalOpenSelector: MappedModules["discord/modules/modals/Modals"]["hasModalOpenSelector"]; 625 export const openModal: MappedModules["discord/modules/modals/Modals"]["openModal"]; 626 export const openModalLazy: MappedModules["discord/modules/modals/Modals"]["openModalLazy"]; 627 export const updateModal: MappedModules["discord/modules/modals/Modals"]["updateModal"];
+7 -7
packages/types/tsconfig.json
··· 1 { 2 "compilerOptions": { 3 - "target": "es2016", 4 - "module": "es6", 5 - "esModuleInterop": true, 6 - "forceConsistentCasingInFileNames": true, 7 - "strict": true, 8 - "moduleResolution": "bundler", 9 "jsx": "react", 10 - "declaration": true 11 }, 12 "include": ["./src/**/*", "src/index.ts", "./src/import.d.ts"] 13 }
··· 1 { 2 "compilerOptions": { 3 + "target": "ES2016", 4 "jsx": "react", 5 + "module": "ES6", 6 + "moduleResolution": "bundler", 7 + "strict": true, 8 + "declaration": true, 9 + "esModuleInterop": true, 10 + "forceConsistentCasingInFileNames": true 11 }, 12 "include": ["./src/**/*", "src/index.ts", "./src/import.d.ts"] 13 }
+10 -3
packages/web-preload/package.json
··· 2 "name": "@moonlight-mod/web-preload", 3 "private": true, 4 "main": "src/index.ts", 5 "dependencies": { 6 "@moonlight-mod/core": "workspace:*", 7 - "@moonlight-mod/lunast": "^1.0.0", 8 - "@moonlight-mod/mappings": "^1.1.18", 9 - "@moonlight-mod/moonmap": "^1.0.4", 10 "@moonlight-mod/types": "workspace:*" 11 } 12 }
··· 2 "name": "@moonlight-mod/web-preload", 3 "private": true, 4 "main": "src/index.ts", 5 + "engineStrict": true, 6 + "engines": { 7 + "node": ">=22", 8 + "pnpm": ">=10", 9 + "npm": "pnpm", 10 + "yarn": "pnpm" 11 + }, 12 "dependencies": { 13 "@moonlight-mod/core": "workspace:*", 14 + "@moonlight-mod/lunast": "catalog:prod", 15 + "@moonlight-mod/mappings": "catalog:prod", 16 + "@moonlight-mod/moonmap": "catalog:prod", 17 "@moonlight-mod/types": "workspace:*" 18 } 19 }
+4 -1
packages/web-preload/tsconfig.json
··· 1 { 2 - "extends": "../../tsconfig.json" 3 }
··· 1 { 2 + "extends": "../../tsconfig.json", 3 + "compilerOptions": { 4 + "lib": ["ESNext", "DOM"] 5 + } 6 }
+1183 -727
pnpm-lock.yaml
··· 4 autoInstallPeers: true 5 excludeLinksFromLockfile: false 6 7 importers: 8 9 .: 10 devDependencies: 11 '@moonlight-mod/eslint-config': 12 - specifier: github:moonlight-mod/eslint-config 13 - version: https://codeload.github.com/moonlight-mod/eslint-config/tar.gz/e262ac24e1a0955a9b3e0d66da247a0a8c0446c9(eslint@9.12.0)(prettier@3.1.0)(typescript@5.3.2) 14 esbuild: 15 - specifier: ^0.19.3 16 version: 0.19.3 17 esbuild-copy-static-files: 18 - specifier: ^0.1.0 19 version: 0.1.0 20 eslint: 21 - specifier: ^9.12.0 22 - version: 9.12.0 23 husky: 24 - specifier: ^8.0.3 25 version: 8.0.3 26 prettier: 27 - specifier: ^3.1.0 28 version: 3.1.0 29 typescript: 30 - specifier: ^5.3.2 31 - version: 5.3.2 32 33 packages/browser: 34 dependencies: ··· 42 specifier: workspace:* 43 version: link:../web-preload 44 '@zenfs/core': 45 - specifier: ^1.8.8 46 - version: 1.8.8 47 '@zenfs/dom': 48 - specifier: ^1.1.3 49 - version: 1.1.3(@zenfs/core@1.8.8) 50 51 packages/core: 52 dependencies: ··· 63 specifier: workspace:* 64 version: link:../types 65 microdiff: 66 - specifier: ^1.5.0 67 version: 1.5.0 68 nanotar: 69 - specifier: ^0.1.1 70 version: 0.1.1 71 72 packages/injector: ··· 90 packages/types: 91 dependencies: 92 '@moonlight-mod/lunast': 93 - specifier: ^1.0.0 94 - version: 1.0.0 95 '@moonlight-mod/mappings': 96 - specifier: ^1.1.18 97 - version: 1.1.18(@moonlight-mod/lunast@1.0.0)(@moonlight-mod/moonmap@1.0.4) 98 '@moonlight-mod/moonmap': 99 - specifier: ^1.0.4 100 - version: 1.0.4 101 '@types/react': 102 specifier: ^18.3.10 103 - version: 18.3.10 104 csstype: 105 - specifier: ^3.1.2 106 - version: 3.1.2 107 standalone-electron-types: 108 specifier: ^1.0.0 109 version: 1.0.0 ··· 114 specifier: workspace:* 115 version: link:../core 116 '@moonlight-mod/lunast': 117 - specifier: ^1.0.0 118 - version: 1.0.0 119 '@moonlight-mod/mappings': 120 - specifier: ^1.1.18 121 - version: 1.1.18(@moonlight-mod/lunast@1.0.0)(@moonlight-mod/moonmap@1.0.4) 122 '@moonlight-mod/moonmap': 123 - specifier: ^1.0.4 124 - version: 1.0.4 125 '@moonlight-mod/types': 126 specifier: workspace:* 127 version: link:../types ··· 131 '@aashutoshrathi/word-wrap@1.2.6': 132 resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 133 engines: {node: '>=0.10.0'} 134 135 '@esbuild/android-arm64@0.19.3': 136 resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==} ··· 264 cpu: [x64] 265 os: [win32] 266 267 - '@eslint-community/eslint-utils@4.4.0': 268 - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 269 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 270 peerDependencies: 271 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 272 273 - '@eslint-community/regexpp@4.11.1': 274 - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} 275 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 276 277 - '@eslint/config-array@0.18.0': 278 - resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} 279 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 280 281 - '@eslint/core@0.6.0': 282 - resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} 283 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 284 285 - '@eslint/eslintrc@3.1.0': 286 - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} 287 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 288 289 - '@eslint/js@9.12.0': 290 - resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} 291 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 292 293 - '@eslint/object-schema@2.1.4': 294 - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} 295 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 296 297 - '@eslint/plugin-kit@0.2.0': 298 - resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} 299 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 300 301 - '@humanfs/core@0.19.0': 302 - resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} 303 engines: {node: '>=18.18.0'} 304 305 - '@humanfs/node@0.16.5': 306 - resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} 307 engines: {node: '>=18.18.0'} 308 309 '@humanwhocodes/module-importer@1.0.1': ··· 314 resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 315 engines: {node: '>=18.18'} 316 317 '@moonlight-mod/eslint-config@https://codeload.github.com/moonlight-mod/eslint-config/tar.gz/e262ac24e1a0955a9b3e0d66da247a0a8c0446c9': 318 resolution: {tarball: https://codeload.github.com/moonlight-mod/eslint-config/tar.gz/e262ac24e1a0955a9b3e0d66da247a0a8c0446c9} 319 version: 1.0.1 ··· 321 eslint: '>= 9' 322 typescript: '>= 5.3' 323 324 - '@moonlight-mod/lunast@1.0.0': 325 - resolution: {integrity: sha512-kJgf41K12i6/2LbXK97CNO+pNO7ADGh9N4bCQcOPwosocKMcwKHDEZUgPqeihNshY3c3AEW1LiyXjlsl24PdDw==} 326 327 - '@moonlight-mod/mappings@1.1.18': 328 - resolution: {integrity: sha512-aPh080zi2xEBKhBEnXUuPkIjVVhX0RrXFZ5lvMHLuaEOl4vTvaC8PG56558ArfbUof1VMy3j2wduT4cubn3w2A==} 329 peerDependencies: 330 - '@moonlight-mod/lunast': ^1.0.0 331 - '@moonlight-mod/moonmap': ^1.0.4 332 333 - '@moonlight-mod/moonmap@1.0.4': 334 - resolution: {integrity: sha512-NES5a+ZSfgyRBZ7pBL8PZL40Au5vTDskvC/Gqx0bs3woikkkdjbZiW9RPypwUQqzdBDIP//ga+xF9UhKSADdLw==} 335 336 '@nodelib/fs.scandir@2.1.5': 337 resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} ··· 345 resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 346 engines: {node: '>= 8'} 347 348 - '@pkgr/core@0.1.1': 349 - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 350 engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 351 352 '@types/chroma-js@3.1.0': 353 resolution: {integrity: sha512-Uwl3SOtUkbQ6Ye6ZYu4q4xdLGBzmY839sEHYtOT7i691neeyd+7fXWT5VIkcUSfNwIFrIjQutNYQn9h4q5HFvg==} 354 355 '@types/estree-jsx@1.0.5': 356 resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} 357 358 '@types/estree@1.0.6': 359 resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 360 361 '@types/fbemitter@2.0.35': 362 resolution: {integrity: sha512-Xem6d7qUfmouCHntCrRYgDBwbf+WWRd6G+7WEFlEZFZ67LZXiYRvT2LV8wcZa6mIaAil95+ABQdKgB6hPIsnng==} 363 364 '@types/flux@3.1.14': 365 resolution: {integrity: sha512-WRXN0kQPCnqxN0/PgNgc7WBF6c8rbSHsEep3/qBLpsQ824RONdOmTs0TV7XhIW2GDNRAHO2CqCgAFLR5PChosw==} 366 367 '@types/highlightjs@9.12.6': 368 resolution: {integrity: sha512-Qfd1DUrwE851Hc3tExADJY4qY8yeZMt06Xw9AJm/UtpneepJS3MZY29c33BY0wP899veaaHD4gZzYiSuQm84Fg==} 369 ··· 376 '@types/node@18.17.17': 377 resolution: {integrity: sha512-cOxcXsQ2sxiwkykdJqvyFS+MLQPLvIdwh5l6gNg8qF6s+C7XSkEWOZjK+XhUZd+mYvHV/180g2cnCcIl4l06Pw==} 378 379 - '@types/node@22.10.7': 380 - resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} 381 382 '@types/platform@1.3.6': 383 resolution: {integrity: sha512-ZmSaqHuvzv+jC232cFoz2QqPUkaj6EvMmCrWcx3WRr7xTPVFCMUOTcOq8m2d+Zw1iKRc1kDiaA+jtNrV0hkVew==} ··· 385 '@types/prop-types@15.7.13': 386 resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} 387 388 - '@types/react@18.3.10': 389 - resolution: {integrity: sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==} 390 - 391 - '@types/readable-stream@4.0.15': 392 - resolution: {integrity: sha512-oAZ3kw+kJFkEqyh7xORZOku1YAKvsFTogRY8kVl4vHpEKiDkfnSA/My8haRE7fvmix5Zyy+1pwzOi7yycGLBJw==} 393 394 - '@typescript-eslint/eslint-plugin@8.8.1': 395 - resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} 396 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 397 peerDependencies: 398 '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 399 eslint: ^8.57.0 || ^9.0.0 400 - typescript: '*' 401 - peerDependenciesMeta: 402 - typescript: 403 - optional: true 404 405 - '@typescript-eslint/parser@8.8.1': 406 - resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} 407 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 408 peerDependencies: 409 eslint: ^8.57.0 || ^9.0.0 410 - typescript: '*' 411 - peerDependenciesMeta: 412 - typescript: 413 - optional: true 414 415 - '@typescript-eslint/scope-manager@8.8.1': 416 - resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} 417 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 418 419 - '@typescript-eslint/type-utils@8.8.1': 420 - resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} 421 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 422 peerDependencies: 423 - typescript: '*' 424 - peerDependenciesMeta: 425 - typescript: 426 - optional: true 427 428 - '@typescript-eslint/types@8.8.1': 429 - resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} 430 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 431 432 - '@typescript-eslint/typescript-estree@8.8.1': 433 - resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} 434 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 435 peerDependencies: 436 - typescript: '*' 437 - peerDependenciesMeta: 438 - typescript: 439 - optional: true 440 441 - '@typescript-eslint/utils@8.8.1': 442 - resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} 443 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 444 peerDependencies: 445 eslint: ^8.57.0 || ^9.0.0 446 447 - '@typescript-eslint/visitor-keys@8.8.1': 448 - resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} 449 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 450 451 '@xterm/xterm@5.5.0': 452 resolution: {integrity: sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==} 453 454 - '@zenfs/core@1.8.8': 455 - resolution: {integrity: sha512-J4w/IFJ3r1xF2/3txmqLDbomPvsmkYWRvgR5hmPqBAST3fO4YZtSc9QtE1TPf2DGetvmfPiAU9l9I0a+XE3g1g==} 456 - engines: {node: '>= 16'} 457 hasBin: true 458 459 - '@zenfs/dom@1.1.3': 460 - resolution: {integrity: sha512-Rv33rnwELDLTOT9BwIGyAYBryWE2VW6E9QkoIZ67FFXzwXKzmmk/yESgzUdqUM7Dq7ciKk4wfati0ViUO6Bymw==} 461 engines: {node: '>= 18'} 462 peerDependencies: 463 - '@zenfs/core': ^1.7.0 464 465 abort-controller@3.0.0: 466 resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} ··· 471 peerDependencies: 472 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 473 474 - acorn@8.12.1: 475 - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 476 engines: {node: '>=0.4.0'} 477 hasBin: true 478 ··· 483 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 484 engines: {node: '>=8'} 485 486 argparse@2.0.1: 487 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 488 489 - array-buffer-byte-length@1.0.1: 490 - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 491 engines: {node: '>= 0.4'} 492 493 array-includes@3.1.8: ··· 498 resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 499 engines: {node: '>= 0.4'} 500 501 - array.prototype.flat@1.3.2: 502 - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 503 engines: {node: '>= 0.4'} 504 505 - array.prototype.flatmap@1.3.2: 506 - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 507 engines: {node: '>= 0.4'} 508 509 array.prototype.tosorted@1.1.4: 510 resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 511 engines: {node: '>= 0.4'} 512 513 - arraybuffer.prototype.slice@1.0.3: 514 - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 515 engines: {node: '>= 0.4'} 516 517 astring@1.9.0: 518 resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} 519 hasBin: true 520 521 available-typed-arrays@1.0.7: 522 resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} ··· 541 buffer@6.0.3: 542 resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 543 544 - call-bind@1.0.7: 545 - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 546 engines: {node: '>= 0.4'} 547 548 callsites@3.1.0: ··· 563 concat-map@0.0.1: 564 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 565 566 - cross-spawn@7.0.3: 567 - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 568 engines: {node: '>= 8'} 569 570 - csstype@3.1.2: 571 - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 572 - 573 csstype@3.1.3: 574 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 575 576 - data-view-buffer@1.0.1: 577 - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 578 engines: {node: '>= 0.4'} 579 580 - data-view-byte-length@1.0.1: 581 - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 582 engines: {node: '>= 0.4'} 583 584 - data-view-byte-offset@1.0.0: 585 - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 586 engines: {node: '>= 0.4'} 587 588 - debug@4.3.4: 589 - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 590 engines: {node: '>=6.0'} 591 peerDependencies: 592 supports-color: '*' ··· 605 resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 606 engines: {node: '>= 0.4'} 607 608 doctrine@2.1.0: 609 resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 610 engines: {node: '>=0.10.0'} 611 612 - es-abstract@1.23.3: 613 - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} 614 engines: {node: '>= 0.4'} 615 616 - es-define-property@1.0.0: 617 - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 618 engines: {node: '>= 0.4'} 619 620 es-errors@1.3.0: 621 resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 622 engines: {node: '>= 0.4'} 623 624 - es-iterator-helpers@1.1.0: 625 - resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} 626 engines: {node: '>= 0.4'} 627 628 - es-object-atoms@1.0.0: 629 - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 630 engines: {node: '>= 0.4'} 631 632 - es-set-tostringtag@2.0.3: 633 - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 634 engines: {node: '>= 0.4'} 635 636 - es-shim-unscopables@1.0.2: 637 - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 638 639 - es-to-primitive@1.2.1: 640 - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 641 engines: {node: '>= 0.4'} 642 643 esbuild-copy-static-files@0.1.0: ··· 658 peerDependencies: 659 eslint: '>=7.0.0' 660 661 - eslint-plugin-prettier@5.2.1: 662 - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 663 engines: {node: ^14.18.0 || >=16.0.0} 664 peerDependencies: 665 '@types/eslint': '>=8.0.0' 666 eslint: '>=8.0.0' 667 - eslint-config-prettier: '*' 668 prettier: '>=3.0.0' 669 peerDependenciesMeta: 670 '@types/eslint': ··· 672 eslint-config-prettier: 673 optional: true 674 675 - eslint-plugin-react@7.37.1: 676 - resolution: {integrity: sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==} 677 engines: {node: '>=4'} 678 peerDependencies: 679 eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 680 681 - eslint-scope@8.1.0: 682 - resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} 683 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 684 685 eslint-visitor-keys@3.4.3: 686 resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 687 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 688 689 - eslint-visitor-keys@4.1.0: 690 - resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} 691 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 692 693 - eslint@9.12.0: 694 - resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} 695 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 696 hasBin: true 697 peerDependencies: ··· 700 jiti: 701 optional: true 702 703 - espree@10.2.0: 704 - resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} 705 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 706 707 - esquery@1.5.0: 708 - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 709 engines: {node: '>=0.10'} 710 711 esrecurse@4.3.0: ··· 753 fastq@1.17.1: 754 resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 755 756 file-entry-cache@8.0.0: 757 resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 758 engines: {node: '>=16.0.0'} ··· 761 resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 762 engines: {node: '>=8'} 763 764 find-up@5.0.0: 765 resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 766 engines: {node: '>=10'} ··· 772 flatted@3.2.9: 773 resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 774 775 - for-each@0.3.3: 776 - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 777 778 function-bind@1.1.2: 779 resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 780 781 - function.prototype.name@1.1.6: 782 - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 783 engines: {node: '>= 0.4'} 784 785 functions-have-names@1.2.3: 786 resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 787 788 - get-intrinsic@1.2.4: 789 - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 790 engines: {node: '>= 0.4'} 791 792 - get-symbol-description@1.0.2: 793 - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 794 engines: {node: '>= 0.4'} 795 796 glob-parent@5.1.2: ··· 809 resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 810 engines: {node: '>= 0.4'} 811 812 - gopd@1.0.1: 813 - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 814 815 graphemer@1.4.0: 816 resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 817 818 - has-bigints@1.0.2: 819 - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 820 821 has-flag@4.0.0: 822 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} ··· 825 has-property-descriptors@1.0.2: 826 resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 827 828 - has-proto@1.0.3: 829 - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 830 engines: {node: '>= 0.4'} 831 832 - has-symbols@1.0.3: 833 - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 834 engines: {node: '>= 0.4'} 835 836 has-tostringtag@1.0.2: ··· 848 849 ieee754@1.2.1: 850 resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 851 - 852 - ignore@5.3.0: 853 - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 854 - engines: {node: '>= 4'} 855 856 ignore@5.3.2: 857 resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} ··· 865 resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 866 engines: {node: '>=0.8.19'} 867 868 - internal-slot@1.0.7: 869 - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 870 engines: {node: '>= 0.4'} 871 872 - is-array-buffer@3.0.4: 873 - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 874 engines: {node: '>= 0.4'} 875 876 - is-async-function@2.0.0: 877 - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 878 engines: {node: '>= 0.4'} 879 880 - is-bigint@1.0.4: 881 - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 882 883 - is-boolean-object@1.1.2: 884 - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 885 engines: {node: '>= 0.4'} 886 887 is-callable@1.2.7: 888 resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 889 engines: {node: '>= 0.4'} 890 891 - is-core-module@2.15.1: 892 - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 893 engines: {node: '>= 0.4'} 894 895 - is-data-view@1.0.1: 896 - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 897 engines: {node: '>= 0.4'} 898 899 - is-date-object@1.0.5: 900 - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 901 engines: {node: '>= 0.4'} 902 903 is-extglob@2.1.1: 904 resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 905 engines: {node: '>=0.10.0'} 906 907 - is-finalizationregistry@1.0.2: 908 - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} 909 910 - is-generator-function@1.0.10: 911 - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 912 engines: {node: '>= 0.4'} 913 914 is-glob@4.0.3: ··· 919 resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 920 engines: {node: '>= 0.4'} 921 922 - is-negative-zero@2.0.3: 923 - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 924 - engines: {node: '>= 0.4'} 925 - 926 - is-number-object@1.0.7: 927 - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 928 engines: {node: '>= 0.4'} 929 930 is-number@7.0.0: 931 resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 932 engines: {node: '>=0.12.0'} 933 934 - is-regex@1.1.4: 935 - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 936 engines: {node: '>= 0.4'} 937 938 is-set@2.0.3: 939 resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 940 engines: {node: '>= 0.4'} 941 942 - is-shared-array-buffer@1.0.3: 943 - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 944 engines: {node: '>= 0.4'} 945 946 - is-string@1.0.7: 947 - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 948 engines: {node: '>= 0.4'} 949 950 - is-symbol@1.0.4: 951 - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 952 engines: {node: '>= 0.4'} 953 954 - is-typed-array@1.1.13: 955 - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 956 engines: {node: '>= 0.4'} 957 958 is-weakmap@2.0.2: 959 resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 960 engines: {node: '>= 0.4'} 961 962 - is-weakref@1.0.2: 963 - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 964 965 - is-weakset@2.0.3: 966 - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} 967 engines: {node: '>= 0.4'} 968 969 isarray@2.0.5: ··· 972 isexe@2.0.0: 973 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 974 975 - iterator.prototype@1.1.3: 976 - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} 977 engines: {node: '>= 0.4'} 978 979 js-tokens@4.0.0: 980 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} ··· 1014 resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1015 hasBin: true 1016 1017 merge2@1.4.1: 1018 resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1019 engines: {node: '>= 8'} ··· 1029 resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1030 engines: {node: '>=8.6'} 1031 1032 minimatch@3.1.2: 1033 resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1034 ··· 1036 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1037 engines: {node: '>=16 || 14 >=14.17'} 1038 1039 - ms@2.1.2: 1040 - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1041 1042 nanotar@0.1.1: 1043 resolution: {integrity: sha512-AiJsGsSF3O0havL1BydvI4+wR76sKT+okKRwWIaK96cZUnXqH0uNBOsHlbwZq3+m2BR1VKqHDVudl3gO4mYjpQ==} ··· 1045 natural-compare@1.4.0: 1046 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1047 1048 object-assign@4.1.1: 1049 resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1050 engines: {node: '>=0.10.0'} 1051 1052 - object-inspect@1.13.2: 1053 - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 1054 engines: {node: '>= 0.4'} 1055 1056 object-keys@1.1.1: 1057 resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1058 engines: {node: '>= 0.4'} 1059 1060 - object.assign@4.1.5: 1061 - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1062 engines: {node: '>= 0.4'} 1063 1064 - object.entries@1.1.8: 1065 - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} 1066 engines: {node: '>= 0.4'} 1067 1068 object.fromentries@2.0.8: 1069 resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1070 engines: {node: '>= 0.4'} 1071 1072 - object.values@1.2.0: 1073 - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 1074 engines: {node: '>= 0.4'} 1075 1076 optionator@0.9.3: 1077 resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1078 engines: {node: '>= 0.8.0'} 1079 1080 p-limit@3.1.0: 1081 resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1082 engines: {node: '>=10'} ··· 1084 p-locate@5.0.0: 1085 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1086 engines: {node: '>=10'} 1087 1088 parent-module@1.0.1: 1089 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} ··· 1099 1100 path-parse@1.0.7: 1101 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1102 1103 picomatch@2.3.1: 1104 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1105 engines: {node: '>=8.6'} 1106 1107 - possible-typed-array-names@1.0.0: 1108 - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1109 engines: {node: '>= 0.4'} 1110 1111 prelude-ls@1.2.1: ··· 1132 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1133 engines: {node: '>=6'} 1134 1135 queue-microtask@1.2.3: 1136 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1137 ··· 1142 resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} 1143 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1144 1145 - reflect.getprototypeof@1.0.6: 1146 - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} 1147 engines: {node: '>= 0.4'} 1148 1149 - regexp.prototype.flags@1.5.3: 1150 - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} 1151 engines: {node: '>= 0.4'} 1152 1153 resolve-from@4.0.0: ··· 1158 resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1159 hasBin: true 1160 1161 reusify@1.0.4: 1162 resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1163 engines: {iojs: '>=1.0.0', node: '>=0.10.0'} ··· 1165 run-parallel@1.2.0: 1166 resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1167 1168 - safe-array-concat@1.1.2: 1169 - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1170 engines: {node: '>=0.4'} 1171 1172 - safe-buffer@5.1.2: 1173 - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1174 - 1175 safe-buffer@5.2.1: 1176 resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1177 1178 - safe-regex-test@1.0.3: 1179 - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1180 engines: {node: '>= 0.4'} 1181 1182 semver@6.3.1: 1183 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1184 hasBin: true 1185 1186 - semver@7.6.3: 1187 - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1188 engines: {node: '>=10'} 1189 hasBin: true 1190 ··· 1196 resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1197 engines: {node: '>= 0.4'} 1198 1199 shebang-command@2.0.0: 1200 resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1201 engines: {node: '>=8'} ··· 1204 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1205 engines: {node: '>=8'} 1206 1207 - side-channel@1.0.6: 1208 - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1209 engines: {node: '>= 0.4'} 1210 1211 standalone-electron-types@1.0.0: 1212 resolution: {integrity: sha512-0HOi/tlTz3mjWhsAz4uRbpQcHMZ+ifj1JzWW9nugykOHClBBG77ps8QinrzX1eow4Iw2pnC+RFaSYRgufF4BOg==} 1213 1214 - string.prototype.matchall@4.0.11: 1215 - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} 1216 engines: {node: '>= 0.4'} 1217 1218 string.prototype.repeat@1.0.0: 1219 resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1220 1221 - string.prototype.trim@1.2.9: 1222 - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 1223 engines: {node: '>= 0.4'} 1224 1225 - string.prototype.trimend@1.0.8: 1226 - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 1227 1228 string.prototype.trimstart@1.0.8: 1229 resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} ··· 1244 resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1245 engines: {node: '>= 0.4'} 1246 1247 - synckit@0.9.2: 1248 - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} 1249 engines: {node: ^14.18.0 || >=16.0.0} 1250 1251 - text-table@0.2.0: 1252 - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1253 1254 to-regex-range@5.0.1: 1255 resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1256 engines: {node: '>=8.0'} 1257 1258 - ts-api-utils@1.3.0: 1259 - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1260 - engines: {node: '>=16'} 1261 peerDependencies: 1262 - typescript: '>=4.2.0' 1263 1264 - tslib@2.7.0: 1265 - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} 1266 1267 type-check@0.4.0: 1268 resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1269 engines: {node: '>= 0.8.0'} 1270 1271 - typed-array-buffer@1.0.2: 1272 - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1273 engines: {node: '>= 0.4'} 1274 1275 - typed-array-byte-length@1.0.1: 1276 - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1277 engines: {node: '>= 0.4'} 1278 1279 - typed-array-byte-offset@1.0.2: 1280 - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1281 engines: {node: '>= 0.4'} 1282 1283 - typed-array-length@1.0.6: 1284 - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 1285 engines: {node: '>= 0.4'} 1286 1287 - typescript-eslint@8.8.1: 1288 - resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} 1289 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1290 peerDependencies: 1291 - typescript: '*' 1292 - peerDependenciesMeta: 1293 - typescript: 1294 - optional: true 1295 1296 - typescript@5.3.2: 1297 - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} 1298 engines: {node: '>=14.17'} 1299 hasBin: true 1300 1301 - unbox-primitive@1.0.2: 1302 - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1303 1304 undici-types@6.20.0: 1305 resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1306 1307 uri-js@4.4.1: 1308 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1309 1310 - utilium@1.1.3: 1311 - resolution: {integrity: sha512-Gip5dgsVHMy+7lf6m1l/2HJkUropZ4pIBRKxBqxw0Dtz8czcuhNyXFXywqdVnNekDaTzV7/CHYsnLPrPrvzMUA==} 1312 1313 - which-boxed-primitive@1.0.2: 1314 - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1315 1316 - which-builtin-type@1.1.4: 1317 - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} 1318 engines: {node: '>= 0.4'} 1319 1320 which-collection@1.0.2: 1321 resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1322 engines: {node: '>= 0.4'} 1323 1324 - which-typed-array@1.1.15: 1325 - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1326 engines: {node: '>= 0.4'} 1327 1328 which@2.0.2: ··· 1330 engines: {node: '>= 8'} 1331 hasBin: true 1332 1333 yocto-queue@0.1.0: 1334 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1335 engines: {node: '>=10'} ··· 1355 snapshots: 1356 1357 '@aashutoshrathi/word-wrap@1.2.6': {} 1358 1359 '@esbuild/android-arm64@0.19.3': 1360 optional: true ··· 1422 '@esbuild/win32-x64@0.19.3': 1423 optional: true 1424 1425 - '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': 1426 dependencies: 1427 - eslint: 9.12.0 1428 eslint-visitor-keys: 3.4.3 1429 1430 - '@eslint-community/regexpp@4.11.1': {} 1431 1432 - '@eslint/config-array@0.18.0': 1433 dependencies: 1434 - '@eslint/object-schema': 2.1.4 1435 - debug: 4.3.4 1436 minimatch: 3.1.2 1437 transitivePeerDependencies: 1438 - supports-color 1439 1440 - '@eslint/core@0.6.0': {} 1441 1442 - '@eslint/eslintrc@3.1.0': 1443 dependencies: 1444 ajv: 6.12.6 1445 - debug: 4.3.4 1446 - espree: 10.2.0 1447 globals: 14.0.0 1448 - ignore: 5.3.0 1449 import-fresh: 3.3.0 1450 js-yaml: 4.1.0 1451 minimatch: 3.1.2 ··· 1453 transitivePeerDependencies: 1454 - supports-color 1455 1456 - '@eslint/js@9.12.0': {} 1457 1458 - '@eslint/object-schema@2.1.4': {} 1459 1460 - '@eslint/plugin-kit@0.2.0': 1461 dependencies: 1462 levn: 0.4.1 1463 1464 - '@humanfs/core@0.19.0': {} 1465 1466 - '@humanfs/node@0.16.5': 1467 dependencies: 1468 - '@humanfs/core': 0.19.0 1469 '@humanwhocodes/retry': 0.3.1 1470 1471 '@humanwhocodes/module-importer@1.0.1': {} 1472 1473 '@humanwhocodes/retry@0.3.1': {} 1474 1475 - '@moonlight-mod/eslint-config@https://codeload.github.com/moonlight-mod/eslint-config/tar.gz/e262ac24e1a0955a9b3e0d66da247a0a8c0446c9(eslint@9.12.0)(prettier@3.1.0)(typescript@5.3.2)': 1476 dependencies: 1477 - '@eslint/js': 9.12.0 1478 - eslint: 9.12.0 1479 - eslint-config-prettier: 9.1.0(eslint@9.12.0) 1480 - eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.12.0))(eslint@9.12.0)(prettier@3.1.0) 1481 - eslint-plugin-react: 7.37.1(eslint@9.12.0) 1482 - typescript: 5.3.2 1483 - typescript-eslint: 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1484 transitivePeerDependencies: 1485 - '@types/eslint' 1486 - prettier 1487 - supports-color 1488 1489 - '@moonlight-mod/lunast@1.0.0': 1490 dependencies: 1491 astring: 1.9.0 1492 estree-toolkit: 1.7.8 1493 meriyah: 6.0.1 1494 1495 - '@moonlight-mod/mappings@1.1.18(@moonlight-mod/lunast@1.0.0)(@moonlight-mod/moonmap@1.0.4)': 1496 dependencies: 1497 - '@moonlight-mod/lunast': 1.0.0 1498 - '@moonlight-mod/moonmap': 1.0.4 1499 '@types/chroma-js': 3.1.0 1500 '@types/flux': 3.1.14 1501 '@types/highlightjs': 9.12.6 1502 '@types/lodash': 4.17.14 1503 '@types/platform': 1.3.6 1504 - '@types/react': 18.3.10 1505 csstype: 3.1.3 1506 - zustand: 5.0.3(@types/react@18.3.10) 1507 transitivePeerDependencies: 1508 - immer 1509 - react 1510 - use-sync-external-store 1511 1512 - '@moonlight-mod/moonmap@1.0.4': {} 1513 1514 '@nodelib/fs.scandir@2.1.5': 1515 dependencies: ··· 1523 '@nodelib/fs.scandir': 2.1.5 1524 fastq: 1.17.1 1525 1526 - '@pkgr/core@0.1.1': {} 1527 1528 '@types/chroma-js@3.1.0': {} 1529 1530 '@types/estree-jsx@1.0.5': 1531 dependencies: ··· 1533 1534 '@types/estree@1.0.6': {} 1535 1536 '@types/fbemitter@2.0.35': {} 1537 1538 '@types/flux@3.1.14': 1539 dependencies: 1540 '@types/fbemitter': 2.0.35 1541 - '@types/react': 18.3.10 1542 1543 '@types/highlightjs@9.12.6': {} 1544 ··· 1548 1549 '@types/node@18.17.17': {} 1550 1551 - '@types/node@22.10.7': 1552 dependencies: 1553 undici-types: 6.20.0 1554 1555 '@types/platform@1.3.6': {} 1556 1557 '@types/prop-types@15.7.13': {} 1558 1559 - '@types/react@18.3.10': 1560 dependencies: 1561 '@types/prop-types': 15.7.13 1562 csstype: 3.1.3 1563 1564 - '@types/readable-stream@4.0.15': 1565 dependencies: 1566 - '@types/node': 22.10.7 1567 - safe-buffer: 5.1.2 1568 - 1569 - '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.3.2))(eslint@9.12.0)(typescript@5.3.2)': 1570 - dependencies: 1571 - '@eslint-community/regexpp': 4.11.1 1572 - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1573 - '@typescript-eslint/scope-manager': 8.8.1 1574 - '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1575 - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1576 - '@typescript-eslint/visitor-keys': 8.8.1 1577 - eslint: 9.12.0 1578 graphemer: 1.4.0 1579 ignore: 5.3.2 1580 natural-compare: 1.4.0 1581 - ts-api-utils: 1.3.0(typescript@5.3.2) 1582 - optionalDependencies: 1583 - typescript: 5.3.2 1584 transitivePeerDependencies: 1585 - supports-color 1586 1587 - '@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.3.2)': 1588 dependencies: 1589 - '@typescript-eslint/scope-manager': 8.8.1 1590 - '@typescript-eslint/types': 8.8.1 1591 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.3.2) 1592 - '@typescript-eslint/visitor-keys': 8.8.1 1593 - debug: 4.3.4 1594 - eslint: 9.12.0 1595 - optionalDependencies: 1596 - typescript: 5.3.2 1597 transitivePeerDependencies: 1598 - supports-color 1599 1600 - '@typescript-eslint/scope-manager@8.8.1': 1601 dependencies: 1602 - '@typescript-eslint/types': 8.8.1 1603 - '@typescript-eslint/visitor-keys': 8.8.1 1604 1605 - '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0)(typescript@5.3.2)': 1606 dependencies: 1607 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.3.2) 1608 - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1609 - debug: 4.3.4 1610 - ts-api-utils: 1.3.0(typescript@5.3.2) 1611 - optionalDependencies: 1612 - typescript: 5.3.2 1613 transitivePeerDependencies: 1614 - - eslint 1615 - supports-color 1616 1617 - '@typescript-eslint/types@8.8.1': {} 1618 1619 - '@typescript-eslint/typescript-estree@8.8.1(typescript@5.3.2)': 1620 dependencies: 1621 - '@typescript-eslint/types': 8.8.1 1622 - '@typescript-eslint/visitor-keys': 8.8.1 1623 - debug: 4.3.4 1624 fast-glob: 3.3.2 1625 is-glob: 4.0.3 1626 minimatch: 9.0.5 1627 - semver: 7.6.3 1628 - ts-api-utils: 1.3.0(typescript@5.3.2) 1629 - optionalDependencies: 1630 - typescript: 5.3.2 1631 transitivePeerDependencies: 1632 - supports-color 1633 1634 - '@typescript-eslint/utils@8.8.1(eslint@9.12.0)(typescript@5.3.2)': 1635 dependencies: 1636 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) 1637 - '@typescript-eslint/scope-manager': 8.8.1 1638 - '@typescript-eslint/types': 8.8.1 1639 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.3.2) 1640 - eslint: 9.12.0 1641 transitivePeerDependencies: 1642 - supports-color 1643 - - typescript 1644 1645 - '@typescript-eslint/visitor-keys@8.8.1': 1646 dependencies: 1647 - '@typescript-eslint/types': 8.8.1 1648 - eslint-visitor-keys: 3.4.3 1649 1650 '@xterm/xterm@5.5.0': 1651 optional: true 1652 1653 - '@zenfs/core@1.8.8': 1654 dependencies: 1655 - '@types/node': 22.10.7 1656 - '@types/readable-stream': 4.0.15 1657 buffer: 6.0.3 1658 eventemitter3: 5.0.1 1659 readable-stream: 4.5.2 1660 - utilium: 1.1.3 1661 1662 - '@zenfs/dom@1.1.3(@zenfs/core@1.8.8)': 1663 dependencies: 1664 - '@zenfs/core': 1.8.8 1665 1666 abort-controller@3.0.0: 1667 dependencies: 1668 event-target-shim: 5.0.1 1669 1670 - acorn-jsx@5.3.2(acorn@8.12.1): 1671 dependencies: 1672 - acorn: 8.12.1 1673 1674 - acorn@8.12.1: {} 1675 1676 ajv@6.12.6: 1677 dependencies: ··· 1683 ansi-styles@4.3.0: 1684 dependencies: 1685 color-convert: 2.0.1 1686 1687 argparse@2.0.1: {} 1688 1689 - array-buffer-byte-length@1.0.1: 1690 dependencies: 1691 - call-bind: 1.0.7 1692 - is-array-buffer: 3.0.4 1693 1694 array-includes@3.1.8: 1695 dependencies: 1696 - call-bind: 1.0.7 1697 define-properties: 1.2.1 1698 - es-abstract: 1.23.3 1699 - es-object-atoms: 1.0.0 1700 - get-intrinsic: 1.2.4 1701 - is-string: 1.0.7 1702 1703 array.prototype.findlast@1.2.5: 1704 dependencies: 1705 - call-bind: 1.0.7 1706 define-properties: 1.2.1 1707 - es-abstract: 1.23.3 1708 es-errors: 1.3.0 1709 - es-object-atoms: 1.0.0 1710 - es-shim-unscopables: 1.0.2 1711 1712 - array.prototype.flat@1.3.2: 1713 dependencies: 1714 - call-bind: 1.0.7 1715 define-properties: 1.2.1 1716 - es-abstract: 1.23.3 1717 - es-shim-unscopables: 1.0.2 1718 1719 - array.prototype.flatmap@1.3.2: 1720 dependencies: 1721 - call-bind: 1.0.7 1722 define-properties: 1.2.1 1723 - es-abstract: 1.23.3 1724 - es-shim-unscopables: 1.0.2 1725 1726 array.prototype.tosorted@1.1.4: 1727 dependencies: 1728 - call-bind: 1.0.7 1729 define-properties: 1.2.1 1730 - es-abstract: 1.23.3 1731 es-errors: 1.3.0 1732 - es-shim-unscopables: 1.0.2 1733 1734 - arraybuffer.prototype.slice@1.0.3: 1735 dependencies: 1736 - array-buffer-byte-length: 1.0.1 1737 - call-bind: 1.0.7 1738 define-properties: 1.2.1 1739 - es-abstract: 1.23.3 1740 es-errors: 1.3.0 1741 - get-intrinsic: 1.2.4 1742 - is-array-buffer: 3.0.4 1743 - is-shared-array-buffer: 1.0.3 1744 1745 astring@1.9.0: {} 1746 1747 available-typed-arrays@1.0.7: 1748 dependencies: 1749 - possible-typed-array-names: 1.0.0 1750 1751 balanced-match@1.0.2: {} 1752 ··· 1770 base64-js: 1.5.1 1771 ieee754: 1.2.1 1772 1773 - call-bind@1.0.7: 1774 dependencies: 1775 - es-define-property: 1.0.0 1776 es-errors: 1.3.0 1777 function-bind: 1.1.2 1778 - get-intrinsic: 1.2.4 1779 set-function-length: 1.2.2 1780 1781 callsites@3.1.0: {} 1782 ··· 1793 1794 concat-map@0.0.1: {} 1795 1796 - cross-spawn@7.0.3: 1797 dependencies: 1798 path-key: 3.1.1 1799 shebang-command: 2.0.0 1800 which: 2.0.2 1801 1802 - csstype@3.1.2: {} 1803 - 1804 csstype@3.1.3: {} 1805 1806 - data-view-buffer@1.0.1: 1807 dependencies: 1808 - call-bind: 1.0.7 1809 es-errors: 1.3.0 1810 - is-data-view: 1.0.1 1811 1812 - data-view-byte-length@1.0.1: 1813 dependencies: 1814 - call-bind: 1.0.7 1815 es-errors: 1.3.0 1816 - is-data-view: 1.0.1 1817 1818 - data-view-byte-offset@1.0.0: 1819 dependencies: 1820 - call-bind: 1.0.7 1821 es-errors: 1.3.0 1822 - is-data-view: 1.0.1 1823 1824 - debug@4.3.4: 1825 dependencies: 1826 - ms: 2.1.2 1827 1828 deep-is@0.1.4: {} 1829 1830 define-data-property@1.1.4: 1831 dependencies: 1832 - es-define-property: 1.0.0 1833 es-errors: 1.3.0 1834 - gopd: 1.0.1 1835 1836 define-properties@1.2.1: 1837 dependencies: ··· 1839 has-property-descriptors: 1.0.2 1840 object-keys: 1.1.1 1841 1842 doctrine@2.1.0: 1843 dependencies: 1844 esutils: 2.0.3 1845 1846 - es-abstract@1.23.3: 1847 dependencies: 1848 - array-buffer-byte-length: 1.0.1 1849 - arraybuffer.prototype.slice: 1.0.3 1850 available-typed-arrays: 1.0.7 1851 - call-bind: 1.0.7 1852 - data-view-buffer: 1.0.1 1853 - data-view-byte-length: 1.0.1 1854 - data-view-byte-offset: 1.0.0 1855 - es-define-property: 1.0.0 1856 es-errors: 1.3.0 1857 - es-object-atoms: 1.0.0 1858 - es-set-tostringtag: 2.0.3 1859 - es-to-primitive: 1.2.1 1860 - function.prototype.name: 1.1.6 1861 - get-intrinsic: 1.2.4 1862 - get-symbol-description: 1.0.2 1863 globalthis: 1.0.4 1864 - gopd: 1.0.1 1865 has-property-descriptors: 1.0.2 1866 - has-proto: 1.0.3 1867 - has-symbols: 1.0.3 1868 hasown: 2.0.2 1869 - internal-slot: 1.0.7 1870 - is-array-buffer: 3.0.4 1871 is-callable: 1.2.7 1872 - is-data-view: 1.0.1 1873 - is-negative-zero: 2.0.3 1874 - is-regex: 1.1.4 1875 - is-shared-array-buffer: 1.0.3 1876 - is-string: 1.0.7 1877 - is-typed-array: 1.1.13 1878 - is-weakref: 1.0.2 1879 - object-inspect: 1.13.2 1880 object-keys: 1.1.1 1881 - object.assign: 4.1.5 1882 - regexp.prototype.flags: 1.5.3 1883 - safe-array-concat: 1.1.2 1884 - safe-regex-test: 1.0.3 1885 - string.prototype.trim: 1.2.9 1886 - string.prototype.trimend: 1.0.8 1887 string.prototype.trimstart: 1.0.8 1888 - typed-array-buffer: 1.0.2 1889 - typed-array-byte-length: 1.0.1 1890 - typed-array-byte-offset: 1.0.2 1891 - typed-array-length: 1.0.6 1892 - unbox-primitive: 1.0.2 1893 - which-typed-array: 1.1.15 1894 1895 - es-define-property@1.0.0: 1896 - dependencies: 1897 - get-intrinsic: 1.2.4 1898 1899 es-errors@1.3.0: {} 1900 1901 - es-iterator-helpers@1.1.0: 1902 dependencies: 1903 - call-bind: 1.0.7 1904 define-properties: 1.2.1 1905 - es-abstract: 1.23.3 1906 es-errors: 1.3.0 1907 - es-set-tostringtag: 2.0.3 1908 function-bind: 1.1.2 1909 - get-intrinsic: 1.2.4 1910 globalthis: 1.0.4 1911 has-property-descriptors: 1.0.2 1912 - has-proto: 1.0.3 1913 - has-symbols: 1.0.3 1914 - internal-slot: 1.0.7 1915 - iterator.prototype: 1.1.3 1916 - safe-array-concat: 1.1.2 1917 1918 - es-object-atoms@1.0.0: 1919 dependencies: 1920 es-errors: 1.3.0 1921 1922 - es-set-tostringtag@2.0.3: 1923 dependencies: 1924 - get-intrinsic: 1.2.4 1925 has-tostringtag: 1.0.2 1926 hasown: 2.0.2 1927 1928 - es-shim-unscopables@1.0.2: 1929 dependencies: 1930 hasown: 2.0.2 1931 1932 - es-to-primitive@1.2.1: 1933 dependencies: 1934 is-callable: 1.2.7 1935 - is-date-object: 1.0.5 1936 - is-symbol: 1.0.4 1937 1938 esbuild-copy-static-files@0.1.0: {} 1939 ··· 1964 1965 escape-string-regexp@4.0.0: {} 1966 1967 - eslint-config-prettier@9.1.0(eslint@9.12.0): 1968 dependencies: 1969 - eslint: 9.12.0 1970 1971 - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.12.0))(eslint@9.12.0)(prettier@3.1.0): 1972 dependencies: 1973 - eslint: 9.12.0 1974 prettier: 3.1.0 1975 prettier-linter-helpers: 1.0.0 1976 - synckit: 0.9.2 1977 optionalDependencies: 1978 - eslint-config-prettier: 9.1.0(eslint@9.12.0) 1979 1980 - eslint-plugin-react@7.37.1(eslint@9.12.0): 1981 dependencies: 1982 array-includes: 3.1.8 1983 array.prototype.findlast: 1.2.5 1984 - array.prototype.flatmap: 1.3.2 1985 array.prototype.tosorted: 1.1.4 1986 doctrine: 2.1.0 1987 - es-iterator-helpers: 1.1.0 1988 - eslint: 9.12.0 1989 estraverse: 5.3.0 1990 hasown: 2.0.2 1991 jsx-ast-utils: 3.3.5 1992 minimatch: 3.1.2 1993 - object.entries: 1.1.8 1994 object.fromentries: 2.0.8 1995 - object.values: 1.2.0 1996 prop-types: 15.8.1 1997 resolve: 2.0.0-next.5 1998 semver: 6.3.1 1999 - string.prototype.matchall: 4.0.11 2000 string.prototype.repeat: 1.0.0 2001 2002 - eslint-scope@8.1.0: 2003 dependencies: 2004 esrecurse: 4.3.0 2005 estraverse: 5.3.0 2006 2007 eslint-visitor-keys@3.4.3: {} 2008 2009 - eslint-visitor-keys@4.1.0: {} 2010 2011 - eslint@9.12.0: 2012 dependencies: 2013 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) 2014 - '@eslint-community/regexpp': 4.11.1 2015 - '@eslint/config-array': 0.18.0 2016 - '@eslint/core': 0.6.0 2017 - '@eslint/eslintrc': 3.1.0 2018 - '@eslint/js': 9.12.0 2019 - '@eslint/plugin-kit': 0.2.0 2020 - '@humanfs/node': 0.16.5 2021 '@humanwhocodes/module-importer': 1.0.1 2022 - '@humanwhocodes/retry': 0.3.1 2023 '@types/estree': 1.0.6 2024 '@types/json-schema': 7.0.15 2025 ajv: 6.12.6 2026 chalk: 4.1.2 2027 - cross-spawn: 7.0.3 2028 - debug: 4.3.4 2029 escape-string-regexp: 4.0.0 2030 - eslint-scope: 8.1.0 2031 - eslint-visitor-keys: 4.1.0 2032 - espree: 10.2.0 2033 - esquery: 1.5.0 2034 esutils: 2.0.3 2035 fast-deep-equal: 3.1.3 2036 file-entry-cache: 8.0.0 2037 find-up: 5.0.0 2038 glob-parent: 6.0.2 2039 - ignore: 5.3.0 2040 imurmurhash: 0.1.4 2041 is-glob: 4.0.3 2042 json-stable-stringify-without-jsonify: 1.0.1 ··· 2044 minimatch: 3.1.2 2045 natural-compare: 1.4.0 2046 optionator: 0.9.3 2047 - text-table: 0.2.0 2048 transitivePeerDependencies: 2049 - supports-color 2050 2051 - espree@10.2.0: 2052 dependencies: 2053 - acorn: 8.12.1 2054 - acorn-jsx: 5.3.2(acorn@8.12.1) 2055 - eslint-visitor-keys: 4.1.0 2056 2057 - esquery@1.5.0: 2058 dependencies: 2059 estraverse: 5.3.0 2060 ··· 2097 dependencies: 2098 reusify: 1.0.4 2099 2100 file-entry-cache@8.0.0: 2101 dependencies: 2102 flat-cache: 4.0.1 ··· 2105 dependencies: 2106 to-regex-range: 5.0.1 2107 2108 find-up@5.0.0: 2109 dependencies: 2110 locate-path: 6.0.0 ··· 2117 2118 flatted@3.2.9: {} 2119 2120 - for-each@0.3.3: 2121 dependencies: 2122 is-callable: 1.2.7 2123 2124 function-bind@1.1.2: {} 2125 2126 - function.prototype.name@1.1.6: 2127 dependencies: 2128 - call-bind: 1.0.7 2129 define-properties: 1.2.1 2130 - es-abstract: 1.23.3 2131 functions-have-names: 1.2.3 2132 2133 functions-have-names@1.2.3: {} 2134 2135 - get-intrinsic@1.2.4: 2136 dependencies: 2137 es-errors: 1.3.0 2138 function-bind: 1.1.2 2139 - has-proto: 1.0.3 2140 - has-symbols: 1.0.3 2141 hasown: 2.0.2 2142 2143 - get-symbol-description@1.0.2: 2144 dependencies: 2145 - call-bind: 1.0.7 2146 es-errors: 1.3.0 2147 - get-intrinsic: 1.2.4 2148 2149 glob-parent@5.1.2: 2150 dependencies: ··· 2159 globalthis@1.0.4: 2160 dependencies: 2161 define-properties: 1.2.1 2162 - gopd: 1.0.1 2163 2164 - gopd@1.0.1: 2165 - dependencies: 2166 - get-intrinsic: 1.2.4 2167 2168 graphemer@1.4.0: {} 2169 2170 - has-bigints@1.0.2: {} 2171 2172 has-flag@4.0.0: {} 2173 2174 has-property-descriptors@1.0.2: 2175 dependencies: 2176 - es-define-property: 1.0.0 2177 2178 - has-proto@1.0.3: {} 2179 2180 - has-symbols@1.0.3: {} 2181 2182 has-tostringtag@1.0.2: 2183 dependencies: 2184 - has-symbols: 1.0.3 2185 2186 hasown@2.0.2: 2187 dependencies: ··· 2191 2192 ieee754@1.2.1: {} 2193 2194 - ignore@5.3.0: {} 2195 - 2196 ignore@5.3.2: {} 2197 2198 import-fresh@3.3.0: ··· 2202 2203 imurmurhash@0.1.4: {} 2204 2205 - internal-slot@1.0.7: 2206 dependencies: 2207 es-errors: 1.3.0 2208 hasown: 2.0.2 2209 - side-channel: 1.0.6 2210 2211 - is-array-buffer@3.0.4: 2212 dependencies: 2213 - call-bind: 1.0.7 2214 - get-intrinsic: 1.2.4 2215 2216 - is-async-function@2.0.0: 2217 dependencies: 2218 has-tostringtag: 1.0.2 2219 2220 - is-bigint@1.0.4: 2221 dependencies: 2222 - has-bigints: 1.0.2 2223 2224 - is-boolean-object@1.1.2: 2225 dependencies: 2226 - call-bind: 1.0.7 2227 has-tostringtag: 1.0.2 2228 2229 is-callable@1.2.7: {} 2230 2231 - is-core-module@2.15.1: 2232 dependencies: 2233 hasown: 2.0.2 2234 2235 - is-data-view@1.0.1: 2236 dependencies: 2237 - is-typed-array: 1.1.13 2238 2239 - is-date-object@1.0.5: 2240 dependencies: 2241 has-tostringtag: 1.0.2 2242 2243 is-extglob@2.1.1: {} 2244 2245 - is-finalizationregistry@1.0.2: 2246 dependencies: 2247 - call-bind: 1.0.7 2248 2249 - is-generator-function@1.0.10: 2250 dependencies: 2251 has-tostringtag: 1.0.2 2252 2253 is-glob@4.0.3: 2254 dependencies: ··· 2256 2257 is-map@2.0.3: {} 2258 2259 - is-negative-zero@2.0.3: {} 2260 - 2261 - is-number-object@1.0.7: 2262 dependencies: 2263 has-tostringtag: 1.0.2 2264 2265 is-number@7.0.0: {} 2266 2267 - is-regex@1.1.4: 2268 dependencies: 2269 - call-bind: 1.0.7 2270 has-tostringtag: 1.0.2 2271 2272 is-set@2.0.3: {} 2273 2274 - is-shared-array-buffer@1.0.3: 2275 dependencies: 2276 - call-bind: 1.0.7 2277 2278 - is-string@1.0.7: 2279 dependencies: 2280 has-tostringtag: 1.0.2 2281 2282 - is-symbol@1.0.4: 2283 dependencies: 2284 - has-symbols: 1.0.3 2285 2286 - is-typed-array@1.1.13: 2287 dependencies: 2288 - which-typed-array: 1.1.15 2289 2290 is-weakmap@2.0.2: {} 2291 2292 - is-weakref@1.0.2: 2293 dependencies: 2294 - call-bind: 1.0.7 2295 2296 - is-weakset@2.0.3: 2297 dependencies: 2298 - call-bind: 1.0.7 2299 - get-intrinsic: 1.2.4 2300 2301 isarray@2.0.5: {} 2302 2303 isexe@2.0.0: {} 2304 2305 - iterator.prototype@1.1.3: 2306 dependencies: 2307 - define-properties: 1.2.1 2308 - get-intrinsic: 1.2.4 2309 - has-symbols: 1.0.3 2310 - reflect.getprototypeof: 1.0.6 2311 set-function-name: 2.0.2 2312 2313 js-tokens@4.0.0: {} 2314 ··· 2325 jsx-ast-utils@3.3.5: 2326 dependencies: 2327 array-includes: 3.1.8 2328 - array.prototype.flat: 1.3.2 2329 - object.assign: 4.1.5 2330 - object.values: 1.2.0 2331 2332 keyv@4.5.4: 2333 dependencies: ··· 2348 dependencies: 2349 js-tokens: 4.0.0 2350 2351 merge2@1.4.1: {} 2352 2353 meriyah@6.0.1: {} ··· 2358 dependencies: 2359 braces: 3.0.3 2360 picomatch: 2.3.1 2361 2362 minimatch@3.1.2: 2363 dependencies: ··· 2367 dependencies: 2368 brace-expansion: 2.0.1 2369 2370 - ms@2.1.2: {} 2371 2372 nanotar@0.1.1: {} 2373 2374 natural-compare@1.4.0: {} 2375 2376 object-assign@4.1.1: {} 2377 2378 - object-inspect@1.13.2: {} 2379 2380 object-keys@1.1.1: {} 2381 2382 - object.assign@4.1.5: 2383 dependencies: 2384 - call-bind: 1.0.7 2385 define-properties: 1.2.1 2386 - has-symbols: 1.0.3 2387 object-keys: 1.1.1 2388 2389 - object.entries@1.1.8: 2390 dependencies: 2391 - call-bind: 1.0.7 2392 define-properties: 1.2.1 2393 - es-object-atoms: 1.0.0 2394 2395 object.fromentries@2.0.8: 2396 dependencies: 2397 - call-bind: 1.0.7 2398 define-properties: 1.2.1 2399 - es-abstract: 1.23.3 2400 - es-object-atoms: 1.0.0 2401 2402 - object.values@1.2.0: 2403 dependencies: 2404 - call-bind: 1.0.7 2405 define-properties: 1.2.1 2406 - es-object-atoms: 1.0.0 2407 2408 optionator@0.9.3: 2409 dependencies: ··· 2414 prelude-ls: 1.2.1 2415 type-check: 0.4.0 2416 2417 p-limit@3.1.0: 2418 dependencies: 2419 yocto-queue: 0.1.0 ··· 2421 p-locate@5.0.0: 2422 dependencies: 2423 p-limit: 3.1.0 2424 2425 parent-module@1.0.1: 2426 dependencies: ··· 2432 2433 path-parse@1.0.7: {} 2434 2435 picomatch@2.3.1: {} 2436 2437 - possible-typed-array-names@1.0.0: {} 2438 2439 prelude-ls@1.2.1: {} 2440 ··· 2453 react-is: 16.13.1 2454 2455 punycode@2.3.1: {} 2456 2457 queue-microtask@1.2.3: {} 2458 ··· 2466 process: 0.11.10 2467 string_decoder: 1.3.0 2468 2469 - reflect.getprototypeof@1.0.6: 2470 dependencies: 2471 - call-bind: 1.0.7 2472 define-properties: 1.2.1 2473 - es-abstract: 1.23.3 2474 es-errors: 1.3.0 2475 - get-intrinsic: 1.2.4 2476 - globalthis: 1.0.4 2477 - which-builtin-type: 1.1.4 2478 2479 - regexp.prototype.flags@1.5.3: 2480 dependencies: 2481 - call-bind: 1.0.7 2482 define-properties: 1.2.1 2483 es-errors: 1.3.0 2484 set-function-name: 2.0.2 2485 2486 resolve-from@4.0.0: {} 2487 2488 resolve@2.0.0-next.5: 2489 dependencies: 2490 - is-core-module: 2.15.1 2491 path-parse: 1.0.7 2492 supports-preserve-symlinks-flag: 1.0.0 2493 2494 reusify@1.0.4: {} 2495 2496 run-parallel@1.2.0: 2497 dependencies: 2498 queue-microtask: 1.2.3 2499 2500 - safe-array-concat@1.1.2: 2501 dependencies: 2502 - call-bind: 1.0.7 2503 - get-intrinsic: 1.2.4 2504 - has-symbols: 1.0.3 2505 isarray: 2.0.5 2506 2507 - safe-buffer@5.1.2: {} 2508 2509 - safe-buffer@5.2.1: {} 2510 2511 - safe-regex-test@1.0.3: 2512 dependencies: 2513 - call-bind: 1.0.7 2514 es-errors: 1.3.0 2515 - is-regex: 1.1.4 2516 2517 semver@6.3.1: {} 2518 2519 - semver@7.6.3: {} 2520 2521 set-function-length@1.2.2: 2522 dependencies: 2523 define-data-property: 1.1.4 2524 es-errors: 1.3.0 2525 function-bind: 1.1.2 2526 - get-intrinsic: 1.2.4 2527 - gopd: 1.0.1 2528 has-property-descriptors: 1.0.2 2529 2530 set-function-name@2.0.2: ··· 2534 functions-have-names: 1.2.3 2535 has-property-descriptors: 1.0.2 2536 2537 shebang-command@2.0.0: 2538 dependencies: 2539 shebang-regex: 3.0.0 2540 2541 shebang-regex@3.0.0: {} 2542 2543 - side-channel@1.0.6: 2544 dependencies: 2545 - call-bind: 1.0.7 2546 es-errors: 1.3.0 2547 - get-intrinsic: 1.2.4 2548 - object-inspect: 1.13.2 2549 2550 standalone-electron-types@1.0.0: 2551 dependencies: 2552 '@types/node': 18.17.17 2553 2554 - string.prototype.matchall@4.0.11: 2555 dependencies: 2556 - call-bind: 1.0.7 2557 define-properties: 1.2.1 2558 - es-abstract: 1.23.3 2559 es-errors: 1.3.0 2560 - es-object-atoms: 1.0.0 2561 - get-intrinsic: 1.2.4 2562 - gopd: 1.0.1 2563 - has-symbols: 1.0.3 2564 - internal-slot: 1.0.7 2565 - regexp.prototype.flags: 1.5.3 2566 set-function-name: 2.0.2 2567 - side-channel: 1.0.6 2568 2569 string.prototype.repeat@1.0.0: 2570 dependencies: 2571 define-properties: 1.2.1 2572 - es-abstract: 1.23.3 2573 2574 - string.prototype.trim@1.2.9: 2575 dependencies: 2576 - call-bind: 1.0.7 2577 define-properties: 1.2.1 2578 - es-abstract: 1.23.3 2579 - es-object-atoms: 1.0.0 2580 2581 - string.prototype.trimend@1.0.8: 2582 dependencies: 2583 - call-bind: 1.0.7 2584 define-properties: 1.2.1 2585 - es-object-atoms: 1.0.0 2586 2587 string.prototype.trimstart@1.0.8: 2588 dependencies: 2589 - call-bind: 1.0.7 2590 define-properties: 1.2.1 2591 - es-object-atoms: 1.0.0 2592 2593 string_decoder@1.3.0: 2594 dependencies: ··· 2602 2603 supports-preserve-symlinks-flag@1.0.0: {} 2604 2605 - synckit@0.9.2: 2606 dependencies: 2607 - '@pkgr/core': 0.1.1 2608 - tslib: 2.7.0 2609 2610 - text-table@0.2.0: {} 2611 2612 to-regex-range@5.0.1: 2613 dependencies: 2614 is-number: 7.0.0 2615 2616 - ts-api-utils@1.3.0(typescript@5.3.2): 2617 dependencies: 2618 - typescript: 5.3.2 2619 2620 - tslib@2.7.0: {} 2621 2622 type-check@0.4.0: 2623 dependencies: 2624 prelude-ls: 1.2.1 2625 2626 - typed-array-buffer@1.0.2: 2627 dependencies: 2628 - call-bind: 1.0.7 2629 es-errors: 1.3.0 2630 - is-typed-array: 1.1.13 2631 2632 - typed-array-byte-length@1.0.1: 2633 dependencies: 2634 - call-bind: 1.0.7 2635 - for-each: 0.3.3 2636 - gopd: 1.0.1 2637 - has-proto: 1.0.3 2638 - is-typed-array: 1.1.13 2639 2640 - typed-array-byte-offset@1.0.2: 2641 dependencies: 2642 available-typed-arrays: 1.0.7 2643 - call-bind: 1.0.7 2644 - for-each: 0.3.3 2645 - gopd: 1.0.1 2646 - has-proto: 1.0.3 2647 - is-typed-array: 1.1.13 2648 2649 - typed-array-length@1.0.6: 2650 dependencies: 2651 - call-bind: 1.0.7 2652 - for-each: 0.3.3 2653 - gopd: 1.0.1 2654 - has-proto: 1.0.3 2655 - is-typed-array: 1.1.13 2656 - possible-typed-array-names: 1.0.0 2657 2658 - typescript-eslint@8.8.1(eslint@9.12.0)(typescript@5.3.2): 2659 dependencies: 2660 - '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.3.2))(eslint@9.12.0)(typescript@5.3.2) 2661 - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 2662 - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 2663 - optionalDependencies: 2664 - typescript: 5.3.2 2665 transitivePeerDependencies: 2666 - - eslint 2667 - supports-color 2668 2669 - typescript@5.3.2: {} 2670 2671 - unbox-primitive@1.0.2: 2672 dependencies: 2673 - call-bind: 1.0.7 2674 - has-bigints: 1.0.2 2675 - has-symbols: 1.0.3 2676 - which-boxed-primitive: 1.0.2 2677 2678 undici-types@6.20.0: {} 2679 2680 uri-js@4.4.1: 2681 dependencies: 2682 punycode: 2.3.1 2683 2684 - utilium@1.1.3: 2685 dependencies: 2686 eventemitter3: 5.0.1 2687 optionalDependencies: 2688 '@xterm/xterm': 5.5.0 2689 2690 - which-boxed-primitive@1.0.2: 2691 dependencies: 2692 - is-bigint: 1.0.4 2693 - is-boolean-object: 1.1.2 2694 - is-number-object: 1.0.7 2695 - is-string: 1.0.7 2696 - is-symbol: 1.0.4 2697 2698 - which-builtin-type@1.1.4: 2699 dependencies: 2700 - function.prototype.name: 1.1.6 2701 has-tostringtag: 1.0.2 2702 - is-async-function: 2.0.0 2703 - is-date-object: 1.0.5 2704 - is-finalizationregistry: 1.0.2 2705 - is-generator-function: 1.0.10 2706 - is-regex: 1.1.4 2707 - is-weakref: 1.0.2 2708 isarray: 2.0.5 2709 - which-boxed-primitive: 1.0.2 2710 which-collection: 1.0.2 2711 - which-typed-array: 1.1.15 2712 2713 which-collection@1.0.2: 2714 dependencies: 2715 is-map: 2.0.3 2716 is-set: 2.0.3 2717 is-weakmap: 2.0.2 2718 - is-weakset: 2.0.3 2719 2720 - which-typed-array@1.1.15: 2721 dependencies: 2722 available-typed-arrays: 1.0.7 2723 - call-bind: 1.0.7 2724 - for-each: 0.3.3 2725 - gopd: 1.0.1 2726 has-tostringtag: 1.0.2 2727 2728 which@2.0.2: 2729 dependencies: 2730 isexe: 2.0.0 2731 2732 yocto-queue@0.1.0: {} 2733 2734 - zustand@5.0.3(@types/react@18.3.10): 2735 optionalDependencies: 2736 - '@types/react': 18.3.10
··· 4 autoInstallPeers: true 5 excludeLinksFromLockfile: false 6 7 + catalogs: 8 + dev: 9 + '@moonlight-mod/eslint-config': 10 + specifier: github:moonlight-mod/eslint-config 11 + version: 1.0.1 12 + '@types/chrome': 13 + specifier: ^0.0.313 14 + version: 0.0.313 15 + '@types/node': 16 + specifier: ^22.14.0 17 + version: 22.14.0 18 + esbuild: 19 + specifier: ^0.19.3 20 + version: 0.19.3 21 + esbuild-copy-static-files: 22 + specifier: ^0.1.0 23 + version: 0.1.0 24 + eslint: 25 + specifier: ^9.12.0 26 + version: 9.23.0 27 + husky: 28 + specifier: ^8.0.3 29 + version: 8.0.3 30 + prettier: 31 + specifier: ^3.1.0 32 + version: 3.1.0 33 + taze: 34 + specifier: ^19.0.4 35 + version: 19.0.4 36 + typescript: 37 + specifier: ^5.3.3 38 + version: 5.8.2 39 + prod: 40 + '@moonlight-mod/lunast': 41 + specifier: ^1.0.1 42 + version: 1.0.1 43 + '@moonlight-mod/mappings': 44 + specifier: ^1.1.25 45 + version: 1.1.25 46 + '@moonlight-mod/moonmap': 47 + specifier: ^1.0.5 48 + version: 1.0.5 49 + '@zenfs/core': 50 + specifier: ^2.0.0 51 + version: 2.0.0 52 + '@zenfs/dom': 53 + specifier: ^1.1.3 54 + version: 1.1.6 55 + microdiff: 56 + specifier: ^1.5.0 57 + version: 1.5.0 58 + nanotar: 59 + specifier: ^0.1.1 60 + version: 0.1.1 61 + 62 importers: 63 64 .: 65 devDependencies: 66 '@moonlight-mod/eslint-config': 67 + specifier: catalog:dev 68 + version: https://codeload.github.com/moonlight-mod/eslint-config/tar.gz/e262ac24e1a0955a9b3e0d66da247a0a8c0446c9(@types/eslint@9.6.1)(eslint@9.23.0(jiti@2.4.2))(prettier@3.1.0)(typescript@5.8.2) 69 + '@types/node': 70 + specifier: catalog:dev 71 + version: 22.14.0 72 esbuild: 73 + specifier: catalog:dev 74 version: 0.19.3 75 esbuild-copy-static-files: 76 + specifier: catalog:dev 77 version: 0.1.0 78 eslint: 79 + specifier: catalog:dev 80 + version: 9.23.0(jiti@2.4.2) 81 husky: 82 + specifier: catalog:dev 83 version: 8.0.3 84 prettier: 85 + specifier: catalog:dev 86 version: 3.1.0 87 + taze: 88 + specifier: catalog:dev 89 + version: 19.0.4 90 typescript: 91 + specifier: catalog:dev 92 + version: 5.8.2 93 94 packages/browser: 95 dependencies: ··· 103 specifier: workspace:* 104 version: link:../web-preload 105 '@zenfs/core': 106 + specifier: catalog:prod 107 + version: 2.0.0 108 '@zenfs/dom': 109 + specifier: catalog:prod 110 + version: 1.1.6(@zenfs/core@2.0.0)(utilium@1.10.1) 111 + devDependencies: 112 + '@types/chrome': 113 + specifier: catalog:dev 114 + version: 0.0.313 115 116 packages/core: 117 dependencies: ··· 128 specifier: workspace:* 129 version: link:../types 130 microdiff: 131 + specifier: catalog:prod 132 version: 1.5.0 133 nanotar: 134 + specifier: catalog:prod 135 version: 0.1.1 136 137 packages/injector: ··· 155 packages/types: 156 dependencies: 157 '@moonlight-mod/lunast': 158 + specifier: ^1.0.1 159 + version: 1.0.1 160 '@moonlight-mod/mappings': 161 + specifier: ^1.1.25 162 + version: 1.1.25(@moonlight-mod/lunast@1.0.1)(@moonlight-mod/moonmap@1.0.5) 163 '@moonlight-mod/moonmap': 164 + specifier: ^1.0.5 165 + version: 1.0.5 166 '@types/react': 167 specifier: ^18.3.10 168 + version: 18.3.20 169 csstype: 170 + specifier: ^3.1.3 171 + version: 3.1.3 172 standalone-electron-types: 173 specifier: ^1.0.0 174 version: 1.0.0 ··· 179 specifier: workspace:* 180 version: link:../core 181 '@moonlight-mod/lunast': 182 + specifier: catalog:prod 183 + version: 1.0.1 184 '@moonlight-mod/mappings': 185 + specifier: catalog:prod 186 + version: 1.1.25(@moonlight-mod/lunast@1.0.1)(@moonlight-mod/moonmap@1.0.5) 187 '@moonlight-mod/moonmap': 188 + specifier: catalog:prod 189 + version: 1.0.5 190 '@moonlight-mod/types': 191 specifier: workspace:* 192 version: link:../types ··· 196 '@aashutoshrathi/word-wrap@1.2.6': 197 resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 198 engines: {node: '>=0.10.0'} 199 + 200 + '@antfu/ni@24.3.0': 201 + resolution: {integrity: sha512-wBSav4mBxvHEW9RbdSo1SWLQ6MAlT0Dc423weC58yOWqW4OcMvtnNDdDrxOZeJ88fEIyPK93gDUWIelBxzSf8g==} 202 + hasBin: true 203 204 '@esbuild/android-arm64@0.19.3': 205 resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==} ··· 333 cpu: [x64] 334 os: [win32] 335 336 + '@eslint-community/eslint-utils@4.5.1': 337 + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} 338 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 339 peerDependencies: 340 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 341 342 + '@eslint-community/regexpp@4.12.1': 343 + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 344 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 345 346 + '@eslint/config-array@0.19.2': 347 + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 348 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 349 + 350 + '@eslint/config-helpers@0.2.1': 351 + resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} 352 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 353 354 + '@eslint/core@0.12.0': 355 + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 356 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 357 358 + '@eslint/core@0.13.0': 359 + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} 360 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 361 + 362 + '@eslint/eslintrc@3.3.1': 363 + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 364 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 365 366 + '@eslint/js@9.23.0': 367 + resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} 368 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 369 370 + '@eslint/object-schema@2.1.6': 371 + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 372 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 373 374 + '@eslint/plugin-kit@0.2.8': 375 + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} 376 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 377 378 + '@humanfs/core@0.19.1': 379 + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 380 engines: {node: '>=18.18.0'} 381 382 + '@humanfs/node@0.16.6': 383 + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 384 engines: {node: '>=18.18.0'} 385 386 '@humanwhocodes/module-importer@1.0.1': ··· 391 resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 392 engines: {node: '>=18.18'} 393 394 + '@humanwhocodes/retry@0.4.2': 395 + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 396 + engines: {node: '>=18.18'} 397 + 398 '@moonlight-mod/eslint-config@https://codeload.github.com/moonlight-mod/eslint-config/tar.gz/e262ac24e1a0955a9b3e0d66da247a0a8c0446c9': 399 resolution: {tarball: https://codeload.github.com/moonlight-mod/eslint-config/tar.gz/e262ac24e1a0955a9b3e0d66da247a0a8c0446c9} 400 version: 1.0.1 ··· 402 eslint: '>= 9' 403 typescript: '>= 5.3' 404 405 + '@moonlight-mod/lunast@1.0.1': 406 + resolution: {integrity: sha512-K3vxzDlfFuYKjciIW2FMlcZ1qrrkAGDGpSBlNqYGtJ0sMt9bRCd2lpSpg6AX/giSljDtmAUXa/5mOfUoDQxjBA==} 407 408 + '@moonlight-mod/mappings@1.1.25': 409 + resolution: {integrity: sha512-bgnSN9H/IBdMGxGev6RQKXuzhQxwo1090NhIDHnflguZnjiu2pg/usPfh76bqyhxRuX4SS7tiZSNTwBoSflCLg==} 410 + engines: {node: '>=22', npm: pnpm, pnpm: '>=10', yarn: pnpm} 411 peerDependencies: 412 + '@moonlight-mod/lunast': ^1.0.1 413 + '@moonlight-mod/moonmap': ^1.0.5 414 415 + '@moonlight-mod/moonmap@1.0.5': 416 + resolution: {integrity: sha512-Fdpxj8ghdulKB6TlTnchlCPey2YUKgEf1chuO1ofOIcvlqnVPBcQwSf2S80naOUQpXCDo4dQ+LWSE2fmhdDiiw==} 417 418 '@nodelib/fs.scandir@2.1.5': 419 resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} ··· 427 resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 428 engines: {node: '>= 8'} 429 430 + '@pkgr/core@0.2.0': 431 + resolution: {integrity: sha512-vsJDAkYR6qCPu+ioGScGiMYR7LvZYIXh/dlQeviqoTWNCVfKTLYD/LkNWH4Mxsv2a5vpIRc77FN5DnmK1eBggQ==} 432 engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 433 434 + '@quansync/fs@0.1.2': 435 + resolution: {integrity: sha512-ezIadUb1aFhwJLd++WVqVpi9rnlX8vnd4ju7saPhwLHJN1mJgOv0puePTGV+FbtSnWtwoHDT8lAm4kagDZmpCg==} 436 + engines: {node: '>=20.0.0'} 437 + 438 '@types/chroma-js@3.1.0': 439 resolution: {integrity: sha512-Uwl3SOtUkbQ6Ye6ZYu4q4xdLGBzmY839sEHYtOT7i691neeyd+7fXWT5VIkcUSfNwIFrIjQutNYQn9h4q5HFvg==} 440 441 + '@types/chrome@0.0.313': 442 + resolution: {integrity: sha512-9R5T7gTaYZhkxlu+Ho4wk9FL+y/werWQY2yjGWSqCuiTsqS7nL/BE5UMTP6rU7J+oIG2FRKqrEycHhJATeltVA==} 443 + 444 + '@types/eslint@9.6.1': 445 + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} 446 + 447 '@types/estree-jsx@1.0.5': 448 resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} 449 450 '@types/estree@1.0.6': 451 resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 452 453 + '@types/estree@1.0.7': 454 + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 455 + 456 '@types/fbemitter@2.0.35': 457 resolution: {integrity: sha512-Xem6d7qUfmouCHntCrRYgDBwbf+WWRd6G+7WEFlEZFZ67LZXiYRvT2LV8wcZa6mIaAil95+ABQdKgB6hPIsnng==} 458 459 + '@types/filesystem@0.0.36': 460 + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} 461 + 462 + '@types/filewriter@0.0.33': 463 + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} 464 + 465 '@types/flux@3.1.14': 466 resolution: {integrity: sha512-WRXN0kQPCnqxN0/PgNgc7WBF6c8rbSHsEep3/qBLpsQ824RONdOmTs0TV7XhIW2GDNRAHO2CqCgAFLR5PChosw==} 467 468 + '@types/har-format@1.2.16': 469 + resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} 470 + 471 '@types/highlightjs@9.12.6': 472 resolution: {integrity: sha512-Qfd1DUrwE851Hc3tExADJY4qY8yeZMt06Xw9AJm/UtpneepJS3MZY29c33BY0wP899veaaHD4gZzYiSuQm84Fg==} 473 ··· 480 '@types/node@18.17.17': 481 resolution: {integrity: sha512-cOxcXsQ2sxiwkykdJqvyFS+MLQPLvIdwh5l6gNg8qF6s+C7XSkEWOZjK+XhUZd+mYvHV/180g2cnCcIl4l06Pw==} 482 483 + '@types/node@22.13.6': 484 + resolution: {integrity: sha512-GYmF65GI7417CpZXsEXMjT8goQQDnpRnJnDw6jIYa+le3V/lMazPZ4vZmK1B/9R17fh2VLr2zuy9d/h5xgrLAg==} 485 + 486 + '@types/node@22.14.0': 487 + resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} 488 489 '@types/platform@1.3.6': 490 resolution: {integrity: sha512-ZmSaqHuvzv+jC232cFoz2QqPUkaj6EvMmCrWcx3WRr7xTPVFCMUOTcOq8m2d+Zw1iKRc1kDiaA+jtNrV0hkVew==} ··· 492 '@types/prop-types@15.7.13': 493 resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} 494 495 + '@types/react@18.3.20': 496 + resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} 497 498 + '@typescript-eslint/eslint-plugin@8.29.0': 499 + resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==} 500 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 501 peerDependencies: 502 '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 503 eslint: ^8.57.0 || ^9.0.0 504 + typescript: '>=4.8.4 <5.9.0' 505 506 + '@typescript-eslint/parser@8.29.0': 507 + resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==} 508 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 509 peerDependencies: 510 eslint: ^8.57.0 || ^9.0.0 511 + typescript: '>=4.8.4 <5.9.0' 512 513 + '@typescript-eslint/scope-manager@8.29.0': 514 + resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==} 515 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 516 517 + '@typescript-eslint/type-utils@8.29.0': 518 + resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==} 519 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 520 peerDependencies: 521 + eslint: ^8.57.0 || ^9.0.0 522 + typescript: '>=4.8.4 <5.9.0' 523 524 + '@typescript-eslint/types@8.29.0': 525 + resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==} 526 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 527 528 + '@typescript-eslint/typescript-estree@8.29.0': 529 + resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==} 530 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 531 peerDependencies: 532 + typescript: '>=4.8.4 <5.9.0' 533 534 + '@typescript-eslint/utils@8.29.0': 535 + resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==} 536 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 537 peerDependencies: 538 eslint: ^8.57.0 || ^9.0.0 539 + typescript: '>=4.8.4 <5.9.0' 540 541 + '@typescript-eslint/visitor-keys@8.29.0': 542 + resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==} 543 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 544 545 '@xterm/xterm@5.5.0': 546 resolution: {integrity: sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==} 547 548 + '@zenfs/core@2.0.0': 549 + resolution: {integrity: sha512-wOKNFTY1DJ1vdLqKdU7M8cRh0nVYZcDVu7WHuk/3u49hrSwTZVm4PzGxJUjFd8O9Wi3U5nYTbZoN7RX5mS2ldA==} 550 + engines: {node: '>= 18'} 551 hasBin: true 552 553 + '@zenfs/dom@1.1.6': 554 + resolution: {integrity: sha512-7SBTWgA0esuEv/TE+N/xk6W/XJf8uBF+LhlPNHQdXds0H7aOy/UYsWv/8glvARe+meDMMidoeWFLzUWoMXfjlA==} 555 engines: {node: '>= 18'} 556 peerDependencies: 557 + '@zenfs/core': ^2.0.0 558 + utilium: ^1.9.0 559 560 abort-controller@3.0.0: 561 resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} ··· 566 peerDependencies: 567 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 568 569 + acorn@8.14.1: 570 + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 571 engines: {node: '>=0.4.0'} 572 hasBin: true 573 ··· 578 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 579 engines: {node: '>=8'} 580 581 + ansis@3.17.0: 582 + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} 583 + engines: {node: '>=14'} 584 + 585 argparse@2.0.1: 586 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 587 588 + array-buffer-byte-length@1.0.2: 589 + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 590 engines: {node: '>= 0.4'} 591 592 array-includes@3.1.8: ··· 597 resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 598 engines: {node: '>= 0.4'} 599 600 + array.prototype.flat@1.3.3: 601 + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} 602 engines: {node: '>= 0.4'} 603 604 + array.prototype.flatmap@1.3.3: 605 + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} 606 engines: {node: '>= 0.4'} 607 608 array.prototype.tosorted@1.1.4: 609 resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 610 engines: {node: '>= 0.4'} 611 612 + arraybuffer.prototype.slice@1.0.4: 613 + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 614 engines: {node: '>= 0.4'} 615 616 astring@1.9.0: 617 resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} 618 hasBin: true 619 + 620 + async-function@1.0.0: 621 + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} 622 + engines: {node: '>= 0.4'} 623 624 available-typed-arrays@1.0.7: 625 resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} ··· 644 buffer@6.0.3: 645 resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 646 647 + cac@6.7.14: 648 + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 649 + engines: {node: '>=8'} 650 + 651 + call-bind-apply-helpers@1.0.2: 652 + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 653 + engines: {node: '>= 0.4'} 654 + 655 + call-bind@1.0.8: 656 + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 657 + engines: {node: '>= 0.4'} 658 + 659 + call-bound@1.0.4: 660 + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 661 engines: {node: '>= 0.4'} 662 663 callsites@3.1.0: ··· 678 concat-map@0.0.1: 679 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 680 681 + cross-spawn@7.0.6: 682 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 683 engines: {node: '>= 8'} 684 685 csstype@3.1.3: 686 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 687 688 + data-view-buffer@1.0.2: 689 + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 690 engines: {node: '>= 0.4'} 691 692 + data-view-byte-length@1.0.2: 693 + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 694 engines: {node: '>= 0.4'} 695 696 + data-view-byte-offset@1.0.1: 697 + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 698 engines: {node: '>= 0.4'} 699 700 + debug@4.4.0: 701 + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 702 engines: {node: '>=6.0'} 703 peerDependencies: 704 supports-color: '*' ··· 717 resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 718 engines: {node: '>= 0.4'} 719 720 + defu@6.1.4: 721 + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 722 + 723 + destr@2.0.4: 724 + resolution: {integrity: sha512-FCAorltMy7QwX0QU38jOkhrv20LBpsHA8ogzvMhhPHCCKVCaN6GxrB0GGaWEWBUYI4eEjjfJ95RdP6dk9IdMQA==} 725 + 726 doctrine@2.1.0: 727 resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 728 engines: {node: '>=0.10.0'} 729 730 + dunder-proto@1.0.1: 731 + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 732 engines: {node: '>= 0.4'} 733 734 + es-abstract@1.23.9: 735 + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} 736 + engines: {node: '>= 0.4'} 737 + 738 + es-define-property@1.0.1: 739 + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 740 engines: {node: '>= 0.4'} 741 742 es-errors@1.3.0: 743 resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 744 engines: {node: '>= 0.4'} 745 746 + es-iterator-helpers@1.2.1: 747 + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} 748 engines: {node: '>= 0.4'} 749 750 + es-object-atoms@1.1.1: 751 + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 752 engines: {node: '>= 0.4'} 753 754 + es-set-tostringtag@2.1.0: 755 + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 756 engines: {node: '>= 0.4'} 757 758 + es-shim-unscopables@1.1.0: 759 + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} 760 + engines: {node: '>= 0.4'} 761 762 + es-to-primitive@1.3.0: 763 + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 764 engines: {node: '>= 0.4'} 765 766 esbuild-copy-static-files@0.1.0: ··· 781 peerDependencies: 782 eslint: '>=7.0.0' 783 784 + eslint-plugin-prettier@5.2.6: 785 + resolution: {integrity: sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==} 786 engines: {node: ^14.18.0 || >=16.0.0} 787 peerDependencies: 788 '@types/eslint': '>=8.0.0' 789 eslint: '>=8.0.0' 790 + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' 791 prettier: '>=3.0.0' 792 peerDependenciesMeta: 793 '@types/eslint': ··· 795 eslint-config-prettier: 796 optional: true 797 798 + eslint-plugin-react@7.37.5: 799 + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} 800 engines: {node: '>=4'} 801 peerDependencies: 802 eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 803 804 + eslint-scope@8.3.0: 805 + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 806 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 807 808 eslint-visitor-keys@3.4.3: 809 resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 810 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 811 812 + eslint-visitor-keys@4.2.0: 813 + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 814 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 815 816 + eslint@9.23.0: 817 + resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} 818 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 819 hasBin: true 820 peerDependencies: ··· 823 jiti: 824 optional: true 825 826 + espree@10.3.0: 827 + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 828 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 829 830 + esquery@1.6.0: 831 + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 832 engines: {node: '>=0.10'} 833 834 esrecurse@4.3.0: ··· 876 fastq@1.17.1: 877 resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 878 879 + fdir@6.4.3: 880 + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 881 + peerDependencies: 882 + picomatch: ^3 || ^4 883 + peerDependenciesMeta: 884 + picomatch: 885 + optional: true 886 + 887 file-entry-cache@8.0.0: 888 resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 889 engines: {node: '>=16.0.0'} ··· 892 resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 893 engines: {node: '>=8'} 894 895 + find-up-simple@1.0.1: 896 + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} 897 + engines: {node: '>=18'} 898 + 899 find-up@5.0.0: 900 resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 901 engines: {node: '>=10'} ··· 907 flatted@3.2.9: 908 resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 909 910 + for-each@0.3.5: 911 + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 912 + engines: {node: '>= 0.4'} 913 914 function-bind@1.1.2: 915 resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 916 917 + function.prototype.name@1.1.8: 918 + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 919 engines: {node: '>= 0.4'} 920 921 functions-have-names@1.2.3: 922 resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 923 924 + fzf@0.5.2: 925 + resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} 926 + 927 + get-intrinsic@1.3.0: 928 + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 929 engines: {node: '>= 0.4'} 930 931 + get-proto@1.0.1: 932 + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 933 + engines: {node: '>= 0.4'} 934 + 935 + get-symbol-description@1.1.0: 936 + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 937 engines: {node: '>= 0.4'} 938 939 glob-parent@5.1.2: ··· 952 resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 953 engines: {node: '>= 0.4'} 954 955 + gopd@1.2.0: 956 + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 957 + engines: {node: '>= 0.4'} 958 959 graphemer@1.4.0: 960 resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 961 962 + has-bigints@1.1.0: 963 + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 964 + engines: {node: '>= 0.4'} 965 966 has-flag@4.0.0: 967 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} ··· 970 has-property-descriptors@1.0.2: 971 resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 972 973 + has-proto@1.2.0: 974 + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 975 engines: {node: '>= 0.4'} 976 977 + has-symbols@1.1.0: 978 + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 979 engines: {node: '>= 0.4'} 980 981 has-tostringtag@1.0.2: ··· 993 994 ieee754@1.2.1: 995 resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 996 997 ignore@5.3.2: 998 resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} ··· 1006 resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1007 engines: {node: '>=0.8.19'} 1008 1009 + internal-slot@1.1.0: 1010 + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 1011 engines: {node: '>= 0.4'} 1012 1013 + is-array-buffer@3.0.5: 1014 + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 1015 engines: {node: '>= 0.4'} 1016 1017 + is-async-function@2.1.1: 1018 + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} 1019 engines: {node: '>= 0.4'} 1020 1021 + is-bigint@1.1.0: 1022 + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 1023 + engines: {node: '>= 0.4'} 1024 1025 + is-boolean-object@1.2.2: 1026 + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} 1027 engines: {node: '>= 0.4'} 1028 1029 is-callable@1.2.7: 1030 resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1031 engines: {node: '>= 0.4'} 1032 1033 + is-core-module@2.16.1: 1034 + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1035 engines: {node: '>= 0.4'} 1036 1037 + is-data-view@1.0.2: 1038 + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 1039 engines: {node: '>= 0.4'} 1040 1041 + is-date-object@1.1.0: 1042 + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 1043 engines: {node: '>= 0.4'} 1044 1045 is-extglob@2.1.1: 1046 resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1047 engines: {node: '>=0.10.0'} 1048 1049 + is-finalizationregistry@1.1.1: 1050 + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 1051 + engines: {node: '>= 0.4'} 1052 1053 + is-generator-function@1.1.0: 1054 + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 1055 engines: {node: '>= 0.4'} 1056 1057 is-glob@4.0.3: ··· 1062 resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1063 engines: {node: '>= 0.4'} 1064 1065 + is-number-object@1.1.1: 1066 + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 1067 engines: {node: '>= 0.4'} 1068 1069 is-number@7.0.0: 1070 resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1071 engines: {node: '>=0.12.0'} 1072 1073 + is-regex@1.2.1: 1074 + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 1075 engines: {node: '>= 0.4'} 1076 1077 is-set@2.0.3: 1078 resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1079 engines: {node: '>= 0.4'} 1080 1081 + is-shared-array-buffer@1.0.4: 1082 + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 1083 engines: {node: '>= 0.4'} 1084 1085 + is-string@1.1.1: 1086 + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 1087 engines: {node: '>= 0.4'} 1088 1089 + is-symbol@1.1.1: 1090 + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 1091 engines: {node: '>= 0.4'} 1092 1093 + is-typed-array@1.1.15: 1094 + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 1095 engines: {node: '>= 0.4'} 1096 1097 is-weakmap@2.0.2: 1098 resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1099 engines: {node: '>= 0.4'} 1100 1101 + is-weakref@1.1.1: 1102 + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} 1103 + engines: {node: '>= 0.4'} 1104 1105 + is-weakset@2.0.4: 1106 + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 1107 engines: {node: '>= 0.4'} 1108 1109 isarray@2.0.5: ··· 1112 isexe@2.0.0: 1113 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1114 1115 + iterator.prototype@1.1.5: 1116 + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} 1117 engines: {node: '>= 0.4'} 1118 + 1119 + jiti@2.4.2: 1120 + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 1121 + hasBin: true 1122 1123 js-tokens@4.0.0: 1124 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} ··· 1158 resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1159 hasBin: true 1160 1161 + math-intrinsics@1.1.0: 1162 + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1163 + engines: {node: '>= 0.4'} 1164 + 1165 merge2@1.4.1: 1166 resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1167 engines: {node: '>= 8'} ··· 1177 resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1178 engines: {node: '>=8.6'} 1179 1180 + mimic-function@5.0.1: 1181 + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} 1182 + engines: {node: '>=18'} 1183 + 1184 minimatch@3.1.2: 1185 resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1186 ··· 1188 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1189 engines: {node: '>=16 || 14 >=14.17'} 1190 1191 + ms@2.1.3: 1192 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1193 1194 nanotar@0.1.1: 1195 resolution: {integrity: sha512-AiJsGsSF3O0havL1BydvI4+wR76sKT+okKRwWIaK96cZUnXqH0uNBOsHlbwZq3+m2BR1VKqHDVudl3gO4mYjpQ==} ··· 1197 natural-compare@1.4.0: 1198 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1199 1200 + node-fetch-native@1.6.6: 1201 + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} 1202 + 1203 object-assign@4.1.1: 1204 resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1205 engines: {node: '>=0.10.0'} 1206 1207 + object-inspect@1.13.4: 1208 + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1209 engines: {node: '>= 0.4'} 1210 1211 object-keys@1.1.1: 1212 resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1213 engines: {node: '>= 0.4'} 1214 1215 + object.assign@4.1.7: 1216 + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1217 engines: {node: '>= 0.4'} 1218 1219 + object.entries@1.1.9: 1220 + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} 1221 engines: {node: '>= 0.4'} 1222 1223 object.fromentries@2.0.8: 1224 resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1225 engines: {node: '>= 0.4'} 1226 1227 + object.values@1.2.1: 1228 + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} 1229 engines: {node: '>= 0.4'} 1230 1231 + ofetch@1.4.1: 1232 + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} 1233 + 1234 + onetime@7.0.0: 1235 + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 1236 + engines: {node: '>=18'} 1237 + 1238 optionator@0.9.3: 1239 resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1240 engines: {node: '>= 0.8.0'} 1241 1242 + own-keys@1.0.1: 1243 + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1244 + engines: {node: '>= 0.4'} 1245 + 1246 p-limit@3.1.0: 1247 resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1248 engines: {node: '>=10'} ··· 1250 p-locate@5.0.0: 1251 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1252 engines: {node: '>=10'} 1253 + 1254 + package-manager-detector@1.1.0: 1255 + resolution: {integrity: sha512-Y8f9qUlBzW8qauJjd/eu6jlpJZsuPJm2ZAV0cDVd420o4EdpH5RPdoCv+60/TdJflGatr4sDfpAL6ArWZbM5tA==} 1256 1257 parent-module@1.0.1: 1258 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} ··· 1268 1269 path-parse@1.0.7: 1270 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1271 + 1272 + pathe@2.0.3: 1273 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1274 1275 picomatch@2.3.1: 1276 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1277 engines: {node: '>=8.6'} 1278 1279 + picomatch@4.0.2: 1280 + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1281 + engines: {node: '>=12'} 1282 + 1283 + pnpm-workspace-yaml@0.3.1: 1284 + resolution: {integrity: sha512-3nW5RLmREmZ8Pm8MbPsO2RM+99RRjYd25ynj3NV0cFsN7CcEl4sDFzgoFmSyduFwxFQ2Qbu3y2UdCh6HlyUOeA==} 1285 + 1286 + possible-typed-array-names@1.1.0: 1287 + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1288 engines: {node: '>= 0.4'} 1289 1290 prelude-ls@1.2.1: ··· 1311 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1312 engines: {node: '>=6'} 1313 1314 + quansync@0.2.10: 1315 + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} 1316 + 1317 queue-microtask@1.2.3: 1318 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1319 ··· 1324 resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} 1325 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1326 1327 + reflect.getprototypeof@1.0.10: 1328 + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1329 engines: {node: '>= 0.4'} 1330 1331 + regexp.prototype.flags@1.5.4: 1332 + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1333 engines: {node: '>= 0.4'} 1334 1335 resolve-from@4.0.0: ··· 1340 resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1341 hasBin: true 1342 1343 + restore-cursor@5.1.0: 1344 + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} 1345 + engines: {node: '>=18'} 1346 + 1347 reusify@1.0.4: 1348 resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1349 engines: {iojs: '>=1.0.0', node: '>=0.10.0'} ··· 1351 run-parallel@1.2.0: 1352 resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1353 1354 + safe-array-concat@1.1.3: 1355 + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1356 engines: {node: '>=0.4'} 1357 1358 safe-buffer@5.2.1: 1359 resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1360 1361 + safe-push-apply@1.0.0: 1362 + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1363 + engines: {node: '>= 0.4'} 1364 + 1365 + safe-regex-test@1.1.0: 1366 + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1367 engines: {node: '>= 0.4'} 1368 1369 semver@6.3.1: 1370 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1371 hasBin: true 1372 1373 + semver@7.7.1: 1374 + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1375 engines: {node: '>=10'} 1376 hasBin: true 1377 ··· 1383 resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1384 engines: {node: '>= 0.4'} 1385 1386 + set-proto@1.0.0: 1387 + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 1388 + engines: {node: '>= 0.4'} 1389 + 1390 shebang-command@2.0.0: 1391 resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1392 engines: {node: '>=8'} ··· 1395 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1396 engines: {node: '>=8'} 1397 1398 + side-channel-list@1.0.0: 1399 + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1400 + engines: {node: '>= 0.4'} 1401 + 1402 + side-channel-map@1.0.1: 1403 + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1404 + engines: {node: '>= 0.4'} 1405 + 1406 + side-channel-weakmap@1.0.2: 1407 + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1408 + engines: {node: '>= 0.4'} 1409 + 1410 + side-channel@1.1.0: 1411 + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1412 engines: {node: '>= 0.4'} 1413 1414 + signal-exit@4.1.0: 1415 + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1416 + engines: {node: '>=14'} 1417 + 1418 standalone-electron-types@1.0.0: 1419 resolution: {integrity: sha512-0HOi/tlTz3mjWhsAz4uRbpQcHMZ+ifj1JzWW9nugykOHClBBG77ps8QinrzX1eow4Iw2pnC+RFaSYRgufF4BOg==} 1420 1421 + string.prototype.matchall@4.0.12: 1422 + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} 1423 engines: {node: '>= 0.4'} 1424 1425 string.prototype.repeat@1.0.0: 1426 resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1427 1428 + string.prototype.trim@1.2.10: 1429 + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1430 engines: {node: '>= 0.4'} 1431 1432 + string.prototype.trimend@1.0.9: 1433 + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1434 + engines: {node: '>= 0.4'} 1435 1436 string.prototype.trimstart@1.0.8: 1437 resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} ··· 1452 resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1453 engines: {node: '>= 0.4'} 1454 1455 + synckit@0.11.1: 1456 + resolution: {integrity: sha512-fWZqNBZNNFp/7mTUy1fSsydhKsAKJ+u90Nk7kOK5Gcq9vObaqLBLjWFDBkyVU9Vvc6Y71VbOevMuGhqv02bT+Q==} 1457 engines: {node: ^14.18.0 || >=16.0.0} 1458 1459 + taze@19.0.4: 1460 + resolution: {integrity: sha512-bviyNotzqcIWpVBCC4QYVb2yupzKyUDGQi2m/8GERdiPaudVMtgAqaE98+x0cDDaByYRMJCyhQWM04ikUL6+kQ==} 1461 + hasBin: true 1462 + 1463 + tinyexec@1.0.1: 1464 + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} 1465 + 1466 + tinyglobby@0.2.12: 1467 + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} 1468 + engines: {node: '>=12.0.0'} 1469 1470 to-regex-range@5.0.1: 1471 resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1472 engines: {node: '>=8.0'} 1473 1474 + ts-api-utils@2.1.0: 1475 + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1476 + engines: {node: '>=18.12'} 1477 peerDependencies: 1478 + typescript: '>=4.8.4' 1479 1480 + tslib@2.8.1: 1481 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1482 1483 type-check@0.4.0: 1484 resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1485 engines: {node: '>= 0.8.0'} 1486 1487 + typed-array-buffer@1.0.3: 1488 + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1489 engines: {node: '>= 0.4'} 1490 1491 + typed-array-byte-length@1.0.3: 1492 + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1493 engines: {node: '>= 0.4'} 1494 1495 + typed-array-byte-offset@1.0.4: 1496 + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1497 engines: {node: '>= 0.4'} 1498 1499 + typed-array-length@1.0.7: 1500 + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1501 engines: {node: '>= 0.4'} 1502 1503 + typescript-eslint@8.29.0: 1504 + resolution: {integrity: sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==} 1505 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1506 peerDependencies: 1507 + eslint: ^8.57.0 || ^9.0.0 1508 + typescript: '>=4.8.4 <5.9.0' 1509 1510 + typescript@5.8.2: 1511 + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 1512 engines: {node: '>=14.17'} 1513 hasBin: true 1514 1515 + ufo@1.5.4: 1516 + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} 1517 + 1518 + unbox-primitive@1.1.0: 1519 + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1520 + engines: {node: '>= 0.4'} 1521 + 1522 + unconfig@7.3.1: 1523 + resolution: {integrity: sha512-LH5WL+un92tGAzWS87k7LkAfwpMdm7V0IXG2FxEjZz/QxiIW5J5LkcrKQThj0aRz6+h/lFmKI9EUXmK/T0bcrw==} 1524 1525 undici-types@6.20.0: 1526 resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1527 1528 + undici-types@6.21.0: 1529 + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1530 + 1531 uri-js@4.4.1: 1532 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1533 1534 + utilium@1.10.1: 1535 + resolution: {integrity: sha512-GQINDTb/ocyz4acQj3GXAe0wipYxws6L+9ouqaq10KlInTk9DGvW9TJd0pYa/Xu3cppNnZuB4T/sBuSXpcN2ng==} 1536 1537 + which-boxed-primitive@1.1.1: 1538 + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1539 + engines: {node: '>= 0.4'} 1540 1541 + which-builtin-type@1.2.1: 1542 + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1543 engines: {node: '>= 0.4'} 1544 1545 which-collection@1.0.2: 1546 resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1547 engines: {node: '>= 0.4'} 1548 1549 + which-typed-array@1.1.19: 1550 + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} 1551 engines: {node: '>= 0.4'} 1552 1553 which@2.0.2: ··· 1555 engines: {node: '>= 8'} 1556 hasBin: true 1557 1558 + yaml@2.7.1: 1559 + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} 1560 + engines: {node: '>= 14'} 1561 + hasBin: true 1562 + 1563 yocto-queue@0.1.0: 1564 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1565 engines: {node: '>=10'} ··· 1585 snapshots: 1586 1587 '@aashutoshrathi/word-wrap@1.2.6': {} 1588 + 1589 + '@antfu/ni@24.3.0': 1590 + dependencies: 1591 + ansis: 3.17.0 1592 + fzf: 0.5.2 1593 + package-manager-detector: 1.1.0 1594 + tinyexec: 1.0.1 1595 1596 '@esbuild/android-arm64@0.19.3': 1597 optional: true ··· 1659 '@esbuild/win32-x64@0.19.3': 1660 optional: true 1661 1662 + '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0(jiti@2.4.2))': 1663 dependencies: 1664 + eslint: 9.23.0(jiti@2.4.2) 1665 eslint-visitor-keys: 3.4.3 1666 1667 + '@eslint-community/regexpp@4.12.1': {} 1668 1669 + '@eslint/config-array@0.19.2': 1670 dependencies: 1671 + '@eslint/object-schema': 2.1.6 1672 + debug: 4.4.0 1673 minimatch: 3.1.2 1674 transitivePeerDependencies: 1675 - supports-color 1676 1677 + '@eslint/config-helpers@0.2.1': {} 1678 1679 + '@eslint/core@0.12.0': 1680 + dependencies: 1681 + '@types/json-schema': 7.0.15 1682 + 1683 + '@eslint/core@0.13.0': 1684 + dependencies: 1685 + '@types/json-schema': 7.0.15 1686 + 1687 + '@eslint/eslintrc@3.3.1': 1688 dependencies: 1689 ajv: 6.12.6 1690 + debug: 4.4.0 1691 + espree: 10.3.0 1692 globals: 14.0.0 1693 + ignore: 5.3.2 1694 import-fresh: 3.3.0 1695 js-yaml: 4.1.0 1696 minimatch: 3.1.2 ··· 1698 transitivePeerDependencies: 1699 - supports-color 1700 1701 + '@eslint/js@9.23.0': {} 1702 1703 + '@eslint/object-schema@2.1.6': {} 1704 1705 + '@eslint/plugin-kit@0.2.8': 1706 dependencies: 1707 + '@eslint/core': 0.13.0 1708 levn: 0.4.1 1709 1710 + '@humanfs/core@0.19.1': {} 1711 1712 + '@humanfs/node@0.16.6': 1713 dependencies: 1714 + '@humanfs/core': 0.19.1 1715 '@humanwhocodes/retry': 0.3.1 1716 1717 '@humanwhocodes/module-importer@1.0.1': {} 1718 1719 '@humanwhocodes/retry@0.3.1': {} 1720 1721 + '@humanwhocodes/retry@0.4.2': {} 1722 + 1723 + '@moonlight-mod/eslint-config@https://codeload.github.com/moonlight-mod/eslint-config/tar.gz/e262ac24e1a0955a9b3e0d66da247a0a8c0446c9(@types/eslint@9.6.1)(eslint@9.23.0(jiti@2.4.2))(prettier@3.1.0)(typescript@5.8.2)': 1724 dependencies: 1725 + '@eslint/js': 9.23.0 1726 + eslint: 9.23.0(jiti@2.4.2) 1727 + eslint-config-prettier: 9.1.0(eslint@9.23.0(jiti@2.4.2)) 1728 + eslint-plugin-prettier: 5.2.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2))(prettier@3.1.0) 1729 + eslint-plugin-react: 7.37.5(eslint@9.23.0(jiti@2.4.2)) 1730 + typescript: 5.8.2 1731 + typescript-eslint: 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 1732 transitivePeerDependencies: 1733 - '@types/eslint' 1734 - prettier 1735 - supports-color 1736 1737 + '@moonlight-mod/lunast@1.0.1': 1738 dependencies: 1739 astring: 1.9.0 1740 estree-toolkit: 1.7.8 1741 meriyah: 6.0.1 1742 1743 + '@moonlight-mod/mappings@1.1.25(@moonlight-mod/lunast@1.0.1)(@moonlight-mod/moonmap@1.0.5)': 1744 dependencies: 1745 + '@moonlight-mod/lunast': 1.0.1 1746 + '@moonlight-mod/moonmap': 1.0.5 1747 '@types/chroma-js': 3.1.0 1748 '@types/flux': 3.1.14 1749 '@types/highlightjs': 9.12.6 1750 '@types/lodash': 4.17.14 1751 '@types/platform': 1.3.6 1752 + '@types/react': 18.3.20 1753 csstype: 3.1.3 1754 + zustand: 5.0.3(@types/react@18.3.20) 1755 transitivePeerDependencies: 1756 - immer 1757 - react 1758 - use-sync-external-store 1759 1760 + '@moonlight-mod/moonmap@1.0.5': {} 1761 1762 '@nodelib/fs.scandir@2.1.5': 1763 dependencies: ··· 1771 '@nodelib/fs.scandir': 2.1.5 1772 fastq: 1.17.1 1773 1774 + '@pkgr/core@0.2.0': {} 1775 + 1776 + '@quansync/fs@0.1.2': 1777 + dependencies: 1778 + quansync: 0.2.10 1779 1780 '@types/chroma-js@3.1.0': {} 1781 + 1782 + '@types/chrome@0.0.313': 1783 + dependencies: 1784 + '@types/filesystem': 0.0.36 1785 + '@types/har-format': 1.2.16 1786 + 1787 + '@types/eslint@9.6.1': 1788 + dependencies: 1789 + '@types/estree': 1.0.7 1790 + '@types/json-schema': 7.0.15 1791 + optional: true 1792 1793 '@types/estree-jsx@1.0.5': 1794 dependencies: ··· 1796 1797 '@types/estree@1.0.6': {} 1798 1799 + '@types/estree@1.0.7': 1800 + optional: true 1801 + 1802 '@types/fbemitter@2.0.35': {} 1803 1804 + '@types/filesystem@0.0.36': 1805 + dependencies: 1806 + '@types/filewriter': 0.0.33 1807 + 1808 + '@types/filewriter@0.0.33': {} 1809 + 1810 '@types/flux@3.1.14': 1811 dependencies: 1812 '@types/fbemitter': 2.0.35 1813 + '@types/react': 18.3.20 1814 + 1815 + '@types/har-format@1.2.16': {} 1816 1817 '@types/highlightjs@9.12.6': {} 1818 ··· 1822 1823 '@types/node@18.17.17': {} 1824 1825 + '@types/node@22.13.6': 1826 dependencies: 1827 undici-types: 6.20.0 1828 1829 + '@types/node@22.14.0': 1830 + dependencies: 1831 + undici-types: 6.21.0 1832 + 1833 '@types/platform@1.3.6': {} 1834 1835 '@types/prop-types@15.7.13': {} 1836 1837 + '@types/react@18.3.20': 1838 dependencies: 1839 '@types/prop-types': 15.7.13 1840 csstype: 3.1.3 1841 1842 + '@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': 1843 dependencies: 1844 + '@eslint-community/regexpp': 4.12.1 1845 + '@typescript-eslint/parser': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 1846 + '@typescript-eslint/scope-manager': 8.29.0 1847 + '@typescript-eslint/type-utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 1848 + '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 1849 + '@typescript-eslint/visitor-keys': 8.29.0 1850 + eslint: 9.23.0(jiti@2.4.2) 1851 graphemer: 1.4.0 1852 ignore: 5.3.2 1853 natural-compare: 1.4.0 1854 + ts-api-utils: 2.1.0(typescript@5.8.2) 1855 + typescript: 5.8.2 1856 transitivePeerDependencies: 1857 - supports-color 1858 1859 + '@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': 1860 dependencies: 1861 + '@typescript-eslint/scope-manager': 8.29.0 1862 + '@typescript-eslint/types': 8.29.0 1863 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) 1864 + '@typescript-eslint/visitor-keys': 8.29.0 1865 + debug: 4.4.0 1866 + eslint: 9.23.0(jiti@2.4.2) 1867 + typescript: 5.8.2 1868 transitivePeerDependencies: 1869 - supports-color 1870 1871 + '@typescript-eslint/scope-manager@8.29.0': 1872 dependencies: 1873 + '@typescript-eslint/types': 8.29.0 1874 + '@typescript-eslint/visitor-keys': 8.29.0 1875 1876 + '@typescript-eslint/type-utils@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': 1877 dependencies: 1878 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) 1879 + '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 1880 + debug: 4.4.0 1881 + eslint: 9.23.0(jiti@2.4.2) 1882 + ts-api-utils: 2.1.0(typescript@5.8.2) 1883 + typescript: 5.8.2 1884 transitivePeerDependencies: 1885 - supports-color 1886 1887 + '@typescript-eslint/types@8.29.0': {} 1888 1889 + '@typescript-eslint/typescript-estree@8.29.0(typescript@5.8.2)': 1890 dependencies: 1891 + '@typescript-eslint/types': 8.29.0 1892 + '@typescript-eslint/visitor-keys': 8.29.0 1893 + debug: 4.4.0 1894 fast-glob: 3.3.2 1895 is-glob: 4.0.3 1896 minimatch: 9.0.5 1897 + semver: 7.7.1 1898 + ts-api-utils: 2.1.0(typescript@5.8.2) 1899 + typescript: 5.8.2 1900 transitivePeerDependencies: 1901 - supports-color 1902 1903 + '@typescript-eslint/utils@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': 1904 dependencies: 1905 + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)) 1906 + '@typescript-eslint/scope-manager': 8.29.0 1907 + '@typescript-eslint/types': 8.29.0 1908 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) 1909 + eslint: 9.23.0(jiti@2.4.2) 1910 + typescript: 5.8.2 1911 transitivePeerDependencies: 1912 - supports-color 1913 1914 + '@typescript-eslint/visitor-keys@8.29.0': 1915 dependencies: 1916 + '@typescript-eslint/types': 8.29.0 1917 + eslint-visitor-keys: 4.2.0 1918 1919 '@xterm/xterm@5.5.0': 1920 optional: true 1921 1922 + '@zenfs/core@2.0.0': 1923 dependencies: 1924 + '@types/node': 22.13.6 1925 buffer: 6.0.3 1926 eventemitter3: 5.0.1 1927 readable-stream: 4.5.2 1928 + utilium: 1.10.1 1929 1930 + '@zenfs/dom@1.1.6(@zenfs/core@2.0.0)(utilium@1.10.1)': 1931 dependencies: 1932 + '@zenfs/core': 2.0.0 1933 + utilium: 1.10.1 1934 1935 abort-controller@3.0.0: 1936 dependencies: 1937 event-target-shim: 5.0.1 1938 1939 + acorn-jsx@5.3.2(acorn@8.14.1): 1940 dependencies: 1941 + acorn: 8.14.1 1942 1943 + acorn@8.14.1: {} 1944 1945 ajv@6.12.6: 1946 dependencies: ··· 1952 ansi-styles@4.3.0: 1953 dependencies: 1954 color-convert: 2.0.1 1955 + 1956 + ansis@3.17.0: {} 1957 1958 argparse@2.0.1: {} 1959 1960 + array-buffer-byte-length@1.0.2: 1961 dependencies: 1962 + call-bound: 1.0.4 1963 + is-array-buffer: 3.0.5 1964 1965 array-includes@3.1.8: 1966 dependencies: 1967 + call-bind: 1.0.8 1968 define-properties: 1.2.1 1969 + es-abstract: 1.23.9 1970 + es-object-atoms: 1.1.1 1971 + get-intrinsic: 1.3.0 1972 + is-string: 1.1.1 1973 1974 array.prototype.findlast@1.2.5: 1975 dependencies: 1976 + call-bind: 1.0.8 1977 define-properties: 1.2.1 1978 + es-abstract: 1.23.9 1979 es-errors: 1.3.0 1980 + es-object-atoms: 1.1.1 1981 + es-shim-unscopables: 1.1.0 1982 1983 + array.prototype.flat@1.3.3: 1984 dependencies: 1985 + call-bind: 1.0.8 1986 define-properties: 1.2.1 1987 + es-abstract: 1.23.9 1988 + es-shim-unscopables: 1.1.0 1989 1990 + array.prototype.flatmap@1.3.3: 1991 dependencies: 1992 + call-bind: 1.0.8 1993 define-properties: 1.2.1 1994 + es-abstract: 1.23.9 1995 + es-shim-unscopables: 1.1.0 1996 1997 array.prototype.tosorted@1.1.4: 1998 dependencies: 1999 + call-bind: 1.0.8 2000 define-properties: 1.2.1 2001 + es-abstract: 1.23.9 2002 es-errors: 1.3.0 2003 + es-shim-unscopables: 1.1.0 2004 2005 + arraybuffer.prototype.slice@1.0.4: 2006 dependencies: 2007 + array-buffer-byte-length: 1.0.2 2008 + call-bind: 1.0.8 2009 define-properties: 1.2.1 2010 + es-abstract: 1.23.9 2011 es-errors: 1.3.0 2012 + get-intrinsic: 1.3.0 2013 + is-array-buffer: 3.0.5 2014 2015 astring@1.9.0: {} 2016 + 2017 + async-function@1.0.0: {} 2018 2019 available-typed-arrays@1.0.7: 2020 dependencies: 2021 + possible-typed-array-names: 1.1.0 2022 2023 balanced-match@1.0.2: {} 2024 ··· 2042 base64-js: 1.5.1 2043 ieee754: 1.2.1 2044 2045 + cac@6.7.14: {} 2046 + 2047 + call-bind-apply-helpers@1.0.2: 2048 dependencies: 2049 es-errors: 1.3.0 2050 function-bind: 1.1.2 2051 + 2052 + call-bind@1.0.8: 2053 + dependencies: 2054 + call-bind-apply-helpers: 1.0.2 2055 + es-define-property: 1.0.1 2056 + get-intrinsic: 1.3.0 2057 set-function-length: 1.2.2 2058 + 2059 + call-bound@1.0.4: 2060 + dependencies: 2061 + call-bind-apply-helpers: 1.0.2 2062 + get-intrinsic: 1.3.0 2063 2064 callsites@3.1.0: {} 2065 ··· 2076 2077 concat-map@0.0.1: {} 2078 2079 + cross-spawn@7.0.6: 2080 dependencies: 2081 path-key: 3.1.1 2082 shebang-command: 2.0.0 2083 which: 2.0.2 2084 2085 csstype@3.1.3: {} 2086 2087 + data-view-buffer@1.0.2: 2088 dependencies: 2089 + call-bound: 1.0.4 2090 es-errors: 1.3.0 2091 + is-data-view: 1.0.2 2092 2093 + data-view-byte-length@1.0.2: 2094 dependencies: 2095 + call-bound: 1.0.4 2096 es-errors: 1.3.0 2097 + is-data-view: 1.0.2 2098 2099 + data-view-byte-offset@1.0.1: 2100 dependencies: 2101 + call-bound: 1.0.4 2102 es-errors: 1.3.0 2103 + is-data-view: 1.0.2 2104 2105 + debug@4.4.0: 2106 dependencies: 2107 + ms: 2.1.3 2108 2109 deep-is@0.1.4: {} 2110 2111 define-data-property@1.1.4: 2112 dependencies: 2113 + es-define-property: 1.0.1 2114 es-errors: 1.3.0 2115 + gopd: 1.2.0 2116 2117 define-properties@1.2.1: 2118 dependencies: ··· 2120 has-property-descriptors: 1.0.2 2121 object-keys: 1.1.1 2122 2123 + defu@6.1.4: {} 2124 + 2125 + destr@2.0.4: {} 2126 + 2127 doctrine@2.1.0: 2128 dependencies: 2129 esutils: 2.0.3 2130 2131 + dunder-proto@1.0.1: 2132 + dependencies: 2133 + call-bind-apply-helpers: 1.0.2 2134 + es-errors: 1.3.0 2135 + gopd: 1.2.0 2136 + 2137 + es-abstract@1.23.9: 2138 dependencies: 2139 + array-buffer-byte-length: 1.0.2 2140 + arraybuffer.prototype.slice: 1.0.4 2141 available-typed-arrays: 1.0.7 2142 + call-bind: 1.0.8 2143 + call-bound: 1.0.4 2144 + data-view-buffer: 1.0.2 2145 + data-view-byte-length: 1.0.2 2146 + data-view-byte-offset: 1.0.1 2147 + es-define-property: 1.0.1 2148 es-errors: 1.3.0 2149 + es-object-atoms: 1.1.1 2150 + es-set-tostringtag: 2.1.0 2151 + es-to-primitive: 1.3.0 2152 + function.prototype.name: 1.1.8 2153 + get-intrinsic: 1.3.0 2154 + get-proto: 1.0.1 2155 + get-symbol-description: 1.1.0 2156 globalthis: 1.0.4 2157 + gopd: 1.2.0 2158 has-property-descriptors: 1.0.2 2159 + has-proto: 1.2.0 2160 + has-symbols: 1.1.0 2161 hasown: 2.0.2 2162 + internal-slot: 1.1.0 2163 + is-array-buffer: 3.0.5 2164 is-callable: 1.2.7 2165 + is-data-view: 1.0.2 2166 + is-regex: 1.2.1 2167 + is-shared-array-buffer: 1.0.4 2168 + is-string: 1.1.1 2169 + is-typed-array: 1.1.15 2170 + is-weakref: 1.1.1 2171 + math-intrinsics: 1.1.0 2172 + object-inspect: 1.13.4 2173 object-keys: 1.1.1 2174 + object.assign: 4.1.7 2175 + own-keys: 1.0.1 2176 + regexp.prototype.flags: 1.5.4 2177 + safe-array-concat: 1.1.3 2178 + safe-push-apply: 1.0.0 2179 + safe-regex-test: 1.1.0 2180 + set-proto: 1.0.0 2181 + string.prototype.trim: 1.2.10 2182 + string.prototype.trimend: 1.0.9 2183 string.prototype.trimstart: 1.0.8 2184 + typed-array-buffer: 1.0.3 2185 + typed-array-byte-length: 1.0.3 2186 + typed-array-byte-offset: 1.0.4 2187 + typed-array-length: 1.0.7 2188 + unbox-primitive: 1.1.0 2189 + which-typed-array: 1.1.19 2190 2191 + es-define-property@1.0.1: {} 2192 2193 es-errors@1.3.0: {} 2194 2195 + es-iterator-helpers@1.2.1: 2196 dependencies: 2197 + call-bind: 1.0.8 2198 + call-bound: 1.0.4 2199 define-properties: 1.2.1 2200 + es-abstract: 1.23.9 2201 es-errors: 1.3.0 2202 + es-set-tostringtag: 2.1.0 2203 function-bind: 1.1.2 2204 + get-intrinsic: 1.3.0 2205 globalthis: 1.0.4 2206 + gopd: 1.2.0 2207 has-property-descriptors: 1.0.2 2208 + has-proto: 1.2.0 2209 + has-symbols: 1.1.0 2210 + internal-slot: 1.1.0 2211 + iterator.prototype: 1.1.5 2212 + safe-array-concat: 1.1.3 2213 2214 + es-object-atoms@1.1.1: 2215 dependencies: 2216 es-errors: 1.3.0 2217 2218 + es-set-tostringtag@2.1.0: 2219 dependencies: 2220 + es-errors: 1.3.0 2221 + get-intrinsic: 1.3.0 2222 has-tostringtag: 1.0.2 2223 hasown: 2.0.2 2224 2225 + es-shim-unscopables@1.1.0: 2226 dependencies: 2227 hasown: 2.0.2 2228 2229 + es-to-primitive@1.3.0: 2230 dependencies: 2231 is-callable: 1.2.7 2232 + is-date-object: 1.1.0 2233 + is-symbol: 1.1.1 2234 2235 esbuild-copy-static-files@0.1.0: {} 2236 ··· 2261 2262 escape-string-regexp@4.0.0: {} 2263 2264 + eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@2.4.2)): 2265 dependencies: 2266 + eslint: 9.23.0(jiti@2.4.2) 2267 2268 + eslint-plugin-prettier@5.2.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2))(prettier@3.1.0): 2269 dependencies: 2270 + eslint: 9.23.0(jiti@2.4.2) 2271 prettier: 3.1.0 2272 prettier-linter-helpers: 1.0.0 2273 + synckit: 0.11.1 2274 optionalDependencies: 2275 + '@types/eslint': 9.6.1 2276 + eslint-config-prettier: 9.1.0(eslint@9.23.0(jiti@2.4.2)) 2277 2278 + eslint-plugin-react@7.37.5(eslint@9.23.0(jiti@2.4.2)): 2279 dependencies: 2280 array-includes: 3.1.8 2281 array.prototype.findlast: 1.2.5 2282 + array.prototype.flatmap: 1.3.3 2283 array.prototype.tosorted: 1.1.4 2284 doctrine: 2.1.0 2285 + es-iterator-helpers: 1.2.1 2286 + eslint: 9.23.0(jiti@2.4.2) 2287 estraverse: 5.3.0 2288 hasown: 2.0.2 2289 jsx-ast-utils: 3.3.5 2290 minimatch: 3.1.2 2291 + object.entries: 1.1.9 2292 object.fromentries: 2.0.8 2293 + object.values: 1.2.1 2294 prop-types: 15.8.1 2295 resolve: 2.0.0-next.5 2296 semver: 6.3.1 2297 + string.prototype.matchall: 4.0.12 2298 string.prototype.repeat: 1.0.0 2299 2300 + eslint-scope@8.3.0: 2301 dependencies: 2302 esrecurse: 4.3.0 2303 estraverse: 5.3.0 2304 2305 eslint-visitor-keys@3.4.3: {} 2306 2307 + eslint-visitor-keys@4.2.0: {} 2308 2309 + eslint@9.23.0(jiti@2.4.2): 2310 dependencies: 2311 + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)) 2312 + '@eslint-community/regexpp': 4.12.1 2313 + '@eslint/config-array': 0.19.2 2314 + '@eslint/config-helpers': 0.2.1 2315 + '@eslint/core': 0.12.0 2316 + '@eslint/eslintrc': 3.3.1 2317 + '@eslint/js': 9.23.0 2318 + '@eslint/plugin-kit': 0.2.8 2319 + '@humanfs/node': 0.16.6 2320 '@humanwhocodes/module-importer': 1.0.1 2321 + '@humanwhocodes/retry': 0.4.2 2322 '@types/estree': 1.0.6 2323 '@types/json-schema': 7.0.15 2324 ajv: 6.12.6 2325 chalk: 4.1.2 2326 + cross-spawn: 7.0.6 2327 + debug: 4.4.0 2328 escape-string-regexp: 4.0.0 2329 + eslint-scope: 8.3.0 2330 + eslint-visitor-keys: 4.2.0 2331 + espree: 10.3.0 2332 + esquery: 1.6.0 2333 esutils: 2.0.3 2334 fast-deep-equal: 3.1.3 2335 file-entry-cache: 8.0.0 2336 find-up: 5.0.0 2337 glob-parent: 6.0.2 2338 + ignore: 5.3.2 2339 imurmurhash: 0.1.4 2340 is-glob: 4.0.3 2341 json-stable-stringify-without-jsonify: 1.0.1 ··· 2343 minimatch: 3.1.2 2344 natural-compare: 1.4.0 2345 optionator: 0.9.3 2346 + optionalDependencies: 2347 + jiti: 2.4.2 2348 transitivePeerDependencies: 2349 - supports-color 2350 2351 + espree@10.3.0: 2352 dependencies: 2353 + acorn: 8.14.1 2354 + acorn-jsx: 5.3.2(acorn@8.14.1) 2355 + eslint-visitor-keys: 4.2.0 2356 2357 + esquery@1.6.0: 2358 dependencies: 2359 estraverse: 5.3.0 2360 ··· 2397 dependencies: 2398 reusify: 1.0.4 2399 2400 + fdir@6.4.3(picomatch@4.0.2): 2401 + optionalDependencies: 2402 + picomatch: 4.0.2 2403 + 2404 file-entry-cache@8.0.0: 2405 dependencies: 2406 flat-cache: 4.0.1 ··· 2409 dependencies: 2410 to-regex-range: 5.0.1 2411 2412 + find-up-simple@1.0.1: {} 2413 + 2414 find-up@5.0.0: 2415 dependencies: 2416 locate-path: 6.0.0 ··· 2423 2424 flatted@3.2.9: {} 2425 2426 + for-each@0.3.5: 2427 dependencies: 2428 is-callable: 1.2.7 2429 2430 function-bind@1.1.2: {} 2431 2432 + function.prototype.name@1.1.8: 2433 dependencies: 2434 + call-bind: 1.0.8 2435 + call-bound: 1.0.4 2436 define-properties: 1.2.1 2437 functions-have-names: 1.2.3 2438 + hasown: 2.0.2 2439 + is-callable: 1.2.7 2440 2441 functions-have-names@1.2.3: {} 2442 2443 + fzf@0.5.2: {} 2444 + 2445 + get-intrinsic@1.3.0: 2446 dependencies: 2447 + call-bind-apply-helpers: 1.0.2 2448 + es-define-property: 1.0.1 2449 es-errors: 1.3.0 2450 + es-object-atoms: 1.1.1 2451 function-bind: 1.1.2 2452 + get-proto: 1.0.1 2453 + gopd: 1.2.0 2454 + has-symbols: 1.1.0 2455 hasown: 2.0.2 2456 + math-intrinsics: 1.1.0 2457 2458 + get-proto@1.0.1: 2459 + dependencies: 2460 + dunder-proto: 1.0.1 2461 + es-object-atoms: 1.1.1 2462 + 2463 + get-symbol-description@1.1.0: 2464 dependencies: 2465 + call-bound: 1.0.4 2466 es-errors: 1.3.0 2467 + get-intrinsic: 1.3.0 2468 2469 glob-parent@5.1.2: 2470 dependencies: ··· 2479 globalthis@1.0.4: 2480 dependencies: 2481 define-properties: 1.2.1 2482 + gopd: 1.2.0 2483 2484 + gopd@1.2.0: {} 2485 2486 graphemer@1.4.0: {} 2487 2488 + has-bigints@1.1.0: {} 2489 2490 has-flag@4.0.0: {} 2491 2492 has-property-descriptors@1.0.2: 2493 dependencies: 2494 + es-define-property: 1.0.1 2495 2496 + has-proto@1.2.0: 2497 + dependencies: 2498 + dunder-proto: 1.0.1 2499 2500 + has-symbols@1.1.0: {} 2501 2502 has-tostringtag@1.0.2: 2503 dependencies: 2504 + has-symbols: 1.1.0 2505 2506 hasown@2.0.2: 2507 dependencies: ··· 2511 2512 ieee754@1.2.1: {} 2513 2514 ignore@5.3.2: {} 2515 2516 import-fresh@3.3.0: ··· 2520 2521 imurmurhash@0.1.4: {} 2522 2523 + internal-slot@1.1.0: 2524 dependencies: 2525 es-errors: 1.3.0 2526 hasown: 2.0.2 2527 + side-channel: 1.1.0 2528 2529 + is-array-buffer@3.0.5: 2530 dependencies: 2531 + call-bind: 1.0.8 2532 + call-bound: 1.0.4 2533 + get-intrinsic: 1.3.0 2534 2535 + is-async-function@2.1.1: 2536 dependencies: 2537 + async-function: 1.0.0 2538 + call-bound: 1.0.4 2539 + get-proto: 1.0.1 2540 has-tostringtag: 1.0.2 2541 + safe-regex-test: 1.1.0 2542 2543 + is-bigint@1.1.0: 2544 dependencies: 2545 + has-bigints: 1.1.0 2546 2547 + is-boolean-object@1.2.2: 2548 dependencies: 2549 + call-bound: 1.0.4 2550 has-tostringtag: 1.0.2 2551 2552 is-callable@1.2.7: {} 2553 2554 + is-core-module@2.16.1: 2555 dependencies: 2556 hasown: 2.0.2 2557 2558 + is-data-view@1.0.2: 2559 dependencies: 2560 + call-bound: 1.0.4 2561 + get-intrinsic: 1.3.0 2562 + is-typed-array: 1.1.15 2563 2564 + is-date-object@1.1.0: 2565 dependencies: 2566 + call-bound: 1.0.4 2567 has-tostringtag: 1.0.2 2568 2569 is-extglob@2.1.1: {} 2570 2571 + is-finalizationregistry@1.1.1: 2572 dependencies: 2573 + call-bound: 1.0.4 2574 2575 + is-generator-function@1.1.0: 2576 dependencies: 2577 + call-bound: 1.0.4 2578 + get-proto: 1.0.1 2579 has-tostringtag: 1.0.2 2580 + safe-regex-test: 1.1.0 2581 2582 is-glob@4.0.3: 2583 dependencies: ··· 2585 2586 is-map@2.0.3: {} 2587 2588 + is-number-object@1.1.1: 2589 dependencies: 2590 + call-bound: 1.0.4 2591 has-tostringtag: 1.0.2 2592 2593 is-number@7.0.0: {} 2594 2595 + is-regex@1.2.1: 2596 dependencies: 2597 + call-bound: 1.0.4 2598 + gopd: 1.2.0 2599 has-tostringtag: 1.0.2 2600 + hasown: 2.0.2 2601 2602 is-set@2.0.3: {} 2603 2604 + is-shared-array-buffer@1.0.4: 2605 dependencies: 2606 + call-bound: 1.0.4 2607 2608 + is-string@1.1.1: 2609 dependencies: 2610 + call-bound: 1.0.4 2611 has-tostringtag: 1.0.2 2612 2613 + is-symbol@1.1.1: 2614 dependencies: 2615 + call-bound: 1.0.4 2616 + has-symbols: 1.1.0 2617 + safe-regex-test: 1.1.0 2618 2619 + is-typed-array@1.1.15: 2620 dependencies: 2621 + which-typed-array: 1.1.19 2622 2623 is-weakmap@2.0.2: {} 2624 2625 + is-weakref@1.1.1: 2626 dependencies: 2627 + call-bound: 1.0.4 2628 2629 + is-weakset@2.0.4: 2630 dependencies: 2631 + call-bound: 1.0.4 2632 + get-intrinsic: 1.3.0 2633 2634 isarray@2.0.5: {} 2635 2636 isexe@2.0.0: {} 2637 2638 + iterator.prototype@1.1.5: 2639 dependencies: 2640 + define-data-property: 1.1.4 2641 + es-object-atoms: 1.1.1 2642 + get-intrinsic: 1.3.0 2643 + get-proto: 1.0.1 2644 + has-symbols: 1.1.0 2645 set-function-name: 2.0.2 2646 + 2647 + jiti@2.4.2: {} 2648 2649 js-tokens@4.0.0: {} 2650 ··· 2661 jsx-ast-utils@3.3.5: 2662 dependencies: 2663 array-includes: 3.1.8 2664 + array.prototype.flat: 1.3.3 2665 + object.assign: 4.1.7 2666 + object.values: 1.2.1 2667 2668 keyv@4.5.4: 2669 dependencies: ··· 2684 dependencies: 2685 js-tokens: 4.0.0 2686 2687 + math-intrinsics@1.1.0: {} 2688 + 2689 merge2@1.4.1: {} 2690 2691 meriyah@6.0.1: {} ··· 2696 dependencies: 2697 braces: 3.0.3 2698 picomatch: 2.3.1 2699 + 2700 + mimic-function@5.0.1: {} 2701 2702 minimatch@3.1.2: 2703 dependencies: ··· 2707 dependencies: 2708 brace-expansion: 2.0.1 2709 2710 + ms@2.1.3: {} 2711 2712 nanotar@0.1.1: {} 2713 2714 natural-compare@1.4.0: {} 2715 + 2716 + node-fetch-native@1.6.6: {} 2717 2718 object-assign@4.1.1: {} 2719 2720 + object-inspect@1.13.4: {} 2721 2722 object-keys@1.1.1: {} 2723 2724 + object.assign@4.1.7: 2725 dependencies: 2726 + call-bind: 1.0.8 2727 + call-bound: 1.0.4 2728 define-properties: 1.2.1 2729 + es-object-atoms: 1.1.1 2730 + has-symbols: 1.1.0 2731 object-keys: 1.1.1 2732 2733 + object.entries@1.1.9: 2734 dependencies: 2735 + call-bind: 1.0.8 2736 + call-bound: 1.0.4 2737 define-properties: 1.2.1 2738 + es-object-atoms: 1.1.1 2739 2740 object.fromentries@2.0.8: 2741 dependencies: 2742 + call-bind: 1.0.8 2743 define-properties: 1.2.1 2744 + es-abstract: 1.23.9 2745 + es-object-atoms: 1.1.1 2746 2747 + object.values@1.2.1: 2748 dependencies: 2749 + call-bind: 1.0.8 2750 + call-bound: 1.0.4 2751 define-properties: 1.2.1 2752 + es-object-atoms: 1.1.1 2753 + 2754 + ofetch@1.4.1: 2755 + dependencies: 2756 + destr: 2.0.4 2757 + node-fetch-native: 1.6.6 2758 + ufo: 1.5.4 2759 + 2760 + onetime@7.0.0: 2761 + dependencies: 2762 + mimic-function: 5.0.1 2763 2764 optionator@0.9.3: 2765 dependencies: ··· 2770 prelude-ls: 1.2.1 2771 type-check: 0.4.0 2772 2773 + own-keys@1.0.1: 2774 + dependencies: 2775 + get-intrinsic: 1.3.0 2776 + object-keys: 1.1.1 2777 + safe-push-apply: 1.0.0 2778 + 2779 p-limit@3.1.0: 2780 dependencies: 2781 yocto-queue: 0.1.0 ··· 2783 p-locate@5.0.0: 2784 dependencies: 2785 p-limit: 3.1.0 2786 + 2787 + package-manager-detector@1.1.0: {} 2788 2789 parent-module@1.0.1: 2790 dependencies: ··· 2796 2797 path-parse@1.0.7: {} 2798 2799 + pathe@2.0.3: {} 2800 + 2801 picomatch@2.3.1: {} 2802 2803 + picomatch@4.0.2: {} 2804 + 2805 + pnpm-workspace-yaml@0.3.1: 2806 + dependencies: 2807 + yaml: 2.7.1 2808 + 2809 + possible-typed-array-names@1.1.0: {} 2810 2811 prelude-ls@1.2.1: {} 2812 ··· 2825 react-is: 16.13.1 2826 2827 punycode@2.3.1: {} 2828 + 2829 + quansync@0.2.10: {} 2830 2831 queue-microtask@1.2.3: {} 2832 ··· 2840 process: 0.11.10 2841 string_decoder: 1.3.0 2842 2843 + reflect.getprototypeof@1.0.10: 2844 dependencies: 2845 + call-bind: 1.0.8 2846 define-properties: 1.2.1 2847 + es-abstract: 1.23.9 2848 es-errors: 1.3.0 2849 + es-object-atoms: 1.1.1 2850 + get-intrinsic: 1.3.0 2851 + get-proto: 1.0.1 2852 + which-builtin-type: 1.2.1 2853 2854 + regexp.prototype.flags@1.5.4: 2855 dependencies: 2856 + call-bind: 1.0.8 2857 define-properties: 1.2.1 2858 es-errors: 1.3.0 2859 + get-proto: 1.0.1 2860 + gopd: 1.2.0 2861 set-function-name: 2.0.2 2862 2863 resolve-from@4.0.0: {} 2864 2865 resolve@2.0.0-next.5: 2866 dependencies: 2867 + is-core-module: 2.16.1 2868 path-parse: 1.0.7 2869 supports-preserve-symlinks-flag: 1.0.0 2870 2871 + restore-cursor@5.1.0: 2872 + dependencies: 2873 + onetime: 7.0.0 2874 + signal-exit: 4.1.0 2875 + 2876 reusify@1.0.4: {} 2877 2878 run-parallel@1.2.0: 2879 dependencies: 2880 queue-microtask: 1.2.3 2881 2882 + safe-array-concat@1.1.3: 2883 dependencies: 2884 + call-bind: 1.0.8 2885 + call-bound: 1.0.4 2886 + get-intrinsic: 1.3.0 2887 + has-symbols: 1.1.0 2888 isarray: 2.0.5 2889 2890 + safe-buffer@5.2.1: {} 2891 2892 + safe-push-apply@1.0.0: 2893 + dependencies: 2894 + es-errors: 1.3.0 2895 + isarray: 2.0.5 2896 2897 + safe-regex-test@1.1.0: 2898 dependencies: 2899 + call-bound: 1.0.4 2900 es-errors: 1.3.0 2901 + is-regex: 1.2.1 2902 2903 semver@6.3.1: {} 2904 2905 + semver@7.7.1: {} 2906 2907 set-function-length@1.2.2: 2908 dependencies: 2909 define-data-property: 1.1.4 2910 es-errors: 1.3.0 2911 function-bind: 1.1.2 2912 + get-intrinsic: 1.3.0 2913 + gopd: 1.2.0 2914 has-property-descriptors: 1.0.2 2915 2916 set-function-name@2.0.2: ··· 2920 functions-have-names: 1.2.3 2921 has-property-descriptors: 1.0.2 2922 2923 + set-proto@1.0.0: 2924 + dependencies: 2925 + dunder-proto: 1.0.1 2926 + es-errors: 1.3.0 2927 + es-object-atoms: 1.1.1 2928 + 2929 shebang-command@2.0.0: 2930 dependencies: 2931 shebang-regex: 3.0.0 2932 2933 shebang-regex@3.0.0: {} 2934 2935 + side-channel-list@1.0.0: 2936 + dependencies: 2937 + es-errors: 1.3.0 2938 + object-inspect: 1.13.4 2939 + 2940 + side-channel-map@1.0.1: 2941 + dependencies: 2942 + call-bound: 1.0.4 2943 + es-errors: 1.3.0 2944 + get-intrinsic: 1.3.0 2945 + object-inspect: 1.13.4 2946 + 2947 + side-channel-weakmap@1.0.2: 2948 dependencies: 2949 + call-bound: 1.0.4 2950 es-errors: 1.3.0 2951 + get-intrinsic: 1.3.0 2952 + object-inspect: 1.13.4 2953 + side-channel-map: 1.0.1 2954 + 2955 + side-channel@1.1.0: 2956 + dependencies: 2957 + es-errors: 1.3.0 2958 + object-inspect: 1.13.4 2959 + side-channel-list: 1.0.0 2960 + side-channel-map: 1.0.1 2961 + side-channel-weakmap: 1.0.2 2962 + 2963 + signal-exit@4.1.0: {} 2964 2965 standalone-electron-types@1.0.0: 2966 dependencies: 2967 '@types/node': 18.17.17 2968 2969 + string.prototype.matchall@4.0.12: 2970 dependencies: 2971 + call-bind: 1.0.8 2972 + call-bound: 1.0.4 2973 define-properties: 1.2.1 2974 + es-abstract: 1.23.9 2975 es-errors: 1.3.0 2976 + es-object-atoms: 1.1.1 2977 + get-intrinsic: 1.3.0 2978 + gopd: 1.2.0 2979 + has-symbols: 1.1.0 2980 + internal-slot: 1.1.0 2981 + regexp.prototype.flags: 1.5.4 2982 set-function-name: 2.0.2 2983 + side-channel: 1.1.0 2984 2985 string.prototype.repeat@1.0.0: 2986 dependencies: 2987 define-properties: 1.2.1 2988 + es-abstract: 1.23.9 2989 2990 + string.prototype.trim@1.2.10: 2991 dependencies: 2992 + call-bind: 1.0.8 2993 + call-bound: 1.0.4 2994 + define-data-property: 1.1.4 2995 define-properties: 1.2.1 2996 + es-abstract: 1.23.9 2997 + es-object-atoms: 1.1.1 2998 + has-property-descriptors: 1.0.2 2999 3000 + string.prototype.trimend@1.0.9: 3001 dependencies: 3002 + call-bind: 1.0.8 3003 + call-bound: 1.0.4 3004 define-properties: 1.2.1 3005 + es-object-atoms: 1.1.1 3006 3007 string.prototype.trimstart@1.0.8: 3008 dependencies: 3009 + call-bind: 1.0.8 3010 define-properties: 1.2.1 3011 + es-object-atoms: 1.1.1 3012 3013 string_decoder@1.3.0: 3014 dependencies: ··· 3022 3023 supports-preserve-symlinks-flag@1.0.0: {} 3024 3025 + synckit@0.11.1: 3026 dependencies: 3027 + '@pkgr/core': 0.2.0 3028 + tslib: 2.8.1 3029 + 3030 + taze@19.0.4: 3031 + dependencies: 3032 + '@antfu/ni': 24.3.0 3033 + cac: 6.7.14 3034 + find-up-simple: 1.0.1 3035 + ofetch: 1.4.1 3036 + package-manager-detector: 1.1.0 3037 + pathe: 2.0.3 3038 + pnpm-workspace-yaml: 0.3.1 3039 + restore-cursor: 5.1.0 3040 + tinyexec: 1.0.1 3041 + tinyglobby: 0.2.12 3042 + unconfig: 7.3.1 3043 + yaml: 2.7.1 3044 + 3045 + tinyexec@1.0.1: {} 3046 3047 + tinyglobby@0.2.12: 3048 + dependencies: 3049 + fdir: 6.4.3(picomatch@4.0.2) 3050 + picomatch: 4.0.2 3051 3052 to-regex-range@5.0.1: 3053 dependencies: 3054 is-number: 7.0.0 3055 3056 + ts-api-utils@2.1.0(typescript@5.8.2): 3057 dependencies: 3058 + typescript: 5.8.2 3059 3060 + tslib@2.8.1: {} 3061 3062 type-check@0.4.0: 3063 dependencies: 3064 prelude-ls: 1.2.1 3065 3066 + typed-array-buffer@1.0.3: 3067 dependencies: 3068 + call-bound: 1.0.4 3069 es-errors: 1.3.0 3070 + is-typed-array: 1.1.15 3071 3072 + typed-array-byte-length@1.0.3: 3073 dependencies: 3074 + call-bind: 1.0.8 3075 + for-each: 0.3.5 3076 + gopd: 1.2.0 3077 + has-proto: 1.2.0 3078 + is-typed-array: 1.1.15 3079 3080 + typed-array-byte-offset@1.0.4: 3081 dependencies: 3082 available-typed-arrays: 1.0.7 3083 + call-bind: 1.0.8 3084 + for-each: 0.3.5 3085 + gopd: 1.2.0 3086 + has-proto: 1.2.0 3087 + is-typed-array: 1.1.15 3088 + reflect.getprototypeof: 1.0.10 3089 3090 + typed-array-length@1.0.7: 3091 dependencies: 3092 + call-bind: 1.0.8 3093 + for-each: 0.3.5 3094 + gopd: 1.2.0 3095 + is-typed-array: 1.1.15 3096 + possible-typed-array-names: 1.1.0 3097 + reflect.getprototypeof: 1.0.10 3098 3099 + typescript-eslint@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2): 3100 dependencies: 3101 + '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 3102 + '@typescript-eslint/parser': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 3103 + '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 3104 + eslint: 9.23.0(jiti@2.4.2) 3105 + typescript: 5.8.2 3106 transitivePeerDependencies: 3107 - supports-color 3108 3109 + typescript@5.8.2: {} 3110 3111 + ufo@1.5.4: {} 3112 + 3113 + unbox-primitive@1.1.0: 3114 + dependencies: 3115 + call-bound: 1.0.4 3116 + has-bigints: 1.1.0 3117 + has-symbols: 1.1.0 3118 + which-boxed-primitive: 1.1.1 3119 + 3120 + unconfig@7.3.1: 3121 dependencies: 3122 + '@quansync/fs': 0.1.2 3123 + defu: 6.1.4 3124 + jiti: 2.4.2 3125 + quansync: 0.2.10 3126 3127 undici-types@6.20.0: {} 3128 3129 + undici-types@6.21.0: {} 3130 + 3131 uri-js@4.4.1: 3132 dependencies: 3133 punycode: 2.3.1 3134 3135 + utilium@1.10.1: 3136 dependencies: 3137 eventemitter3: 5.0.1 3138 optionalDependencies: 3139 '@xterm/xterm': 5.5.0 3140 3141 + which-boxed-primitive@1.1.1: 3142 dependencies: 3143 + is-bigint: 1.1.0 3144 + is-boolean-object: 1.2.2 3145 + is-number-object: 1.1.1 3146 + is-string: 1.1.1 3147 + is-symbol: 1.1.1 3148 3149 + which-builtin-type@1.2.1: 3150 dependencies: 3151 + call-bound: 1.0.4 3152 + function.prototype.name: 1.1.8 3153 has-tostringtag: 1.0.2 3154 + is-async-function: 2.1.1 3155 + is-date-object: 1.1.0 3156 + is-finalizationregistry: 1.1.1 3157 + is-generator-function: 1.1.0 3158 + is-regex: 1.2.1 3159 + is-weakref: 1.1.1 3160 isarray: 2.0.5 3161 + which-boxed-primitive: 1.1.1 3162 which-collection: 1.0.2 3163 + which-typed-array: 1.1.19 3164 3165 which-collection@1.0.2: 3166 dependencies: 3167 is-map: 2.0.3 3168 is-set: 2.0.3 3169 is-weakmap: 2.0.2 3170 + is-weakset: 2.0.4 3171 3172 + which-typed-array@1.1.19: 3173 dependencies: 3174 available-typed-arrays: 1.0.7 3175 + call-bind: 1.0.8 3176 + call-bound: 1.0.4 3177 + for-each: 0.3.5 3178 + get-proto: 1.0.1 3179 + gopd: 1.2.0 3180 has-tostringtag: 1.0.2 3181 3182 which@2.0.2: 3183 dependencies: 3184 isexe: 2.0.0 3185 3186 + yaml@2.7.1: {} 3187 + 3188 yocto-queue@0.1.0: {} 3189 3190 + zustand@5.0.3(@types/react@18.3.20): 3191 optionalDependencies: 3192 + '@types/react': 18.3.20
+31 -1
pnpm-workspace.yaml
··· 1 packages: 2 - - "packages/*"
··· 1 packages: 2 + - packages/* 3 + 4 + catalogs: 5 + dev: 6 + esbuild: ^0.19.3 7 + esbuild-copy-static-files: ^0.1.0 8 + "@types/node": ^22.14.0 9 + "@moonlight-mod/eslint-config": "github:moonlight-mod/eslint-config" 10 + eslint: ^9.12.0 11 + "@types/chrome": ^0.0.313 12 + husky: ^8.0.3 13 + prettier: ^3.1.0 14 + typescript: ^5.3.3 15 + taze: ^19.0.4 16 + prod: 17 + "@moonlight-mod/lunast": ^1.0.1 18 + "@moonlight-mod/mappings": ^1.1.25 19 + "@moonlight-mod/moonmap": ^1.0.5 20 + microdiff: ^1.5.0 21 + nanotar: ^0.1.1 22 + "@zenfs/core": ^2.0.0 23 + "@zenfs/dom": ^1.1.3 24 + 25 + onlyBuiltDependencies: 26 + - esbuild 27 + 28 + engineStrict: true 29 + strictSsl: true 30 + strictDepBuilds: true 31 + packageManagerStrict: true 32 + registry: https://registry.npmjs.org/
-78
scripts/link.js
··· 1 - // Janky script to get around pnpm link issues 2 - // Probably don't use this. Probably 3 - /* eslint-disable no-console */ 4 - const fs = require("fs"); 5 - const path = require("path"); 6 - const child_process = require("child_process"); 7 - 8 - const cwd = process.cwd(); 9 - const onDisk = { 10 - //"@moonlight-mod/lunast": "../lunast", 11 - //"@moonlight-mod/moonmap": "../moonmap", 12 - "@moonlight-mod/mappings": "../mappings" 13 - }; 14 - 15 - function exec(cmd, dir) { 16 - child_process.execSync(cmd, { cwd: dir, stdio: "inherit" }); 17 - } 18 - 19 - function getDeps(packageJSON) { 20 - const ret = {}; 21 - Object.assign(ret, packageJSON.dependencies || {}); 22 - Object.assign(ret, packageJSON.devDependencies || {}); 23 - Object.assign(ret, packageJSON.peerDependencies || {}); 24 - return ret; 25 - } 26 - 27 - function link(dir) { 28 - const packageJSONPath = path.join(dir, "package.json"); 29 - if (!fs.existsSync(packageJSONPath)) return; 30 - const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, "utf8")); 31 - const deps = getDeps(packageJSON); 32 - 33 - for (const [dep, relativePath] of Object.entries(onDisk)) { 34 - const fullPath = path.join(cwd, relativePath); 35 - if (deps[dep]) { 36 - exec(`pnpm link ${fullPath}`, dir); 37 - } 38 - } 39 - } 40 - 41 - function undo(dir) { 42 - exec("pnpm unlink", dir); 43 - try { 44 - if (fs.existsSync(path.join(dir, "pnpm-lock.yaml"))) { 45 - exec("git restore pnpm-lock.yaml", dir); 46 - } 47 - } catch { 48 - // ignored 49 - } 50 - } 51 - 52 - const shouldUndo = process.argv.includes("--undo"); 53 - const packages = fs.readdirSync("./packages"); 54 - 55 - for (const path of Object.values(onDisk)) { 56 - console.log(path); 57 - if (shouldUndo) { 58 - undo(path); 59 - } else { 60 - link(path); 61 - } 62 - } 63 - 64 - if (shouldUndo) { 65 - console.log(cwd); 66 - undo(cwd); 67 - for (const pkg of packages) { 68 - const dir = path.join(cwd, "packages", pkg); 69 - console.log(dir); 70 - undo(dir); 71 - } 72 - } else { 73 - for (const pkg of packages) { 74 - const dir = path.join(cwd, "packages", pkg); 75 - console.log(dir); 76 - link(dir); 77 - } 78 - }
···
+78
scripts/link.mjs
···
··· 1 + // Janky script to get around pnpm link issues 2 + // Probably don't use this. Probably 3 + /* eslint-disable no-console */ 4 + const fs = require("fs"); 5 + const path = require("path"); 6 + const child_process = require("child_process"); 7 + 8 + const cwd = process.cwd(); 9 + const onDisk = { 10 + //"@moonlight-mod/lunast": "../lunast", 11 + //"@moonlight-mod/moonmap": "../moonmap", 12 + "@moonlight-mod/mappings": "../mappings" 13 + }; 14 + 15 + function exec(cmd, dir) { 16 + child_process.execSync(cmd, { cwd: dir, stdio: "inherit" }); 17 + } 18 + 19 + function getDeps(packageJSON) { 20 + const ret = {}; 21 + Object.assign(ret, packageJSON.dependencies || {}); 22 + Object.assign(ret, packageJSON.devDependencies || {}); 23 + Object.assign(ret, packageJSON.peerDependencies || {}); 24 + return ret; 25 + } 26 + 27 + function link(dir) { 28 + const packageJSONPath = path.join(dir, "package.json"); 29 + if (!fs.existsSync(packageJSONPath)) return; 30 + const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, "utf8")); 31 + const deps = getDeps(packageJSON); 32 + 33 + for (const [dep, relativePath] of Object.entries(onDisk)) { 34 + const fullPath = path.join(cwd, relativePath); 35 + if (deps[dep]) { 36 + exec(`pnpm link ${fullPath}`, dir); 37 + } 38 + } 39 + } 40 + 41 + function undo(dir) { 42 + exec("pnpm unlink", dir); 43 + try { 44 + if (fs.existsSync(path.join(dir, "pnpm-lock.yaml"))) { 45 + exec("git restore pnpm-lock.yaml", dir); 46 + } 47 + } catch { 48 + // ignored 49 + } 50 + } 51 + 52 + const shouldUndo = process.argv.includes("--undo"); 53 + const packages = fs.readdirSync("./packages"); 54 + 55 + for (const path of Object.values(onDisk)) { 56 + console.log(path); 57 + if (shouldUndo) { 58 + undo(path); 59 + } else { 60 + link(path); 61 + } 62 + } 63 + 64 + if (shouldUndo) { 65 + console.log(cwd); 66 + undo(cwd); 67 + for (const pkg of packages) { 68 + const dir = path.join(cwd, "packages", pkg); 69 + console.log(dir); 70 + undo(dir); 71 + } 72 + } else { 73 + for (const pkg of packages) { 74 + const dir = path.join(cwd, "packages", pkg); 75 + console.log(dir); 76 + link(dir); 77 + } 78 + }
-29
scripts/update.js
··· 1 - // Update dependencies in all packages 2 - /* eslint-disable no-console */ 3 - const fs = require("fs"); 4 - const path = require("path"); 5 - const child_process = require("child_process"); 6 - 7 - const packageToUpdate = process.argv[2]; 8 - 9 - function getDeps(packageJSON) { 10 - const ret = {}; 11 - Object.assign(ret, packageJSON.dependencies || {}); 12 - Object.assign(ret, packageJSON.devDependencies || {}); 13 - Object.assign(ret, packageJSON.peerDependencies || {}); 14 - return ret; 15 - } 16 - 17 - function exec(cmd, dir) { 18 - child_process.execSync(cmd, { cwd: dir, stdio: "inherit" }); 19 - } 20 - 21 - for (const package of fs.readdirSync("./packages")) { 22 - const packageJSON = JSON.parse(fs.readFileSync(path.join("./packages", package, "package.json"), "utf8")); 23 - 24 - const deps = getDeps(packageJSON); 25 - if (Object.keys(deps).includes(packageToUpdate)) { 26 - console.log(`Updating ${packageToUpdate} in ${package}`); 27 - exec(`pnpm update ${packageToUpdate}`, path.join("./packages", package)); 28 - } 29 - }
···
+35
tsconfig.base.json
···
··· 1 + { 2 + "$schema": "https://json.schemastore.org/tsconfig.json", 3 + "display": "Base", 4 + "_version": "1.0.0", 5 + "compilerOptions": { 6 + "incremental": true, 7 + "target": "ES2022", 8 + "jsx": "react", 9 + "lib": ["ESNext", "ESNext.Disposable", "DOM", "DOM.Iterable"], 10 + "module": "ES2020", 11 + "moduleResolution": "Bundler", 12 + "resolveJsonModule": true, 13 + "allowArbitraryExtensions": false, 14 + "allowImportingTsExtensions": true, 15 + "allowJs": true, 16 + "strict": true, 17 + "strictNullChecks": true, 18 + 19 + // disable unreachable code detection because it breaks with esbuild labels 20 + "allowUnreachableCode": true, 21 + "noFallthroughCasesInSwitch": true, 22 + "noImplicitReturns": true, 23 + "declaration": true, 24 + "declarationMap": true, 25 + "outDir": "dist", 26 + "sourceMap": true, 27 + "stripInternal": true, 28 + "esModuleInterop": true, 29 + "forceConsistentCasingInFileNames": true, 30 + "noErrorTruncation": true, 31 + "verbatimModuleSyntax": false, 32 + // meriyah has a broken import lol 33 + "skipLibCheck": true 34 + } 35 + }
+7 -16
tsconfig.json
··· 1 { 2 "compilerOptions": { 3 - "target": "es2022", 4 - "module": "es2020", 5 - "esModuleInterop": true, 6 - "forceConsistentCasingInFileNames": true, 7 - "strict": true, 8 - "moduleResolution": "bundler", 9 "baseUrl": "./packages/", 10 - "jsx": "react", 11 - "noEmit": true, 12 - 13 - // meriyah has a broken import lol 14 - "skipLibCheck": true, 15 - 16 - // disable unreachable code detection because it breaks with esbuild labels 17 - "allowUnreachableCode": true 18 }, 19 - "include": ["./packages/**/*", "./env.d.ts"], 20 - "exclude": ["node_modules"] 21 }
··· 1 { 2 + "extends": ["./tsconfig.base.json"], 3 "compilerOptions": { 4 "baseUrl": "./packages/", 5 + "noEmit": true 6 }, 7 + "exclude": [ 8 + "**/node_modules/**", 9 + "**/dist/**", 10 + "**/build/**" 11 + ] 12 }