this repo has no description

Compare changes

Choose any two refs to compare.

Changed files
+2472 -2042
.github
nix
packages
scripts
+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 }
+4 -1
CHANGELOG.md
··· 1 - - Fixed some bugs in patching logic
··· 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 {
+40 -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 + nativeBuildInputs = [ 15 + nodejs_22 16 + pnpm_10.configHook 17 ]; 18 + 19 + pnpmDeps = pnpm_10.fetchDeps { 20 + inherit (finalAttrs) pname version src; 21 + hash = "sha256-I+zRCUqJabpGJRFBGW0NrM9xzyzeCjioF54zlCpynBU="; 22 + }; 23 24 + env = { 25 + NODE_ENV = "production"; 26 + MOONLIGHT_VERSION = "v${finalAttrs.version}"; 27 + }; 28 + 29 + buildPhase = '' 30 + runHook preBuild 31 32 + pnpm run build 33 + 34 + runHook postBuild 35 + ''; 36 + 37 + installPhase = '' 38 + runHook preInstall 39 + 40 + cp -r dist $out 41 + 42 + runHook postInstall 43 + ''; 44 + 45 + meta = with lib; { 46 description = "Yet another Discord mod"; 47 homepage = "https://moonlight-mod.github.io/"; 48 license = licenses.lgpl3; 49 maintainers = with maintainers; [ notnite ]; 50 }; 51 + })
+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.5", 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.5", 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 }
+6 -5
packages/browser/manifestv2.json
··· 1 { 2 "manifest_version": 2, 3 "name": "moonlight", 4 "description": "Yet another Discord mod", 5 - "version": "1.3.5", 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 }
··· 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 }
+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.0.2", 9 - "@zenfs/dom": "^0.2.16" 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 );
+8 -10
packages/browser/src/index.ts
··· 6 import { MoonlightBranch, MoonlightNode } from "@moonlight-mod/types"; 7 import { getConfig, getConfigOption, getManifest, setConfigOption } from "@moonlight-mod/core/util/config"; 8 import { IndexedDB } from "@zenfs/dom"; 9 - import { configure } from "@zenfs/core"; 10 import * as fs from "@zenfs/core/promises"; 11 12 function getParts(path: string) { 13 if (path.startsWith("/")) path = path.substring(1); ··· 18 delete window._moonlightBrowserInit; 19 20 // Set up a virtual filesystem with IndexedDB 21 - await configure({ 22 - mounts: { 23 - "/": { 24 - backend: IndexedDB, 25 - // eslint-disable-next-line @typescript-eslint/ban-ts-comment 26 - // @ts-ignore tsc tweaking 27 - storeName: "moonlight-fs" 28 - } 29 - } 30 }); 31 32 window.moonlightNodeSandboxed = { ··· 116 processedExtensions, 117 nativesCache: {}, 118 isBrowser: true, 119 120 version: MOONLIGHT_VERSION, 121 branch: MOONLIGHT_BRANCH as MoonlightBranch, ··· 147 async writeConfig(newConfig) { 148 await writeConfig(newConfig); 149 config = newConfig; 150 } 151 }; 152
··· 6 import { MoonlightBranch, MoonlightNode } from "@moonlight-mod/types"; 7 import { getConfig, getConfigOption, getManifest, setConfigOption } from "@moonlight-mod/core/util/config"; 8 import { IndexedDB } from "@zenfs/dom"; 9 + import { configureSingle } from "@zenfs/core"; 10 import * as fs from "@zenfs/core/promises"; 11 + import { NodeEventPayloads, NodeEventType } from "@moonlight-mod/types/core/event"; 12 + import { createEventEmitter } from "@moonlight-mod/core/util/event"; 13 14 function getParts(path: string) { 15 if (path.startsWith("/")) path = path.substring(1); ··· 20 delete window._moonlightBrowserInit; 21 22 // Set up a virtual filesystem with IndexedDB 23 + await configureSingle({ 24 + backend: IndexedDB, 25 + storeName: "moonlight-fs" 26 }); 27 28 window.moonlightNodeSandboxed = { ··· 112 processedExtensions, 113 nativesCache: {}, 114 isBrowser: true, 115 + events: createEventEmitter<NodeEventType, NodeEventPayloads>(), 116 117 version: MOONLIGHT_VERSION, 118 branch: MOONLIGHT_BRANCH as MoonlightBranch, ··· 144 async writeConfig(newConfig) { 145 await writeConfig(newConfig); 146 config = newConfig; 147 + this.events.dispatchEvent(NodeEventType.ConfigSaved, newConfig); 148 } 149 }; 150
+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 }
+5 -5
packages/core/src/extension/loader.ts
··· 13 import calculateDependencies from "../util/dependency"; 14 import { createEventEmitter } from "../util/event"; 15 import { registerStyles } from "../styles"; 16 - import { EventPayloads, EventType } from "@moonlight-mod/types/core/event"; 17 18 const logger = new Logger("core/extension/loader"); 19 ··· 202 } 203 204 export async function loadProcessedExtensions({ extensions, dependencyGraph }: ProcessedExtensions) { 205 - const eventEmitter = createEventEmitter<EventType, EventPayloads>(); 206 const finished: Set<string> = new Set(); 207 208 logger.trace( ··· 224 } 225 226 function done() { 227 - eventEmitter.removeEventListener(EventType.ExtensionLoad, cb); 228 r(); 229 } 230 231 - eventEmitter.addEventListener(EventType.ExtensionLoad, cb); 232 if (finished.has(dep)) done(); 233 }) 234 ); ··· 242 await loadExt(ext); 243 244 finished.add(ext.id); 245 - eventEmitter.dispatchEvent(EventType.ExtensionLoad, ext.id); 246 logger.debug(`Loaded "${ext.id}"`); 247 } 248
··· 13 import calculateDependencies from "../util/dependency"; 14 import { createEventEmitter } from "../util/event"; 15 import { registerStyles } from "../styles"; 16 + import { WebEventPayloads, WebEventType } from "@moonlight-mod/types/core/event"; 17 18 const logger = new Logger("core/extension/loader"); 19 ··· 202 } 203 204 export async function loadProcessedExtensions({ extensions, dependencyGraph }: ProcessedExtensions) { 205 + const eventEmitter = createEventEmitter<WebEventType, WebEventPayloads>(); 206 const finished: Set<string> = new Set(); 207 208 logger.trace( ··· 224 } 225 226 function done() { 227 + eventEmitter.removeEventListener(WebEventType.ExtensionLoad, cb); 228 r(); 229 } 230 231 + eventEmitter.addEventListener(WebEventType.ExtensionLoad, cb); 232 if (finished.has(dep)) done(); 233 }) 234 ); ··· 242 await loadExt(ext); 243 244 finished.add(ext.id); 245 + eventEmitter.dispatchEvent(WebEventType.ExtensionLoad, ext.id); 246 logger.debug(`Loaded "${ext.id}"`); 247 } 248
+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) {
+46 -32
packages/core/src/patch.ts
··· 11 } from "@moonlight-mod/types"; 12 import Logger from "./util/logger"; 13 import calculateDependencies, { Dependency } from "./util/dependency"; 14 - import { EventType } from "@moonlight-mod/types/core/event"; 15 import { processFind, processReplace, testFind } from "./util/patch"; 16 17 const logger = new Logger("core/patch"); ··· 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 ··· 117 for (let i = 0; i < patches.length; i++) { 118 const patch = patches[i]; 119 if (patch.prerequisite != null && !patch.prerequisite()) { 120 continue; 121 } 122 ··· 136 // We ensured normal PatchReplace objects get turned into arrays on register 137 const replaces = patch.replace as PatchReplace[]; 138 139 for (let i = 0; i < replaces.length; i++) { 140 const replace = replaces[i]; 141 let patchId = `${patch.ext}#${patch.id}`; ··· 152 } 153 154 if (replaced === moduleString) { 155 - logger.warn("Patch replacement failed", id, patch); 156 if (patch.hardFail) { 157 hardFailed = true; 158 break; ··· 176 exts.add(patch.ext); 177 } 178 179 - moonlight.unpatched.delete(patch); 180 if (shouldRemove) patches.splice(i--, 1); 181 } 182 } 183 184 if (modified) { 185 - if (!swappedModule) patchModule(id, patchedStr.join(", "), moduleString); 186 - moduleCache[id] = moduleString; 187 moonlight.patched.set(id, exts); 188 } 189 ··· 191 const parsed = moonlight.lunast.parseScript(id, moduleString); 192 if (parsed != null) { 193 for (const [parsedId, parsedScript] of Object.entries(parsed)) { 194 - if (patchModule(parsedId, "lunast", parsedScript)) { 195 moduleCache[parsedId] = parsedScript; 196 } 197 } ··· 202 203 if (moonlightNode.config.patchAll === true) { 204 if ((typeof id !== "string" || !id.includes("_")) && !entry[id].__moonlight) { 205 - const wrapped = `(${moduleCache[id]}).apply(this, arguments)\n` + `//# sourceURL=Webpack-Module-${id}`; 206 entry[id] = new Function("module", "exports", "require", wrapped) as WebpackModuleFunc; 207 entry[id].__moonlight = true; 208 } ··· 325 } 326 327 for (const [name, func] of Object.entries(moonlight.moonmap.getWebpackModules("window.moonlight.moonmap"))) { 328 injectedWpModules.push({ id: name, run: func }); 329 modules[name] = func; 330 inject = true; ··· 402 const realPush = jsonp.push; 403 if (jsonp.push.__moonlight !== true) { 404 jsonp.push = (items) => { 405 - moonlight.events.dispatchEvent(EventType.ChunkLoad, { 406 chunkId: items[0], 407 modules: items[1], 408 require: items[2] ··· 450 set(modules: any) { 451 const { stack } = new Error(); 452 if (stack!.includes("/assets/") && !Array.isArray(modules)) { 453 - moonlight.events.dispatchEvent(EventType.ChunkLoad, { 454 modules: modules 455 }); 456 patchModules(modules);
··· 11 } from "@moonlight-mod/types"; 12 import Logger from "./util/logger"; 13 import calculateDependencies, { Dependency } from "./util/dependency"; 14 + import { WebEventType } from "@moonlight-mod/types/core/event"; 15 import { processFind, processReplace, testFind } from "./util/patch"; 16 17 const logger = new Logger("core/patch"); ··· 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 ··· 125 for (let i = 0; i < patches.length; i++) { 126 const patch = patches[i]; 127 if (patch.prerequisite != null && !patch.prerequisite()) { 128 + moonlight.unpatched.delete(patch); 129 continue; 130 } 131 ··· 145 // We ensured normal PatchReplace objects get turned into arrays on register 146 const replaces = patch.replace as PatchReplace[]; 147 148 + let isPatched = true; 149 for (let i = 0; i < replaces.length; i++) { 150 const replace = replaces[i]; 151 let patchId = `${patch.ext}#${patch.id}`; ··· 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; 169 break; ··· 187 exts.add(patch.ext); 188 } 189 190 + if (isPatched) moonlight.unpatched.delete(patch); 191 if (shouldRemove) patches.splice(i--, 1); 192 } 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; ··· 416 const realPush = jsonp.push; 417 if (jsonp.push.__moonlight !== true) { 418 jsonp.push = (items) => { 419 + moonlight.events.dispatchEvent(WebEventType.ChunkLoad, { 420 chunkId: items[0], 421 modules: items[1], 422 require: items[2] ··· 464 set(modules: any) { 465 const { stack } = new Error(); 466 if (stack!.includes("/assets/") && !Array.isArray(modules)) { 467 + moonlight.events.dispatchEvent(WebEventType.ChunkLoad, { 468 modules: modules 469 }); 470 patchModules(modules);
+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 }
+14 -5
packages/core-extensions/src/commands/index.ts
··· 7 replace: [ 8 // inject commands 9 { 10 - match: /return (\i)=\i/, 11 replacement: (orig, commands) => 12 - `${commands}=[...${commands},...require("commands_commands").default._getCommands()];${orig}` 13 }, 14 15 // section ··· 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 ];
··· 7 replace: [ 8 // inject commands 9 { 10 + match: /return (\i)\.filter/, 11 replacement: (orig, commands) => 12 + `return [...${commands},...require("commands_commands").default._getCommands()].filter` 13 }, 14 15 // section ··· 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 ];
+17 -1
packages/core-extensions/src/commands/webpackModules/commands.ts
··· 30 applicationId: APPLICATION_ID, 31 untranslatedDescription: command.description, 32 displayDescription: command.description, 33 - options: command.options.map((o) => ({ 34 ...o, 35 displayName: o.name, 36 displayDescription: o.description ··· 40 }, 41 42 registerLegacyCommand(id, command) { 43 if (!legacyCommands) { 44 queuedLegacyCommands![id] = command; 45 } else { 46 legacyCommands[id] = command; 47 } 48 }, 49 50 _getCommands() {
··· 30 applicationId: APPLICATION_ID, 31 untranslatedDescription: command.description, 32 displayDescription: command.description, 33 + options: command.options?.map((o) => ({ 34 ...o, 35 displayName: o.name, 36 displayDescription: o.description ··· 40 }, 41 42 registerLegacyCommand(id, command) { 43 + if (command.match) { 44 + if (command.match instanceof RegExp) { 45 + command.match = this.anyScopeRegex(command.match); 46 + } else if (command.match.regex && typeof command.match !== "function") { 47 + command.match = this.anyScopeRegex(command.match.regex); 48 + } 49 + } 50 + 51 if (!legacyCommands) { 52 queuedLegacyCommands![id] = command; 53 } else { 54 legacyCommands[id] = command; 55 } 56 + }, 57 + 58 + anyScopeRegex(regex) { 59 + const out = function (str: string) { 60 + return regex.exec(str); 61 + }; 62 + out.regex = regex; 63 + return out; 64 }, 65 66 _getCommands() {
+7 -5
packages/core-extensions/src/common/index.ts
··· 2 3 export const webpackModules: ExtensionWebExports["webpackModules"] = { 4 stores: { 5 - dependencies: [ 6 - { 7 - id: "discord/packages/flux" 8 - } 9 - ] 10 } 11 };
··· 2 3 export const webpackModules: ExtensionWebExports["webpackModules"] = { 4 stores: { 5 + dependencies: [{ id: "discord/packages/flux" }] 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 },
+27
packages/core-extensions/src/common/style.css
···
··· 1 + .moonlight-error-boundary { 2 + margin: 0 0 15px; 3 + padding: 10px; 4 + border-radius: 5px; 5 + font-size: 1rem; 6 + font-weight: 300; 7 + line-height: 22px; 8 + color: var(--text-normal, white); 9 + background: hsl(var(--red-400-hsl) / 0.1); 10 + border: 2px solid hsl(var(--red-400-hsl) / 0.5); 11 + 12 + .theme-light & { 13 + color: var(--text-normal, black) !important; 14 + } 15 + 16 + & > h3 { 17 + margin-bottom: 0.25rem; 18 + } 19 + 20 + & > .hljs { 21 + background: var(--background-secondary); 22 + border: 1px solid var(--background-tertiary); 23 + white-space: pre-wrap; 24 + font-family: var(--font-code); 25 + user-select: text; 26 + } 27 + }
+47
packages/core-extensions/src/common/webpackModules/ErrorBoundary.tsx
···
··· 1 + import React from "@moonlight-mod/wp/react"; 2 + import { ErrorBoundaryProps, ErrorBoundaryState } from "@moonlight-mod/types/coreExtensions/common"; 3 + 4 + const logger = moonlight.getLogger("ErrorBoundary"); 5 + 6 + class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> { 7 + constructor(props: ErrorBoundaryProps) { 8 + super(props); 9 + this.state = { 10 + errored: false, 11 + error: undefined, 12 + componentStack: undefined 13 + }; 14 + } 15 + 16 + static getDerivedStateFromError(error: Error) { 17 + return { 18 + errored: true, 19 + error 20 + }; 21 + } 22 + 23 + componentDidCatch(error: Error, { componentStack }: { componentStack: string }) { 24 + logger.error(`${error}\n\nComponent stack:\n${componentStack}`); 25 + this.setState({ error, componentStack }); 26 + } 27 + 28 + render() { 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> 39 + </div> 40 + ); 41 + } 42 + 43 + return children; 44 + } 45 + } 46 + 47 + export default ErrorBoundary;
+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;
+14 -6
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 ], ··· 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 } 63 ]; 64
··· 15 replacement: 'children:require("componentEditor_dmList").default._patchItems([' 16 }, 17 { 18 + match: /(?<=(onMouseDown|nameplate):\i}\))]/, 19 replacement: "],arguments[0])" 20 } 21 ], ··· 44 find: '},"new-member")),', 45 replace: [ 46 { 47 + match: /(?<=\.BADGES](=|:))(\i)(;|})/, 48 + replacement: (_, leading, badges, trailing) => 49 + `require("componentEditor_messages").default._patchUsernameBadges(${badges},arguments[0])${trailing}` 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:(\[.+?])}\),usernameSpanId:/, 58 replacement: (_, elements) => 59 + `children:require("componentEditor_messages").default._patchUsername(${elements},arguments[0])}),usernameSpanId:` 60 } 61 ] 62 + }, 63 + { 64 + find: '.provider&&"Discord"===', 65 + replace: { 66 + match: /(?<=\.container\),)children:(\[.+?this\.renderSuppressConfirmModal\(\),.+?\])}\)/, 67 + replacement: (_, elements) => 68 + `children:require("componentEditor_messages").default._patchAccessories(${elements},this.props)})` 69 + } 70 } 71 ]; 72
+15
packages/core-extensions/src/componentEditor/webpackModules/messages.tsx
··· 12 const username: Record<string, MessageUsername> = {}; 13 const usernameBadges: Record<string, MessageUsernameBadge> = {}; 14 const badges: Record<string, MessageBadge> = {}; 15 16 function addEntries( 17 elements: React.ReactNode[], ··· 40 const index = elements.indexOf(originalElements[indicies[entry.anchor]!]); 41 elements.splice(index! + (entry.before ? 0 : 1), 0, component); 42 } 43 } 44 } 45 ··· 65 before 66 }; 67 }, 68 _patchUsername(elements, props) { 69 addEntries(elements, username, MessageUsernameIndicies, props); 70 return elements; ··· 75 }, 76 _patchBadges(elements, props) { 77 addEntries(elements, badges, MessageBadgeIndicies, props); 78 return elements; 79 } 80 };
··· 12 const username: Record<string, MessageUsername> = {}; 13 const usernameBadges: Record<string, MessageUsernameBadge> = {}; 14 const badges: Record<string, MessageBadge> = {}; 15 + const accessories: Record<string, React.FC<any>> = {}; 16 17 function addEntries( 18 elements: React.ReactNode[], ··· 41 const index = elements.indexOf(originalElements[indicies[entry.anchor]!]); 42 elements.splice(index! + (entry.before ? 0 : 1), 0, component); 43 } 44 + } 45 + } 46 + 47 + function addComponents(elements: React.ReactNode[], components: Record<string, React.FC<any>>, props: any) { 48 + for (const [id, Component] of Object.entries(components)) { 49 + const component = <Component {...props} key={id} />; 50 + elements.push(component); 51 } 52 } 53 ··· 73 before 74 }; 75 }, 76 + addAccessory(id, component) { 77 + accessories[id] = component; 78 + }, 79 _patchUsername(elements, props) { 80 addEntries(elements, username, MessageUsernameIndicies, props); 81 return elements; ··· 86 }, 87 _patchBadges(elements, props) { 88 addEntries(elements, badges, MessageBadgeIndicies, props); 89 + return elements; 90 + }, 91 + _patchAccessories(elements, props) { 92 + addComponents(elements, accessories, props); 93 return elements; 94 } 95 };
+1 -1
packages/core-extensions/src/contextMenu/webpackModules/evilMenu.ts
··· 8 9 const parserSym = code.match(/(?<=_patchMenu\(.,).+?(?=\()/)![0]; 10 11 - code = code.replace(/(?<=function\(\){return ).(?=})/, parserSym); 12 const mod = new Function("module", "exports", "require", `(${code}).apply(this, arguments)`); 13 14 const exp: any = {};
··· 8 9 const parserSym = code.match(/(?<=_patchMenu\(.,).+?(?=\()/)![0]; 10 11 + code = code.replace(/{(.):\(\)=>./, (orig, e) => `{${e}:()=>${parserSym}`); 12 const mod = new Function("module", "exports", "require", `(${code}).apply(this, arguments)`); 13 14 const exp: any = {};
+2 -2
packages/core-extensions/src/disableSentry/index.ts
··· 6 find: "profiledRootComponent:", 7 replace: { 8 type: PatchReplaceType.Normal, 9 - match: /(?<=\.Z=){.+?}}/, 10 - replacement: 'require("disableSentry_stub").proxy()' 11 } 12 }, 13 {
··· 6 find: "profiledRootComponent:", 7 replace: { 8 type: PatchReplaceType.Normal, 9 + match: /Z:\(\)=>\i/, 10 + replacement: 'Z:()=>require("disableSentry_stub").proxy()' 11 } 12 }, 13 {
+19 -2
packages/core-extensions/src/experiments/index.ts
··· 11 { 12 find: '"scientist:triggered"', // Scientist? Triggered. 13 replace: { 14 - match: /(?<=personal_connection_id\|\|)!1/, 15 - replacement: "!0" 16 } 17 }, 18 ··· 23 match: /&&\((.)\?\(0,/, 24 replacement: (_, isStaff) => 25 `&&(((moonlight.getConfigOption("experiments","devtools")??false)?true:${isStaff})?(0,` 26 } 27 }, 28
··· 11 { 12 find: '"scientist:triggered"', // Scientist? Triggered. 13 replace: { 14 + match: ".personal_connection_id", 15 + replacement: ".personal_connection_id || true" 16 } 17 }, 18 ··· 23 match: /&&\((.)\?\(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
+12 -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 "Masks.PANEL_BUTTON", 47 '"Missing channel in Channel.openChannelContextMenu"', 48 ".forumOrHome]:" 49 ] 50 }, 51 52 settings: { 53 dependencies: [ 54 { ext: "spacepack", id: "spacepack" }, 55 { ext: "settings", id: "settings" }, 56 { id: "react" }, 57 { ext: "moonbase", id: "ui" }, 58 ':"USER_SETTINGS_MODAL_SET_SECTION"' 59 ], 60 entrypoint: true ··· 64 dependencies: [ 65 { id: "react" }, 66 { ext: "moonbase", id: "stores" }, 67 { ext: "notices", id: "notices" }, 68 { 69 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" }, 49 "Masks.PANEL_BUTTON", 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: { 60 dependencies: [ 61 { ext: "spacepack", id: "spacepack" }, 62 { ext: "settings", id: "settings" }, 63 { id: "react" }, 64 { ext: "moonbase", id: "ui" }, 65 + { ext: "contextMenu", id: "contextMenu" }, 66 ':"USER_SETTINGS_MODAL_SET_SECTION"' 67 ], 68 entrypoint: true ··· 72 dependencies: [ 73 { id: "react" }, 74 { ext: "moonbase", id: "stores" }, 75 + { ext: "moonbase", id: "ThemeDarkIcon" }, 76 { ext: "notices", id: "notices" }, 77 { 78 ext: "spacepack",
+1 -1
packages/core-extensions/src/moonbase/manifest.json
··· 7 "tagline": "The official settings UI for moonlight", 8 "authors": ["Cynosphere", "NotNite", "redstonekasi"] 9 }, 10 - "dependencies": ["spacepack", "settings", "common", "notices"], 11 "settings": { 12 "sections": { 13 "advice": "reload",
··· 7 "tagline": "The official settings UI for moonlight", 8 "authors": ["Cynosphere", "NotNite", "redstonekasi"] 9 }, 10 + "dependencies": ["spacepack", "settings", "common", "notices", "contextMenu"], 11 "settings": { 12 "sections": { 13 "advice": "reload",
+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 + }
+19 -3
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 ··· 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 ··· 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 -1
packages/core-extensions/src/moonbase/webpackModules/settings.tsx
··· 5 import UserSettingsModalActionCreators from "@moonlight-mod/wp/discord/actions/UserSettingsModalActionCreators"; 6 import Margins from "@moonlight-mod/wp/discord/styles/shared/Margins.css"; 7 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 8 - import { MenuItem, Text, Breadcrumbs } from "@moonlight-mod/wp/discord/components/common/index"; 9 10 const notice = { 11 stores: [MoonbaseSettingsStore],
··· 5 import UserSettingsModalActionCreators from "@moonlight-mod/wp/discord/actions/UserSettingsModalActionCreators"; 6 import Margins from "@moonlight-mod/wp/discord/styles/shared/Margins.css"; 7 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 8 + import { Text, Breadcrumbs } from "@moonlight-mod/wp/discord/components/common/index"; 9 + import { MenuItem } from "@moonlight-mod/wp/contextMenu_contextMenu"; 10 11 const notice = { 12 stores: [MoonbaseSettingsStore],
+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 }
+8 -3
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/card.tsx
··· 3 4 import { ExtensionCompat } from "@moonlight-mod/core/extension/loader"; 5 import { 6 - BeakerIcon, 7 DownloadIcon, 8 TrashIcon, 9 AngleBracketsIcon, ··· 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"; ··· 118 <Text variant="text-md/semibold">{ext.manifest?.meta?.name ?? ext.id}</Text> 119 {ext.source.type === ExtensionLoadSource.Developer && ( 120 <Tooltip text="This is a local extension" position="top"> 121 - {(props: any) => <BeakerIcon {...props} class={BuildOverrideClasses.infoIcon} size="xs" />} 122 </Tooltip> 123 )} 124 ··· 322 })} 323 </Text> 324 )} 325 - {tab === ExtensionPage.Settings && <Settings ext={ext} />} 326 </Flex> 327 </div> 328 </Card>
··· 3 4 import { ExtensionCompat } from "@moonlight-mod/core/extension/loader"; 5 import { 6 + ScienceIcon, 7 DownloadIcon, 8 TrashIcon, 9 AngleBracketsIcon, ··· 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"; ··· 119 <Text variant="text-md/semibold">{ext.manifest?.meta?.name ?? ext.id}</Text> 120 {ext.source.type === ExtensionLoadSource.Developer && ( 121 <Tooltip text="This is a local extension" position="top"> 122 + {(props: any) => <ScienceIcon {...props} class={BuildOverrideClasses.infoIcon} size="xs" />} 123 </Tooltip> 124 )} 125 ··· 323 })} 324 </Text> 325 )} 326 + {tab === ExtensionPage.Settings && ( 327 + <ErrorBoundary> 328 + <Settings ext={ext} /> 329 + </ErrorBoundary> 330 + )} 331 </Flex> 332 </div> 333 </Card>
+3 -5
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/filterBar.tsx
··· 10 Popout, 11 Dialog, 12 Menu, 13 - MenuGroup, 14 - MenuCheckboxItem, 15 - MenuItem, 16 ChevronSmallDownIcon, 17 ChevronSmallUpIcon, 18 ArrowsUpDownIcon, 19 RetryIcon, 20 Tooltip 21 } from "@moonlight-mod/wp/discord/components/common/index"; 22 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 23 import Margins from "@moonlight-mod/wp/discord/styles/shared/Margins.css"; 24 import TagItem from "@moonlight-mod/wp/discord/modules/forums/web/Tag"; ··· 236 {...props} 237 size={Button.Sizes.MIN} 238 color={Button.Colors.CUSTOM} 239 - className={`${ForumsClasses.sortDropdown} moonbase-retry-button ${checkingUpdates ? "moonbase-speen" : ""}`} 240 innerClassName={ForumsClasses.sortDropdownInner} 241 onClick={() => { 242 (async () => { ··· 251 })(); 252 }} 253 > 254 - <RetryIcon size={"custom"} width={16} /> 255 </Button> 256 )} 257 </Tooltip>
··· 10 Popout, 11 Dialog, 12 Menu, 13 ChevronSmallDownIcon, 14 ChevronSmallUpIcon, 15 ArrowsUpDownIcon, 16 RetryIcon, 17 Tooltip 18 } from "@moonlight-mod/wp/discord/components/common/index"; 19 + import { MenuGroup, MenuCheckboxItem, MenuItem } from "@moonlight-mod/wp/contextMenu_contextMenu"; 20 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 21 import Margins from "@moonlight-mod/wp/discord/styles/shared/Margins.css"; 22 import TagItem from "@moonlight-mod/wp/discord/modules/forums/web/Tag"; ··· 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 );
+2 -7
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/popup.tsx
··· 1 // TODO: clean up the styling here 2 import React from "@moonlight-mod/wp/react"; 3 import { MoonbaseExtension } from "core-extensions/src/moonbase/types"; 4 - import { 5 - openModalLazy, 6 - useModalsStore, 7 - closeModal, 8 - SingleSelect, 9 - Text 10 - } from "@moonlight-mod/wp/discord/components/common/index"; 11 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 12 import { ExtensionLoadSource } from "@moonlight-mod/types"; 13 import Flex from "@moonlight-mod/wp/discord/uikit/Flex";
··· 1 // TODO: clean up the styling here 2 import React from "@moonlight-mod/wp/react"; 3 import { MoonbaseExtension } from "core-extensions/src/moonbase/types"; 4 + import { openModalLazy, useModalsStore, closeModal } from "@moonlight-mod/wp/discord/modules/modals/Modals"; 5 + import { SingleSelect, Text } from "@moonlight-mod/wp/discord/components/common/index"; 6 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 7 import { ExtensionLoadSource } from "@moonlight-mod/types"; 8 import Flex from "@moonlight-mod/wp/discord/uikit/Flex";
+31 -15
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/settings.tsx
··· 26 Button, 27 useVariableSelect, 28 multiSelect, 29 - Select as DiscordSelect 30 } from "@moonlight-mod/wp/discord/components/common/index"; 31 import { useStateFromStores } from "@moonlight-mod/wp/discord/packages/flux"; 32 import Flex from "@moonlight-mod/wp/discord/uikit/Flex"; 33 import MarkupUtils from "@moonlight-mod/wp/discord/modules/markup/MarkupUtils"; 34 import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores"; 35 36 let GuildSettingsRoleEditClasses: any; 37 spacepack ··· 101 const { value, displayName, description } = useConfigEntry<number>(ext.uniqueId, name); 102 103 const castedSetting = setting as NumberSettingType; 104 - const min = castedSetting.min ?? 0; 105 - const max = castedSetting.max ?? 100; 106 107 return ( 108 <FormItem className={Margins.marginTop20} title={displayName}> 109 - {description && <FormText>{markdownify(description)}</FormText>} 110 - <Slider 111 - initialValue={value ?? 0} 112 - disabled={disabled} 113 - minValue={castedSetting.min ?? 0} 114 - maxValue={castedSetting.max ?? 100} 115 - onValueChange={(value: number) => { 116 - const rounded = Math.max(min, Math.min(max, Math.round(value))); 117 - MoonbaseSettingsStore.setExtensionConfig(ext.id, name, rounded); 118 - }} 119 - /> 120 </FormItem> 121 ); 122 } ··· 364 } 365 366 return ( 367 - <Component value={value} setValue={(value) => MoonbaseSettingsStore.setExtensionConfig(ext.id, name, value)} /> 368 ); 369 } 370
··· 26 Button, 27 useVariableSelect, 28 multiSelect, 29 + Select as DiscordSelect, 30 + NumberInputStepper 31 } from "@moonlight-mod/wp/discord/components/common/index"; 32 import { useStateFromStores } from "@moonlight-mod/wp/discord/packages/flux"; 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 ··· 103 const { value, displayName, description } = useConfigEntry<number>(ext.uniqueId, name); 104 105 const castedSetting = setting as NumberSettingType; 106 + const min = castedSetting.min; 107 + const max = castedSetting.max; 108 + 109 + const onChange = (value: number) => { 110 + const rounded = min == null || max == null ? Math.round(value) : Math.max(min, Math.min(max, Math.round(value))); 111 + MoonbaseSettingsStore.setExtensionConfig(ext.id, name, rounded); 112 + }; 113 114 return ( 115 <FormItem className={Margins.marginTop20} title={displayName}> 116 + {min == null || max == null ? ( 117 + <Flex justify={Flex.Justify.BETWEEN} direction={Flex.Direction.HORIZONTAL}> 118 + {description && <FormText>{markdownify(description)}</FormText>} 119 + <NumberInputStepper value={value ?? 0} onChange={onChange} /> 120 + </Flex> 121 + ) : ( 122 + <> 123 + {description && <FormText>{markdownify(description)}</FormText>} 124 + <Slider 125 + initialValue={value ?? 0} 126 + disabled={disabled} 127 + minValue={min} 128 + maxValue={max} 129 + onValueChange={onChange} 130 + onValueRender={(value: number) => `${Math.round(value)}`} 131 + /> 132 + </> 133 + )} 134 </FormItem> 135 ); 136 } ··· 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 + }
+14 -2
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(",")); ··· 113 if (filePath === "resources/app.asar") { 114 // You tried 115 targetFilePath = path.join(targetDir, "resources", "_app.asar"); 116 - } else if (filePath === appName) { 117 // Can't write over the executable? Just move it! 4head 118 if (await exists(targetFilePath)) { 119 await fs.rename(targetFilePath, targetFilePath + ".bak");
··· 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(",")); ··· 125 if (filePath === "resources/app.asar") { 126 // You tried 127 targetFilePath = path.join(targetDir, "resources", "_app.asar"); 128 + } else if (filePath === appName || filePath === "chrome_crashpad_handler") { 129 // Can't write over the executable? Just move it! 4head 130 if (await exists(targetFilePath)) { 131 await fs.rename(targetFilePath, targetFilePath + ".bak");
+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
+3 -3
packages/core-extensions/src/noHideToken/index.ts
··· 2 3 export const patches: Patch[] = [ 4 { 5 - find: "hideToken:function", 6 replace: { 7 - match: /(?<=hideToken:function\(\){)/, 8 - replacement: `return()=>{};` 9 } 10 } 11 ];
··· 2 3 export const patches: Patch[] = [ 4 { 5 + find: "hideToken:()=>", 6 replace: { 7 + match: /hideToken:\(\)=>.+?,/, 8 + replacement: `hideToken:()=>{},` 9 } 10 } 11 ];
+3 -3
packages/core-extensions/src/noTrack/index.ts
··· 2 3 export const patches: Patch[] = [ 4 { 5 - find: "analyticsTrackingStoreMaker:function", 6 replace: { 7 - match: /analyticsTrackingStoreMaker:function\(\){return .+?}/, 8 - replacement: "analyticsTrackingStoreMaker:function(){return ()=>{}}" 9 } 10 }, 11 {
··· 2 3 export const patches: Patch[] = [ 4 { 5 + find: "analyticsTrackingStoreMaker:()=>", 6 replace: { 7 + match: /analyticsTrackingStoreMaker:\(\)=>.+?,/, 8 + replacement: "analyticsTrackingStoreMaker:()=>()=>{}," 9 } 10 }, 11 {
+2 -2
packages/core-extensions/src/quietLoggers/index.ts
··· 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",.\),/],
··· 30 // Patches to simply remove a logger call 31 const stubPatches = [ 32 // "sh" is not a valid locale. 33 + ["is not a valid locale", /void (.)\.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"', 'void 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",.\),/],
+2 -1
packages/core-extensions/src/rocketship/manifest.json
··· 7 "name": "Rocketship", 8 "tagline": "Adds new features when using rocketship", 9 "description": "**This extension only works on Linux when using rocketship:**\nhttps://github.com/moonlight-mod/rocketship\n\nAdds new features to the Discord Linux client with rocketship, such as a better screensharing experience.", 10 - "authors": ["NotNite", "Cynosphere", "adryd"] 11 } 12 }
··· 7 "name": "Rocketship", 8 "tagline": "Adds new features when using rocketship", 9 "description": "**This extension only works on Linux when using rocketship:**\nhttps://github.com/moonlight-mod/rocketship\n\nAdds new features to the Discord Linux client with rocketship, such as a better screensharing experience.", 10 + "authors": ["NotNite", "Cynosphere", "adryd"], 11 + "deprecated": true 12 } 13 }
+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\(.\..+?\)/,
+8 -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); ··· 43 44 _mutateSections: (sections) => { 45 for (const section of Settings.ourSections) { 46 sections.splice(section.pos < 0 ? sections.length + section.pos : section.pos, 0, section); 47 } 48
··· 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); ··· 45 46 _mutateSections: (sections) => { 47 for (const section of Settings.ourSections) { 48 + // Discord's `pos` only supports numbers, so lets call the function to get the position. 49 + if (typeof section.pos === "function") { 50 + section.pos = section.pos(sections); 51 + } 52 sections.splice(section.pos < 0 ? sections.length + section.pos : section.pos, 0, section); 53 } 54
+29 -10
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 ··· 52 try { 53 exports = require(id); 54 } catch (e) { 55 - logger.error(`Error requiring module "${id}": `, e); 56 } 57 58 return { ··· 63 .filter((item) => item !== null); 64 65 if (ret.length === 0) { 66 - logger.warn("Got zero results for", args, new Error().stack!.substring(5)); 67 } 68 69 return ret; ··· 113 } 114 115 if (ret == null) { 116 - logger.warn("Failed to get object by key", key, "in", exports, new Error().stack!.substring(5)); 117 } 118 119 return ret; ··· 138 } 139 140 if (ret == null) { 141 - logger.warn("Failed to get object by value", value, "in", exports, new Error().stack!.substring(5)); 142 } 143 144 return ret; ··· 156 } 157 158 if (ret == null) { 159 - logger.warn("Failed to get object by key value pair", key, value, "in", exports, new Error().stack!.substring(5)); 160 } 161 162 return null; ··· 170 )?.[0]?.[1] ?? null; 171 172 if (ret == null) { 173 - logger.warn("Failed to get function by strings", strings, "in", exports, new Error().stack!.substring(5)); 174 } 175 176 return ret; 177 }, 178 179 lazyLoad: (find: string | RegExp | (string | RegExp)[], chunk: RegExp, module: RegExp) => { 180 const mod = Array.isArray(find) ? spacepack.findByCode(...find) : spacepack.findByCode(find); 181 - if (mod.length < 1) return Promise.reject("Module find failed"); 182 183 const findId = mod[0].id; 184 const findCode = webpackRequire.m[findId].toString().replace(/\n/g, ""); ··· 191 if (match) chunkIds = [...match[0].matchAll(/"(\d+)"/g)].map(([, id]) => id); 192 } 193 194 - if (!chunkIds || chunkIds.length === 0) return Promise.reject("Chunk ID match failed"); 195 196 const moduleId = findCode.match(module)?.[1]; 197 - if (!moduleId) return Promise.reject("Module ID match failed"); 198 199 return Promise.all(chunkIds.map((c) => webpackRequire.e(c))).then(() => webpackRequire(moduleId)); 200 },
··· 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 ··· 52 try { 53 exports = require(id); 54 } catch (e) { 55 + logger.error(`findByCode: Error requiring module "${id}": `, args, e); 56 } 57 58 return { ··· 63 .filter((item) => item !== null); 64 65 if (ret.length === 0) { 66 + logger.warn("findByCode: Got zero results for", args, new Error().stack!.substring(5)); 67 } 68 69 return ret; ··· 113 } 114 115 if (ret == null) { 116 + logger.warn("Failed to find object by key", key, "in", exports, new Error().stack!.substring(5)); 117 } 118 119 return ret; ··· 138 } 139 140 if (ret == null) { 141 + logger.warn("Failed to find object by value", value, "in", exports, new Error().stack!.substring(5)); 142 } 143 144 return ret; ··· 156 } 157 158 if (ret == null) { 159 + logger.warn( 160 + "Failed to find object by key value pair", 161 + key, 162 + value, 163 + "in", 164 + exports, 165 + new Error().stack!.substring(5) 166 + ); 167 } 168 169 return null; ··· 177 )?.[0]?.[1] ?? null; 178 179 if (ret == null) { 180 + logger.warn("Failed to find function by strings", strings, "in", exports, new Error().stack!.substring(5)); 181 } 182 183 return ret; 184 }, 185 186 lazyLoad: (find: string | RegExp | (string | RegExp)[], chunk: RegExp, module: RegExp) => { 187 + chunk = processFind(chunk); 188 + module = processFind(module); 189 + 190 const mod = Array.isArray(find) ? spacepack.findByCode(...find) : spacepack.findByCode(find); 191 + if (mod.length < 1) { 192 + logger.warn("lazyLoad: Module find failed", find, chunk, module, new Error().stack!.substring(5)); 193 + return Promise.reject("Module find failed"); 194 + } 195 196 const findId = mod[0].id; 197 const findCode = webpackRequire.m[findId].toString().replace(/\n/g, ""); ··· 204 if (match) chunkIds = [...match[0].matchAll(/"(\d+)"/g)].map(([, id]) => id); 205 } 206 207 + if (!chunkIds || chunkIds.length === 0) { 208 + logger.warn("lazyLoad: Chunk ID match failed", find, chunk, module, new Error().stack!.substring(5)); 209 + return Promise.reject("Chunk ID match failed"); 210 + } 211 212 const moduleId = findCode.match(module)?.[1]; 213 + if (!moduleId) { 214 + logger.warn("lazyLoad: Module ID match failed", find, chunk, module, new Error().stack!.substring(5)); 215 + return Promise.reject("Module ID match failed"); 216 + } 217 218 return Promise.all(chunkIds.map((c) => webpackRequire.e(c))).then(() => webpackRequire(moduleId)); 219 },
+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 }
+28 -3
packages/injector/src/index.ts
··· 76 blockedUrls = compiled; 77 }); 78 79 - function patchCsp(headers: Record<string, string[]>) { 80 const directives = ["script-src", "style-src", "connect-src", "img-src", "font-src", "media-src", "worker-src"]; 81 const values = ["*", "blob:", "data:", "'unsafe-inline'", "'unsafe-eval'", "disclip:"]; 82 ··· 95 96 for (const directive of directives) { 97 parts[directive] = values; 98 } 99 100 const stringified = Object.entries<string[]>(parts) ··· 122 // Event for when a window is created 123 moonlightHost.events.emit("window-created", this, isMainWindow); 124 125 this.webContents.session.webRequest.onHeadersReceived((details, cb) => { 126 if (details.responseHeaders != null) { 127 // Patch CSP so things can use externally hosted assets 128 if (details.resourceType === "mainFrame") { 129 - patchCsp(details.responseHeaders); 130 } 131 132 // Allow plugins to bypass CORS for specific URLs 133 if (corsAllow.some((x) => details.url.startsWith(x))) { 134 - details.responseHeaders["access-control-allow-origin"] = ["*"]; 135 } 136 137 cb({ cancel: false, responseHeaders: details.responseHeaders }); 138 }
··· 76 blockedUrls = compiled; 77 }); 78 79 + function patchCsp(headers: Record<string, string[]>, extensionCspOverrides: Record<string, string[]>) { 80 const directives = ["script-src", "style-src", "connect-src", "img-src", "font-src", "media-src", "worker-src"]; 81 const values = ["*", "blob:", "data:", "'unsafe-inline'", "'unsafe-eval'", "disclip:"]; 82 ··· 95 96 for (const directive of directives) { 97 parts[directive] = values; 98 + } 99 + 100 + for (const [directive, urls] of Object.entries(extensionCspOverrides)) { 101 + parts[directive] ??= []; 102 + parts[directive].push(...urls); 103 } 104 105 const stringified = Object.entries<string[]>(parts) ··· 127 // Event for when a window is created 128 moonlightHost.events.emit("window-created", this, isMainWindow); 129 130 + const extensionCspOverrides: Record<string, string[]> = {}; 131 + 132 + { 133 + const extCsps = moonlightHost.processedExtensions.extensions.map((x) => x.manifest.csp ?? {}); 134 + for (const csp of extCsps) { 135 + for (const [directive, urls] of Object.entries(csp)) { 136 + extensionCspOverrides[directive] ??= []; 137 + extensionCspOverrides[directive].push(...urls); 138 + } 139 + } 140 + } 141 + 142 this.webContents.session.webRequest.onHeadersReceived((details, cb) => { 143 if (details.responseHeaders != null) { 144 // Patch CSP so things can use externally hosted assets 145 if (details.resourceType === "mainFrame") { 146 + patchCsp(details.responseHeaders, extensionCspOverrides); 147 } 148 149 // Allow plugins to bypass CORS for specific URLs 150 if (corsAllow.some((x) => details.url.startsWith(x))) { 151 + if (!details.responseHeaders) details.responseHeaders = {}; 152 + 153 + // Work around HTTP header case sensitivity by reusing the header name if it exists 154 + // https://github.com/moonlight-mod/moonlight/issues/201 155 + const fallback = "access-control-allow-origin"; 156 + const key = Object.keys(details.responseHeaders).find((h) => h.toLowerCase() === fallback) ?? fallback; 157 + details.responseHeaders[key] = ["*"]; 158 } 159 + 160 + moonlightHost.events.emit("headers-received", details, isMainWindow); 161 162 cb({ cancel: false, responseHeaders: details.responseHeaders }); 163 }
+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
packages/node-preload/src/index.ts
··· 11 import createFS from "@moonlight-mod/core/fs"; 12 import { registerCors, registerBlocked, getDynamicCors } from "@moonlight-mod/core/cors"; 13 import { getConfig, getConfigOption, getManifest, setConfigOption } from "@moonlight-mod/core/util/config"; 14 15 let initialized = false; 16 let logger: Logger; ··· 51 processedExtensions, 52 nativesCache: {}, 53 isBrowser: false, 54 55 version: MOONLIGHT_VERSION, 56 branch: MOONLIGHT_BRANCH as MoonlightBranch, ··· 69 async writeConfig(newConfig) { 70 await writeConfig(newConfig); 71 config = newConfig; 72 }, 73 74 getNatives: (ext: string) => global.moonlightNode.nativesCache[ext],
··· 11 import createFS from "@moonlight-mod/core/fs"; 12 import { registerCors, registerBlocked, getDynamicCors } from "@moonlight-mod/core/cors"; 13 import { getConfig, getConfigOption, getManifest, setConfigOption } from "@moonlight-mod/core/util/config"; 14 + import { NodeEventPayloads, NodeEventType } from "@moonlight-mod/types/core/event"; 15 + import { createEventEmitter } from "@moonlight-mod/core/util/event"; 16 17 let initialized = false; 18 let logger: Logger; ··· 53 processedExtensions, 54 nativesCache: {}, 55 isBrowser: false, 56 + events: createEventEmitter<NodeEventType, NodeEventPayloads>(), 57 58 version: MOONLIGHT_VERSION, 59 branch: MOONLIGHT_BRANCH as MoonlightBranch, ··· 72 async writeConfig(newConfig) { 73 await writeConfig(newConfig); 74 config = newConfig; 75 + this.events.dispatchEvent(NodeEventType.ConfigSaved, newConfig); 76 }, 77 78 getNatives: (ext: string) => global.moonlightNode.nativesCache[ext],
+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.8", 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.8", 14 - "@moonlight-mod/moonmap": "^1.0.3", 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 }
+13 -4
packages/types/src/core/event.ts
··· 1 import { WebpackModuleFunc, WebpackRequireType } from "../discord"; 2 3 export interface MoonlightEventEmitter<EventId extends string = string, EventData = Record<EventId, any>> { ··· 6 removeEventListener: <Id extends keyof EventData>(id: Id, cb: (data: EventData[Id]) => void) => void; 7 } 8 9 - export enum EventType { 10 ChunkLoad = "chunkLoad", 11 ExtensionLoad = "extensionLoad" 12 } 13 14 - export type EventPayloads = { 15 - [EventType.ChunkLoad]: { 16 chunkId?: number[]; 17 modules: { [id: string]: WebpackModuleFunc }; 18 require?: (require: WebpackRequireType) => any; 19 }; 20 - [EventType.ExtensionLoad]: string; 21 };
··· 1 + import { Config } from "../config"; 2 import { WebpackModuleFunc, WebpackRequireType } from "../discord"; 3 4 export interface MoonlightEventEmitter<EventId extends string = string, EventData = Record<EventId, any>> { ··· 7 removeEventListener: <Id extends keyof EventData>(id: Id, cb: (data: EventData[Id]) => void) => void; 8 } 9 10 + export enum WebEventType { 11 ChunkLoad = "chunkLoad", 12 ExtensionLoad = "extensionLoad" 13 } 14 15 + export type WebEventPayloads = { 16 + [WebEventType.ChunkLoad]: { 17 chunkId?: number[]; 18 modules: { [id: string]: WebpackModuleFunc }; 19 require?: (require: WebpackRequireType) => any; 20 }; 21 + [WebEventType.ExtensionLoad]: string; 22 + }; 23 + 24 + export enum NodeEventType { 25 + ConfigSaved = "configSaved" 26 + } 27 + 28 + export type NodeEventPayloads = { 29 + [NodeEventType.ConfigSaved]: Config; 30 };
+94 -16
packages/types/src/coreExtensions/commands.ts
··· 16 } 17 18 export enum OptionType { 19 - ATTACHMENT = 11, 20 BOOLEAN = 5, 21 CHANNEL = 7, 22 - INTEGER = 4, 23 MENTIONABLE = 9, 24 NUMBER = 10, 25 - ROLE = 8, 26 - STRING = 3, 27 - SUB_COMMAND = 1, 28 - SUB_COMMAND_GROUP = 2, 29 - USER = 6 30 } 31 32 - export type RegisteredCommandOption = { 33 - name: string; 34 displayName: string; 35 - type: OptionType; 36 - description: string; 37 displayDescription: string; 38 }; 39 40 - export type MoonlightCommandOption = { 41 name: string; 42 - type: OptionType; 43 description: string; 44 }; 45 46 // TODO: types 47 export type CommandPredicateState = { ··· 58 applicationId: string; // set to -3! 59 untranslatedDescription: string; 60 displayDescription: string; 61 - options: RegisteredCommandOption[]; 62 predicate?: (state: CommandPredicateState) => boolean; 63 execute: (options: CommandOption[]) => void; 64 }; ··· 76 * You likely want BUILT_IN (or BUILT_IN_TEXT if usable with replies) 77 */ 78 inputType: InputType; 79 - options: MoonlightCommandOption[]; 80 predicate?: (state: CommandPredicateState) => boolean; 81 execute: (options: CommandOption[]) => void; 82 }; ··· 92 type: OptionType.STRING; 93 value: string; 94 } 95 ); 96 97 export type Commands = { 98 /** ··· 106 registerLegacyCommand: (id: string, command: LegacyCommand) => void; 107 108 /** 109 * @private 110 */ 111 _getCommands: () => RegisteredCommand[]; ··· 121 }; 122 123 export type LegacyCommand = { 124 - match?: RegExp; 125 action: (content: string, context: LegacyContext) => LegacyReturn; 126 };
··· 16 } 17 18 export enum OptionType { 19 + SUB_COMMAND = 1, 20 + SUB_COMMAND_GROUP = 2, 21 + STRING = 3, 22 + INTEGER = 4, 23 BOOLEAN = 5, 24 + USER = 6, 25 CHANNEL = 7, 26 + ROLE = 8, 27 MENTIONABLE = 9, 28 NUMBER = 10, 29 + ATTACHMENT = 11 30 + } 31 + 32 + export enum ChannelType { 33 + GUILD_TEXT = 0, 34 + DM = 1, 35 + GUILD_VOICE = 2, 36 + GROUP_DM = 3, 37 + GUILD_CATEGORY = 4, 38 + GUILD_ANNOUNCEMENT = 5, 39 + GUILD_STORE = 6, 40 + ANNOUNCEMENT_THREAD = 10, 41 + PUBLIC_THREAD = 11, 42 + PRIVATE_THREAD = 12, 43 + GUILD_STAGE_VOICE = 13, 44 + GUILD_DIRECTORY = 14, 45 + GUILD_FORUM = 15, 46 + GUILD_MEDIA = 16, 47 + LOBBY = 17, 48 + DM_SDK = 18 49 } 50 51 + export type RegisteredCommandOption = MoonlightCommandOption & { 52 displayName: string; 53 displayDescription: string; 54 }; 55 56 + export type CommandOptionChoice<T> = { 57 + name: string; 58 + value: T; 59 + }; 60 + 61 + type CommandOptionBase<T> = { 62 + type: T; 63 name: string; 64 description: string; 65 + required?: T extends OptionType.SUB_COMMAND 66 + ? never 67 + : T extends OptionType.SUB_COMMAND_GROUP 68 + ? never 69 + : boolean | undefined; 70 + choices?: T extends OptionType.STRING 71 + ? CommandOptionChoice<string>[] 72 + : T extends OptionType.INTEGER 73 + ? CommandOptionChoice<number>[] 74 + : T extends OptionType.NUMBER 75 + ? CommandOptionChoice<number>[] 76 + : never; 77 + options?: T extends OptionType.SUB_COMMAND 78 + ? MoonlightCommandOption[] 79 + : T extends OptionType.SUB_COMMAND_GROUP 80 + ? MoonlightCommandOption[] 81 + : never; 82 + channelTypes?: T extends OptionType.CHANNEL ? ChannelType[] : never; 83 + minValue?: T extends OptionType.INTEGER ? number : T extends OptionType.NUMBER ? number : never; 84 + maxValue?: T extends OptionType.INTEGER ? number : T extends OptionType.NUMBER ? number : never; 85 + minLength?: T extends OptionType.STRING ? number : never; 86 + maxLength?: T extends OptionType.STRING ? number : never; 87 }; 88 + 89 + // This is bad lol 90 + export type MoonlightCommandOption = 91 + | CommandOptionBase<OptionType.SUB_COMMAND> 92 + | CommandOptionBase<OptionType.SUB_COMMAND_GROUP> 93 + | CommandOptionBase<OptionType.STRING> 94 + | CommandOptionBase<OptionType.INTEGER> 95 + | CommandOptionBase<OptionType.BOOLEAN> 96 + | CommandOptionBase<OptionType.USER> 97 + | CommandOptionBase<OptionType.CHANNEL> 98 + | CommandOptionBase<OptionType.ROLE> 99 + | CommandOptionBase<OptionType.MENTIONABLE> 100 + | CommandOptionBase<OptionType.NUMBER> 101 + | CommandOptionBase<OptionType.ATTACHMENT>; 102 103 // TODO: types 104 export type CommandPredicateState = { ··· 115 applicationId: string; // set to -3! 116 untranslatedDescription: string; 117 displayDescription: string; 118 + options?: RegisteredCommandOption[]; 119 predicate?: (state: CommandPredicateState) => boolean; 120 execute: (options: CommandOption[]) => void; 121 }; ··· 133 * You likely want BUILT_IN (or BUILT_IN_TEXT if usable with replies) 134 */ 135 inputType: InputType; 136 + options?: MoonlightCommandOption[]; 137 predicate?: (state: CommandPredicateState) => boolean; 138 execute: (options: CommandOption[]) => void; 139 }; ··· 149 type: OptionType.STRING; 150 value: string; 151 } 152 + | { 153 + type: OptionType.NUMBER | OptionType.INTEGER; 154 + value: number; 155 + } 156 + | { 157 + type: OptionType.BOOLEAN; 158 + value: boolean; 159 + } 160 + | { 161 + type: OptionType.SUB_COMMAND | OptionType.SUB_COMMAND_GROUP; 162 + options: CommandOption[]; 163 + } 164 ); 165 + 166 + export type AnyScopeRegex = RegExp["exec"] & { 167 + regex: RegExp; 168 + }; 169 170 export type Commands = { 171 /** ··· 179 registerLegacyCommand: (id: string, command: LegacyCommand) => void; 180 181 /** 182 + * Creates a regular expression that legacy commands can understand 183 + */ 184 + anyScopeRegex: (regex: RegExp) => AnyScopeRegex; 185 + 186 + /** 187 * @private 188 */ 189 _getCommands: () => RegisteredCommand[]; ··· 199 }; 200 201 export type LegacyCommand = { 202 + match?: RegExp | { regex: RegExp } | AnyScopeRegex; 203 action: (content: string, context: LegacyContext) => LegacyReturn; 204 };
+33
packages/types/src/coreExtensions/common.ts
···
··· 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>; 6 + message?: string; 7 + }>; 8 + 9 + export type ErrorBoundaryState = { 10 + errored: boolean; 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 };
+17
packages/types/src/coreExtensions/componentEditor.ts
··· 121 } 122 123 export type Messages = { 124 addToUsername: (id: string, component: React.FC<any>, anchor?: MessageUsernameAnchors, before?: boolean) => void; 125 addUsernameBadge: ( 126 id: string, 127 component: React.FC<any>, 128 anchor?: MessageUsernameBadgeAnchors, 129 before?: boolean 130 ) => void; 131 addBadge: (id: string, component: React.FC<any>, anchor?: MessageBadgeAnchors, before?: boolean) => void; 132 /** 133 * @private 134 */ 135 _patchUsername: Patcher<any>; ··· 141 * @private 142 */ 143 _patchBadges: Patcher<any>; 144 }; 145 //#endregion
··· 121 } 122 123 export type Messages = { 124 + /** 125 + * Adds a component to the username of a message 126 + */ 127 addToUsername: (id: string, component: React.FC<any>, anchor?: MessageUsernameAnchors, before?: boolean) => void; 128 + /** 129 + * Adds a component to the username badge area of a message (e.g. where role icons/new member badge is) 130 + */ 131 addUsernameBadge: ( 132 id: string, 133 component: React.FC<any>, 134 anchor?: MessageUsernameBadgeAnchors, 135 before?: boolean 136 ) => void; 137 + /** 138 + * Adds a component to the end of a message header (e.g. silent indicator) 139 + */ 140 addBadge: (id: string, component: React.FC<any>, anchor?: MessageBadgeAnchors, before?: boolean) => void; 141 /** 142 + * Adds a component to message accessories (e.g. embeds) 143 + */ 144 + addAccessory: (id: string, component: React.FC<any>) => void; 145 + /** 146 * @private 147 */ 148 _patchUsername: Patcher<any>; ··· 154 * @private 155 */ 156 _patchBadges: Patcher<any>; 157 + /** 158 + * @private 159 + */ 160 + _patchAccessories: Patcher<any>; 161 }; 162 //#endregion
+10 -7
packages/types/src/coreExtensions/settings.ts
··· 7 }; 8 9 export type SettingsSection = 10 - | { section: "DIVIDER"; pos: number } 11 - | { section: "HEADER"; label: string; pos: number } 12 | { 13 section: string; 14 label: string; 15 color: string | null; 16 element: React.FunctionComponent; 17 - pos: 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, 38 label: string, 39 element: React.FunctionComponent, 40 color?: string | null, 41 - pos?: number, 42 - notice?: NoticeProps 43 ) => void; 44 45 /** ··· 53 * Places a divider in the settings menu. 54 * @param pos The position in the settings menu to place the divider 55 */ 56 - addDivider: (pos: number | null) => void; 57 58 /** 59 * Places a header in the settings menu. 60 * @param pos The position in the settings menu to place the header 61 */ 62 - addHeader: (label: string, pos: number | null) => void; 63 64 /** 65 * @private
··· 7 }; 8 9 export type SettingsSection = 10 + | { section: "DIVIDER"; pos: number | ((sections: SettingsSection[]) => number) } 11 + | { section: "HEADER"; label: string; pos: number | ((sections: SettingsSection[]) => number) } 12 | { 13 section: string; 14 label: string; 15 color: string | null; 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, 40 label: 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 /** ··· 56 * Places a divider in the settings menu. 57 * @param pos The position in the settings menu to place the divider 58 */ 59 + addDivider: (pos: number | ((sections: SettingsSection[]) => number) | null) => void; 60 61 /** 62 * Places a header in the settings menu. 63 * @param pos The position in the settings menu to place the header 64 */ 65 + addHeader: (label: string, pos: number | ((sections: SettingsSection[]) => number) | null) => void; 66 67 /** 68 * @private
+1
packages/types/src/coreExtensions.ts
··· 7 export * as AppPanels from "./coreExtensions/appPanels"; 8 export * as Commands from "./coreExtensions/commands"; 9 export * as ComponentEditor from "./coreExtensions/componentEditor";
··· 7 export * as AppPanels from "./coreExtensions/appPanels"; 8 export * as Commands from "./coreExtensions/commands"; 9 export * as ComponentEditor from "./coreExtensions/componentEditor"; 10 + export * as Common from "./coreExtensions/common";
+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;
+6
packages/types/src/extension.ts
··· 135 * @example https://moonlight-mod.github.io/ 136 */ 137 blocked?: string[]; 138 }; 139 140 export enum ExtensionEnvironment {
··· 135 * @example https://moonlight-mod.github.io/ 136 */ 137 blocked?: string[]; 138 + 139 + /** 140 + * A mapping from CSP directives to URLs to allow. 141 + * @example { "script-src": ["https://example.com"] } 142 + */ 143 + csp?: Record<string, string[]>; 144 }; 145 146 export enum ExtensionEnvironment {
+10 -3
packages/types/src/globals.ts
··· 4 import type EventEmitter from "events"; 5 import type LunAST from "@moonlight-mod/lunast"; 6 import type Moonmap from "@moonlight-mod/moonmap"; 7 - import type { EventPayloads, EventType, MoonlightEventEmitter } from "./core/event"; 8 - import { MoonlightFS } from "./fs"; 9 10 export type MoonlightHost = { 11 config: Config; ··· 34 processedExtensions: ProcessedExtensions; 35 nativesCache: Record<string, any>; 36 isBrowser: boolean; 37 38 version: string; 39 branch: MoonlightBranch; ··· 60 unpatched: Set<IdentifiedPatch>; 61 pendingModules: Set<IdentifiedWebpackModule>; 62 enabledExtensions: Set<string>; 63 - events: MoonlightEventEmitter<EventType, EventPayloads>; 64 patchingInternals: { 65 onModuleLoad: (moduleId: string | string[], callback: (moduleId: string) => void) => void; 66 registerPatch: (patch: IdentifiedPatch) => void;
··· 4 import type EventEmitter from "events"; 5 import type LunAST from "@moonlight-mod/lunast"; 6 import type Moonmap from "@moonlight-mod/moonmap"; 7 + import type { 8 + WebEventPayloads, 9 + WebEventType, 10 + MoonlightEventEmitter, 11 + NodeEventType, 12 + NodeEventPayloads 13 + } from "./core/event"; 14 + import type { MoonlightFS } from "./fs"; 15 16 export type MoonlightHost = { 17 config: Config; ··· 40 processedExtensions: ProcessedExtensions; 41 nativesCache: Record<string, any>; 42 isBrowser: boolean; 43 + events: MoonlightEventEmitter<NodeEventType, NodeEventPayloads>; 44 45 version: string; 46 branch: MoonlightBranch; ··· 67 unpatched: Set<IdentifiedPatch>; 68 pendingModules: Set<IdentifiedWebpackModule>; 69 enabledExtensions: Set<string>; 70 + events: MoonlightEventEmitter<WebEventType, WebEventPayloads>; 71 patchingInternals: { 72 onModuleLoad: (moduleId: string | string[], callback: (moduleId: string) => void) => void; 73 registerPatch: (patch: IdentifiedPatch) => void;
+10
packages/types/src/import.d.ts
··· 10 export default commands; 11 } 12 13 declare module "@moonlight-mod/wp/common_stores"; 14 15 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>);
+39 -641
packages/types/src/mappings.d.ts
··· 55 export default _default; 56 } 57 58 declare module "@moonlight-mod/wp/discord/components/common/Alerts" { 59 import { MappedModules } from "@moonlight-mod/mappings"; 60 const _default: MappedModules["discord/components/common/Alerts"]["default"]; ··· 69 export default _default; 70 } 71 72 declare module "@moonlight-mod/wp/discord/components/common/FileUpload" { 73 import { MappedModules } from "@moonlight-mod/mappings"; 74 const _default: MappedModules["discord/components/common/FileUpload"]["default"]; ··· 124 export const error: MappedModules["discord/components/common/HelpMessage.css"]["error"]; 125 } 126 127 declare module "@moonlight-mod/wp/discord/components/common/PanelButton" { 128 import { MappedModules } from "@moonlight-mod/mappings"; 129 const _default: MappedModules["discord/components/common/PanelButton"]["default"]; ··· 169 export const Popout: MappedModules["discord/components/common/index"]["Popout"]; 170 export const Dialog: MappedModules["discord/components/common/index"]["Dialog"]; 171 export const Menu: MappedModules["discord/components/common/index"]["Menu"]; 172 - export const MenuItem: MappedModules["discord/components/common/index"]["MenuItem"]; 173 - export const MenuGroup: MappedModules["discord/components/common/index"]["MenuGroup"]; 174 - export const MenuRadioItem: MappedModules["discord/components/common/index"]["MenuRadioItem"]; 175 - export const MenuCheckboxItem: MappedModules["discord/components/common/index"]["MenuCheckboxItem"]; 176 - export const MenuControlItem: MappedModules["discord/components/common/index"]["MenuControlItem"]; 177 - export const MenuSeparator: MappedModules["discord/components/common/index"]["MenuSeparator"]; 178 - export const SettingsNotice: MappedModules["discord/components/common/index"]["SettingsNotice"]; 179 export const TabBar: MappedModules["discord/components/common/index"]["TabBar"]; 180 export const SingleSelect: MappedModules["discord/components/common/index"]["SingleSelect"]; 181 export const Select: MappedModules["discord/components/common/index"]["Select"]; ··· 187 export const Image: MappedModules["discord/components/common/index"]["Image"]; 188 export const tokens: MappedModules["discord/components/common/index"]["tokens"]; 189 export const useVariableSelect: MappedModules["discord/components/common/index"]["useVariableSelect"]; 190 - export const useMultiSelectState: MappedModules["discord/components/common/index"]["useMultiSelectState"]; 191 - export const useSingleSelectState: MappedModules["discord/components/common/index"]["useSingleSelectState"]; 192 export const useMultiSelect: MappedModules["discord/components/common/index"]["useMultiSelect"]; 193 - export const useSingleSelect: MappedModules["discord/components/common/index"]["useSingleSelect"]; 194 export const multiSelect: MappedModules["discord/components/common/index"]["multiSelect"]; 195 export const openModal: MappedModules["discord/components/common/index"]["openModal"]; 196 export const openModalLazy: MappedModules["discord/components/common/index"]["openModalLazy"]; 197 export const closeModal: MappedModules["discord/components/common/index"]["closeModal"]; 198 - export const useModalsStore: MappedModules["discord/components/common/index"]["useModalsStore"]; 199 - export const AIcon: MappedModules["discord/components/common/index"]["AIcon"]; 200 - export const AccessibilityIcon: MappedModules["discord/components/common/index"]["AccessibilityIcon"]; 201 - export const AchievementsIcon: MappedModules["discord/components/common/index"]["AchievementsIcon"]; 202 - export const ActivitiesIcon: MappedModules["discord/components/common/index"]["ActivitiesIcon"]; 203 - export const ActivitiesPlusIcon: MappedModules["discord/components/common/index"]["ActivitiesPlusIcon"]; 204 - export const AirplayIcon: MappedModules["discord/components/common/index"]["AirplayIcon"]; 205 - export const AnalyticsIcon: MappedModules["discord/components/common/index"]["AnalyticsIcon"]; 206 export const AngleBracketsIcon: MappedModules["discord/components/common/index"]["AngleBracketsIcon"]; 207 - export const AnnouncementsChatIcon: MappedModules["discord/components/common/index"]["AnnouncementsChatIcon"]; 208 - export const AnnouncementsIcon: MappedModules["discord/components/common/index"]["AnnouncementsIcon"]; 209 - export const AnnouncementsLockIcon: MappedModules["discord/components/common/index"]["AnnouncementsLockIcon"]; 210 - export const AnnouncementsWarningIcon: MappedModules["discord/components/common/index"]["AnnouncementsWarningIcon"]; 211 - export const AppleBrandLightIcon: MappedModules["discord/components/common/index"]["AppleBrandLightIcon"]; 212 - export const AppleNeutralIcon: MappedModules["discord/components/common/index"]["AppleNeutralIcon"]; 213 - export const AppsIcon: MappedModules["discord/components/common/index"]["AppsIcon"]; 214 - export const ArrowAngleDownLeftIcon: MappedModules["discord/components/common/index"]["ArrowAngleDownLeftIcon"]; 215 - export const ArrowAngleLeftDownIcon: MappedModules["discord/components/common/index"]["ArrowAngleLeftDownIcon"]; 216 export const ArrowAngleLeftUpIcon: MappedModules["discord/components/common/index"]["ArrowAngleLeftUpIcon"]; 217 - export const ArrowAngleRightDownIcon: MappedModules["discord/components/common/index"]["ArrowAngleRightDownIcon"]; 218 export const ArrowAngleRightUpIcon: MappedModules["discord/components/common/index"]["ArrowAngleRightUpIcon"]; 219 - export const ArrowAngleUpLeftIcon: MappedModules["discord/components/common/index"]["ArrowAngleUpLeftIcon"]; 220 - export const ArrowLargeDownIcon: MappedModules["discord/components/common/index"]["ArrowLargeDownIcon"]; 221 - export const ArrowLargeLeftIcon: MappedModules["discord/components/common/index"]["ArrowLargeLeftIcon"]; 222 - export const ArrowLargeRightIcon: MappedModules["discord/components/common/index"]["ArrowLargeRightIcon"]; 223 - export const ArrowLargeUpIcon: MappedModules["discord/components/common/index"]["ArrowLargeUpIcon"]; 224 - export const ArrowSmallDownIcon: MappedModules["discord/components/common/index"]["ArrowSmallDownIcon"]; 225 - export const ArrowSmallLeftIcon: MappedModules["discord/components/common/index"]["ArrowSmallLeftIcon"]; 226 - export const ArrowSmallRightIcon: MappedModules["discord/components/common/index"]["ArrowSmallRightIcon"]; 227 - export const ArrowSmallUpIcon: MappedModules["discord/components/common/index"]["ArrowSmallUpIcon"]; 228 - export const ArrowsLeftRightIcon: MappedModules["discord/components/common/index"]["ArrowsLeftRightIcon"]; 229 export const ArrowsUpDownIcon: MappedModules["discord/components/common/index"]["ArrowsUpDownIcon"]; 230 - export const AsteriskIcon: MappedModules["discord/components/common/index"]["AsteriskIcon"]; 231 - export const AtIcon: MappedModules["discord/components/common/index"]["AtIcon"]; 232 - export const AttachmentIcon: MappedModules["discord/components/common/index"]["AttachmentIcon"]; 233 - export const BIcon: MappedModules["discord/components/common/index"]["BIcon"]; 234 - export const BackspaceIcon: MappedModules["discord/components/common/index"]["BackspaceIcon"]; 235 - export const BadgeIcon: MappedModules["discord/components/common/index"]["BadgeIcon"]; 236 - export const BeakerIcon: MappedModules["discord/components/common/index"]["BeakerIcon"]; 237 - export const BellIcon: MappedModules["discord/components/common/index"]["BellIcon"]; 238 - export const BellSlashIcon: MappedModules["discord/components/common/index"]["BellSlashIcon"]; 239 - export const BellZIcon: MappedModules["discord/components/common/index"]["BellZIcon"]; 240 - export const BergerIcon: MappedModules["discord/components/common/index"]["BergerIcon"]; 241 - export const BicycleIcon: MappedModules["discord/components/common/index"]["BicycleIcon"]; 242 - export const BillIcon: MappedModules["discord/components/common/index"]["BillIcon"]; 243 - export const BlueskyBrandIcon: MappedModules["discord/components/common/index"]["BlueskyBrandIcon"]; 244 - export const BlueskyNeutralIcon: MappedModules["discord/components/common/index"]["BlueskyNeutralIcon"]; 245 - export const BluetoothIcon: MappedModules["discord/components/common/index"]["BluetoothIcon"]; 246 - export const BlurBackgroundIcon: MappedModules["discord/components/common/index"]["BlurBackgroundIcon"]; 247 - export const BoldIcon: MappedModules["discord/components/common/index"]["BoldIcon"]; 248 export const BookCheckIcon: MappedModules["discord/components/common/index"]["BookCheckIcon"]; 249 - export const BookmarkIcon: MappedModules["discord/components/common/index"]["BookmarkIcon"]; 250 - export const BookmarkOutlineIcon: MappedModules["discord/components/common/index"]["BookmarkOutlineIcon"]; 251 - export const BoostTier1Icon: MappedModules["discord/components/common/index"]["BoostTier1Icon"]; 252 - export const BoostTier1SimpleIcon: MappedModules["discord/components/common/index"]["BoostTier1SimpleIcon"]; 253 - export const BoostTier2Icon: MappedModules["discord/components/common/index"]["BoostTier2Icon"]; 254 - export const BoostTier2SimpleIcon: MappedModules["discord/components/common/index"]["BoostTier2SimpleIcon"]; 255 - export const BoostTier3Icon: MappedModules["discord/components/common/index"]["BoostTier3Icon"]; 256 - export const BoostTier3SimpleIcon: MappedModules["discord/components/common/index"]["BoostTier3SimpleIcon"]; 257 - export const BrowserCheckeredIcon: MappedModules["discord/components/common/index"]["BrowserCheckeredIcon"]; 258 - export const BrowserIcon: MappedModules["discord/components/common/index"]["BrowserIcon"]; 259 - export const BrowserLinkIcon: MappedModules["discord/components/common/index"]["BrowserLinkIcon"]; 260 - export const BrowserPlusIcon: MappedModules["discord/components/common/index"]["BrowserPlusIcon"]; 261 - export const BrowserQuestionMarkIcon: MappedModules["discord/components/common/index"]["BrowserQuestionMarkIcon"]; 262 - export const BugIcon: MappedModules["discord/components/common/index"]["BugIcon"]; 263 - export const CalendarIcon: MappedModules["discord/components/common/index"]["CalendarIcon"]; 264 - export const CalendarMinusIcon: MappedModules["discord/components/common/index"]["CalendarMinusIcon"]; 265 - export const CalendarPlusIcon: MappedModules["discord/components/common/index"]["CalendarPlusIcon"]; 266 - export const CalendarRetryIcon: MappedModules["discord/components/common/index"]["CalendarRetryIcon"]; 267 - export const CalendarXIcon: MappedModules["discord/components/common/index"]["CalendarXIcon"]; 268 - export const CameraIcon: MappedModules["discord/components/common/index"]["CameraIcon"]; 269 - export const CameraSwapIcon: MappedModules["discord/components/common/index"]["CameraSwapIcon"]; 270 - export const CarIcon: MappedModules["discord/components/common/index"]["CarIcon"]; 271 export const ChannelListIcon: MappedModules["discord/components/common/index"]["ChannelListIcon"]; 272 - export const ChannelListMagnifyingGlassIcon: MappedModules["discord/components/common/index"]["ChannelListMagnifyingGlassIcon"]; 273 - export const ChannelListMinusIcon: MappedModules["discord/components/common/index"]["ChannelListMinusIcon"]; 274 - export const ChannelListPlusIcon: MappedModules["discord/components/common/index"]["ChannelListPlusIcon"]; 275 - export const ChannelListRetryIcon: MappedModules["discord/components/common/index"]["ChannelListRetryIcon"]; 276 - export const ChannelNotificationIcon: MappedModules["discord/components/common/index"]["ChannelNotificationIcon"]; 277 - export const ChannelsFollowedIcon: MappedModules["discord/components/common/index"]["ChannelsFollowedIcon"]; 278 - export const ChatArrowRightIcon: MappedModules["discord/components/common/index"]["ChatArrowRightIcon"]; 279 - export const ChatCheckIcon: MappedModules["discord/components/common/index"]["ChatCheckIcon"]; 280 - export const ChatDotsIcon: MappedModules["discord/components/common/index"]["ChatDotsIcon"]; 281 - export const ChatEyeIcon: MappedModules["discord/components/common/index"]["ChatEyeIcon"]; 282 - export const ChatIcon: MappedModules["discord/components/common/index"]["ChatIcon"]; 283 - export const ChatMarkUnreadIcon: MappedModules["discord/components/common/index"]["ChatMarkUnreadIcon"]; 284 - export const ChatMinusIcon: MappedModules["discord/components/common/index"]["ChatMinusIcon"]; 285 - export const ChatPlusIcon: MappedModules["discord/components/common/index"]["ChatPlusIcon"]; 286 - export const ChatRetryIcon: MappedModules["discord/components/common/index"]["ChatRetryIcon"]; 287 - export const ChatSlowModeIcon: MappedModules["discord/components/common/index"]["ChatSlowModeIcon"]; 288 - export const ChatSmileIcon: MappedModules["discord/components/common/index"]["ChatSmileIcon"]; 289 - export const ChatSpeakIcon: MappedModules["discord/components/common/index"]["ChatSpeakIcon"]; 290 - export const ChatWarningIcon: MappedModules["discord/components/common/index"]["ChatWarningIcon"]; 291 - export const ChatXIcon: MappedModules["discord/components/common/index"]["ChatXIcon"]; 292 - export const CheckmarkLargeBoldIcon: MappedModules["discord/components/common/index"]["CheckmarkLargeBoldIcon"]; 293 - export const CheckmarkLargeIcon: MappedModules["discord/components/common/index"]["CheckmarkLargeIcon"]; 294 - export const CheckmarkSmallBoldIcon: MappedModules["discord/components/common/index"]["CheckmarkSmallBoldIcon"]; 295 - export const CheckmarkSmallIcon: MappedModules["discord/components/common/index"]["CheckmarkSmallIcon"]; 296 - export const ChevronLargeDownIcon: MappedModules["discord/components/common/index"]["ChevronLargeDownIcon"]; 297 - export const ChevronLargeLeftIcon: MappedModules["discord/components/common/index"]["ChevronLargeLeftIcon"]; 298 - export const ChevronLargeRightIcon: MappedModules["discord/components/common/index"]["ChevronLargeRightIcon"]; 299 - export const ChevronLargeUpIcon: MappedModules["discord/components/common/index"]["ChevronLargeUpIcon"]; 300 export const ChevronSmallDownIcon: MappedModules["discord/components/common/index"]["ChevronSmallDownIcon"]; 301 - export const ChevronSmallLeftIcon: MappedModules["discord/components/common/index"]["ChevronSmallLeftIcon"]; 302 - export const ChevronSmallRightIcon: MappedModules["discord/components/common/index"]["ChevronSmallRightIcon"]; 303 export const ChevronSmallUpIcon: MappedModules["discord/components/common/index"]["ChevronSmallUpIcon"]; 304 - export const CircleCheckIcon: MappedModules["discord/components/common/index"]["CircleCheckIcon"]; 305 export const CircleInformationIcon: MappedModules["discord/components/common/index"]["CircleInformationIcon"]; 306 - export const CircleMinusIcon: MappedModules["discord/components/common/index"]["CircleMinusIcon"]; 307 - export const CirclePlayIcon: MappedModules["discord/components/common/index"]["CirclePlayIcon"]; 308 - export const CirclePlusIcon: MappedModules["discord/components/common/index"]["CirclePlusIcon"]; 309 - export const CircleQuestionIcon: MappedModules["discord/components/common/index"]["CircleQuestionIcon"]; 310 export const CircleWarningIcon: MappedModules["discord/components/common/index"]["CircleWarningIcon"]; 311 export const CircleXIcon: MappedModules["discord/components/common/index"]["CircleXIcon"]; 312 - export const ClipboardCheckIcon: MappedModules["discord/components/common/index"]["ClipboardCheckIcon"]; 313 - export const ClipboardListIcon: MappedModules["discord/components/common/index"]["ClipboardListIcon"]; 314 - export const ClipsGalleryIcon: MappedModules["discord/components/common/index"]["ClipsGalleryIcon"]; 315 - export const ClipsIcon: MappedModules["discord/components/common/index"]["ClipsIcon"]; 316 - export const ClockIcon: MappedModules["discord/components/common/index"]["ClockIcon"]; 317 - export const ClockWarningIcon: MappedModules["discord/components/common/index"]["ClockWarningIcon"]; 318 - export const ClockXIcon: MappedModules["discord/components/common/index"]["ClockXIcon"]; 319 - export const CloudDownloadIcon: MappedModules["discord/components/common/index"]["CloudDownloadIcon"]; 320 export const ClydeIcon: MappedModules["discord/components/common/index"]["ClydeIcon"]; 321 - export const CollapseListIcon: MappedModules["discord/components/common/index"]["CollapseListIcon"]; 322 - export const CompassIcon: MappedModules["discord/components/common/index"]["CompassIcon"]; 323 - export const ConnectionAverageIcon: MappedModules["discord/components/common/index"]["ConnectionAverageIcon"]; 324 - export const ConnectionBadIcon: MappedModules["discord/components/common/index"]["ConnectionBadIcon"]; 325 - export const ConnectionFineIcon: MappedModules["discord/components/common/index"]["ConnectionFineIcon"]; 326 - export const ConnectionUnknownIcon: MappedModules["discord/components/common/index"]["ConnectionUnknownIcon"]; 327 - export const ContactsIcon: MappedModules["discord/components/common/index"]["ContactsIcon"]; 328 export const CopyIcon: MappedModules["discord/components/common/index"]["CopyIcon"]; 329 - export const CreditCardIcon: MappedModules["discord/components/common/index"]["CreditCardIcon"]; 330 - export const CropIcon: MappedModules["discord/components/common/index"]["CropIcon"]; 331 - export const CrownIcon: MappedModules["discord/components/common/index"]["CrownIcon"]; 332 - export const CrunchyrollBrandLightIcon: MappedModules["discord/components/common/index"]["CrunchyrollBrandLightIcon"]; 333 - export const CrunchyrollNeutralIcon: MappedModules["discord/components/common/index"]["CrunchyrollNeutralIcon"]; 334 - export const DenyIcon: MappedModules["discord/components/common/index"]["DenyIcon"]; 335 - export const DoorEnterIcon: MappedModules["discord/components/common/index"]["DoorEnterIcon"]; 336 - export const DoorExitIcon: MappedModules["discord/components/common/index"]["DoorExitIcon"]; 337 - export const DoubleCheckmarkIcon: MappedModules["discord/components/common/index"]["DoubleCheckmarkIcon"]; 338 export const DownloadIcon: MappedModules["discord/components/common/index"]["DownloadIcon"]; 339 - export const DpadIcon: MappedModules["discord/components/common/index"]["DpadIcon"]; 340 - export const DragIcon: MappedModules["discord/components/common/index"]["DragIcon"]; 341 - export const EducationIcon: MappedModules["discord/components/common/index"]["EducationIcon"]; 342 - export const EmbedIcon: MappedModules["discord/components/common/index"]["EmbedIcon"]; 343 - export const EnvelopeIcon: MappedModules["discord/components/common/index"]["EnvelopeIcon"]; 344 - export const ExpandGifIcon: MappedModules["discord/components/common/index"]["ExpandGifIcon"]; 345 - export const ExperimentalImageBrokenIcon: MappedModules["discord/components/common/index"]["ExperimentalImageBrokenIcon"]; 346 - export const ExperimentalLootboxIcon: MappedModules["discord/components/common/index"]["ExperimentalLootboxIcon"]; 347 - export const ExperimentalMicrophoneSparkleIcon: MappedModules["discord/components/common/index"]["ExperimentalMicrophoneSparkleIcon"]; 348 - export const ExperimentalMicrophoneSparkleMutedIcon: MappedModules["discord/components/common/index"]["ExperimentalMicrophoneSparkleMutedIcon"]; 349 - export const ExperimentalPineappleHouseIcon: MappedModules["discord/components/common/index"]["ExperimentalPineappleHouseIcon"]; 350 - export const EyeDropperIcon: MappedModules["discord/components/common/index"]["EyeDropperIcon"]; 351 - export const EyeIcon: MappedModules["discord/components/common/index"]["EyeIcon"]; 352 - export const EyePlusIcon: MappedModules["discord/components/common/index"]["EyePlusIcon"]; 353 - export const EyeSlashIcon: MappedModules["discord/components/common/index"]["EyeSlashIcon"]; 354 - export const FacebookNeutralIcon: MappedModules["discord/components/common/index"]["FacebookNeutralIcon"]; 355 - export const FileDenyIcon: MappedModules["discord/components/common/index"]["FileDenyIcon"]; 356 - export const FileIcon: MappedModules["discord/components/common/index"]["FileIcon"]; 357 - export const FileUpIcon: MappedModules["discord/components/common/index"]["FileUpIcon"]; 358 - export const FileWarningIcon: MappedModules["discord/components/common/index"]["FileWarningIcon"]; 359 - export const FiltersHorizontalIcon: MappedModules["discord/components/common/index"]["FiltersHorizontalIcon"]; 360 - export const FireIcon: MappedModules["discord/components/common/index"]["FireIcon"]; 361 - export const FlagIcon: MappedModules["discord/components/common/index"]["FlagIcon"]; 362 - export const FlagMinusIcon: MappedModules["discord/components/common/index"]["FlagMinusIcon"]; 363 - export const FlagPlusIcon: MappedModules["discord/components/common/index"]["FlagPlusIcon"]; 364 - export const FlagRetryIcon: MappedModules["discord/components/common/index"]["FlagRetryIcon"]; 365 - export const FlashIcon: MappedModules["discord/components/common/index"]["FlashIcon"]; 366 - export const FlipHorizontalIcon: MappedModules["discord/components/common/index"]["FlipHorizontalIcon"]; 367 - export const FlipVerticalIcon: MappedModules["discord/components/common/index"]["FlipVerticalIcon"]; 368 - export const FolderIcon: MappedModules["discord/components/common/index"]["FolderIcon"]; 369 - export const FolderPlusIcon: MappedModules["discord/components/common/index"]["FolderPlusIcon"]; 370 - export const FoodIcon: MappedModules["discord/components/common/index"]["FoodIcon"]; 371 - export const ForumIcon: MappedModules["discord/components/common/index"]["ForumIcon"]; 372 - export const ForumLockIcon: MappedModules["discord/components/common/index"]["ForumLockIcon"]; 373 - export const ForumWarningIcon: MappedModules["discord/components/common/index"]["ForumWarningIcon"]; 374 - export const FriendsIcon: MappedModules["discord/components/common/index"]["FriendsIcon"]; 375 export const FullscreenEnterIcon: MappedModules["discord/components/common/index"]["FullscreenEnterIcon"]; 376 - export const FullscreenExitIcon: MappedModules["discord/components/common/index"]["FullscreenExitIcon"]; 377 export const GameControllerIcon: MappedModules["discord/components/common/index"]["GameControllerIcon"]; 378 - export const GifIcon: MappedModules["discord/components/common/index"]["GifIcon"]; 379 - export const GiftIcon: MappedModules["discord/components/common/index"]["GiftIcon"]; 380 export const GlobeEarthIcon: MappedModules["discord/components/common/index"]["GlobeEarthIcon"]; 381 - export const GridHorizontalIcon: MappedModules["discord/components/common/index"]["GridHorizontalIcon"]; 382 - export const GridSquareIcon: MappedModules["discord/components/common/index"]["GridSquareIcon"]; 383 - export const GridVerticalIcon: MappedModules["discord/components/common/index"]["GridVerticalIcon"]; 384 - export const GroupArrowDownIcon: MappedModules["discord/components/common/index"]["GroupArrowDownIcon"]; 385 - export const GroupArrowRightIcon: MappedModules["discord/components/common/index"]["GroupArrowRightIcon"]; 386 - export const GroupIcon: MappedModules["discord/components/common/index"]["GroupIcon"]; 387 - export const GroupMinusIcon: MappedModules["discord/components/common/index"]["GroupMinusIcon"]; 388 - export const GroupPlusIcon: MappedModules["discord/components/common/index"]["GroupPlusIcon"]; 389 - export const GroupRetryIcon: MappedModules["discord/components/common/index"]["GroupRetryIcon"]; 390 - export const HammerIcon: MappedModules["discord/components/common/index"]["HammerIcon"]; 391 - export const HammerMinusIcon: MappedModules["discord/components/common/index"]["HammerMinusIcon"]; 392 - export const HammerPlusIcon: MappedModules["discord/components/common/index"]["HammerPlusIcon"]; 393 - export const HammerRetryIcon: MappedModules["discord/components/common/index"]["HammerRetryIcon"]; 394 - export const HammerXIcon: MappedModules["discord/components/common/index"]["HammerXIcon"]; 395 - export const HandRequestSpeakIcon: MappedModules["discord/components/common/index"]["HandRequestSpeakIcon"]; 396 - export const HandRequestSpeakListIcon: MappedModules["discord/components/common/index"]["HandRequestSpeakListIcon"]; 397 - export const HashmarkIcon: MappedModules["discord/components/common/index"]["HashmarkIcon"]; 398 - export const HdIcon: MappedModules["discord/components/common/index"]["HdIcon"]; 399 - export const HeadphonesDenyIcon: MappedModules["discord/components/common/index"]["HeadphonesDenyIcon"]; 400 - export const HeadphonesIcon: MappedModules["discord/components/common/index"]["HeadphonesIcon"]; 401 - export const HeadphonesSlashIcon: MappedModules["discord/components/common/index"]["HeadphonesSlashIcon"]; 402 export const HeartIcon: MappedModules["discord/components/common/index"]["HeartIcon"]; 403 - export const HeartOutlineIcon: MappedModules["discord/components/common/index"]["HeartOutlineIcon"]; 404 - export const HomeIcon: MappedModules["discord/components/common/index"]["HomeIcon"]; 405 - export const HomeSlashIcon: MappedModules["discord/components/common/index"]["HomeSlashIcon"]; 406 - export const HourglassIcon: MappedModules["discord/components/common/index"]["HourglassIcon"]; 407 - export const HubIcon: MappedModules["discord/components/common/index"]["HubIcon"]; 408 - export const IdIcon: MappedModules["discord/components/common/index"]["IdIcon"]; 409 - export const ImageFileIcon: MappedModules["discord/components/common/index"]["ImageFileIcon"]; 410 - export const ImageFileUpIcon: MappedModules["discord/components/common/index"]["ImageFileUpIcon"]; 411 - export const ImageIcon: MappedModules["discord/components/common/index"]["ImageIcon"]; 412 - export const ImageLockIcon: MappedModules["discord/components/common/index"]["ImageLockIcon"]; 413 - export const ImagePlusIcon: MappedModules["discord/components/common/index"]["ImagePlusIcon"]; 414 - export const ImageSparkleIcon: MappedModules["discord/components/common/index"]["ImageSparkleIcon"]; 415 - export const ImageTextIcon: MappedModules["discord/components/common/index"]["ImageTextIcon"]; 416 - export const ImageWarningIcon: MappedModules["discord/components/common/index"]["ImageWarningIcon"]; 417 - export const ImagesIcon: MappedModules["discord/components/common/index"]["ImagesIcon"]; 418 - export const InboxIcon: MappedModules["discord/components/common/index"]["InboxIcon"]; 419 - export const InstagramNeutralIcon: MappedModules["discord/components/common/index"]["InstagramNeutralIcon"]; 420 - export const InventoryIcon: MappedModules["discord/components/common/index"]["InventoryIcon"]; 421 - export const ItalicIcon: MappedModules["discord/components/common/index"]["ItalicIcon"]; 422 - export const KeyIcon: MappedModules["discord/components/common/index"]["KeyIcon"]; 423 - export const KeyboardIcon: MappedModules["discord/components/common/index"]["KeyboardIcon"]; 424 - export const LanguageIcon: MappedModules["discord/components/common/index"]["LanguageIcon"]; 425 - export const LaptopPhoneIcon: MappedModules["discord/components/common/index"]["LaptopPhoneIcon"]; 426 - export const LeagueOfLegendsBrandIcon: MappedModules["discord/components/common/index"]["LeagueOfLegendsBrandIcon"]; 427 - export const LettersIcon: MappedModules["discord/components/common/index"]["LettersIcon"]; 428 - export const LightbulbIcon: MappedModules["discord/components/common/index"]["LightbulbIcon"]; 429 - export const LinkExternalMediumIcon: MappedModules["discord/components/common/index"]["LinkExternalMediumIcon"]; 430 - export const LinkExternalSmallIcon: MappedModules["discord/components/common/index"]["LinkExternalSmallIcon"]; 431 export const LinkIcon: MappedModules["discord/components/common/index"]["LinkIcon"]; 432 - export const LinkPlusIcon: MappedModules["discord/components/common/index"]["LinkPlusIcon"]; 433 - export const ListBulletsIcon: MappedModules["discord/components/common/index"]["ListBulletsIcon"]; 434 - export const ListNumberedIcon: MappedModules["discord/components/common/index"]["ListNumberedIcon"]; 435 - export const ListViewIcon: MappedModules["discord/components/common/index"]["ListViewIcon"]; 436 - export const LocationIcon: MappedModules["discord/components/common/index"]["LocationIcon"]; 437 - export const LockIcon: MappedModules["discord/components/common/index"]["LockIcon"]; 438 - export const LockUnlockedIcon: MappedModules["discord/components/common/index"]["LockUnlockedIcon"]; 439 - export const MagicWandIcon: MappedModules["discord/components/common/index"]["MagicWandIcon"]; 440 - export const MagnifyingGlassIcon: MappedModules["discord/components/common/index"]["MagnifyingGlassIcon"]; 441 - export const MagnifyingGlassMinusIcon: MappedModules["discord/components/common/index"]["MagnifyingGlassMinusIcon"]; 442 - export const MagnifyingGlassPlusIcon: MappedModules["discord/components/common/index"]["MagnifyingGlassPlusIcon"]; 443 - export const ManaIcon: MappedModules["discord/components/common/index"]["ManaIcon"]; 444 - export const MastodonBrandIcon: MappedModules["discord/components/common/index"]["MastodonBrandIcon"]; 445 - export const MastodonNeutralIcon: MappedModules["discord/components/common/index"]["MastodonNeutralIcon"]; 446 export const MaximizeIcon: MappedModules["discord/components/common/index"]["MaximizeIcon"]; 447 - export const MedalIcon: MappedModules["discord/components/common/index"]["MedalIcon"]; 448 - export const MenuIcon: MappedModules["discord/components/common/index"]["MenuIcon"]; 449 - export const MicrophoneArrowRightIcon: MappedModules["discord/components/common/index"]["MicrophoneArrowRightIcon"]; 450 - export const MicrophoneDenyIcon: MappedModules["discord/components/common/index"]["MicrophoneDenyIcon"]; 451 - export const MicrophoneIcon: MappedModules["discord/components/common/index"]["MicrophoneIcon"]; 452 - export const MicrophoneSlashIcon: MappedModules["discord/components/common/index"]["MicrophoneSlashIcon"]; 453 - export const MinimizeIcon: MappedModules["discord/components/common/index"]["MinimizeIcon"]; 454 export const MinusIcon: MappedModules["discord/components/common/index"]["MinusIcon"]; 455 - export const MobilePhoneControllerIcon: MappedModules["discord/components/common/index"]["MobilePhoneControllerIcon"]; 456 export const MobilePhoneIcon: MappedModules["discord/components/common/index"]["MobilePhoneIcon"]; 457 - export const MobilePhonePlusIcon: MappedModules["discord/components/common/index"]["MobilePhonePlusIcon"]; 458 - export const MobilePhoneSettingsIcon: MappedModules["discord/components/common/index"]["MobilePhoneSettingsIcon"]; 459 - export const MobilePhoneShareIcon: MappedModules["discord/components/common/index"]["MobilePhoneShareIcon"]; 460 - export const MobilePhoneSpeakerIcon: MappedModules["discord/components/common/index"]["MobilePhoneSpeakerIcon"]; 461 - export const MobilePhoneVideoIcon: MappedModules["discord/components/common/index"]["MobilePhoneVideoIcon"]; 462 - export const MobilePhoneXIcon: MappedModules["discord/components/common/index"]["MobilePhoneXIcon"]; 463 - export const ModerationIcon: MappedModules["discord/components/common/index"]["ModerationIcon"]; 464 - export const MoreHorizontalIcon: MappedModules["discord/components/common/index"]["MoreHorizontalIcon"]; 465 - export const MoreVerticalIcon: MappedModules["discord/components/common/index"]["MoreVerticalIcon"]; 466 - export const MusicIcon: MappedModules["discord/components/common/index"]["MusicIcon"]; 467 - export const MusicSlashIcon: MappedModules["discord/components/common/index"]["MusicSlashIcon"]; 468 - export const NatureIcon: MappedModules["discord/components/common/index"]["NatureIcon"]; 469 - export const NearbyScanIcon: MappedModules["discord/components/common/index"]["NearbyScanIcon"]; 470 - export const NewUserIcon: MappedModules["discord/components/common/index"]["NewUserIcon"]; 471 - export const NewUserSimpleIcon: MappedModules["discord/components/common/index"]["NewUserSimpleIcon"]; 472 - export const NintendoSwitchNeutralIcon: MappedModules["discord/components/common/index"]["NintendoSwitchNeutralIcon"]; 473 - export const NitroWheelIcon: MappedModules["discord/components/common/index"]["NitroWheelIcon"]; 474 - export const ObjectIcon: MappedModules["discord/components/common/index"]["ObjectIcon"]; 475 - export const PaintPaletteIcon: MappedModules["discord/components/common/index"]["PaintPaletteIcon"]; 476 - export const PaintbrushThickIcon: MappedModules["discord/components/common/index"]["PaintbrushThickIcon"]; 477 - export const PaintbrushThickMinusIcon: MappedModules["discord/components/common/index"]["PaintbrushThickMinusIcon"]; 478 - export const PaintbrushThickPlusIcon: MappedModules["discord/components/common/index"]["PaintbrushThickPlusIcon"]; 479 - export const PaintbrushThickRetryIcon: MappedModules["discord/components/common/index"]["PaintbrushThickRetryIcon"]; 480 - export const PaintbrushThinIcon: MappedModules["discord/components/common/index"]["PaintbrushThinIcon"]; 481 - export const PaintbrushThinMinusIcon: MappedModules["discord/components/common/index"]["PaintbrushThinMinusIcon"]; 482 - export const PaintbrushThinPlusIcon: MappedModules["discord/components/common/index"]["PaintbrushThinPlusIcon"]; 483 - export const PaintbrushThinRetryIcon: MappedModules["discord/components/common/index"]["PaintbrushThinRetryIcon"]; 484 - export const PaperClockIcon: MappedModules["discord/components/common/index"]["PaperClockIcon"]; 485 - export const PaperIcon: MappedModules["discord/components/common/index"]["PaperIcon"]; 486 - export const PaperPlusIcon: MappedModules["discord/components/common/index"]["PaperPlusIcon"]; 487 export const PauseIcon: MappedModules["discord/components/common/index"]["PauseIcon"]; 488 - export const PencilIcon: MappedModules["discord/components/common/index"]["PencilIcon"]; 489 - export const PencilSparkleIcon: MappedModules["discord/components/common/index"]["PencilSparkleIcon"]; 490 - export const PhoneCallIcon: MappedModules["discord/components/common/index"]["PhoneCallIcon"]; 491 - export const PhoneHangUpIcon: MappedModules["discord/components/common/index"]["PhoneHangUpIcon"]; 492 - export const PhoneIcon: MappedModules["discord/components/common/index"]["PhoneIcon"]; 493 - export const PiggyBankIcon: MappedModules["discord/components/common/index"]["PiggyBankIcon"]; 494 - export const PinIcon: MappedModules["discord/components/common/index"]["PinIcon"]; 495 - export const PinUprightIcon: MappedModules["discord/components/common/index"]["PinUprightIcon"]; 496 - export const PinUprightSlashIcon: MappedModules["discord/components/common/index"]["PinUprightSlashIcon"]; 497 export const PlayIcon: MappedModules["discord/components/common/index"]["PlayIcon"]; 498 - export const PlaybackOffIcon: MappedModules["discord/components/common/index"]["PlaybackOffIcon"]; 499 - export const PlaybackOnIcon: MappedModules["discord/components/common/index"]["PlaybackOnIcon"]; 500 - export const PlaystationNeutralIcon: MappedModules["discord/components/common/index"]["PlaystationNeutralIcon"]; 501 export const PlusLargeIcon: MappedModules["discord/components/common/index"]["PlusLargeIcon"]; 502 - export const PlusMediumIcon: MappedModules["discord/components/common/index"]["PlusMediumIcon"]; 503 - export const PlusSmallIcon: MappedModules["discord/components/common/index"]["PlusSmallIcon"]; 504 - export const PollsIcon: MappedModules["discord/components/common/index"]["PollsIcon"]; 505 - export const PotionIcon: MappedModules["discord/components/common/index"]["PotionIcon"]; 506 - export const PremiumChannelIcon: MappedModules["discord/components/common/index"]["PremiumChannelIcon"]; 507 - export const PrivacyAndSafetyIcon: MappedModules["discord/components/common/index"]["PrivacyAndSafetyIcon"]; 508 - export const PuzzlePieceIcon: MappedModules["discord/components/common/index"]["PuzzlePieceIcon"]; 509 - export const PuzzlePieceMinusIcon: MappedModules["discord/components/common/index"]["PuzzlePieceMinusIcon"]; 510 - export const PuzzlePiecePlusIcon: MappedModules["discord/components/common/index"]["PuzzlePiecePlusIcon"]; 511 - export const PuzzlePieceRetryIcon: MappedModules["discord/components/common/index"]["PuzzlePieceRetryIcon"]; 512 - export const QrCodeIcon: MappedModules["discord/components/common/index"]["QrCodeIcon"]; 513 - export const QuestsIcon: MappedModules["discord/components/common/index"]["QuestsIcon"]; 514 - export const QuoteIcon: MappedModules["discord/components/common/index"]["QuoteIcon"]; 515 - export const ReactionIcon: MappedModules["discord/components/common/index"]["ReactionIcon"]; 516 - export const ReceiptIcon: MappedModules["discord/components/common/index"]["ReceiptIcon"]; 517 - export const RecordPlayerIcon: MappedModules["discord/components/common/index"]["RecordPlayerIcon"]; 518 - export const RedoIcon: MappedModules["discord/components/common/index"]["RedoIcon"]; 519 - export const RefreshIcon: MappedModules["discord/components/common/index"]["RefreshIcon"]; 520 - export const RemixIcon: MappedModules["discord/components/common/index"]["RemixIcon"]; 521 export const RetryIcon: MappedModules["discord/components/common/index"]["RetryIcon"]; 522 - export const RibbonIcon: MappedModules["discord/components/common/index"]["RibbonIcon"]; 523 - export const RobotIcon: MappedModules["discord/components/common/index"]["RobotIcon"]; 524 - export const RotateIcon: MappedModules["discord/components/common/index"]["RotateIcon"]; 525 export const ScienceIcon: MappedModules["discord/components/common/index"]["ScienceIcon"]; 526 - export const ScreenArrowIcon: MappedModules["discord/components/common/index"]["ScreenArrowIcon"]; 527 export const ScreenIcon: MappedModules["discord/components/common/index"]["ScreenIcon"]; 528 - export const ScreenSlashIcon: MappedModules["discord/components/common/index"]["ScreenSlashIcon"]; 529 - export const ScreenStreamIcon: MappedModules["discord/components/common/index"]["ScreenStreamIcon"]; 530 - export const ScreenSystemRequirementsIcon: MappedModules["discord/components/common/index"]["ScreenSystemRequirementsIcon"]; 531 - export const ScreenXIcon: MappedModules["discord/components/common/index"]["ScreenXIcon"]; 532 - export const SendMessageIcon: MappedModules["discord/components/common/index"]["SendMessageIcon"]; 533 - export const ServerGridIcon: MappedModules["discord/components/common/index"]["ServerGridIcon"]; 534 - export const ServerIcon: MappedModules["discord/components/common/index"]["ServerIcon"]; 535 - export const SettingsArrowUpIcon: MappedModules["discord/components/common/index"]["SettingsArrowUpIcon"]; 536 - export const SettingsCircleIcon: MappedModules["discord/components/common/index"]["SettingsCircleIcon"]; 537 - export const SettingsIcon: MappedModules["discord/components/common/index"]["SettingsIcon"]; 538 - export const SettingsInfoIcon: MappedModules["discord/components/common/index"]["SettingsInfoIcon"]; 539 - export const SettingsPlusIcon: MappedModules["discord/components/common/index"]["SettingsPlusIcon"]; 540 - export const ShareIcon: MappedModules["discord/components/common/index"]["ShareIcon"]; 541 - export const ShieldAtIcon: MappedModules["discord/components/common/index"]["ShieldAtIcon"]; 542 - export const ShieldIcon: MappedModules["discord/components/common/index"]["ShieldIcon"]; 543 - export const ShieldLockIcon: MappedModules["discord/components/common/index"]["ShieldLockIcon"]; 544 - export const ShieldUserIcon: MappedModules["discord/components/common/index"]["ShieldUserIcon"]; 545 - export const ShopCircleIcon: MappedModules["discord/components/common/index"]["ShopCircleIcon"]; 546 - export const ShopIcon: MappedModules["discord/components/common/index"]["ShopIcon"]; 547 - export const ShopMinusIcon: MappedModules["discord/components/common/index"]["ShopMinusIcon"]; 548 - export const ShopPlusIcon: MappedModules["discord/components/common/index"]["ShopPlusIcon"]; 549 - export const ShopSparkleIcon: MappedModules["discord/components/common/index"]["ShopSparkleIcon"]; 550 - export const SignPostIcon: MappedModules["discord/components/common/index"]["SignPostIcon"]; 551 - export const SlashBoxIcon: MappedModules["discord/components/common/index"]["SlashBoxIcon"]; 552 - export const SlashIcon: MappedModules["discord/components/common/index"]["SlashIcon"]; 553 - export const SlashMinusIcon: MappedModules["discord/components/common/index"]["SlashMinusIcon"]; 554 - export const SlashPlusIcon: MappedModules["discord/components/common/index"]["SlashPlusIcon"]; 555 - export const SlashRetryIcon: MappedModules["discord/components/common/index"]["SlashRetryIcon"]; 556 - export const SoundboardIcon: MappedModules["discord/components/common/index"]["SoundboardIcon"]; 557 - export const SoundboardSlashIcon: MappedModules["discord/components/common/index"]["SoundboardSlashIcon"]; 558 - export const SparklesIcon: MappedModules["discord/components/common/index"]["SparklesIcon"]; 559 - export const SpeedometerIcon: MappedModules["discord/components/common/index"]["SpeedometerIcon"]; 560 - export const SpoilerIcon: MappedModules["discord/components/common/index"]["SpoilerIcon"]; 561 - export const StaffBadgeIcon: MappedModules["discord/components/common/index"]["StaffBadgeIcon"]; 562 - export const StageIcon: MappedModules["discord/components/common/index"]["StageIcon"]; 563 - export const StageListIcon: MappedModules["discord/components/common/index"]["StageListIcon"]; 564 - export const StageLockIcon: MappedModules["discord/components/common/index"]["StageLockIcon"]; 565 - export const StageMinusIcon: MappedModules["discord/components/common/index"]["StageMinusIcon"]; 566 - export const StageModeratorIcon: MappedModules["discord/components/common/index"]["StageModeratorIcon"]; 567 - export const StagePlusIcon: MappedModules["discord/components/common/index"]["StagePlusIcon"]; 568 - export const StageRetryIcon: MappedModules["discord/components/common/index"]["StageRetryIcon"]; 569 - export const StageXIcon: MappedModules["discord/components/common/index"]["StageXIcon"]; 570 - export const StampIcon: MappedModules["discord/components/common/index"]["StampIcon"]; 571 export const StarIcon: MappedModules["discord/components/common/index"]["StarIcon"]; 572 - export const StarOutlineIcon: MappedModules["discord/components/common/index"]["StarOutlineIcon"]; 573 - export const StarShootingIcon: MappedModules["discord/components/common/index"]["StarShootingIcon"]; 574 - export const StickerDeadIcon: MappedModules["discord/components/common/index"]["StickerDeadIcon"]; 575 - export const StickerIcon: MappedModules["discord/components/common/index"]["StickerIcon"]; 576 - export const StickerMinusIcon: MappedModules["discord/components/common/index"]["StickerMinusIcon"]; 577 - export const StickerPlusIcon: MappedModules["discord/components/common/index"]["StickerPlusIcon"]; 578 - export const StickerRetryIcon: MappedModules["discord/components/common/index"]["StickerRetryIcon"]; 579 - export const StickerSadIcon: MappedModules["discord/components/common/index"]["StickerSadIcon"]; 580 - export const StickerSmallIcon: MappedModules["discord/components/common/index"]["StickerSmallIcon"]; 581 - export const StickerWink1Icon: MappedModules["discord/components/common/index"]["StickerWink1Icon"]; 582 - export const StickerWink2Icon: MappedModules["discord/components/common/index"]["StickerWink2Icon"]; 583 - export const StopIcon: MappedModules["discord/components/common/index"]["StopIcon"]; 584 - export const StrikethroughIcon: MappedModules["discord/components/common/index"]["StrikethroughIcon"]; 585 - export const SuperReactionIcon: MappedModules["discord/components/common/index"]["SuperReactionIcon"]; 586 - export const TagIcon: MappedModules["discord/components/common/index"]["TagIcon"]; 587 - export const TagsIcon: MappedModules["discord/components/common/index"]["TagsIcon"]; 588 - export const TextControllerIcon: MappedModules["discord/components/common/index"]["TextControllerIcon"]; 589 - export const TextIcon: MappedModules["discord/components/common/index"]["TextIcon"]; 590 - export const TextLockIcon: MappedModules["discord/components/common/index"]["TextLockIcon"]; 591 - export const TextUserIcon: MappedModules["discord/components/common/index"]["TextUserIcon"]; 592 - export const TextWarningIcon: MappedModules["discord/components/common/index"]["TextWarningIcon"]; 593 - export const ThemeDarkIcon: MappedModules["discord/components/common/index"]["ThemeDarkIcon"]; 594 - export const ThemeLightIcon: MappedModules["discord/components/common/index"]["ThemeLightIcon"]; 595 - export const ThemeMidnightIcon: MappedModules["discord/components/common/index"]["ThemeMidnightIcon"]; 596 - export const ThreadIcon: MappedModules["discord/components/common/index"]["ThreadIcon"]; 597 - export const ThreadLockIcon: MappedModules["discord/components/common/index"]["ThreadLockIcon"]; 598 - export const ThreadMinusIcon: MappedModules["discord/components/common/index"]["ThreadMinusIcon"]; 599 - export const ThreadPlusIcon: MappedModules["discord/components/common/index"]["ThreadPlusIcon"]; 600 - export const ThreadRetryIcon: MappedModules["discord/components/common/index"]["ThreadRetryIcon"]; 601 - export const ThreadWarningIcon: MappedModules["discord/components/common/index"]["ThreadWarningIcon"]; 602 - export const ThumbsDownIcon: MappedModules["discord/components/common/index"]["ThumbsDownIcon"]; 603 - export const ThumbsUpIcon: MappedModules["discord/components/common/index"]["ThumbsUpIcon"]; 604 - export const TicketIcon: MappedModules["discord/components/common/index"]["TicketIcon"]; 605 - export const TiktokNeutralIcon: MappedModules["discord/components/common/index"]["TiktokNeutralIcon"]; 606 - export const TimerIcon: MappedModules["discord/components/common/index"]["TimerIcon"]; 607 - export const TopicsIcon: MappedModules["discord/components/common/index"]["TopicsIcon"]; 608 - export const TrainIcon: MappedModules["discord/components/common/index"]["TrainIcon"]; 609 export const TrashIcon: MappedModules["discord/components/common/index"]["TrashIcon"]; 610 - export const TreehouseIcon: MappedModules["discord/components/common/index"]["TreehouseIcon"]; 611 - export const TrophyIcon: MappedModules["discord/components/common/index"]["TrophyIcon"]; 612 - export const TvIcon: MappedModules["discord/components/common/index"]["TvIcon"]; 613 - export const TwitterNeutralIcon: MappedModules["discord/components/common/index"]["TwitterNeutralIcon"]; 614 - export const UnderlineIcon: MappedModules["discord/components/common/index"]["UnderlineIcon"]; 615 - export const UndoIcon: MappedModules["discord/components/common/index"]["UndoIcon"]; 616 - export const UnknownGameIcon: MappedModules["discord/components/common/index"]["UnknownGameIcon"]; 617 - export const UnsendIcon: MappedModules["discord/components/common/index"]["UnsendIcon"]; 618 - export const UploadIcon: MappedModules["discord/components/common/index"]["UploadIcon"]; 619 - export const UserArrowDiagonalBottomRightIcon: MappedModules["discord/components/common/index"]["UserArrowDiagonalBottomRightIcon"]; 620 - export const UserCheckIcon: MappedModules["discord/components/common/index"]["UserCheckIcon"]; 621 - export const UserCircleIcon: MappedModules["discord/components/common/index"]["UserCircleIcon"]; 622 - export const UserCircleStatusIcon: MappedModules["discord/components/common/index"]["UserCircleStatusIcon"]; 623 - export const UserClockIcon: MappedModules["discord/components/common/index"]["UserClockIcon"]; 624 - export const UserIcon: MappedModules["discord/components/common/index"]["UserIcon"]; 625 - export const UserMinusIcon: MappedModules["discord/components/common/index"]["UserMinusIcon"]; 626 - export const UserPlatformIcon: MappedModules["discord/components/common/index"]["UserPlatformIcon"]; 627 - export const UserPlayIcon: MappedModules["discord/components/common/index"]["UserPlayIcon"]; 628 - export const UserPlusIcon: MappedModules["discord/components/common/index"]["UserPlusIcon"]; 629 - export const UserRetryIcon: MappedModules["discord/components/common/index"]["UserRetryIcon"]; 630 - export const UserSquareIcon: MappedModules["discord/components/common/index"]["UserSquareIcon"]; 631 - export const UserStatusIcon: MappedModules["discord/components/common/index"]["UserStatusIcon"]; 632 - export const VideoIcon: MappedModules["discord/components/common/index"]["VideoIcon"]; 633 - export const VideoLockIcon: MappedModules["discord/components/common/index"]["VideoLockIcon"]; 634 - export const VideoSlashIcon: MappedModules["discord/components/common/index"]["VideoSlashIcon"]; 635 - export const VoiceBluetoothIcon: MappedModules["discord/components/common/index"]["VoiceBluetoothIcon"]; 636 - export const VoiceLockIcon: MappedModules["discord/components/common/index"]["VoiceLockIcon"]; 637 - export const VoiceLowIcon: MappedModules["discord/components/common/index"]["VoiceLowIcon"]; 638 - export const VoiceNormalIcon: MappedModules["discord/components/common/index"]["VoiceNormalIcon"]; 639 - export const VoiceWarningIcon: MappedModules["discord/components/common/index"]["VoiceWarningIcon"]; 640 - export const VoiceXIcon: MappedModules["discord/components/common/index"]["VoiceXIcon"]; 641 - export const WalletIcon: MappedModules["discord/components/common/index"]["WalletIcon"]; 642 export const WarningIcon: MappedModules["discord/components/common/index"]["WarningIcon"]; 643 - export const WaveformIcon: MappedModules["discord/components/common/index"]["WaveformIcon"]; 644 - export const WaveformSlashIcon: MappedModules["discord/components/common/index"]["WaveformSlashIcon"]; 645 - export const WebhookIcon: MappedModules["discord/components/common/index"]["WebhookIcon"]; 646 - export const WebhookPlusIcon: MappedModules["discord/components/common/index"]["WebhookPlusIcon"]; 647 - export const WidgetsIcon: MappedModules["discord/components/common/index"]["WidgetsIcon"]; 648 - export const WidgetsMinusIcon: MappedModules["discord/components/common/index"]["WidgetsMinusIcon"]; 649 - export const WidgetsPlusIcon: MappedModules["discord/components/common/index"]["WidgetsPlusIcon"]; 650 - export const WidgetsRetryIcon: MappedModules["discord/components/common/index"]["WidgetsRetryIcon"]; 651 export const WindowLaunchIcon: MappedModules["discord/components/common/index"]["WindowLaunchIcon"]; 652 - export const WindowReturnIcon: MappedModules["discord/components/common/index"]["WindowReturnIcon"]; 653 - export const WindowTopIcon: MappedModules["discord/components/common/index"]["WindowTopIcon"]; 654 export const WindowTopOutlineIcon: MappedModules["discord/components/common/index"]["WindowTopOutlineIcon"]; 655 - export const WrenchIcon: MappedModules["discord/components/common/index"]["WrenchIcon"]; 656 - export const XLargeBoldIcon: MappedModules["discord/components/common/index"]["XLargeBoldIcon"]; 657 export const XLargeIcon: MappedModules["discord/components/common/index"]["XLargeIcon"]; 658 - export const XNeutralIcon: MappedModules["discord/components/common/index"]["XNeutralIcon"]; 659 - export const XSmallBoldIcon: MappedModules["discord/components/common/index"]["XSmallBoldIcon"]; 660 export const XSmallIcon: MappedModules["discord/components/common/index"]["XSmallIcon"]; 661 - export const XboxNeutralIcon: MappedModules["discord/components/common/index"]["XboxNeutralIcon"]; 662 - export const YoutubeNeutralIcon: MappedModules["discord/components/common/index"]["YoutubeNeutralIcon"]; 663 - export const AccessibilityPreferencesContext: MappedModules["discord/components/common/index"]["AccessibilityPreferencesContext"]; 664 - export const AdvancedScroller: MappedModules["discord/components/common/index"]["AdvancedScroller"]; 665 - export const AdvancedScrollerAuto: MappedModules["discord/components/common/index"]["AdvancedScrollerAuto"]; 666 - export const AdvancedScrollerNone: MappedModules["discord/components/common/index"]["AdvancedScrollerNone"]; 667 - export const AdvancedScrollerThin: MappedModules["discord/components/common/index"]["AdvancedScrollerThin"]; 668 - export const Anchor: MappedModules["discord/components/common/index"]["Anchor"]; 669 - export const AnimatedAvatar: MappedModules["discord/components/common/index"]["AnimatedAvatar"]; 670 - export const AnimatedDots: MappedModules["discord/components/common/index"]["AnimatedDots"]; 671 - export const AnimatedStatus: MappedModules["discord/components/common/index"]["AnimatedStatus"]; 672 - export const Backdrop: MappedModules["discord/components/common/index"]["Backdrop"]; 673 - export const BasePopout: MappedModules["discord/components/common/index"]["BasePopout"]; 674 - export const BlobMask: MappedModules["discord/components/common/index"]["BlobMask"]; 675 - export const BlockInteractions: MappedModules["discord/components/common/index"]["BlockInteractions"]; 676 - export const BlockInteractionsContext: MappedModules["discord/components/common/index"]["BlockInteractionsContext"]; 677 - export const ButtonGroup: MappedModules["discord/components/common/index"]["ButtonGroup"]; 678 - export const ButtonLink: MappedModules["discord/components/common/index"]["ButtonLink"]; 679 - export const CalendarPicker: MappedModules["discord/components/common/index"]["CalendarPicker"]; 680 - export const ChainedLottieAnimation: MappedModules["discord/components/common/index"]["ChainedLottieAnimation"]; 681 - export const Checkbox: MappedModules["discord/components/common/index"]["Checkbox"]; 682 - export const CheckboxIndicator: MappedModules["discord/components/common/index"]["CheckboxIndicator"]; 683 - export const CircleBadge: MappedModules["discord/components/common/index"]["CircleBadge"]; 684 - export const CircleIconButton: MappedModules["discord/components/common/index"]["CircleIconButton"]; 685 - export const ClickableContainer: MappedModules["discord/components/common/index"]["ClickableContainer"]; 686 - export const Collapsible: MappedModules["discord/components/common/index"]["Collapsible"]; 687 - export const ColorPicker: MappedModules["discord/components/common/index"]["ColorPicker"]; 688 - export const ColorPickerCustomButton: MappedModules["discord/components/common/index"]["ColorPickerCustomButton"]; 689 - export const ColorPickerDefaultButton: MappedModules["discord/components/common/index"]["ColorPickerDefaultButton"]; 690 - export const Combobox: MappedModules["discord/components/common/index"]["Combobox"]; 691 - export const ComboboxItem: MappedModules["discord/components/common/index"]["ComboboxItem"]; 692 - export const ComboboxPopout: MappedModules["discord/components/common/index"]["ComboboxPopout"]; 693 export const ConfirmModal: MappedModules["discord/components/common/index"]["ConfirmModal"]; 694 - export const CopyInput: MappedModules["discord/components/common/index"]["CopyInput"]; 695 - export const CustomColorPicker: MappedModules["discord/components/common/index"]["CustomColorPicker"]; 696 - export const DateInput: MappedModules["discord/components/common/index"]["DateInput"]; 697 - export const DeclarativeConfirmModal: MappedModules["discord/components/common/index"]["DeclarativeConfirmModal"]; 698 - export const DisableCustomTheme: MappedModules["discord/components/common/index"]["DisableCustomTheme"]; 699 - export const DnDKeyboardHelpBar: MappedModules["discord/components/common/index"]["DnDKeyboardHelpBar"]; 700 - export const DnDProvider: MappedModules["discord/components/common/index"]["DnDProvider"]; 701 - export const Dots: MappedModules["discord/components/common/index"]["Dots"]; 702 - export const EmptyState: MappedModules["discord/components/common/index"]["EmptyState"]; 703 - export const EmptyStateImage: MappedModules["discord/components/common/index"]["EmptyStateImage"]; 704 - export const EmptyStateText: MappedModules["discord/components/common/index"]["EmptyStateText"]; 705 - export const FocusBlock: MappedModules["discord/components/common/index"]["FocusBlock"]; 706 - export const FocusJumpSection: MappedModules["discord/components/common/index"]["FocusJumpSection"]; 707 - export const FocusLock: MappedModules["discord/components/common/index"]["FocusLock"]; 708 - export const FocusRing: MappedModules["discord/components/common/index"]["FocusRing"]; 709 - export const FocusRingScope: MappedModules["discord/components/common/index"]["FocusRingScope"]; 710 - export const FormContext: MappedModules["discord/components/common/index"]["FormContext"]; 711 - export const FormContextProvider: MappedModules["discord/components/common/index"]["FormContextProvider"]; 712 - export const FormErrorBlock: MappedModules["discord/components/common/index"]["FormErrorBlock"]; 713 - export const FormLabel: MappedModules["discord/components/common/index"]["FormLabel"]; 714 - export const FormNotice: MappedModules["discord/components/common/index"]["FormNotice"]; 715 export const H: MappedModules["discord/components/common/index"]["H"]; 716 - export const HeadingLevel: MappedModules["discord/components/common/index"]["HeadingLevel"]; 717 export const HelpMessage: MappedModules["discord/components/common/index"]["HelpMessage"]; 718 - export const HiddenVisually: MappedModules["discord/components/common/index"]["HiddenVisually"]; 719 - export const HorizontalOverflowList: MappedModules["discord/components/common/index"]["HorizontalOverflowList"]; 720 - export const HorizontalOverflowListTooltip: MappedModules["discord/components/common/index"]["HorizontalOverflowListTooltip"]; 721 - export const IconBadge: MappedModules["discord/components/common/index"]["IconBadge"]; 722 - export const IconSelectOption: MappedModules["discord/components/common/index"]["IconSelectOption"]; 723 - export const InputError: MappedModules["discord/components/common/index"]["InputError"]; 724 - export const Interactive: MappedModules["discord/components/common/index"]["Interactive"]; 725 - export const KeyCombo: MappedModules["discord/components/common/index"]["KeyCombo"]; 726 - export const Layer: MappedModules["discord/components/common/index"]["Layer"]; 727 - export const LayerContainer: MappedModules["discord/components/common/index"]["LayerContainer"]; 728 - export const LayerProvider: MappedModules["discord/components/common/index"]["LayerProvider"]; 729 - export const LazyPopout: MappedModules["discord/components/common/index"]["LazyPopout"]; 730 - export const LinkButton: MappedModules["discord/components/common/index"]["LinkButton"]; 731 - export const List: MappedModules["discord/components/common/index"]["List"]; 732 - export const ListAuto: MappedModules["discord/components/common/index"]["ListAuto"]; 733 - export const ListComputer: MappedModules["discord/components/common/index"]["ListComputer"]; 734 - export const ListNone: MappedModules["discord/components/common/index"]["ListNone"]; 735 - export const ListThin: MappedModules["discord/components/common/index"]["ListThin"]; 736 - export const LoadingPopout: MappedModules["discord/components/common/index"]["LoadingPopout"]; 737 - export const LottieAnimation: MappedModules["discord/components/common/index"]["LottieAnimation"]; 738 - export const LottieSparkle: MappedModules["discord/components/common/index"]["LottieSparkle"]; 739 - export const MasonryList: MappedModules["discord/components/common/index"]["MasonryList"]; 740 - export const MasonryListAuto: MappedModules["discord/components/common/index"]["MasonryListAuto"]; 741 - export const MasonryListComputer: MappedModules["discord/components/common/index"]["MasonryListComputer"]; 742 - export const MasonryListThin: MappedModules["discord/components/common/index"]["MasonryListThin"]; 743 - export const MenuImageUploadControl: MappedModules["discord/components/common/index"]["MenuImageUploadControl"]; 744 - export const MenuInteractiveCompositeControl: MappedModules["discord/components/common/index"]["MenuInteractiveCompositeControl"]; 745 - export const MenuSearchControl: MappedModules["discord/components/common/index"]["MenuSearchControl"]; 746 - export const MenuSliderControl: MappedModules["discord/components/common/index"]["MenuSliderControl"]; 747 - export const MenuSpinner: MappedModules["discord/components/common/index"]["MenuSpinner"]; 748 - export const Modal: MappedModules["discord/components/common/index"]["Modal"]; 749 export const ModalCloseButton: MappedModules["discord/components/common/index"]["ModalCloseButton"]; 750 export const ModalContent: MappedModules["discord/components/common/index"]["ModalContent"]; 751 export const ModalFooter: MappedModules["discord/components/common/index"]["ModalFooter"]; 752 export const ModalHeader: MappedModules["discord/components/common/index"]["ModalHeader"]; 753 - export const ModalListContent: MappedModules["discord/components/common/index"]["ModalListContent"]; 754 export const ModalRoot: MappedModules["discord/components/common/index"]["ModalRoot"]; 755 - export const Modals: MappedModules["discord/components/common/index"]["Modals"]; 756 - export const NameWithRole: MappedModules["discord/components/common/index"]["NameWithRole"]; 757 - export const NameWithRoleAnchor: MappedModules["discord/components/common/index"]["NameWithRoleAnchor"]; 758 - export const NavItem: MappedModules["discord/components/common/index"]["NavItem"]; 759 - export const NoticeButton: MappedModules["discord/components/common/index"]["NoticeButton"]; 760 - export const NoticeButtonAnchor: MappedModules["discord/components/common/index"]["NoticeButtonAnchor"]; 761 - export const NumberBadge: MappedModules["discord/components/common/index"]["NumberBadge"]; 762 export const NumberInputStepper: MappedModules["discord/components/common/index"]["NumberInputStepper"]; 763 - export const Paginator: MappedModules["discord/components/common/index"]["Paginator"]; 764 - export const PinToBottomScrollerAuto: MappedModules["discord/components/common/index"]["PinToBottomScrollerAuto"]; 765 - export const PopoutCSSAnimator: MappedModules["discord/components/common/index"]["PopoutCSSAnimator"]; 766 - export const PopoutList: MappedModules["discord/components/common/index"]["PopoutList"]; 767 - export const PremiumBadge: MappedModules["discord/components/common/index"]["PremiumBadge"]; 768 - export const Progress: MappedModules["discord/components/common/index"]["Progress"]; 769 - export const ProgressCircle: MappedModules["discord/components/common/index"]["ProgressCircle"]; 770 - export const QuickSelect: MappedModules["discord/components/common/index"]["QuickSelect"]; 771 - export const RadioGroup: MappedModules["discord/components/common/index"]["RadioGroup"]; 772 - export const RadioIndicator: MappedModules["discord/components/common/index"]["RadioIndicator"]; 773 - export const RedesignIconContextProvider: MappedModules["discord/components/common/index"]["RedesignIconContextProvider"]; 774 - export const ReferencePositionLayer: MappedModules["discord/components/common/index"]["ReferencePositionLayer"]; 775 - export const RoleCircle: MappedModules["discord/components/common/index"]["RoleCircle"]; 776 - export const RoleDot: MappedModules["discord/components/common/index"]["RoleDot"]; 777 - export const RootThemeContextProvider: MappedModules["discord/components/common/index"]["RootThemeContextProvider"]; 778 - export const ScrollerAuto: MappedModules["discord/components/common/index"]["ScrollerAuto"]; 779 - export const ScrollerNone: MappedModules["discord/components/common/index"]["ScrollerNone"]; 780 - export const ScrollerThin: MappedModules["discord/components/common/index"]["ScrollerThin"]; 781 - export const SearchBar: MappedModules["discord/components/common/index"]["SearchBar"]; 782 - export const SearchBox: MappedModules["discord/components/common/index"]["SearchBox"]; 783 - export const SearchableQuickSelect: MappedModules["discord/components/common/index"]["SearchableQuickSelect"]; 784 export const SearchableSelect: MappedModules["discord/components/common/index"]["SearchableSelect"]; 785 - export const SegmentedControl: MappedModules["discord/components/common/index"]["SegmentedControl"]; 786 - export const SequencedLottieAnimation: MappedModules["discord/components/common/index"]["SequencedLottieAnimation"]; 787 - export const Sequencer: MappedModules["discord/components/common/index"]["Sequencer"]; 788 - export const Shakeable: MappedModules["discord/components/common/index"]["Shakeable"]; 789 - export const Shaker: MappedModules["discord/components/common/index"]["Shaker"]; 790 - export const Shine: MappedModules["discord/components/common/index"]["Shine"]; 791 - export const ShinyButton: MappedModules["discord/components/common/index"]["ShinyButton"]; 792 - export const Slide: MappedModules["discord/components/common/index"]["Slide"]; 793 - export const SlideIn: MappedModules["discord/components/common/index"]["SlideIn"]; 794 - export const Slides: MappedModules["discord/components/common/index"]["Slides"]; 795 - export const Spacer: MappedModules["discord/components/common/index"]["Spacer"]; 796 - export const Spinner: MappedModules["discord/components/common/index"]["Spinner"]; 797 - export const Spring: MappedModules["discord/components/common/index"]["Spring"]; 798 - export const Stack: MappedModules["discord/components/common/index"]["Stack"]; 799 - export const StackedProgress: MappedModules["discord/components/common/index"]["StackedProgress"]; 800 - export const Status: MappedModules["discord/components/common/index"]["Status"]; 801 - export const Table: MappedModules["discord/components/common/index"]["Table"]; 802 - export const TableBody: MappedModules["discord/components/common/index"]["TableBody"]; 803 - export const TableCell: MappedModules["discord/components/common/index"]["TableCell"]; 804 - export const TableColumn: MappedModules["discord/components/common/index"]["TableColumn"]; 805 - export const TableHeader: MappedModules["discord/components/common/index"]["TableHeader"]; 806 - export const TableRow: MappedModules["discord/components/common/index"]["TableRow"]; 807 - export const TextAreaAutosize: MappedModules["discord/components/common/index"]["TextAreaAutosize"]; 808 - export const TextBadge: MappedModules["discord/components/common/index"]["TextBadge"]; 809 - export const ThemeContextProvider: MappedModules["discord/components/common/index"]["ThemeContextProvider"]; 810 - export const ThemeProvider: MappedModules["discord/components/common/index"]["ThemeProvider"]; 811 - export const TimeInput: MappedModules["discord/components/common/index"]["TimeInput"]; 812 - export const Toast: MappedModules["discord/components/common/index"]["Toast"]; 813 - export const ToastContainer: MappedModules["discord/components/common/index"]["ToastContainer"]; 814 - export const TooltipContainer: MappedModules["discord/components/common/index"]["TooltipContainer"]; 815 - export const TooltipLayer: MappedModules["discord/components/common/index"]["TooltipLayer"]; 816 - export const TransitionGroup: MappedModules["discord/components/common/index"]["TransitionGroup"]; 817 - export const UseThemeContext: MappedModules["discord/components/common/index"]["UseThemeContext"]; 818 - export const closeAllModals: MappedModules["discord/components/common/index"]["closeAllModals"]; 819 - export const closeModalInAllContexts: MappedModules["discord/components/common/index"]["closeModalInAllContexts"]; 820 - export const createAdvancedScroller: MappedModules["discord/components/common/index"]["createAdvancedScroller"]; 821 - export const createLayer: MappedModules["discord/components/common/index"]["createLayer"]; 822 - export const createListScroller: MappedModules["discord/components/common/index"]["createListScroller"]; 823 - export const createManagedReactiveScroller: MappedModules["discord/components/common/index"]["createManagedReactiveScroller"]; 824 - export const createMasonryListScroller: MappedModules["discord/components/common/index"]["createMasonryListScroller"]; 825 - export const createScroller: MappedModules["discord/components/common/index"]["createScroller"]; 826 export const createToast: MappedModules["discord/components/common/index"]["createToast"]; 827 - export const getAvatarSize: MappedModules["discord/components/common/index"]["getAvatarSize"]; 828 - export const getAvatarSpecs: MappedModules["discord/components/common/index"]["getAvatarSpecs"]; 829 - export const getBadgeCountString: MappedModules["discord/components/common/index"]["getBadgeCountString"]; 830 - export const getBadgeWidthForValue: MappedModules["discord/components/common/index"]["getBadgeWidthForValue"]; 831 - export const getButtonStyle: MappedModules["discord/components/common/index"]["getButtonStyle"]; 832 - export const getInteractingModalContext: MappedModules["discord/components/common/index"]["getInteractingModalContext"]; 833 - export const getParentLayerContainer: MappedModules["discord/components/common/index"]["getParentLayerContainer"]; 834 - export const getStatusBackdropColor: MappedModules["discord/components/common/index"]["getStatusBackdropColor"]; 835 - export const getStatusBackdropOpacity: MappedModules["discord/components/common/index"]["getStatusBackdropOpacity"]; 836 - export const getStatusMask: MappedModules["discord/components/common/index"]["getStatusMask"]; 837 - export const getThemeClass: MappedModules["discord/components/common/index"]["getThemeClass"]; 838 - export const hasAnyModalOpen: MappedModules["discord/components/common/index"]["hasAnyModalOpen"]; 839 - export const hasAnyModalOpenSelector: MappedModules["discord/components/common/index"]["hasAnyModalOpenSelector"]; 840 - export const hasModalOpen: MappedModules["discord/components/common/index"]["hasModalOpen"]; 841 - export const hasModalOpenSelector: MappedModules["discord/components/common/index"]["hasModalOpenSelector"]; 842 - export const isInDndMode: MappedModules["discord/components/common/index"]["isInDndMode"]; 843 - export const isListItemRow: MappedModules["discord/components/common/index"]["isListItemRow"]; 844 - export const makeIconCompat: MappedModules["discord/components/common/index"]["makeIconCompat"]; 845 - export const modalContextFromAppContext: MappedModules["discord/components/common/index"]["modalContextFromAppContext"]; 846 export const popToast: MappedModules["discord/components/common/index"]["popToast"]; 847 - export const referencePortalAwareContains: MappedModules["discord/components/common/index"]["referencePortalAwareContains"]; 848 export const showToast: MappedModules["discord/components/common/index"]["showToast"]; 849 - export const singleSelect: MappedModules["discord/components/common/index"]["singleSelect"]; 850 - export const toggleDndMode: MappedModules["discord/components/common/index"]["toggleDndMode"]; 851 - export const toggleSelect: MappedModules["discord/components/common/index"]["toggleSelect"]; 852 - export const updateModal: MappedModules["discord/components/common/index"]["updateModal"]; 853 - export const useDndMode: MappedModules["discord/components/common/index"]["useDndMode"]; 854 - export const useDndStore: MappedModules["discord/components/common/index"]["useDndStore"]; 855 - export const useFocusBlock: MappedModules["discord/components/common/index"]["useFocusBlock"]; 856 - export const useFocusJumpSection: MappedModules["discord/components/common/index"]["useFocusJumpSection"]; 857 - export const useFocusJumpSectionManager: MappedModules["discord/components/common/index"]["useFocusJumpSectionManager"]; 858 - export const useFocusLock: MappedModules["discord/components/common/index"]["useFocusLock"]; 859 - export const useFormContext: MappedModules["discord/components/common/index"]["useFormContext"]; 860 - export const useModalContext: MappedModules["discord/components/common/index"]["useModalContext"]; 861 - export const usePrivateHeadingLevel: MappedModules["discord/components/common/index"]["usePrivateHeadingLevel"]; 862 - export const useRadioGroup: MappedModules["discord/components/common/index"]["useRadioGroup"]; 863 - export const useRadioItem: MappedModules["discord/components/common/index"]["useRadioItem"]; 864 - export const useRedesignIconContext: MappedModules["discord/components/common/index"]["useRedesignIconContext"]; 865 - export const useResizeObserverSubscription: MappedModules["discord/components/common/index"]["useResizeObserverSubscription"]; 866 - export const useSpacingValue: MappedModules["discord/components/common/index"]["useSpacingValue"]; 867 - export const useSpring: MappedModules["discord/components/common/index"]["useSpring"]; 868 - export const useSprings: MappedModules["discord/components/common/index"]["useSprings"]; 869 - export const useStatusFillColor: MappedModules["discord/components/common/index"]["useStatusFillColor"]; 870 export const useThemeContext: MappedModules["discord/components/common/index"]["useThemeContext"]; 871 - export const useToastStore: MappedModules["discord/components/common/index"]["useToastStore"]; 872 - export const useToken: MappedModules["discord/components/common/index"]["useToken"]; 873 - export const useTransition: MappedModules["discord/components/common/index"]["useTransition"]; 874 export const AccessibilityAnnouncer: MappedModules["discord/components/common/index"]["AccessibilityAnnouncer"]; 875 export const BackdropStyles: MappedModules["discord/components/common/index"]["BackdropStyles"]; 876 export const BadgeShapes: MappedModules["discord/components/common/index"]["BadgeShapes"]; 877 export const CardTypes: MappedModules["discord/components/common/index"]["CardTypes"]; 878 export const CircleIconButtonColors: MappedModules["discord/components/common/index"]["CircleIconButtonColors"]; 879 export const CircleIconButtonSizes: MappedModules["discord/components/common/index"]["CircleIconButtonSizes"]; 880 - export const CopyInputModes: MappedModules["discord/components/common/index"]["CopyInputModes"]; 881 - export const FocusRingManager: MappedModules["discord/components/common/index"]["FocusRingManager"]; 882 export const FormErrorBlockColors: MappedModules["discord/components/common/index"]["FormErrorBlockColors"]; 883 export const FormNoticeImagePositions: MappedModules["discord/components/common/index"]["FormNoticeImagePositions"]; 884 - export const FormNoticeTypes: MappedModules["discord/components/common/index"]["FormNoticeTypes"]; 885 export const FormTitleTags: MappedModules["discord/components/common/index"]["FormTitleTags"]; 886 export const HelpMessageTypes: MappedModules["discord/components/common/index"]["HelpMessageTypes"]; 887 export const ModalSize: MappedModules["discord/components/common/index"]["ModalSize"]; 888 export const ModalTransitionState: MappedModules["discord/components/common/index"]["ModalTransitionState"]; 889 export const PRETTY_KEYS: MappedModules["discord/components/common/index"]["PRETTY_KEYS"]; 890 export const SelectLooks: MappedModules["discord/components/common/index"]["SelectLooks"]; 891 - export const ShineSizes: MappedModules["discord/components/common/index"]["ShineSizes"]; 892 export const SpinnerTypes: MappedModules["discord/components/common/index"]["SpinnerTypes"]; 893 export const StatusTypes: MappedModules["discord/components/common/index"]["StatusTypes"]; 894 export const ToastPosition: MappedModules["discord/components/common/index"]["ToastPosition"]; ··· 1238 export const badgesContainer: MappedModules["discord/modules/messages/web/Message.css"]["badgesContainer"]; 1239 } 1240 1241 declare module "@moonlight-mod/wp/discord/modules/oauth2/index" { 1242 import { MappedModules } from "@moonlight-mod/mappings"; 1243 export const OAuth2AuthorizeModal: MappedModules["discord/modules/oauth2/index"]["OAuth2AuthorizeModal"]; ··· 1364 import { MappedModules } from "@moonlight-mod/mappings"; 1365 export const SUPPORTS_COPY: MappedModules["discord/utils/ClipboardUtils"]["SUPPORTS_COPY"]; 1366 export const copy: MappedModules["discord/utils/ClipboardUtils"]["copy"]; 1367 } 1368 1369 declare module "@moonlight-mod/wp/discord/utils/HTTPUtils" {
··· 55 export default _default; 56 } 57 58 + declare module "@moonlight-mod/wp/discord/common/AppStartPerformance" { 59 + import { MappedModules } from "@moonlight-mod/mappings"; 60 + const _default: MappedModules["discord/common/AppStartPerformance"]["default"]; 61 + export default _default; 62 + } 63 + 64 declare module "@moonlight-mod/wp/discord/components/common/Alerts" { 65 import { MappedModules } from "@moonlight-mod/mappings"; 66 const _default: MappedModules["discord/components/common/Alerts"]["default"]; ··· 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"]; ··· 184 export const Popout: MappedModules["discord/components/common/index"]["Popout"]; 185 export const Dialog: MappedModules["discord/components/common/index"]["Dialog"]; 186 export const Menu: MappedModules["discord/components/common/index"]["Menu"]; 187 export const TabBar: MappedModules["discord/components/common/index"]["TabBar"]; 188 export const SingleSelect: MappedModules["discord/components/common/index"]["SingleSelect"]; 189 export const Select: MappedModules["discord/components/common/index"]["Select"]; ··· 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"]; 202 export const closeModal: MappedModules["discord/components/common/index"]["closeModal"]; 203 export const AngleBracketsIcon: MappedModules["discord/components/common/index"]["AngleBracketsIcon"]; 204 export const ArrowAngleLeftUpIcon: MappedModules["discord/components/common/index"]["ArrowAngleLeftUpIcon"]; 205 export const ArrowAngleRightUpIcon: MappedModules["discord/components/common/index"]["ArrowAngleRightUpIcon"]; 206 export const ArrowsUpDownIcon: MappedModules["discord/components/common/index"]["ArrowsUpDownIcon"]; 207 export const BookCheckIcon: MappedModules["discord/components/common/index"]["BookCheckIcon"]; 208 export const ChannelListIcon: MappedModules["discord/components/common/index"]["ChannelListIcon"]; 209 export const ChevronSmallDownIcon: MappedModules["discord/components/common/index"]["ChevronSmallDownIcon"]; 210 export const ChevronSmallUpIcon: MappedModules["discord/components/common/index"]["ChevronSmallUpIcon"]; 211 export const CircleInformationIcon: MappedModules["discord/components/common/index"]["CircleInformationIcon"]; 212 export const CircleWarningIcon: MappedModules["discord/components/common/index"]["CircleWarningIcon"]; 213 export const CircleXIcon: MappedModules["discord/components/common/index"]["CircleXIcon"]; 214 export const ClydeIcon: MappedModules["discord/components/common/index"]["ClydeIcon"]; 215 export const CopyIcon: MappedModules["discord/components/common/index"]["CopyIcon"]; 216 export const DownloadIcon: MappedModules["discord/components/common/index"]["DownloadIcon"]; 217 export const FullscreenEnterIcon: MappedModules["discord/components/common/index"]["FullscreenEnterIcon"]; 218 export const GameControllerIcon: MappedModules["discord/components/common/index"]["GameControllerIcon"]; 219 export const GlobeEarthIcon: MappedModules["discord/components/common/index"]["GlobeEarthIcon"]; 220 export const HeartIcon: MappedModules["discord/components/common/index"]["HeartIcon"]; 221 export const LinkIcon: MappedModules["discord/components/common/index"]["LinkIcon"]; 222 export const MaximizeIcon: MappedModules["discord/components/common/index"]["MaximizeIcon"]; 223 export const MinusIcon: MappedModules["discord/components/common/index"]["MinusIcon"]; 224 export const MobilePhoneIcon: MappedModules["discord/components/common/index"]["MobilePhoneIcon"]; 225 export const PauseIcon: MappedModules["discord/components/common/index"]["PauseIcon"]; 226 export const PlayIcon: MappedModules["discord/components/common/index"]["PlayIcon"]; 227 export const PlusLargeIcon: MappedModules["discord/components/common/index"]["PlusLargeIcon"]; 228 export const RetryIcon: MappedModules["discord/components/common/index"]["RetryIcon"]; 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"]; 235 export const WindowTopOutlineIcon: MappedModules["discord/components/common/index"]["WindowTopOutlineIcon"]; 236 export const XLargeIcon: MappedModules["discord/components/common/index"]["XLargeIcon"]; 237 export const XSmallIcon: MappedModules["discord/components/common/index"]["XSmallIcon"]; 238 export const ConfirmModal: MappedModules["discord/components/common/index"]["ConfirmModal"]; 239 export const H: MappedModules["discord/components/common/index"]["H"]; 240 export const HelpMessage: MappedModules["discord/components/common/index"]["HelpMessage"]; 241 export const ModalCloseButton: MappedModules["discord/components/common/index"]["ModalCloseButton"]; 242 export const ModalContent: MappedModules["discord/components/common/index"]["ModalContent"]; 243 export const ModalFooter: MappedModules["discord/components/common/index"]["ModalFooter"]; 244 export const ModalHeader: MappedModules["discord/components/common/index"]["ModalHeader"]; 245 export const ModalRoot: MappedModules["discord/components/common/index"]["ModalRoot"]; 246 export const NumberInputStepper: MappedModules["discord/components/common/index"]["NumberInputStepper"]; 247 export const SearchableSelect: MappedModules["discord/components/common/index"]["SearchableSelect"]; 248 export const createToast: MappedModules["discord/components/common/index"]["createToast"]; 249 export const popToast: MappedModules["discord/components/common/index"]["popToast"]; 250 export const showToast: MappedModules["discord/components/common/index"]["showToast"]; 251 export const useThemeContext: MappedModules["discord/components/common/index"]["useThemeContext"]; 252 export const AccessibilityAnnouncer: MappedModules["discord/components/common/index"]["AccessibilityAnnouncer"]; 253 export const BackdropStyles: MappedModules["discord/components/common/index"]["BackdropStyles"]; 254 export const BadgeShapes: MappedModules["discord/components/common/index"]["BadgeShapes"]; 255 export const CardTypes: MappedModules["discord/components/common/index"]["CardTypes"]; 256 export const CircleIconButtonColors: MappedModules["discord/components/common/index"]["CircleIconButtonColors"]; 257 export const CircleIconButtonSizes: MappedModules["discord/components/common/index"]["CircleIconButtonSizes"]; 258 export const FormErrorBlockColors: MappedModules["discord/components/common/index"]["FormErrorBlockColors"]; 259 export const FormNoticeImagePositions: MappedModules["discord/components/common/index"]["FormNoticeImagePositions"]; 260 export const FormTitleTags: MappedModules["discord/components/common/index"]["FormTitleTags"]; 261 export const HelpMessageTypes: MappedModules["discord/components/common/index"]["HelpMessageTypes"]; 262 export const ModalSize: MappedModules["discord/components/common/index"]["ModalSize"]; 263 export const ModalTransitionState: MappedModules["discord/components/common/index"]["ModalTransitionState"]; 264 export const PRETTY_KEYS: MappedModules["discord/components/common/index"]["PRETTY_KEYS"]; 265 export const SelectLooks: MappedModules["discord/components/common/index"]["SelectLooks"]; 266 export const SpinnerTypes: MappedModules["discord/components/common/index"]["SpinnerTypes"]; 267 export const StatusTypes: MappedModules["discord/components/common/index"]["StatusTypes"]; 268 export const ToastPosition: MappedModules["discord/components/common/index"]["ToastPosition"]; ··· 612 export const badgesContainer: MappedModules["discord/modules/messages/web/Message.css"]["badgesContainer"]; 613 } 614 615 + declare module "@moonlight-mod/wp/discord/modules/modals/Modals" { 616 + import { MappedModules } from "@moonlight-mod/mappings"; 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"]; 628 + export const useHasAnyModalOpen: MappedModules["discord/modules/modals/Modals"]["useHasAnyModalOpen"]; 629 + export const useIsModalAtTop: MappedModules["discord/modules/modals/Modals"]["useIsModalAtTop"]; 630 + export const useModalsStore: MappedModules["discord/modules/modals/Modals"]["useModalsStore"]; 631 + } 632 + 633 declare module "@moonlight-mod/wp/discord/modules/oauth2/index" { 634 import { MappedModules } from "@moonlight-mod/mappings"; 635 export const OAuth2AuthorizeModal: MappedModules["discord/modules/oauth2/index"]["OAuth2AuthorizeModal"]; ··· 756 import { MappedModules } from "@moonlight-mod/mappings"; 757 export const SUPPORTS_COPY: MappedModules["discord/utils/ClipboardUtils"]["SUPPORTS_COPY"]; 758 export const copy: MappedModules["discord/utils/ClipboardUtils"]["copy"]; 759 + } 760 + 761 + declare module "@moonlight-mod/wp/discord/utils/ComponentDispatchUtils" { 762 + import { MappedModules } from "@moonlight-mod/mappings"; 763 + export const ComponentDispatcher: MappedModules["discord/utils/ComponentDispatchUtils"]["ComponentDispatcher"]; 764 + export const ComponentDispatch: MappedModules["discord/utils/ComponentDispatchUtils"]["ComponentDispatch"]; 765 } 766 767 declare module "@moonlight-mod/wp/discord/utils/HTTPUtils" {
+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.8", 9 - "@moonlight-mod/moonmap": "^1.0.3", 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 }
+2 -2
packages/web-preload/src/index.ts
··· 7 import Moonmap from "@moonlight-mod/moonmap"; 8 import loadMappings from "@moonlight-mod/mappings"; 9 import { createEventEmitter } from "@moonlight-mod/core/util/event"; 10 - import { EventPayloads, EventType } from "@moonlight-mod/types/core/event"; 11 12 async function load() { 13 delete window._moonlightWebLoad; ··· 20 pendingModules: new Set(), 21 enabledExtensions: new Set(), 22 23 - events: createEventEmitter<EventType, EventPayloads>(), 24 patchingInternals: { 25 onModuleLoad, 26 registerPatch,
··· 7 import Moonmap from "@moonlight-mod/moonmap"; 8 import loadMappings from "@moonlight-mod/mappings"; 9 import { createEventEmitter } from "@moonlight-mod/core/util/event"; 10 + import { WebEventPayloads, WebEventType } from "@moonlight-mod/types/core/event"; 11 12 async function load() { 13 delete window._moonlightWebLoad; ··· 20 pendingModules: new Set(), 21 enabledExtensions: new Set(), 22 23 + events: createEventEmitter<WebEventType, WebEventPayloads>(), 24 patchingInternals: { 25 onModuleLoad, 26 registerPatch,
+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 }
+1219 -729
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.0.2 46 - version: 1.0.2 47 '@zenfs/dom': 48 - specifier: ^0.2.16 49 - version: 0.2.16(@zenfs/core@1.0.2) 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.8 97 - version: 1.1.8(@moonlight-mod/lunast@1.0.0)(@moonlight-mod/moonmap@1.0.3) 98 '@moonlight-mod/moonmap': 99 - specifier: ^1.0.3 100 - version: 1.0.3 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.8 121 - version: 1.1.8(@moonlight-mod/lunast@1.0.0)(@moonlight-mod/moonmap@1.0.3) 122 '@moonlight-mod/moonmap': 123 - specifier: ^1.0.3 124 - version: 1.0.3 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': ··· 312 313 '@humanwhocodes/retry@0.3.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': ··· 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.8': 328 - resolution: {integrity: sha512-nwdIUzkrVAeLryY3BT4QCJHngggvRJBP3uA2smIwyDQbDw5nXMAEaq+9EJn9lpZaNaO0G7zY0uRWQgYlaFLvcg==} 329 peerDependencies: 330 - '@moonlight-mod/lunast': ^1.0.0 331 - '@moonlight-mod/moonmap': ^1.0.0 332 333 - '@moonlight-mod/moonmap@1.0.3': 334 - resolution: {integrity: sha512-G7pwvrcVDimc388IX6VZFzBXpbuyvqbJ+w9/v+MUIc8P7dADJXQ9YkBWvobtRc6eaBBl1FWUwTeU8oobbxLVag==} 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==} ··· 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==} ··· 376 '@types/node@18.17.17': 377 resolution: {integrity: sha512-cOxcXsQ2sxiwkykdJqvyFS+MLQPLvIdwh5l6gNg8qF6s+C7XSkEWOZjK+XhUZd+mYvHV/180g2cnCcIl4l06Pw==} 378 379 - '@types/node@20.16.10': 380 - resolution: {integrity: sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==} 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 - '@zenfs/core@1.0.2': 452 - resolution: {integrity: sha512-LMTD4ntn6Ag1y+IeOSVykDDvYC12dsGFtsX8M/54OQrLs7v+YnX4bpo0o2osbm8XFmU2MTNMX/G3PLsvzgWzrg==} 453 - engines: {node: '>= 16'} 454 hasBin: true 455 456 - '@zenfs/dom@0.2.16': 457 - resolution: {integrity: sha512-6Ev+ol9hZIgQECNZR+xxjQ/a99EhhrWeiQttm/+U7YJK3HdTjiKfU39DsfGeH64vSqhpa5Vj+LWRx75SHkjw0Q==} 458 engines: {node: '>= 18'} 459 peerDependencies: 460 - '@zenfs/core': ^1.0.0 461 462 abort-controller@3.0.0: 463 resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} ··· 468 peerDependencies: 469 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 470 471 - acorn@8.12.1: 472 - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 473 engines: {node: '>=0.4.0'} 474 hasBin: true 475 ··· 480 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 481 engines: {node: '>=8'} 482 483 argparse@2.0.1: 484 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 485 486 - array-buffer-byte-length@1.0.1: 487 - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 488 engines: {node: '>= 0.4'} 489 490 array-includes@3.1.8: ··· 495 resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 496 engines: {node: '>= 0.4'} 497 498 - array.prototype.flat@1.3.2: 499 - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 500 engines: {node: '>= 0.4'} 501 502 - array.prototype.flatmap@1.3.2: 503 - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 504 engines: {node: '>= 0.4'} 505 506 array.prototype.tosorted@1.1.4: 507 resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 508 engines: {node: '>= 0.4'} 509 510 - arraybuffer.prototype.slice@1.0.3: 511 - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 512 engines: {node: '>= 0.4'} 513 514 astring@1.9.0: 515 resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} 516 hasBin: true 517 518 available-typed-arrays@1.0.7: 519 resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 520 engines: {node: '>= 0.4'} ··· 538 buffer@6.0.3: 539 resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 540 541 - call-bind@1.0.7: 542 - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 543 engines: {node: '>= 0.4'} 544 545 callsites@3.1.0: ··· 560 concat-map@0.0.1: 561 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 562 563 - cross-spawn@7.0.3: 564 - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 565 engines: {node: '>= 8'} 566 567 - csstype@3.1.2: 568 - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 569 - 570 csstype@3.1.3: 571 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 572 573 - data-view-buffer@1.0.1: 574 - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 575 engines: {node: '>= 0.4'} 576 577 - data-view-byte-length@1.0.1: 578 - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 579 engines: {node: '>= 0.4'} 580 581 - data-view-byte-offset@1.0.0: 582 - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 583 engines: {node: '>= 0.4'} 584 585 - debug@4.3.4: 586 - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 587 engines: {node: '>=6.0'} 588 peerDependencies: 589 supports-color: '*' ··· 602 resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 603 engines: {node: '>= 0.4'} 604 605 doctrine@2.1.0: 606 resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 607 engines: {node: '>=0.10.0'} 608 609 - es-abstract@1.23.3: 610 - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} 611 engines: {node: '>= 0.4'} 612 613 - es-define-property@1.0.0: 614 - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 615 engines: {node: '>= 0.4'} 616 617 es-errors@1.3.0: 618 resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 619 engines: {node: '>= 0.4'} 620 621 - es-iterator-helpers@1.1.0: 622 - resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} 623 engines: {node: '>= 0.4'} 624 625 - es-object-atoms@1.0.0: 626 - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 627 engines: {node: '>= 0.4'} 628 629 - es-set-tostringtag@2.0.3: 630 - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 631 engines: {node: '>= 0.4'} 632 633 - es-shim-unscopables@1.0.2: 634 - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 635 636 - es-to-primitive@1.2.1: 637 - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 638 engines: {node: '>= 0.4'} 639 640 esbuild-copy-static-files@0.1.0: ··· 655 peerDependencies: 656 eslint: '>=7.0.0' 657 658 - eslint-plugin-prettier@5.2.1: 659 - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 660 engines: {node: ^14.18.0 || >=16.0.0} 661 peerDependencies: 662 '@types/eslint': '>=8.0.0' 663 eslint: '>=8.0.0' 664 - eslint-config-prettier: '*' 665 prettier: '>=3.0.0' 666 peerDependenciesMeta: 667 '@types/eslint': ··· 669 eslint-config-prettier: 670 optional: true 671 672 - eslint-plugin-react@7.37.1: 673 - resolution: {integrity: sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==} 674 engines: {node: '>=4'} 675 peerDependencies: 676 eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 677 678 - eslint-scope@8.1.0: 679 - resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} 680 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 681 682 eslint-visitor-keys@3.4.3: 683 resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 684 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 685 686 - eslint-visitor-keys@4.1.0: 687 - resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} 688 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 689 690 - eslint@9.12.0: 691 - resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} 692 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 693 hasBin: true 694 peerDependencies: ··· 697 jiti: 698 optional: true 699 700 - espree@10.2.0: 701 - resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} 702 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 703 704 - esquery@1.5.0: 705 - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 706 engines: {node: '>=0.10'} 707 708 esrecurse@4.3.0: ··· 750 fastq@1.17.1: 751 resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 752 753 file-entry-cache@8.0.0: 754 resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 755 engines: {node: '>=16.0.0'} ··· 758 resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 759 engines: {node: '>=8'} 760 761 find-up@5.0.0: 762 resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 763 engines: {node: '>=10'} ··· 769 flatted@3.2.9: 770 resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 771 772 - for-each@0.3.3: 773 - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 774 775 function-bind@1.1.2: 776 resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 777 778 - function.prototype.name@1.1.6: 779 - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 780 engines: {node: '>= 0.4'} 781 782 functions-have-names@1.2.3: 783 resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 784 785 - get-intrinsic@1.2.4: 786 - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 787 engines: {node: '>= 0.4'} 788 789 - get-symbol-description@1.0.2: 790 - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 791 engines: {node: '>= 0.4'} 792 793 glob-parent@5.1.2: ··· 806 resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 807 engines: {node: '>= 0.4'} 808 809 - gopd@1.0.1: 810 - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 811 812 graphemer@1.4.0: 813 resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 814 815 - has-bigints@1.0.2: 816 - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 817 818 has-flag@4.0.0: 819 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} ··· 822 has-property-descriptors@1.0.2: 823 resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 824 825 - has-proto@1.0.3: 826 - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 827 engines: {node: '>= 0.4'} 828 829 - has-symbols@1.0.3: 830 - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 831 engines: {node: '>= 0.4'} 832 833 has-tostringtag@1.0.2: ··· 846 ieee754@1.2.1: 847 resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 848 849 - ignore@5.3.0: 850 - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 851 - engines: {node: '>= 4'} 852 - 853 ignore@5.3.2: 854 resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 855 engines: {node: '>= 4'} ··· 862 resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 863 engines: {node: '>=0.8.19'} 864 865 - internal-slot@1.0.7: 866 - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 867 engines: {node: '>= 0.4'} 868 869 - is-array-buffer@3.0.4: 870 - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 871 engines: {node: '>= 0.4'} 872 873 - is-async-function@2.0.0: 874 - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 875 engines: {node: '>= 0.4'} 876 877 - is-bigint@1.0.4: 878 - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 879 880 - is-boolean-object@1.1.2: 881 - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 882 engines: {node: '>= 0.4'} 883 884 is-callable@1.2.7: 885 resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 886 engines: {node: '>= 0.4'} 887 888 - is-core-module@2.15.1: 889 - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 890 engines: {node: '>= 0.4'} 891 892 - is-data-view@1.0.1: 893 - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 894 engines: {node: '>= 0.4'} 895 896 - is-date-object@1.0.5: 897 - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 898 engines: {node: '>= 0.4'} 899 900 is-extglob@2.1.1: 901 resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 902 engines: {node: '>=0.10.0'} 903 904 - is-finalizationregistry@1.0.2: 905 - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} 906 907 - is-generator-function@1.0.10: 908 - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 909 engines: {node: '>= 0.4'} 910 911 is-glob@4.0.3: ··· 916 resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 917 engines: {node: '>= 0.4'} 918 919 - is-negative-zero@2.0.3: 920 - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 921 - engines: {node: '>= 0.4'} 922 - 923 - is-number-object@1.0.7: 924 - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 925 engines: {node: '>= 0.4'} 926 927 is-number@7.0.0: 928 resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 929 engines: {node: '>=0.12.0'} 930 931 - is-regex@1.1.4: 932 - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 933 engines: {node: '>= 0.4'} 934 935 is-set@2.0.3: 936 resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 937 engines: {node: '>= 0.4'} 938 939 - is-shared-array-buffer@1.0.3: 940 - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 941 engines: {node: '>= 0.4'} 942 943 - is-string@1.0.7: 944 - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 945 engines: {node: '>= 0.4'} 946 947 - is-symbol@1.0.4: 948 - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 949 engines: {node: '>= 0.4'} 950 951 - is-typed-array@1.1.13: 952 - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 953 engines: {node: '>= 0.4'} 954 955 is-weakmap@2.0.2: 956 resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 957 engines: {node: '>= 0.4'} 958 959 - is-weakref@1.0.2: 960 - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 961 962 - is-weakset@2.0.3: 963 - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} 964 engines: {node: '>= 0.4'} 965 966 isarray@2.0.5: ··· 969 isexe@2.0.0: 970 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 971 972 - iterator.prototype@1.1.3: 973 - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} 974 engines: {node: '>= 0.4'} 975 976 js-tokens@4.0.0: 977 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} ··· 1011 resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1012 hasBin: true 1013 1014 merge2@1.4.1: 1015 resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1016 engines: {node: '>= 8'} ··· 1026 resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1027 engines: {node: '>=8.6'} 1028 1029 minimatch@3.1.2: 1030 resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1031 ··· 1033 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1034 engines: {node: '>=16 || 14 >=14.17'} 1035 1036 - ms@2.1.2: 1037 - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1038 1039 nanotar@0.1.1: 1040 resolution: {integrity: sha512-AiJsGsSF3O0havL1BydvI4+wR76sKT+okKRwWIaK96cZUnXqH0uNBOsHlbwZq3+m2BR1VKqHDVudl3gO4mYjpQ==} 1041 1042 natural-compare@1.4.0: 1043 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1044 1045 object-assign@4.1.1: 1046 resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1047 engines: {node: '>=0.10.0'} 1048 1049 - object-inspect@1.13.2: 1050 - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 1051 engines: {node: '>= 0.4'} 1052 1053 object-keys@1.1.1: 1054 resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1055 engines: {node: '>= 0.4'} 1056 1057 - object.assign@4.1.5: 1058 - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1059 engines: {node: '>= 0.4'} 1060 1061 - object.entries@1.1.8: 1062 - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} 1063 engines: {node: '>= 0.4'} 1064 1065 object.fromentries@2.0.8: 1066 resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1067 engines: {node: '>= 0.4'} 1068 1069 - object.values@1.2.0: 1070 - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 1071 engines: {node: '>= 0.4'} 1072 1073 optionator@0.9.3: 1074 resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1075 engines: {node: '>= 0.8.0'} 1076 1077 p-limit@3.1.0: 1078 resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} ··· 1082 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1083 engines: {node: '>=10'} 1084 1085 parent-module@1.0.1: 1086 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1087 engines: {node: '>=6'} ··· 1097 path-parse@1.0.7: 1098 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1099 1100 picomatch@2.3.1: 1101 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1102 engines: {node: '>=8.6'} 1103 1104 - possible-typed-array-names@1.0.0: 1105 - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1106 engines: {node: '>= 0.4'} 1107 1108 prelude-ls@1.2.1: ··· 1129 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1130 engines: {node: '>=6'} 1131 1132 queue-microtask@1.2.3: 1133 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1134 ··· 1139 resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} 1140 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1141 1142 - reflect.getprototypeof@1.0.6: 1143 - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} 1144 engines: {node: '>= 0.4'} 1145 1146 - regexp.prototype.flags@1.5.3: 1147 - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} 1148 engines: {node: '>= 0.4'} 1149 1150 resolve-from@4.0.0: ··· 1155 resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1156 hasBin: true 1157 1158 reusify@1.0.4: 1159 resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1160 engines: {iojs: '>=1.0.0', node: '>=0.10.0'} ··· 1162 run-parallel@1.2.0: 1163 resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1164 1165 - safe-array-concat@1.1.2: 1166 - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1167 engines: {node: '>=0.4'} 1168 1169 - safe-buffer@5.1.2: 1170 - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1171 - 1172 safe-buffer@5.2.1: 1173 resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1174 1175 - safe-regex-test@1.0.3: 1176 - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1177 engines: {node: '>= 0.4'} 1178 1179 semver@6.3.1: 1180 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1181 hasBin: true 1182 1183 - semver@7.6.3: 1184 - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1185 engines: {node: '>=10'} 1186 hasBin: true 1187 ··· 1193 resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1194 engines: {node: '>= 0.4'} 1195 1196 shebang-command@2.0.0: 1197 resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1198 engines: {node: '>=8'} ··· 1201 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1202 engines: {node: '>=8'} 1203 1204 - side-channel@1.0.6: 1205 - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1206 engines: {node: '>= 0.4'} 1207 1208 standalone-electron-types@1.0.0: 1209 resolution: {integrity: sha512-0HOi/tlTz3mjWhsAz4uRbpQcHMZ+ifj1JzWW9nugykOHClBBG77ps8QinrzX1eow4Iw2pnC+RFaSYRgufF4BOg==} 1210 1211 - string.prototype.matchall@4.0.11: 1212 - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} 1213 engines: {node: '>= 0.4'} 1214 1215 string.prototype.repeat@1.0.0: 1216 resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1217 1218 - string.prototype.trim@1.2.9: 1219 - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 1220 engines: {node: '>= 0.4'} 1221 1222 - string.prototype.trimend@1.0.8: 1223 - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 1224 1225 string.prototype.trimstart@1.0.8: 1226 resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} ··· 1241 resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1242 engines: {node: '>= 0.4'} 1243 1244 - synckit@0.9.2: 1245 - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} 1246 engines: {node: ^14.18.0 || >=16.0.0} 1247 1248 - text-table@0.2.0: 1249 - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1250 1251 to-regex-range@5.0.1: 1252 resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1253 engines: {node: '>=8.0'} 1254 1255 - ts-api-utils@1.3.0: 1256 - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1257 - engines: {node: '>=16'} 1258 peerDependencies: 1259 - typescript: '>=4.2.0' 1260 1261 - tslib@2.7.0: 1262 - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} 1263 1264 type-check@0.4.0: 1265 resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1266 engines: {node: '>= 0.8.0'} 1267 1268 - typed-array-buffer@1.0.2: 1269 - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1270 engines: {node: '>= 0.4'} 1271 1272 - typed-array-byte-length@1.0.1: 1273 - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1274 engines: {node: '>= 0.4'} 1275 1276 - typed-array-byte-offset@1.0.2: 1277 - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1278 engines: {node: '>= 0.4'} 1279 1280 - typed-array-length@1.0.6: 1281 - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 1282 engines: {node: '>= 0.4'} 1283 1284 - typescript-eslint@8.8.1: 1285 - resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} 1286 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1287 peerDependencies: 1288 - typescript: '*' 1289 - peerDependenciesMeta: 1290 - typescript: 1291 - optional: true 1292 1293 - typescript@5.3.2: 1294 - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} 1295 engines: {node: '>=14.17'} 1296 hasBin: true 1297 1298 - unbox-primitive@1.0.2: 1299 - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1300 1301 - undici-types@6.19.8: 1302 - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1303 1304 uri-js@4.4.1: 1305 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1306 1307 - utilium@0.7.1: 1308 - resolution: {integrity: sha512-2ocvTkI7U8LERmwxL0LhFUvEfN66UqcjF6tMiURvUwSyU7U1QC9gST+3iSUSiGccFfnP3f2EXwHNXOnOzx+lAg==} 1309 1310 - which-boxed-primitive@1.0.2: 1311 - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1312 1313 - which-builtin-type@1.1.4: 1314 - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} 1315 engines: {node: '>= 0.4'} 1316 1317 which-collection@1.0.2: 1318 resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1319 engines: {node: '>= 0.4'} 1320 1321 - which-typed-array@1.1.15: 1322 - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1323 engines: {node: '>= 0.4'} 1324 1325 which@2.0.2: ··· 1327 engines: {node: '>= 8'} 1328 hasBin: true 1329 1330 yocto-queue@0.1.0: 1331 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1332 engines: {node: '>=10'} 1333 1334 snapshots: 1335 1336 '@aashutoshrathi/word-wrap@1.2.6': {} 1337 1338 '@esbuild/android-arm64@0.19.3': 1339 optional: true ··· 1401 '@esbuild/win32-x64@0.19.3': 1402 optional: true 1403 1404 - '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': 1405 dependencies: 1406 - eslint: 9.12.0 1407 eslint-visitor-keys: 3.4.3 1408 1409 - '@eslint-community/regexpp@4.11.1': {} 1410 1411 - '@eslint/config-array@0.18.0': 1412 dependencies: 1413 - '@eslint/object-schema': 2.1.4 1414 - debug: 4.3.4 1415 minimatch: 3.1.2 1416 transitivePeerDependencies: 1417 - supports-color 1418 1419 - '@eslint/core@0.6.0': {} 1420 1421 - '@eslint/eslintrc@3.1.0': 1422 dependencies: 1423 ajv: 6.12.6 1424 - debug: 4.3.4 1425 - espree: 10.2.0 1426 globals: 14.0.0 1427 - ignore: 5.3.0 1428 import-fresh: 3.3.0 1429 js-yaml: 4.1.0 1430 minimatch: 3.1.2 ··· 1432 transitivePeerDependencies: 1433 - supports-color 1434 1435 - '@eslint/js@9.12.0': {} 1436 1437 - '@eslint/object-schema@2.1.4': {} 1438 1439 - '@eslint/plugin-kit@0.2.0': 1440 dependencies: 1441 levn: 0.4.1 1442 1443 - '@humanfs/core@0.19.0': {} 1444 1445 - '@humanfs/node@0.16.5': 1446 dependencies: 1447 - '@humanfs/core': 0.19.0 1448 '@humanwhocodes/retry': 0.3.1 1449 1450 '@humanwhocodes/module-importer@1.0.1': {} 1451 1452 '@humanwhocodes/retry@0.3.1': {} 1453 1454 - '@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)': 1455 dependencies: 1456 - '@eslint/js': 9.12.0 1457 - eslint: 9.12.0 1458 - eslint-config-prettier: 9.1.0(eslint@9.12.0) 1459 - eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.12.0))(eslint@9.12.0)(prettier@3.1.0) 1460 - eslint-plugin-react: 7.37.1(eslint@9.12.0) 1461 - typescript: 5.3.2 1462 - typescript-eslint: 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1463 transitivePeerDependencies: 1464 - '@types/eslint' 1465 - prettier 1466 - supports-color 1467 1468 - '@moonlight-mod/lunast@1.0.0': 1469 dependencies: 1470 astring: 1.9.0 1471 estree-toolkit: 1.7.8 1472 meriyah: 6.0.1 1473 1474 - '@moonlight-mod/mappings@1.1.8(@moonlight-mod/lunast@1.0.0)(@moonlight-mod/moonmap@1.0.3)': 1475 dependencies: 1476 - '@moonlight-mod/lunast': 1.0.0 1477 - '@moonlight-mod/moonmap': 1.0.3 1478 '@types/chroma-js': 3.1.0 1479 '@types/flux': 3.1.14 1480 '@types/highlightjs': 9.12.6 1481 '@types/lodash': 4.17.14 1482 '@types/platform': 1.3.6 1483 - '@types/react': 18.3.10 1484 csstype: 3.1.3 1485 1486 - '@moonlight-mod/moonmap@1.0.3': {} 1487 1488 '@nodelib/fs.scandir@2.1.5': 1489 dependencies: ··· 1497 '@nodelib/fs.scandir': 2.1.5 1498 fastq: 1.17.1 1499 1500 - '@pkgr/core@0.1.1': {} 1501 1502 '@types/chroma-js@3.1.0': {} 1503 1504 '@types/estree-jsx@1.0.5': 1505 dependencies: 1506 '@types/estree': 1.0.6 1507 1508 '@types/estree@1.0.6': {} 1509 1510 '@types/fbemitter@2.0.35': {} 1511 1512 '@types/flux@3.1.14': 1513 dependencies: 1514 '@types/fbemitter': 2.0.35 1515 - '@types/react': 18.3.10 1516 1517 '@types/highlightjs@9.12.6': {} 1518 ··· 1522 1523 '@types/node@18.17.17': {} 1524 1525 - '@types/node@20.16.10': 1526 dependencies: 1527 - undici-types: 6.19.8 1528 1529 '@types/platform@1.3.6': {} 1530 1531 '@types/prop-types@15.7.13': {} 1532 1533 - '@types/react@18.3.10': 1534 dependencies: 1535 '@types/prop-types': 15.7.13 1536 csstype: 3.1.3 1537 1538 - '@types/readable-stream@4.0.15': 1539 dependencies: 1540 - '@types/node': 20.16.10 1541 - safe-buffer: 5.1.2 1542 - 1543 - '@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)': 1544 - dependencies: 1545 - '@eslint-community/regexpp': 4.11.1 1546 - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1547 - '@typescript-eslint/scope-manager': 8.8.1 1548 - '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1549 - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1550 - '@typescript-eslint/visitor-keys': 8.8.1 1551 - eslint: 9.12.0 1552 graphemer: 1.4.0 1553 ignore: 5.3.2 1554 natural-compare: 1.4.0 1555 - ts-api-utils: 1.3.0(typescript@5.3.2) 1556 - optionalDependencies: 1557 - typescript: 5.3.2 1558 transitivePeerDependencies: 1559 - supports-color 1560 1561 - '@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.3.2)': 1562 dependencies: 1563 - '@typescript-eslint/scope-manager': 8.8.1 1564 - '@typescript-eslint/types': 8.8.1 1565 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.3.2) 1566 - '@typescript-eslint/visitor-keys': 8.8.1 1567 - debug: 4.3.4 1568 - eslint: 9.12.0 1569 - optionalDependencies: 1570 - typescript: 5.3.2 1571 transitivePeerDependencies: 1572 - supports-color 1573 1574 - '@typescript-eslint/scope-manager@8.8.1': 1575 dependencies: 1576 - '@typescript-eslint/types': 8.8.1 1577 - '@typescript-eslint/visitor-keys': 8.8.1 1578 1579 - '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0)(typescript@5.3.2)': 1580 dependencies: 1581 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.3.2) 1582 - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 1583 - debug: 4.3.4 1584 - ts-api-utils: 1.3.0(typescript@5.3.2) 1585 - optionalDependencies: 1586 - typescript: 5.3.2 1587 transitivePeerDependencies: 1588 - - eslint 1589 - supports-color 1590 1591 - '@typescript-eslint/types@8.8.1': {} 1592 1593 - '@typescript-eslint/typescript-estree@8.8.1(typescript@5.3.2)': 1594 dependencies: 1595 - '@typescript-eslint/types': 8.8.1 1596 - '@typescript-eslint/visitor-keys': 8.8.1 1597 - debug: 4.3.4 1598 fast-glob: 3.3.2 1599 is-glob: 4.0.3 1600 minimatch: 9.0.5 1601 - semver: 7.6.3 1602 - ts-api-utils: 1.3.0(typescript@5.3.2) 1603 - optionalDependencies: 1604 - typescript: 5.3.2 1605 transitivePeerDependencies: 1606 - supports-color 1607 1608 - '@typescript-eslint/utils@8.8.1(eslint@9.12.0)(typescript@5.3.2)': 1609 dependencies: 1610 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) 1611 - '@typescript-eslint/scope-manager': 8.8.1 1612 - '@typescript-eslint/types': 8.8.1 1613 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.3.2) 1614 - eslint: 9.12.0 1615 transitivePeerDependencies: 1616 - supports-color 1617 - - typescript 1618 1619 - '@typescript-eslint/visitor-keys@8.8.1': 1620 dependencies: 1621 - '@typescript-eslint/types': 8.8.1 1622 - eslint-visitor-keys: 3.4.3 1623 1624 - '@zenfs/core@1.0.2': 1625 dependencies: 1626 - '@types/node': 20.16.10 1627 - '@types/readable-stream': 4.0.15 1628 buffer: 6.0.3 1629 eventemitter3: 5.0.1 1630 - minimatch: 9.0.5 1631 readable-stream: 4.5.2 1632 - utilium: 0.7.1 1633 1634 - '@zenfs/dom@0.2.16(@zenfs/core@1.0.2)': 1635 dependencies: 1636 - '@zenfs/core': 1.0.2 1637 1638 abort-controller@3.0.0: 1639 dependencies: 1640 event-target-shim: 5.0.1 1641 1642 - acorn-jsx@5.3.2(acorn@8.12.1): 1643 dependencies: 1644 - acorn: 8.12.1 1645 1646 - acorn@8.12.1: {} 1647 1648 ajv@6.12.6: 1649 dependencies: ··· 1656 dependencies: 1657 color-convert: 2.0.1 1658 1659 argparse@2.0.1: {} 1660 1661 - array-buffer-byte-length@1.0.1: 1662 dependencies: 1663 - call-bind: 1.0.7 1664 - is-array-buffer: 3.0.4 1665 1666 array-includes@3.1.8: 1667 dependencies: 1668 - call-bind: 1.0.7 1669 define-properties: 1.2.1 1670 - es-abstract: 1.23.3 1671 - es-object-atoms: 1.0.0 1672 - get-intrinsic: 1.2.4 1673 - is-string: 1.0.7 1674 1675 array.prototype.findlast@1.2.5: 1676 dependencies: 1677 - call-bind: 1.0.7 1678 define-properties: 1.2.1 1679 - es-abstract: 1.23.3 1680 es-errors: 1.3.0 1681 - es-object-atoms: 1.0.0 1682 - es-shim-unscopables: 1.0.2 1683 1684 - array.prototype.flat@1.3.2: 1685 dependencies: 1686 - call-bind: 1.0.7 1687 define-properties: 1.2.1 1688 - es-abstract: 1.23.3 1689 - es-shim-unscopables: 1.0.2 1690 1691 - array.prototype.flatmap@1.3.2: 1692 dependencies: 1693 - call-bind: 1.0.7 1694 define-properties: 1.2.1 1695 - es-abstract: 1.23.3 1696 - es-shim-unscopables: 1.0.2 1697 1698 array.prototype.tosorted@1.1.4: 1699 dependencies: 1700 - call-bind: 1.0.7 1701 define-properties: 1.2.1 1702 - es-abstract: 1.23.3 1703 es-errors: 1.3.0 1704 - es-shim-unscopables: 1.0.2 1705 1706 - arraybuffer.prototype.slice@1.0.3: 1707 dependencies: 1708 - array-buffer-byte-length: 1.0.1 1709 - call-bind: 1.0.7 1710 define-properties: 1.2.1 1711 - es-abstract: 1.23.3 1712 es-errors: 1.3.0 1713 - get-intrinsic: 1.2.4 1714 - is-array-buffer: 3.0.4 1715 - is-shared-array-buffer: 1.0.3 1716 1717 astring@1.9.0: {} 1718 1719 available-typed-arrays@1.0.7: 1720 dependencies: 1721 - possible-typed-array-names: 1.0.0 1722 1723 balanced-match@1.0.2: {} 1724 ··· 1742 base64-js: 1.5.1 1743 ieee754: 1.2.1 1744 1745 - call-bind@1.0.7: 1746 dependencies: 1747 - es-define-property: 1.0.0 1748 es-errors: 1.3.0 1749 function-bind: 1.1.2 1750 - get-intrinsic: 1.2.4 1751 set-function-length: 1.2.2 1752 1753 callsites@3.1.0: {} 1754 1755 chalk@4.1.2: ··· 1765 1766 concat-map@0.0.1: {} 1767 1768 - cross-spawn@7.0.3: 1769 dependencies: 1770 path-key: 3.1.1 1771 shebang-command: 2.0.0 1772 which: 2.0.2 1773 1774 - csstype@3.1.2: {} 1775 - 1776 csstype@3.1.3: {} 1777 1778 - data-view-buffer@1.0.1: 1779 dependencies: 1780 - call-bind: 1.0.7 1781 es-errors: 1.3.0 1782 - is-data-view: 1.0.1 1783 1784 - data-view-byte-length@1.0.1: 1785 dependencies: 1786 - call-bind: 1.0.7 1787 es-errors: 1.3.0 1788 - is-data-view: 1.0.1 1789 1790 - data-view-byte-offset@1.0.0: 1791 dependencies: 1792 - call-bind: 1.0.7 1793 es-errors: 1.3.0 1794 - is-data-view: 1.0.1 1795 1796 - debug@4.3.4: 1797 dependencies: 1798 - ms: 2.1.2 1799 1800 deep-is@0.1.4: {} 1801 1802 define-data-property@1.1.4: 1803 dependencies: 1804 - es-define-property: 1.0.0 1805 es-errors: 1.3.0 1806 - gopd: 1.0.1 1807 1808 define-properties@1.2.1: 1809 dependencies: ··· 1811 has-property-descriptors: 1.0.2 1812 object-keys: 1.1.1 1813 1814 doctrine@2.1.0: 1815 dependencies: 1816 esutils: 2.0.3 1817 1818 - es-abstract@1.23.3: 1819 dependencies: 1820 - array-buffer-byte-length: 1.0.1 1821 - arraybuffer.prototype.slice: 1.0.3 1822 available-typed-arrays: 1.0.7 1823 - call-bind: 1.0.7 1824 - data-view-buffer: 1.0.1 1825 - data-view-byte-length: 1.0.1 1826 - data-view-byte-offset: 1.0.0 1827 - es-define-property: 1.0.0 1828 es-errors: 1.3.0 1829 - es-object-atoms: 1.0.0 1830 - es-set-tostringtag: 2.0.3 1831 - es-to-primitive: 1.2.1 1832 - function.prototype.name: 1.1.6 1833 - get-intrinsic: 1.2.4 1834 - get-symbol-description: 1.0.2 1835 globalthis: 1.0.4 1836 - gopd: 1.0.1 1837 has-property-descriptors: 1.0.2 1838 - has-proto: 1.0.3 1839 - has-symbols: 1.0.3 1840 hasown: 2.0.2 1841 - internal-slot: 1.0.7 1842 - is-array-buffer: 3.0.4 1843 is-callable: 1.2.7 1844 - is-data-view: 1.0.1 1845 - is-negative-zero: 2.0.3 1846 - is-regex: 1.1.4 1847 - is-shared-array-buffer: 1.0.3 1848 - is-string: 1.0.7 1849 - is-typed-array: 1.1.13 1850 - is-weakref: 1.0.2 1851 - object-inspect: 1.13.2 1852 object-keys: 1.1.1 1853 - object.assign: 4.1.5 1854 - regexp.prototype.flags: 1.5.3 1855 - safe-array-concat: 1.1.2 1856 - safe-regex-test: 1.0.3 1857 - string.prototype.trim: 1.2.9 1858 - string.prototype.trimend: 1.0.8 1859 string.prototype.trimstart: 1.0.8 1860 - typed-array-buffer: 1.0.2 1861 - typed-array-byte-length: 1.0.1 1862 - typed-array-byte-offset: 1.0.2 1863 - typed-array-length: 1.0.6 1864 - unbox-primitive: 1.0.2 1865 - which-typed-array: 1.1.15 1866 1867 - es-define-property@1.0.0: 1868 - dependencies: 1869 - get-intrinsic: 1.2.4 1870 1871 es-errors@1.3.0: {} 1872 1873 - es-iterator-helpers@1.1.0: 1874 dependencies: 1875 - call-bind: 1.0.7 1876 define-properties: 1.2.1 1877 - es-abstract: 1.23.3 1878 es-errors: 1.3.0 1879 - es-set-tostringtag: 2.0.3 1880 function-bind: 1.1.2 1881 - get-intrinsic: 1.2.4 1882 globalthis: 1.0.4 1883 has-property-descriptors: 1.0.2 1884 - has-proto: 1.0.3 1885 - has-symbols: 1.0.3 1886 - internal-slot: 1.0.7 1887 - iterator.prototype: 1.1.3 1888 - safe-array-concat: 1.1.2 1889 1890 - es-object-atoms@1.0.0: 1891 dependencies: 1892 es-errors: 1.3.0 1893 1894 - es-set-tostringtag@2.0.3: 1895 dependencies: 1896 - get-intrinsic: 1.2.4 1897 has-tostringtag: 1.0.2 1898 hasown: 2.0.2 1899 1900 - es-shim-unscopables@1.0.2: 1901 dependencies: 1902 hasown: 2.0.2 1903 1904 - es-to-primitive@1.2.1: 1905 dependencies: 1906 is-callable: 1.2.7 1907 - is-date-object: 1.0.5 1908 - is-symbol: 1.0.4 1909 1910 esbuild-copy-static-files@0.1.0: {} 1911 ··· 1936 1937 escape-string-regexp@4.0.0: {} 1938 1939 - eslint-config-prettier@9.1.0(eslint@9.12.0): 1940 dependencies: 1941 - eslint: 9.12.0 1942 1943 - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.12.0))(eslint@9.12.0)(prettier@3.1.0): 1944 dependencies: 1945 - eslint: 9.12.0 1946 prettier: 3.1.0 1947 prettier-linter-helpers: 1.0.0 1948 - synckit: 0.9.2 1949 optionalDependencies: 1950 - eslint-config-prettier: 9.1.0(eslint@9.12.0) 1951 1952 - eslint-plugin-react@7.37.1(eslint@9.12.0): 1953 dependencies: 1954 array-includes: 3.1.8 1955 array.prototype.findlast: 1.2.5 1956 - array.prototype.flatmap: 1.3.2 1957 array.prototype.tosorted: 1.1.4 1958 doctrine: 2.1.0 1959 - es-iterator-helpers: 1.1.0 1960 - eslint: 9.12.0 1961 estraverse: 5.3.0 1962 hasown: 2.0.2 1963 jsx-ast-utils: 3.3.5 1964 minimatch: 3.1.2 1965 - object.entries: 1.1.8 1966 object.fromentries: 2.0.8 1967 - object.values: 1.2.0 1968 prop-types: 15.8.1 1969 resolve: 2.0.0-next.5 1970 semver: 6.3.1 1971 - string.prototype.matchall: 4.0.11 1972 string.prototype.repeat: 1.0.0 1973 1974 - eslint-scope@8.1.0: 1975 dependencies: 1976 esrecurse: 4.3.0 1977 estraverse: 5.3.0 1978 1979 eslint-visitor-keys@3.4.3: {} 1980 1981 - eslint-visitor-keys@4.1.0: {} 1982 1983 - eslint@9.12.0: 1984 dependencies: 1985 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) 1986 - '@eslint-community/regexpp': 4.11.1 1987 - '@eslint/config-array': 0.18.0 1988 - '@eslint/core': 0.6.0 1989 - '@eslint/eslintrc': 3.1.0 1990 - '@eslint/js': 9.12.0 1991 - '@eslint/plugin-kit': 0.2.0 1992 - '@humanfs/node': 0.16.5 1993 '@humanwhocodes/module-importer': 1.0.1 1994 - '@humanwhocodes/retry': 0.3.1 1995 '@types/estree': 1.0.6 1996 '@types/json-schema': 7.0.15 1997 ajv: 6.12.6 1998 chalk: 4.1.2 1999 - cross-spawn: 7.0.3 2000 - debug: 4.3.4 2001 escape-string-regexp: 4.0.0 2002 - eslint-scope: 8.1.0 2003 - eslint-visitor-keys: 4.1.0 2004 - espree: 10.2.0 2005 - esquery: 1.5.0 2006 esutils: 2.0.3 2007 fast-deep-equal: 3.1.3 2008 file-entry-cache: 8.0.0 2009 find-up: 5.0.0 2010 glob-parent: 6.0.2 2011 - ignore: 5.3.0 2012 imurmurhash: 0.1.4 2013 is-glob: 4.0.3 2014 json-stable-stringify-without-jsonify: 1.0.1 ··· 2016 minimatch: 3.1.2 2017 natural-compare: 1.4.0 2018 optionator: 0.9.3 2019 - text-table: 0.2.0 2020 transitivePeerDependencies: 2021 - supports-color 2022 2023 - espree@10.2.0: 2024 dependencies: 2025 - acorn: 8.12.1 2026 - acorn-jsx: 5.3.2(acorn@8.12.1) 2027 - eslint-visitor-keys: 4.1.0 2028 2029 - esquery@1.5.0: 2030 dependencies: 2031 estraverse: 5.3.0 2032 ··· 2069 dependencies: 2070 reusify: 1.0.4 2071 2072 file-entry-cache@8.0.0: 2073 dependencies: 2074 flat-cache: 4.0.1 ··· 2076 fill-range@7.1.1: 2077 dependencies: 2078 to-regex-range: 5.0.1 2079 2080 find-up@5.0.0: 2081 dependencies: ··· 2089 2090 flatted@3.2.9: {} 2091 2092 - for-each@0.3.3: 2093 dependencies: 2094 is-callable: 1.2.7 2095 2096 function-bind@1.1.2: {} 2097 2098 - function.prototype.name@1.1.6: 2099 dependencies: 2100 - call-bind: 1.0.7 2101 define-properties: 1.2.1 2102 - es-abstract: 1.23.3 2103 functions-have-names: 1.2.3 2104 2105 functions-have-names@1.2.3: {} 2106 2107 - get-intrinsic@1.2.4: 2108 dependencies: 2109 es-errors: 1.3.0 2110 function-bind: 1.1.2 2111 - has-proto: 1.0.3 2112 - has-symbols: 1.0.3 2113 hasown: 2.0.2 2114 2115 - get-symbol-description@1.0.2: 2116 dependencies: 2117 - call-bind: 1.0.7 2118 es-errors: 1.3.0 2119 - get-intrinsic: 1.2.4 2120 2121 glob-parent@5.1.2: 2122 dependencies: ··· 2131 globalthis@1.0.4: 2132 dependencies: 2133 define-properties: 1.2.1 2134 - gopd: 1.0.1 2135 2136 - gopd@1.0.1: 2137 - dependencies: 2138 - get-intrinsic: 1.2.4 2139 2140 graphemer@1.4.0: {} 2141 2142 - has-bigints@1.0.2: {} 2143 2144 has-flag@4.0.0: {} 2145 2146 has-property-descriptors@1.0.2: 2147 dependencies: 2148 - es-define-property: 1.0.0 2149 2150 - has-proto@1.0.3: {} 2151 2152 - has-symbols@1.0.3: {} 2153 2154 has-tostringtag@1.0.2: 2155 dependencies: 2156 - has-symbols: 1.0.3 2157 2158 hasown@2.0.2: 2159 dependencies: ··· 2163 2164 ieee754@1.2.1: {} 2165 2166 - ignore@5.3.0: {} 2167 - 2168 ignore@5.3.2: {} 2169 2170 import-fresh@3.3.0: ··· 2174 2175 imurmurhash@0.1.4: {} 2176 2177 - internal-slot@1.0.7: 2178 dependencies: 2179 es-errors: 1.3.0 2180 hasown: 2.0.2 2181 - side-channel: 1.0.6 2182 2183 - is-array-buffer@3.0.4: 2184 dependencies: 2185 - call-bind: 1.0.7 2186 - get-intrinsic: 1.2.4 2187 2188 - is-async-function@2.0.0: 2189 dependencies: 2190 has-tostringtag: 1.0.2 2191 2192 - is-bigint@1.0.4: 2193 dependencies: 2194 - has-bigints: 1.0.2 2195 2196 - is-boolean-object@1.1.2: 2197 dependencies: 2198 - call-bind: 1.0.7 2199 has-tostringtag: 1.0.2 2200 2201 is-callable@1.2.7: {} 2202 2203 - is-core-module@2.15.1: 2204 dependencies: 2205 hasown: 2.0.2 2206 2207 - is-data-view@1.0.1: 2208 dependencies: 2209 - is-typed-array: 1.1.13 2210 2211 - is-date-object@1.0.5: 2212 dependencies: 2213 has-tostringtag: 1.0.2 2214 2215 is-extglob@2.1.1: {} 2216 2217 - is-finalizationregistry@1.0.2: 2218 dependencies: 2219 - call-bind: 1.0.7 2220 2221 - is-generator-function@1.0.10: 2222 dependencies: 2223 has-tostringtag: 1.0.2 2224 2225 is-glob@4.0.3: 2226 dependencies: ··· 2228 2229 is-map@2.0.3: {} 2230 2231 - is-negative-zero@2.0.3: {} 2232 - 2233 - is-number-object@1.0.7: 2234 dependencies: 2235 has-tostringtag: 1.0.2 2236 2237 is-number@7.0.0: {} 2238 2239 - is-regex@1.1.4: 2240 dependencies: 2241 - call-bind: 1.0.7 2242 has-tostringtag: 1.0.2 2243 2244 is-set@2.0.3: {} 2245 2246 - is-shared-array-buffer@1.0.3: 2247 dependencies: 2248 - call-bind: 1.0.7 2249 2250 - is-string@1.0.7: 2251 dependencies: 2252 has-tostringtag: 1.0.2 2253 2254 - is-symbol@1.0.4: 2255 dependencies: 2256 - has-symbols: 1.0.3 2257 2258 - is-typed-array@1.1.13: 2259 dependencies: 2260 - which-typed-array: 1.1.15 2261 2262 is-weakmap@2.0.2: {} 2263 2264 - is-weakref@1.0.2: 2265 dependencies: 2266 - call-bind: 1.0.7 2267 2268 - is-weakset@2.0.3: 2269 dependencies: 2270 - call-bind: 1.0.7 2271 - get-intrinsic: 1.2.4 2272 2273 isarray@2.0.5: {} 2274 2275 isexe@2.0.0: {} 2276 2277 - iterator.prototype@1.1.3: 2278 dependencies: 2279 - define-properties: 1.2.1 2280 - get-intrinsic: 1.2.4 2281 - has-symbols: 1.0.3 2282 - reflect.getprototypeof: 1.0.6 2283 set-function-name: 2.0.2 2284 2285 js-tokens@4.0.0: {} 2286 ··· 2297 jsx-ast-utils@3.3.5: 2298 dependencies: 2299 array-includes: 3.1.8 2300 - array.prototype.flat: 1.3.2 2301 - object.assign: 4.1.5 2302 - object.values: 1.2.0 2303 2304 keyv@4.5.4: 2305 dependencies: ··· 2320 dependencies: 2321 js-tokens: 4.0.0 2322 2323 merge2@1.4.1: {} 2324 2325 meriyah@6.0.1: {} ··· 2330 dependencies: 2331 braces: 3.0.3 2332 picomatch: 2.3.1 2333 2334 minimatch@3.1.2: 2335 dependencies: ··· 2339 dependencies: 2340 brace-expansion: 2.0.1 2341 2342 - ms@2.1.2: {} 2343 2344 nanotar@0.1.1: {} 2345 2346 natural-compare@1.4.0: {} 2347 2348 object-assign@4.1.1: {} 2349 2350 - object-inspect@1.13.2: {} 2351 2352 object-keys@1.1.1: {} 2353 2354 - object.assign@4.1.5: 2355 dependencies: 2356 - call-bind: 1.0.7 2357 define-properties: 1.2.1 2358 - has-symbols: 1.0.3 2359 object-keys: 1.1.1 2360 2361 - object.entries@1.1.8: 2362 dependencies: 2363 - call-bind: 1.0.7 2364 define-properties: 1.2.1 2365 - es-object-atoms: 1.0.0 2366 2367 object.fromentries@2.0.8: 2368 dependencies: 2369 - call-bind: 1.0.7 2370 define-properties: 1.2.1 2371 - es-abstract: 1.23.3 2372 - es-object-atoms: 1.0.0 2373 2374 - object.values@1.2.0: 2375 dependencies: 2376 - call-bind: 1.0.7 2377 define-properties: 1.2.1 2378 - es-object-atoms: 1.0.0 2379 2380 optionator@0.9.3: 2381 dependencies: ··· 2386 prelude-ls: 1.2.1 2387 type-check: 0.4.0 2388 2389 p-limit@3.1.0: 2390 dependencies: 2391 yocto-queue: 0.1.0 ··· 2394 dependencies: 2395 p-limit: 3.1.0 2396 2397 parent-module@1.0.1: 2398 dependencies: 2399 callsites: 3.1.0 ··· 2404 2405 path-parse@1.0.7: {} 2406 2407 picomatch@2.3.1: {} 2408 2409 - possible-typed-array-names@1.0.0: {} 2410 2411 prelude-ls@1.2.1: {} 2412 ··· 2426 2427 punycode@2.3.1: {} 2428 2429 queue-microtask@1.2.3: {} 2430 2431 react-is@16.13.1: {} ··· 2438 process: 0.11.10 2439 string_decoder: 1.3.0 2440 2441 - reflect.getprototypeof@1.0.6: 2442 dependencies: 2443 - call-bind: 1.0.7 2444 define-properties: 1.2.1 2445 - es-abstract: 1.23.3 2446 es-errors: 1.3.0 2447 - get-intrinsic: 1.2.4 2448 - globalthis: 1.0.4 2449 - which-builtin-type: 1.1.4 2450 2451 - regexp.prototype.flags@1.5.3: 2452 dependencies: 2453 - call-bind: 1.0.7 2454 define-properties: 1.2.1 2455 es-errors: 1.3.0 2456 set-function-name: 2.0.2 2457 2458 resolve-from@4.0.0: {} 2459 2460 resolve@2.0.0-next.5: 2461 dependencies: 2462 - is-core-module: 2.15.1 2463 path-parse: 1.0.7 2464 supports-preserve-symlinks-flag: 1.0.0 2465 2466 reusify@1.0.4: {} 2467 2468 run-parallel@1.2.0: 2469 dependencies: 2470 queue-microtask: 1.2.3 2471 2472 - safe-array-concat@1.1.2: 2473 dependencies: 2474 - call-bind: 1.0.7 2475 - get-intrinsic: 1.2.4 2476 - has-symbols: 1.0.3 2477 isarray: 2.0.5 2478 2479 - safe-buffer@5.1.2: {} 2480 - 2481 safe-buffer@5.2.1: {} 2482 2483 - safe-regex-test@1.0.3: 2484 dependencies: 2485 - call-bind: 1.0.7 2486 es-errors: 1.3.0 2487 - is-regex: 1.1.4 2488 2489 semver@6.3.1: {} 2490 2491 - semver@7.6.3: {} 2492 2493 set-function-length@1.2.2: 2494 dependencies: 2495 define-data-property: 1.1.4 2496 es-errors: 1.3.0 2497 function-bind: 1.1.2 2498 - get-intrinsic: 1.2.4 2499 - gopd: 1.0.1 2500 has-property-descriptors: 1.0.2 2501 2502 set-function-name@2.0.2: ··· 2506 functions-have-names: 1.2.3 2507 has-property-descriptors: 1.0.2 2508 2509 shebang-command@2.0.0: 2510 dependencies: 2511 shebang-regex: 3.0.0 2512 2513 shebang-regex@3.0.0: {} 2514 2515 - side-channel@1.0.6: 2516 dependencies: 2517 - call-bind: 1.0.7 2518 es-errors: 1.3.0 2519 - get-intrinsic: 1.2.4 2520 - object-inspect: 1.13.2 2521 2522 standalone-electron-types@1.0.0: 2523 dependencies: 2524 '@types/node': 18.17.17 2525 2526 - string.prototype.matchall@4.0.11: 2527 dependencies: 2528 - call-bind: 1.0.7 2529 define-properties: 1.2.1 2530 - es-abstract: 1.23.3 2531 es-errors: 1.3.0 2532 - es-object-atoms: 1.0.0 2533 - get-intrinsic: 1.2.4 2534 - gopd: 1.0.1 2535 - has-symbols: 1.0.3 2536 - internal-slot: 1.0.7 2537 - regexp.prototype.flags: 1.5.3 2538 set-function-name: 2.0.2 2539 - side-channel: 1.0.6 2540 2541 string.prototype.repeat@1.0.0: 2542 dependencies: 2543 define-properties: 1.2.1 2544 - es-abstract: 1.23.3 2545 2546 - string.prototype.trim@1.2.9: 2547 dependencies: 2548 - call-bind: 1.0.7 2549 define-properties: 1.2.1 2550 - es-abstract: 1.23.3 2551 - es-object-atoms: 1.0.0 2552 2553 - string.prototype.trimend@1.0.8: 2554 dependencies: 2555 - call-bind: 1.0.7 2556 define-properties: 1.2.1 2557 - es-object-atoms: 1.0.0 2558 2559 string.prototype.trimstart@1.0.8: 2560 dependencies: 2561 - call-bind: 1.0.7 2562 define-properties: 1.2.1 2563 - es-object-atoms: 1.0.0 2564 2565 string_decoder@1.3.0: 2566 dependencies: ··· 2574 2575 supports-preserve-symlinks-flag@1.0.0: {} 2576 2577 - synckit@0.9.2: 2578 dependencies: 2579 - '@pkgr/core': 0.1.1 2580 - tslib: 2.7.0 2581 2582 - text-table@0.2.0: {} 2583 2584 to-regex-range@5.0.1: 2585 dependencies: 2586 is-number: 7.0.0 2587 2588 - ts-api-utils@1.3.0(typescript@5.3.2): 2589 dependencies: 2590 - typescript: 5.3.2 2591 2592 - tslib@2.7.0: {} 2593 2594 type-check@0.4.0: 2595 dependencies: 2596 prelude-ls: 1.2.1 2597 2598 - typed-array-buffer@1.0.2: 2599 dependencies: 2600 - call-bind: 1.0.7 2601 es-errors: 1.3.0 2602 - is-typed-array: 1.1.13 2603 2604 - typed-array-byte-length@1.0.1: 2605 dependencies: 2606 - call-bind: 1.0.7 2607 - for-each: 0.3.3 2608 - gopd: 1.0.1 2609 - has-proto: 1.0.3 2610 - is-typed-array: 1.1.13 2611 2612 - typed-array-byte-offset@1.0.2: 2613 dependencies: 2614 available-typed-arrays: 1.0.7 2615 - call-bind: 1.0.7 2616 - for-each: 0.3.3 2617 - gopd: 1.0.1 2618 - has-proto: 1.0.3 2619 - is-typed-array: 1.1.13 2620 2621 - typed-array-length@1.0.6: 2622 dependencies: 2623 - call-bind: 1.0.7 2624 - for-each: 0.3.3 2625 - gopd: 1.0.1 2626 - has-proto: 1.0.3 2627 - is-typed-array: 1.1.13 2628 - possible-typed-array-names: 1.0.0 2629 2630 - typescript-eslint@8.8.1(eslint@9.12.0)(typescript@5.3.2): 2631 dependencies: 2632 - '@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) 2633 - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 2634 - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.3.2) 2635 - optionalDependencies: 2636 - typescript: 5.3.2 2637 transitivePeerDependencies: 2638 - - eslint 2639 - supports-color 2640 2641 - typescript@5.3.2: {} 2642 2643 - unbox-primitive@1.0.2: 2644 dependencies: 2645 - call-bind: 1.0.7 2646 - has-bigints: 1.0.2 2647 - has-symbols: 1.0.3 2648 - which-boxed-primitive: 1.0.2 2649 2650 - undici-types@6.19.8: {} 2651 2652 uri-js@4.4.1: 2653 dependencies: 2654 punycode: 2.3.1 2655 2656 - utilium@0.7.1: 2657 dependencies: 2658 eventemitter3: 5.0.1 2659 2660 - which-boxed-primitive@1.0.2: 2661 dependencies: 2662 - is-bigint: 1.0.4 2663 - is-boolean-object: 1.1.2 2664 - is-number-object: 1.0.7 2665 - is-string: 1.0.7 2666 - is-symbol: 1.0.4 2667 2668 - which-builtin-type@1.1.4: 2669 dependencies: 2670 - function.prototype.name: 1.1.6 2671 has-tostringtag: 1.0.2 2672 - is-async-function: 2.0.0 2673 - is-date-object: 1.0.5 2674 - is-finalizationregistry: 1.0.2 2675 - is-generator-function: 1.0.10 2676 - is-regex: 1.1.4 2677 - is-weakref: 1.0.2 2678 isarray: 2.0.5 2679 - which-boxed-primitive: 1.0.2 2680 which-collection: 1.0.2 2681 - which-typed-array: 1.1.15 2682 2683 which-collection@1.0.2: 2684 dependencies: 2685 is-map: 2.0.3 2686 is-set: 2.0.3 2687 is-weakmap: 2.0.2 2688 - is-weakset: 2.0.3 2689 2690 - which-typed-array@1.1.15: 2691 dependencies: 2692 available-typed-arrays: 1.0.7 2693 - call-bind: 1.0.7 2694 - for-each: 0.3.3 2695 - gopd: 1.0.1 2696 has-tostringtag: 1.0.2 2697 2698 which@2.0.2: 2699 dependencies: 2700 isexe: 2.0.0 2701 2702 yocto-queue@0.1.0: {}
··· 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': ··· 389 390 '@humanwhocodes/retry@0.3.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': ··· 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==} ··· 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==} ··· 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==} 626 engines: {node: '>= 0.4'} ··· 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: ··· 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==} 999 engines: {node: '>= 4'} ··· 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==} 1196 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==} ··· 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==} 1259 engines: {node: '>=6'} ··· 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'} 1566 1567 + zustand@5.0.3: 1568 + resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} 1569 + engines: {node: '>=12.20.0'} 1570 + peerDependencies: 1571 + '@types/react': '>=18.0.0' 1572 + immer: '>=9.0.6' 1573 + react: '>=18.0.0' 1574 + use-sync-external-store: '>=1.2.0' 1575 + peerDependenciesMeta: 1576 + '@types/react': 1577 + optional: true 1578 + immer: 1579 + optional: true 1580 + react: 1581 + optional: true 1582 + use-sync-external-store: 1583 + optional: true 1584 + 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: 1795 '@types/estree': 1.0.6 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: ··· 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 2066 chalk@4.1.2: ··· 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 ··· 2408 fill-range@7.1.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: ··· 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 ··· 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: 2791 callsites: 3.1.0 ··· 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 ··· 2826 2827 punycode@2.3.1: {} 2828 2829 + quansync@0.2.10: {} 2830 + 2831 queue-microtask@1.2.3: {} 2832 2833 react-is@16.13.1: {} ··· 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 }