├── .gitignore ├── LICENSE ├── README.md ├── assets ├── dashboard.png ├── edit.png └── popup.png ├── dashboard.html ├── package.json ├── pnpm-lock.yaml ├── popup.html ├── public └── icon.png ├── src ├── background.ts ├── dashboard │ ├── about.tsx │ ├── app.css │ ├── app.tsx │ ├── context.tsx │ ├── edit.tsx │ ├── home.tsx │ ├── index.tsx │ └── utils.ts ├── examples │ ├── allow-cors.jsonc │ ├── blank.jsonc │ └── change-user-agent.jsonc ├── popup.tsx ├── schema │ ├── README.md │ ├── fields.json │ └── fields.ts └── utils.ts ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Rongjian Zhang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tampery 2 | 3 | [![Chrome Web Store](https://img.shields.io/chrome-web-store/v/bipnikifgdamlhpdkkmoaiokbgfkeapl.svg)](https://chrome.google.com/webstore/detail/tampery/bipnikifgdamlhpdkkmoaiokbgfkeapl) 4 | 5 | Tampery is a browser extension to tamper browser requests in flight. It is **programmable**, which means you could write your own script to intercept, block, or modify browser requests. 6 | 7 | 8 | 9 | ## Installation 10 | 11 | Install it from [Chrome Web Store](https://chrome.google.com/webstore/detail/tampery/bipnikifgdamlhpdkkmoaiokbgfkeapl) 12 | 13 | _Notice_: Currently we only support Chrome 63+, because [dynamic import](https://developers.google.com/web/updates/2017/11/dynamic-import) is used to import your script. 14 | 15 | ## Examples 16 | 17 | There are some simple examples to show how it works: 18 | 19 | - [Change User-Agent](src/examples/change-user-agent.js) 20 | - [Remove Google Analytics UTM tokens](src/examples/remove-google-analytics-utm-tokens.js) 21 | - [Allow CORS](src/examples/allow-cors.js) 22 | 23 | ## Usage 24 | 25 | Tampery use `chrome.webRequest` API under the hood. Basically, every script should export an object as `default`, which has `lifecycle`, `callback`, `filter` and `extraInfoSpec` as keys. 26 | 27 | For example, if we want to change User-Agent in request headers, we could create a script as follows: 28 | 29 | ```js 30 | const myUserAgent = 31 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' 32 | 33 | export default { 34 | lifecycle: 'onBeforeSendHeaders', 35 | callback: ({ requestHeaders }) => { 36 | for (var i = 0; i < requestHeaders.length; ++i) { 37 | // Find the key named `User-Agent` and change its value 38 | if (requestHeaders[i].name.toLowerCase() === 'user-agent') { 39 | requestHeaders[i].value = myUserAgent 40 | break 41 | } 42 | } 43 | return { requestHeaders } // Return to change headers 44 | }, 45 | filter: { 46 | urls: [''], // Specify it takes effect on which URLs 47 | }, 48 | extraInfoSpec: [ 49 | 'requestHeaders', 50 | 'blocking', // Add `blocking` here since we want to change request headers 51 | ], 52 | } 53 | ``` 54 | 55 | Checkout [examples](#examples) to understand it quickly. 56 | 57 | For more information, see documentation of `webRequest` API of [Chrome](https://developer.chrome.com/extensions/webRequest) and [Firefox](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest) 58 | 59 | ## License 60 | 61 | MIT 62 | -------------------------------------------------------------------------------- /assets/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/tampery/4a7dd6d923f289cf0bed4e57a91b295494a96f8d/assets/dashboard.png -------------------------------------------------------------------------------- /assets/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/tampery/4a7dd6d923f289cf0bed4e57a91b295494a96f8d/assets/edit.png -------------------------------------------------------------------------------- /assets/popup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/tampery/4a7dd6d923f289cf0bed4e57a91b295494a96f8d/assets/popup.png -------------------------------------------------------------------------------- /dashboard.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tampery", 3 | "version": "0.0.4", 4 | "type": "module", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "tsc && vite build" 8 | }, 9 | "devDependencies": { 10 | "@crxjs/vite-plugin": "^1.0.14", 11 | "typescript": "^5.6.3", 12 | "vite": "^5.4.11" 13 | }, 14 | "dependencies": { 15 | "@rjsf/antd": "^5.22.4", 16 | "@rjsf/utils": "^5.22.4", 17 | "@rjsf/validator-ajv8": "^5.22.4", 18 | "@types/chrome": "^0.0.283", 19 | "@types/react": "^18.3.12", 20 | "@types/react-dom": "^18.3.1", 21 | "@types/react-router-dom": "^5.1.3", 22 | "@types/uuid": "^10.0.0", 23 | "antd": "^5.22.1", 24 | "jsonc-parser": "^3.3.1", 25 | "monaco-editor": "^0.52.0", 26 | "react": "^18.3.1", 27 | "react-dom": "^18.3.1", 28 | "react-monaco-editor": "^0.56.2", 29 | "react-router-dom": "^6.28.0", 30 | "ts-pattern": "^5.5.0", 31 | "uuid": "^11.0.3" 32 | }, 33 | "packageManager": "pnpm@9.13.2+sha512.88c9c3864450350e65a33587ab801acf946d7c814ed1134da4a924f6df5a2120fd36b46aab68f7cd1d413149112d53c7db3a4136624cfd00ff1846a0c6cef48a" 34 | } 35 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@rjsf/antd': 12 | specifier: ^5.22.4 13 | version: 5.22.4(@ant-design/icons@5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@rjsf/core@5.22.4(@rjsf/utils@5.22.4(react@18.3.1))(react@18.3.1))(@rjsf/utils@5.22.4(react@18.3.1))(antd@5.22.1(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 14 | '@rjsf/utils': 15 | specifier: ^5.22.4 16 | version: 5.22.4(react@18.3.1) 17 | '@rjsf/validator-ajv8': 18 | specifier: ^5.22.4 19 | version: 5.22.4(@rjsf/utils@5.22.4(react@18.3.1)) 20 | '@types/chrome': 21 | specifier: ^0.0.283 22 | version: 0.0.283 23 | '@types/react': 24 | specifier: ^18.3.12 25 | version: 18.3.12 26 | '@types/react-dom': 27 | specifier: ^18.3.1 28 | version: 18.3.1 29 | '@types/react-router-dom': 30 | specifier: ^5.1.3 31 | version: 5.3.3 32 | '@types/uuid': 33 | specifier: ^10.0.0 34 | version: 10.0.0 35 | antd: 36 | specifier: ^5.22.1 37 | version: 5.22.1(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 38 | jsonc-parser: 39 | specifier: ^3.3.1 40 | version: 3.3.1 41 | monaco-editor: 42 | specifier: ^0.52.0 43 | version: 0.52.0 44 | react: 45 | specifier: ^18.3.1 46 | version: 18.3.1 47 | react-dom: 48 | specifier: ^18.3.1 49 | version: 18.3.1(react@18.3.1) 50 | react-monaco-editor: 51 | specifier: ^0.56.2 52 | version: 0.56.2(@types/react@18.3.12)(monaco-editor@0.52.0)(react@18.3.1) 53 | react-router-dom: 54 | specifier: ^6.28.0 55 | version: 6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 56 | ts-pattern: 57 | specifier: ^5.5.0 58 | version: 5.5.0 59 | uuid: 60 | specifier: ^11.0.3 61 | version: 11.0.3 62 | devDependencies: 63 | '@crxjs/vite-plugin': 64 | specifier: ^1.0.14 65 | version: 1.0.14(vite@5.4.11) 66 | typescript: 67 | specifier: ^5.6.3 68 | version: 5.6.3 69 | vite: 70 | specifier: ^5.4.11 71 | version: 5.4.11 72 | 73 | packages: 74 | 75 | '@ampproject/remapping@2.3.0': 76 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 77 | engines: {node: '>=6.0.0'} 78 | 79 | '@ant-design/colors@7.1.0': 80 | resolution: {integrity: sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==} 81 | 82 | '@ant-design/cssinjs-utils@1.1.1': 83 | resolution: {integrity: sha512-2HAiyGGGnM0es40SxdszeQAU5iWp41wBIInq+ONTCKjlSKOrzQfnw4JDtB8IBmqE6tQaEKwmzTP2LGdt5DSwYQ==} 84 | peerDependencies: 85 | react: '>=16.9.0' 86 | react-dom: '>=16.9.0' 87 | 88 | '@ant-design/cssinjs@1.22.0': 89 | resolution: {integrity: sha512-W9XSFeRPR0mAN3OuxfuS/xhENCYKf+8s+QyNNER0FSWoK9OpISTag6CCweg6lq0hASQ/2Vcza0Z8/kGivCP0Ng==} 90 | peerDependencies: 91 | react: '>=16.0.0' 92 | react-dom: '>=16.0.0' 93 | 94 | '@ant-design/fast-color@2.0.6': 95 | resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} 96 | engines: {node: '>=8.x'} 97 | 98 | '@ant-design/icons-svg@4.4.2': 99 | resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} 100 | 101 | '@ant-design/icons@5.5.1': 102 | resolution: {integrity: sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w==} 103 | engines: {node: '>=8'} 104 | peerDependencies: 105 | react: '>=16.0.0' 106 | react-dom: '>=16.0.0' 107 | 108 | '@ant-design/react-slick@1.1.2': 109 | resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} 110 | peerDependencies: 111 | react: '>=16.9.0' 112 | 113 | '@babel/code-frame@7.26.2': 114 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 115 | engines: {node: '>=6.9.0'} 116 | 117 | '@babel/compat-data@7.26.2': 118 | resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} 119 | engines: {node: '>=6.9.0'} 120 | 121 | '@babel/core@7.26.0': 122 | resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} 123 | engines: {node: '>=6.9.0'} 124 | 125 | '@babel/generator@7.26.2': 126 | resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} 127 | engines: {node: '>=6.9.0'} 128 | 129 | '@babel/helper-compilation-targets@7.25.9': 130 | resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} 131 | engines: {node: '>=6.9.0'} 132 | 133 | '@babel/helper-module-imports@7.25.9': 134 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 135 | engines: {node: '>=6.9.0'} 136 | 137 | '@babel/helper-module-transforms@7.26.0': 138 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 139 | engines: {node: '>=6.9.0'} 140 | peerDependencies: 141 | '@babel/core': ^7.0.0 142 | 143 | '@babel/helper-plugin-utils@7.25.9': 144 | resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} 145 | engines: {node: '>=6.9.0'} 146 | 147 | '@babel/helper-string-parser@7.25.9': 148 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 149 | engines: {node: '>=6.9.0'} 150 | 151 | '@babel/helper-validator-identifier@7.25.9': 152 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 153 | engines: {node: '>=6.9.0'} 154 | 155 | '@babel/helper-validator-option@7.25.9': 156 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 157 | engines: {node: '>=6.9.0'} 158 | 159 | '@babel/helpers@7.26.0': 160 | resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} 161 | engines: {node: '>=6.9.0'} 162 | 163 | '@babel/parser@7.26.2': 164 | resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} 165 | engines: {node: '>=6.0.0'} 166 | hasBin: true 167 | 168 | '@babel/plugin-transform-react-jsx-self@7.25.9': 169 | resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} 170 | engines: {node: '>=6.9.0'} 171 | peerDependencies: 172 | '@babel/core': ^7.0.0-0 173 | 174 | '@babel/plugin-transform-react-jsx-source@7.25.9': 175 | resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} 176 | engines: {node: '>=6.9.0'} 177 | peerDependencies: 178 | '@babel/core': ^7.0.0-0 179 | 180 | '@babel/runtime@7.26.0': 181 | resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} 182 | engines: {node: '>=6.9.0'} 183 | 184 | '@babel/template@7.25.9': 185 | resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} 186 | engines: {node: '>=6.9.0'} 187 | 188 | '@babel/traverse@7.25.9': 189 | resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} 190 | engines: {node: '>=6.9.0'} 191 | 192 | '@babel/types@7.26.0': 193 | resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} 194 | engines: {node: '>=6.9.0'} 195 | 196 | '@crxjs/vite-plugin@1.0.14': 197 | resolution: {integrity: sha512-emOueVCqFRFmpcfT80Xsm4mfuFw9VSp5GY4eh5qeLDeiP81g0hddlobVQCo0pE2ZvNnWbyhLrXEYAaMAXjNL6A==} 198 | engines: {node: '>=14'} 199 | peerDependencies: 200 | vite: ^2.9.0 201 | 202 | '@ctrl/tinycolor@3.6.1': 203 | resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} 204 | engines: {node: '>=10'} 205 | 206 | '@emotion/hash@0.8.0': 207 | resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} 208 | 209 | '@emotion/unitless@0.7.5': 210 | resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} 211 | 212 | '@esbuild/aix-ppc64@0.21.5': 213 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 214 | engines: {node: '>=12'} 215 | cpu: [ppc64] 216 | os: [aix] 217 | 218 | '@esbuild/android-arm64@0.21.5': 219 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 220 | engines: {node: '>=12'} 221 | cpu: [arm64] 222 | os: [android] 223 | 224 | '@esbuild/android-arm@0.21.5': 225 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 226 | engines: {node: '>=12'} 227 | cpu: [arm] 228 | os: [android] 229 | 230 | '@esbuild/android-x64@0.21.5': 231 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 232 | engines: {node: '>=12'} 233 | cpu: [x64] 234 | os: [android] 235 | 236 | '@esbuild/darwin-arm64@0.21.5': 237 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 238 | engines: {node: '>=12'} 239 | cpu: [arm64] 240 | os: [darwin] 241 | 242 | '@esbuild/darwin-x64@0.21.5': 243 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 244 | engines: {node: '>=12'} 245 | cpu: [x64] 246 | os: [darwin] 247 | 248 | '@esbuild/freebsd-arm64@0.21.5': 249 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 250 | engines: {node: '>=12'} 251 | cpu: [arm64] 252 | os: [freebsd] 253 | 254 | '@esbuild/freebsd-x64@0.21.5': 255 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 256 | engines: {node: '>=12'} 257 | cpu: [x64] 258 | os: [freebsd] 259 | 260 | '@esbuild/linux-arm64@0.21.5': 261 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 262 | engines: {node: '>=12'} 263 | cpu: [arm64] 264 | os: [linux] 265 | 266 | '@esbuild/linux-arm@0.21.5': 267 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 268 | engines: {node: '>=12'} 269 | cpu: [arm] 270 | os: [linux] 271 | 272 | '@esbuild/linux-ia32@0.21.5': 273 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 274 | engines: {node: '>=12'} 275 | cpu: [ia32] 276 | os: [linux] 277 | 278 | '@esbuild/linux-loong64@0.21.5': 279 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 280 | engines: {node: '>=12'} 281 | cpu: [loong64] 282 | os: [linux] 283 | 284 | '@esbuild/linux-mips64el@0.21.5': 285 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 286 | engines: {node: '>=12'} 287 | cpu: [mips64el] 288 | os: [linux] 289 | 290 | '@esbuild/linux-ppc64@0.21.5': 291 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 292 | engines: {node: '>=12'} 293 | cpu: [ppc64] 294 | os: [linux] 295 | 296 | '@esbuild/linux-riscv64@0.21.5': 297 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 298 | engines: {node: '>=12'} 299 | cpu: [riscv64] 300 | os: [linux] 301 | 302 | '@esbuild/linux-s390x@0.21.5': 303 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 304 | engines: {node: '>=12'} 305 | cpu: [s390x] 306 | os: [linux] 307 | 308 | '@esbuild/linux-x64@0.21.5': 309 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 310 | engines: {node: '>=12'} 311 | cpu: [x64] 312 | os: [linux] 313 | 314 | '@esbuild/netbsd-x64@0.21.5': 315 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 316 | engines: {node: '>=12'} 317 | cpu: [x64] 318 | os: [netbsd] 319 | 320 | '@esbuild/openbsd-x64@0.21.5': 321 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 322 | engines: {node: '>=12'} 323 | cpu: [x64] 324 | os: [openbsd] 325 | 326 | '@esbuild/sunos-x64@0.21.5': 327 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 328 | engines: {node: '>=12'} 329 | cpu: [x64] 330 | os: [sunos] 331 | 332 | '@esbuild/win32-arm64@0.21.5': 333 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 334 | engines: {node: '>=12'} 335 | cpu: [arm64] 336 | os: [win32] 337 | 338 | '@esbuild/win32-ia32@0.21.5': 339 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 340 | engines: {node: '>=12'} 341 | cpu: [ia32] 342 | os: [win32] 343 | 344 | '@esbuild/win32-x64@0.21.5': 345 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 346 | engines: {node: '>=12'} 347 | cpu: [x64] 348 | os: [win32] 349 | 350 | '@jridgewell/gen-mapping@0.3.5': 351 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 352 | engines: {node: '>=6.0.0'} 353 | 354 | '@jridgewell/resolve-uri@3.1.2': 355 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 356 | engines: {node: '>=6.0.0'} 357 | 358 | '@jridgewell/set-array@1.2.1': 359 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 360 | engines: {node: '>=6.0.0'} 361 | 362 | '@jridgewell/sourcemap-codec@1.5.0': 363 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 364 | 365 | '@jridgewell/trace-mapping@0.3.25': 366 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 367 | 368 | '@nodelib/fs.scandir@2.1.5': 369 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 370 | engines: {node: '>= 8'} 371 | 372 | '@nodelib/fs.stat@2.0.5': 373 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 374 | engines: {node: '>= 8'} 375 | 376 | '@nodelib/fs.walk@1.2.8': 377 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 378 | engines: {node: '>= 8'} 379 | 380 | '@rc-component/async-validator@5.0.4': 381 | resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} 382 | engines: {node: '>=14.x'} 383 | 384 | '@rc-component/color-picker@2.0.1': 385 | resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==} 386 | peerDependencies: 387 | react: '>=16.9.0' 388 | react-dom: '>=16.9.0' 389 | 390 | '@rc-component/context@1.4.0': 391 | resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==} 392 | peerDependencies: 393 | react: '>=16.9.0' 394 | react-dom: '>=16.9.0' 395 | 396 | '@rc-component/mini-decimal@1.1.0': 397 | resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} 398 | engines: {node: '>=8.x'} 399 | 400 | '@rc-component/mutate-observer@1.1.0': 401 | resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==} 402 | engines: {node: '>=8.x'} 403 | peerDependencies: 404 | react: '>=16.9.0' 405 | react-dom: '>=16.9.0' 406 | 407 | '@rc-component/portal@1.1.2': 408 | resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==} 409 | engines: {node: '>=8.x'} 410 | peerDependencies: 411 | react: '>=16.9.0' 412 | react-dom: '>=16.9.0' 413 | 414 | '@rc-component/qrcode@1.0.0': 415 | resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==} 416 | engines: {node: '>=8.x'} 417 | peerDependencies: 418 | react: '>=16.9.0' 419 | react-dom: '>=16.9.0' 420 | 421 | '@rc-component/tour@1.15.1': 422 | resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==} 423 | engines: {node: '>=8.x'} 424 | peerDependencies: 425 | react: '>=16.9.0' 426 | react-dom: '>=16.9.0' 427 | 428 | '@rc-component/trigger@2.2.5': 429 | resolution: {integrity: sha512-F1EJ4KjFpGAHAjuKvOyZB/6IZDkVx0bHl0M4fQM5wXcmm7lgTgVSSnR3bXwdmS6jOJGHOqfDxIJW3WUvwMIXhQ==} 430 | engines: {node: '>=8.x'} 431 | peerDependencies: 432 | react: '>=16.9.0' 433 | react-dom: '>=16.9.0' 434 | 435 | '@remix-run/router@1.21.0': 436 | resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} 437 | engines: {node: '>=14.0.0'} 438 | 439 | '@rjsf/antd@5.22.4': 440 | resolution: {integrity: sha512-+8y8Z0WdKQBNFI2dk/St6rS7kLIGn45YcJTd54UXSUcGwPTDVGW4OU+nhVn+NZns8JnZax3qGi2kbOiva8UiMg==} 441 | engines: {node: '>=14'} 442 | peerDependencies: 443 | '@ant-design/icons': ^4.0.0 || ^5.0.0 444 | '@rjsf/core': ^5.22.x 445 | '@rjsf/utils': ^5.22.x 446 | antd: ^4.24.0 || ^5.8.5 447 | dayjs: ^1.8.0 448 | react: ^16.14.0 || >=17 449 | 450 | '@rjsf/core@5.22.4': 451 | resolution: {integrity: sha512-0QjAVPXDi/19jR/E44ULDzOkvC4Px5zcZhpGtBFNWNWWmb9UgyjPuvJYga2obzHU46P+5maLvUQEZVAeFwDuqQ==} 452 | engines: {node: '>=14'} 453 | peerDependencies: 454 | '@rjsf/utils': ^5.22.x 455 | react: ^16.14.0 || >=17 456 | 457 | '@rjsf/utils@5.22.4': 458 | resolution: {integrity: sha512-yQTdz5ryiYy258xCVthVPQ3DeaMzrRNrFcO8xvGHorp0/bLUxdTZ0iidXop49m3y8SaxxTZd398ZKWg2cqxiIA==} 459 | engines: {node: '>=14'} 460 | peerDependencies: 461 | react: ^16.14.0 || >=17 462 | 463 | '@rjsf/validator-ajv8@5.22.4': 464 | resolution: {integrity: sha512-HIMmJpSY9iyN325W/3/l/2Pbt5BAPd9pf0nO+KZuW5dxE0WUThwjIsa104gFJUgig5M3RuKbelX565Qmvfa87A==} 465 | engines: {node: '>=14'} 466 | peerDependencies: 467 | '@rjsf/utils': ^5.22.x 468 | 469 | '@rollup/pluginutils@4.2.1': 470 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 471 | engines: {node: '>= 8.0.0'} 472 | 473 | '@rollup/rollup-android-arm-eabi@4.27.2': 474 | resolution: {integrity: sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==} 475 | cpu: [arm] 476 | os: [android] 477 | 478 | '@rollup/rollup-android-arm64@4.27.2': 479 | resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==} 480 | cpu: [arm64] 481 | os: [android] 482 | 483 | '@rollup/rollup-darwin-arm64@4.27.2': 484 | resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==} 485 | cpu: [arm64] 486 | os: [darwin] 487 | 488 | '@rollup/rollup-darwin-x64@4.27.2': 489 | resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==} 490 | cpu: [x64] 491 | os: [darwin] 492 | 493 | '@rollup/rollup-freebsd-arm64@4.27.2': 494 | resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==} 495 | cpu: [arm64] 496 | os: [freebsd] 497 | 498 | '@rollup/rollup-freebsd-x64@4.27.2': 499 | resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==} 500 | cpu: [x64] 501 | os: [freebsd] 502 | 503 | '@rollup/rollup-linux-arm-gnueabihf@4.27.2': 504 | resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} 505 | cpu: [arm] 506 | os: [linux] 507 | 508 | '@rollup/rollup-linux-arm-musleabihf@4.27.2': 509 | resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} 510 | cpu: [arm] 511 | os: [linux] 512 | 513 | '@rollup/rollup-linux-arm64-gnu@4.27.2': 514 | resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} 515 | cpu: [arm64] 516 | os: [linux] 517 | 518 | '@rollup/rollup-linux-arm64-musl@4.27.2': 519 | resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} 520 | cpu: [arm64] 521 | os: [linux] 522 | 523 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': 524 | resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} 525 | cpu: [ppc64] 526 | os: [linux] 527 | 528 | '@rollup/rollup-linux-riscv64-gnu@4.27.2': 529 | resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} 530 | cpu: [riscv64] 531 | os: [linux] 532 | 533 | '@rollup/rollup-linux-s390x-gnu@4.27.2': 534 | resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} 535 | cpu: [s390x] 536 | os: [linux] 537 | 538 | '@rollup/rollup-linux-x64-gnu@4.27.2': 539 | resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} 540 | cpu: [x64] 541 | os: [linux] 542 | 543 | '@rollup/rollup-linux-x64-musl@4.27.2': 544 | resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} 545 | cpu: [x64] 546 | os: [linux] 547 | 548 | '@rollup/rollup-win32-arm64-msvc@4.27.2': 549 | resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} 550 | cpu: [arm64] 551 | os: [win32] 552 | 553 | '@rollup/rollup-win32-ia32-msvc@4.27.2': 554 | resolution: {integrity: sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==} 555 | cpu: [ia32] 556 | os: [win32] 557 | 558 | '@rollup/rollup-win32-x64-msvc@4.27.2': 559 | resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==} 560 | cpu: [x64] 561 | os: [win32] 562 | 563 | '@types/babel__core@7.20.5': 564 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 565 | 566 | '@types/babel__generator@7.6.8': 567 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 568 | 569 | '@types/babel__template@7.4.4': 570 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 571 | 572 | '@types/babel__traverse@7.20.6': 573 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 574 | 575 | '@types/chrome@0.0.283': 576 | resolution: {integrity: sha512-bPnu1JqeQxMceRP0oxFYrauoe0BlWxxQxhYL58gWLg5Ywsd3i3Dd6By9OW7BdkNQMokodWzBLR5FHDIeQZvJWg==} 577 | 578 | '@types/estree@1.0.6': 579 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 580 | 581 | '@types/filesystem@0.0.36': 582 | resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} 583 | 584 | '@types/filewriter@0.0.33': 585 | resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} 586 | 587 | '@types/har-format@1.2.16': 588 | resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} 589 | 590 | '@types/history@4.7.11': 591 | resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} 592 | 593 | '@types/prop-types@15.7.13': 594 | resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} 595 | 596 | '@types/react-dom@18.3.1': 597 | resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} 598 | 599 | '@types/react-router-dom@5.3.3': 600 | resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} 601 | 602 | '@types/react-router@5.1.20': 603 | resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} 604 | 605 | '@types/react@18.3.12': 606 | resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} 607 | 608 | '@types/uuid@10.0.0': 609 | resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} 610 | 611 | '@vitejs/plugin-react@4.3.3': 612 | resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} 613 | engines: {node: ^14.18.0 || >=16.0.0} 614 | peerDependencies: 615 | vite: ^4.2.0 || ^5.0.0 616 | 617 | '@webcomponents/custom-elements@1.6.0': 618 | resolution: {integrity: sha512-CqTpxOlUCPWRNUPZDxT5v2NnHXA4oox612iUGnmTUGQFhZ1Gkj8kirtl/2wcF6MqX7+PqqicZzOCBKKfIn0dww==} 619 | 620 | acorn-walk@8.3.4: 621 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 622 | engines: {node: '>=0.4.0'} 623 | 624 | acorn@8.14.0: 625 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 626 | engines: {node: '>=0.4.0'} 627 | hasBin: true 628 | 629 | ajv-formats@2.1.1: 630 | resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} 631 | peerDependencies: 632 | ajv: ^8.0.0 633 | peerDependenciesMeta: 634 | ajv: 635 | optional: true 636 | 637 | ajv@8.17.1: 638 | resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} 639 | 640 | antd@5.22.1: 641 | resolution: {integrity: sha512-itq8AZwe3IfawZH6SMM5XdbTz1xXGTTqA7sNN0qpEdxcoTpD5nRsCBAMIy+PhwcWFobgFc6ZlF8d7f8eicn0SQ==} 642 | peerDependencies: 643 | react: '>=16.9.0' 644 | react-dom: '>=16.9.0' 645 | 646 | boolbase@1.0.0: 647 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 648 | 649 | braces@3.0.3: 650 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 651 | engines: {node: '>=8'} 652 | 653 | browserslist@4.24.2: 654 | resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} 655 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 656 | hasBin: true 657 | 658 | caniuse-lite@1.0.30001680: 659 | resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} 660 | 661 | cheerio-select@2.1.0: 662 | resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 663 | 664 | cheerio@1.0.0: 665 | resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} 666 | engines: {node: '>=18.17'} 667 | 668 | classnames@2.5.1: 669 | resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} 670 | 671 | compute-gcd@1.2.1: 672 | resolution: {integrity: sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==} 673 | 674 | compute-lcm@1.1.2: 675 | resolution: {integrity: sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==} 676 | 677 | compute-scroll-into-view@3.1.0: 678 | resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} 679 | 680 | connect-injector@0.4.4: 681 | resolution: {integrity: sha512-hdBG8nXop42y2gWCqOV8y1O3uVk4cIU+SoxLCPyCUKRImyPiScoNiSulpHjoktRU1BdI0UzoUdxUa87thrcmHw==} 682 | engines: {node: '>= 0.8.0'} 683 | 684 | convert-source-map@2.0.0: 685 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 686 | 687 | copy-to-clipboard@3.3.3: 688 | resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} 689 | 690 | css-select@5.1.0: 691 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} 692 | 693 | css-what@6.1.0: 694 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 695 | engines: {node: '>= 6'} 696 | 697 | csstype@3.1.3: 698 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 699 | 700 | date-fns@2.30.0: 701 | resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} 702 | engines: {node: '>=0.11'} 703 | 704 | dayjs@1.11.13: 705 | resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} 706 | 707 | debug@2.6.9: 708 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 709 | peerDependencies: 710 | supports-color: '*' 711 | peerDependenciesMeta: 712 | supports-color: 713 | optional: true 714 | 715 | debug@4.3.7: 716 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 717 | engines: {node: '>=6.0'} 718 | peerDependencies: 719 | supports-color: '*' 720 | peerDependenciesMeta: 721 | supports-color: 722 | optional: true 723 | 724 | dom-align@1.12.4: 725 | resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==} 726 | 727 | dom-serializer@2.0.0: 728 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 729 | 730 | domelementtype@2.3.0: 731 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 732 | 733 | domhandler@5.0.3: 734 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 735 | engines: {node: '>= 4'} 736 | 737 | domutils@3.1.0: 738 | resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} 739 | 740 | electron-to-chromium@1.5.62: 741 | resolution: {integrity: sha512-t8c+zLmJHa9dJy96yBZRXGQYoiCEnHYgFwn1asvSPZSUdVxnB62A4RASd7k41ytG3ErFBA0TpHlKg9D9SQBmLg==} 742 | 743 | encoding-sniffer@0.2.0: 744 | resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} 745 | 746 | entities@4.5.0: 747 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 748 | engines: {node: '>=0.12'} 749 | 750 | es-module-lexer@0.10.5: 751 | resolution: {integrity: sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==} 752 | 753 | esbuild@0.21.5: 754 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 755 | engines: {node: '>=12'} 756 | hasBin: true 757 | 758 | escalade@3.2.0: 759 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 760 | engines: {node: '>=6'} 761 | 762 | estree-walker@2.0.2: 763 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 764 | 765 | fast-deep-equal@3.1.3: 766 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 767 | 768 | fast-glob@3.3.2: 769 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 770 | engines: {node: '>=8.6.0'} 771 | 772 | fast-uri@3.0.3: 773 | resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} 774 | 775 | fastq@1.17.1: 776 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 777 | 778 | fill-range@7.1.1: 779 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 780 | engines: {node: '>=8'} 781 | 782 | fs-extra@10.1.0: 783 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 784 | engines: {node: '>=12'} 785 | 786 | fsevents@2.3.3: 787 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 788 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 789 | os: [darwin] 790 | 791 | gensync@1.0.0-beta.2: 792 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 793 | engines: {node: '>=6.9.0'} 794 | 795 | glob-parent@5.1.2: 796 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 797 | engines: {node: '>= 6'} 798 | 799 | globals@11.12.0: 800 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 801 | engines: {node: '>=4'} 802 | 803 | graceful-fs@4.2.11: 804 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 805 | 806 | htmlparser2@9.1.0: 807 | resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} 808 | 809 | iconv-lite@0.6.3: 810 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 811 | engines: {node: '>=0.10.0'} 812 | 813 | is-extglob@2.1.1: 814 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 815 | engines: {node: '>=0.10.0'} 816 | 817 | is-glob@4.0.3: 818 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 819 | engines: {node: '>=0.10.0'} 820 | 821 | is-number@7.0.0: 822 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 823 | engines: {node: '>=0.12.0'} 824 | 825 | js-tokens@4.0.0: 826 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 827 | 828 | jsesc@3.0.2: 829 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 830 | engines: {node: '>=6'} 831 | hasBin: true 832 | 833 | json-schema-compare@0.2.2: 834 | resolution: {integrity: sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==} 835 | 836 | json-schema-merge-allof@0.8.1: 837 | resolution: {integrity: sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==} 838 | engines: {node: '>=12.0.0'} 839 | 840 | json-schema-traverse@1.0.0: 841 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 842 | 843 | json2mq@0.2.0: 844 | resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} 845 | 846 | json5@2.2.3: 847 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 848 | engines: {node: '>=6'} 849 | hasBin: true 850 | 851 | jsonc-parser@3.3.1: 852 | resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} 853 | 854 | jsonfile@6.1.0: 855 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 856 | 857 | jsonpointer@5.0.1: 858 | resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} 859 | engines: {node: '>=0.10.0'} 860 | 861 | lodash-es@4.17.21: 862 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 863 | 864 | lodash@4.17.21: 865 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 866 | 867 | loose-envify@1.4.0: 868 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 869 | hasBin: true 870 | 871 | lru-cache@5.1.1: 872 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 873 | 874 | magic-string@0.26.7: 875 | resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} 876 | engines: {node: '>=12'} 877 | 878 | markdown-to-jsx@7.6.2: 879 | resolution: {integrity: sha512-gEcyiJXzBxmId2Y/kydLbD6KRNccDiUy/Src1cFGn3s2X0LZZ/hUiEc2VisFyA5kUE3SXclTCczjQiAuqKZiFQ==} 880 | engines: {node: '>= 10'} 881 | peerDependencies: 882 | react: '>= 0.14.0' 883 | 884 | merge2@1.4.1: 885 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 886 | engines: {node: '>= 8'} 887 | 888 | micromatch@4.0.8: 889 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 890 | engines: {node: '>=8.6'} 891 | 892 | moment@2.30.1: 893 | resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} 894 | 895 | monaco-editor@0.52.0: 896 | resolution: {integrity: sha512-OeWhNpABLCeTqubfqLMXGsqf6OmPU6pHM85kF3dhy6kq5hnhuVS1p3VrEW/XhWHc71P2tHyS5JFySD8mgs1crw==} 897 | 898 | ms@2.0.0: 899 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 900 | 901 | ms@2.1.3: 902 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 903 | 904 | nanoid@3.3.7: 905 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 906 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 907 | hasBin: true 908 | 909 | node-releases@2.0.18: 910 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 911 | 912 | nth-check@2.1.1: 913 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 914 | 915 | object-assign@4.1.1: 916 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 917 | engines: {node: '>=0.10.0'} 918 | 919 | parse5-htmlparser2-tree-adapter@7.1.0: 920 | resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} 921 | 922 | parse5-parser-stream@7.1.2: 923 | resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} 924 | 925 | parse5@7.2.1: 926 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 927 | 928 | picocolors@1.1.1: 929 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 930 | 931 | picomatch@2.3.1: 932 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 933 | engines: {node: '>=8.6'} 934 | 935 | postcss@8.4.49: 936 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 937 | engines: {node: ^10 || ^12 || >=14} 938 | 939 | prop-types@15.8.1: 940 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 941 | 942 | q@1.5.1: 943 | resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} 944 | engines: {node: '>=0.6.0', teleport: '>=0.2.0'} 945 | deprecated: |- 946 | You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. 947 | 948 | (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) 949 | 950 | queue-microtask@1.2.3: 951 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 952 | 953 | rc-align@4.0.15: 954 | resolution: {integrity: sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==} 955 | peerDependencies: 956 | react: '>=16.9.0' 957 | react-dom: '>=16.9.0' 958 | 959 | rc-cascader@3.30.0: 960 | resolution: {integrity: sha512-rrzSbk1Bdqbu+pDwiLCLHu72+lwX9BZ28+JKzoi0DWZ4N29QYFeip8Gctl33QVd2Xg3Rf14D3yAOG76ElJw16w==} 961 | peerDependencies: 962 | react: '>=16.9.0' 963 | react-dom: '>=16.9.0' 964 | 965 | rc-checkbox@3.3.0: 966 | resolution: {integrity: sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==} 967 | peerDependencies: 968 | react: '>=16.9.0' 969 | react-dom: '>=16.9.0' 970 | 971 | rc-collapse@3.9.0: 972 | resolution: {integrity: sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==} 973 | peerDependencies: 974 | react: '>=16.9.0' 975 | react-dom: '>=16.9.0' 976 | 977 | rc-dialog@9.6.0: 978 | resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==} 979 | peerDependencies: 980 | react: '>=16.9.0' 981 | react-dom: '>=16.9.0' 982 | 983 | rc-drawer@7.2.0: 984 | resolution: {integrity: sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==} 985 | peerDependencies: 986 | react: '>=16.9.0' 987 | react-dom: '>=16.9.0' 988 | 989 | rc-dropdown@4.2.0: 990 | resolution: {integrity: sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==} 991 | peerDependencies: 992 | react: '>=16.11.0' 993 | react-dom: '>=16.11.0' 994 | 995 | rc-field-form@2.5.1: 996 | resolution: {integrity: sha512-33hunXwynQJyeae7LS3hMGTXNeRBjiPyPYgB0824EbmLHiXC1EBGyUwRh6xjLRy9c+en5WARYN0gJz5+JAqwig==} 997 | engines: {node: '>=8.x'} 998 | peerDependencies: 999 | react: '>=16.9.0' 1000 | react-dom: '>=16.9.0' 1001 | 1002 | rc-image@7.11.0: 1003 | resolution: {integrity: sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==} 1004 | peerDependencies: 1005 | react: '>=16.9.0' 1006 | react-dom: '>=16.9.0' 1007 | 1008 | rc-input-number@9.3.0: 1009 | resolution: {integrity: sha512-JQ363ywqRyxwgVxpg2z2kja3CehTpYdqR7emJ/6yJjRdbvo+RvfE83fcpBCIJRq3zLp8SakmEXq60qzWyZ7Usw==} 1010 | peerDependencies: 1011 | react: '>=16.9.0' 1012 | react-dom: '>=16.9.0' 1013 | 1014 | rc-input@1.6.3: 1015 | resolution: {integrity: sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==} 1016 | peerDependencies: 1017 | react: '>=16.0.0' 1018 | react-dom: '>=16.0.0' 1019 | 1020 | rc-mentions@2.17.0: 1021 | resolution: {integrity: sha512-sfHy+qLvc+p8jx8GUsujZWXDOIlIimp6YQz7N5ONQ6bHsa2kyG+BLa5k2wuxgebBbH97is33wxiyq5UkiXRpHA==} 1022 | peerDependencies: 1023 | react: '>=16.9.0' 1024 | react-dom: '>=16.9.0' 1025 | 1026 | rc-menu@9.16.0: 1027 | resolution: {integrity: sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==} 1028 | peerDependencies: 1029 | react: '>=16.9.0' 1030 | react-dom: '>=16.9.0' 1031 | 1032 | rc-motion@2.9.3: 1033 | resolution: {integrity: sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w==} 1034 | peerDependencies: 1035 | react: '>=16.9.0' 1036 | react-dom: '>=16.9.0' 1037 | 1038 | rc-notification@5.6.2: 1039 | resolution: {integrity: sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g==} 1040 | engines: {node: '>=8.x'} 1041 | peerDependencies: 1042 | react: '>=16.9.0' 1043 | react-dom: '>=16.9.0' 1044 | 1045 | rc-overflow@1.3.2: 1046 | resolution: {integrity: sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==} 1047 | peerDependencies: 1048 | react: '>=16.9.0' 1049 | react-dom: '>=16.9.0' 1050 | 1051 | rc-pagination@4.3.0: 1052 | resolution: {integrity: sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==} 1053 | peerDependencies: 1054 | react: '>=16.9.0' 1055 | react-dom: '>=16.9.0' 1056 | 1057 | rc-picker@2.7.6: 1058 | resolution: {integrity: sha512-H9if/BUJUZBOhPfWcPeT15JUI3/ntrG9muzERrXDkSoWmDj4yzmBvumozpxYrHwjcKnjyDGAke68d+whWwvhHA==} 1059 | engines: {node: '>=8.x'} 1060 | peerDependencies: 1061 | react: '>=16.9.0' 1062 | react-dom: '>=16.9.0' 1063 | 1064 | rc-picker@4.8.1: 1065 | resolution: {integrity: sha512-lj9hXXMSkbjFUIhfQh8XH698ybxnoBOfq7pdM1FvfSyDwdFhdQa7dvsIYwo6Uz7Zp1wVkfw5rOJO3MpdWzoHsg==} 1066 | engines: {node: '>=8.x'} 1067 | peerDependencies: 1068 | date-fns: '>= 2.x' 1069 | dayjs: '>= 1.x' 1070 | luxon: '>= 3.x' 1071 | moment: '>= 2.x' 1072 | react: '>=16.9.0' 1073 | react-dom: '>=16.9.0' 1074 | peerDependenciesMeta: 1075 | date-fns: 1076 | optional: true 1077 | dayjs: 1078 | optional: true 1079 | luxon: 1080 | optional: true 1081 | moment: 1082 | optional: true 1083 | 1084 | rc-progress@4.0.0: 1085 | resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==} 1086 | peerDependencies: 1087 | react: '>=16.9.0' 1088 | react-dom: '>=16.9.0' 1089 | 1090 | rc-rate@2.13.0: 1091 | resolution: {integrity: sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==} 1092 | engines: {node: '>=8.x'} 1093 | peerDependencies: 1094 | react: '>=16.9.0' 1095 | react-dom: '>=16.9.0' 1096 | 1097 | rc-resize-observer@1.4.0: 1098 | resolution: {integrity: sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==} 1099 | peerDependencies: 1100 | react: '>=16.9.0' 1101 | react-dom: '>=16.9.0' 1102 | 1103 | rc-segmented@2.5.0: 1104 | resolution: {integrity: sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==} 1105 | peerDependencies: 1106 | react: '>=16.0.0' 1107 | react-dom: '>=16.0.0' 1108 | 1109 | rc-select@14.16.3: 1110 | resolution: {integrity: sha512-51+j6s3fJJJXB7E+B6W1hM4Tjzv1B/Decooz9ilgegDBt3ZAth1b/xMwYCTrT5BbG2e53XACQsyDib2+3Ro1fg==} 1111 | engines: {node: '>=8.x'} 1112 | peerDependencies: 1113 | react: '*' 1114 | react-dom: '*' 1115 | 1116 | rc-slider@11.1.7: 1117 | resolution: {integrity: sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A==} 1118 | engines: {node: '>=8.x'} 1119 | peerDependencies: 1120 | react: '>=16.9.0' 1121 | react-dom: '>=16.9.0' 1122 | 1123 | rc-steps@6.0.1: 1124 | resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==} 1125 | engines: {node: '>=8.x'} 1126 | peerDependencies: 1127 | react: '>=16.9.0' 1128 | react-dom: '>=16.9.0' 1129 | 1130 | rc-switch@4.1.0: 1131 | resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==} 1132 | peerDependencies: 1133 | react: '>=16.9.0' 1134 | react-dom: '>=16.9.0' 1135 | 1136 | rc-table@7.48.1: 1137 | resolution: {integrity: sha512-Z4mDKjWg+xz/Ezdw6ivWcbqRpaJ0QfCORRoRrlrw65KSGZLK8OcTdacH22/fyGb8L4It/0/9qcMm8VrVAk/WBw==} 1138 | engines: {node: '>=8.x'} 1139 | peerDependencies: 1140 | react: '>=16.9.0' 1141 | react-dom: '>=16.9.0' 1142 | 1143 | rc-tabs@15.4.0: 1144 | resolution: {integrity: sha512-llKuyiAVqmXm2z7OrmhX5cNb2ueZaL8ZyA2P4R+6/72NYYcbEgOXibwHiQCFY2RiN3swXl53SIABi2CumUS02g==} 1145 | engines: {node: '>=8.x'} 1146 | peerDependencies: 1147 | react: '>=16.9.0' 1148 | react-dom: '>=16.9.0' 1149 | 1150 | rc-textarea@1.8.2: 1151 | resolution: {integrity: sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==} 1152 | peerDependencies: 1153 | react: '>=16.9.0' 1154 | react-dom: '>=16.9.0' 1155 | 1156 | rc-tooltip@6.2.1: 1157 | resolution: {integrity: sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==} 1158 | peerDependencies: 1159 | react: '>=16.9.0' 1160 | react-dom: '>=16.9.0' 1161 | 1162 | rc-tree-select@5.24.4: 1163 | resolution: {integrity: sha512-MzljkSkk7weKOcE853UtYlXB6uyUEzcEQhhpaCwE6jQPbmBUgGiRURuKWpYUnM/dXrwTTlCK969M6Pgjj35MLA==} 1164 | peerDependencies: 1165 | react: '*' 1166 | react-dom: '*' 1167 | 1168 | rc-tree@5.10.1: 1169 | resolution: {integrity: sha512-FPXb3tT/u39mgjr6JNlHaUTYfHkVGW56XaGDahDpEFLGsnPxGcVLNTjcqoQb/GNbSCycl7tD7EvIymwOTP0+Yw==} 1170 | engines: {node: '>=10.x'} 1171 | peerDependencies: 1172 | react: '*' 1173 | react-dom: '*' 1174 | 1175 | rc-trigger@5.3.4: 1176 | resolution: {integrity: sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw==} 1177 | engines: {node: '>=8.x'} 1178 | peerDependencies: 1179 | react: '>=16.9.0' 1180 | react-dom: '>=16.9.0' 1181 | 1182 | rc-upload@4.8.1: 1183 | resolution: {integrity: sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==} 1184 | peerDependencies: 1185 | react: '>=16.9.0' 1186 | react-dom: '>=16.9.0' 1187 | 1188 | rc-util@5.43.0: 1189 | resolution: {integrity: sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==} 1190 | peerDependencies: 1191 | react: '>=16.9.0' 1192 | react-dom: '>=16.9.0' 1193 | 1194 | rc-virtual-list@3.15.0: 1195 | resolution: {integrity: sha512-dF2YQztqrU3ijAeWOqscTshCEr7vpimzSqAVjO1AyAmaqcHulaXpnGR0ptK5PXfxTUy48VkJOiglMIxlkYGs0w==} 1196 | engines: {node: '>=8.x'} 1197 | peerDependencies: 1198 | react: '>=16.9.0' 1199 | react-dom: '>=16.9.0' 1200 | 1201 | react-dom@18.3.1: 1202 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1203 | peerDependencies: 1204 | react: ^18.3.1 1205 | 1206 | react-is@16.13.1: 1207 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1208 | 1209 | react-is@18.3.1: 1210 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1211 | 1212 | react-monaco-editor@0.56.2: 1213 | resolution: {integrity: sha512-Tp5U3QF9h92Cuf0eIhGd8Jyef8tPMlEJC2Dk1GeuR/hj6WoFn8AgjVX/2dv+3l5DvpMUpAECcFarc3eFKTBZ5w==} 1214 | peerDependencies: 1215 | '@types/react': '>=16 <= 18' 1216 | monaco-editor: ^0.52.0 1217 | react: '>=16 <= 18' 1218 | 1219 | react-refresh@0.13.0: 1220 | resolution: {integrity: sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==} 1221 | engines: {node: '>=0.10.0'} 1222 | 1223 | react-refresh@0.14.2: 1224 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} 1225 | engines: {node: '>=0.10.0'} 1226 | 1227 | react-router-dom@6.28.0: 1228 | resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==} 1229 | engines: {node: '>=14.0.0'} 1230 | peerDependencies: 1231 | react: '>=16.8' 1232 | react-dom: '>=16.8' 1233 | 1234 | react-router@6.28.0: 1235 | resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==} 1236 | engines: {node: '>=14.0.0'} 1237 | peerDependencies: 1238 | react: '>=16.8' 1239 | 1240 | react@18.3.1: 1241 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1242 | engines: {node: '>=0.10.0'} 1243 | 1244 | regenerator-runtime@0.14.1: 1245 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1246 | 1247 | require-from-string@2.0.2: 1248 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1249 | engines: {node: '>=0.10.0'} 1250 | 1251 | resize-observer-polyfill@1.5.1: 1252 | resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} 1253 | 1254 | reusify@1.0.4: 1255 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1256 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1257 | 1258 | rollup@2.79.2: 1259 | resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} 1260 | engines: {node: '>=10.0.0'} 1261 | hasBin: true 1262 | 1263 | rollup@4.27.2: 1264 | resolution: {integrity: sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==} 1265 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1266 | hasBin: true 1267 | 1268 | run-parallel@1.2.0: 1269 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1270 | 1271 | safer-buffer@2.1.2: 1272 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1273 | 1274 | scheduler@0.23.2: 1275 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1276 | 1277 | scroll-into-view-if-needed@3.1.0: 1278 | resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} 1279 | 1280 | semver@6.3.1: 1281 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1282 | hasBin: true 1283 | 1284 | shallowequal@1.1.0: 1285 | resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} 1286 | 1287 | source-map-js@1.2.1: 1288 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1289 | engines: {node: '>=0.10.0'} 1290 | 1291 | sourcemap-codec@1.4.8: 1292 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1293 | deprecated: Please use @jridgewell/sourcemap-codec instead 1294 | 1295 | stream-buffers@0.2.6: 1296 | resolution: {integrity: sha512-ZRpmWyuCdg0TtNKk8bEqvm13oQvXMmzXDsfD4cBgcx5LouborvU5pm3JMkdTP3HcszyUI08AM1dHMXA5r2g6Sg==} 1297 | engines: {node: '>= 0.3.0'} 1298 | 1299 | string-convert@0.2.1: 1300 | resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} 1301 | 1302 | stylis@4.3.4: 1303 | resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} 1304 | 1305 | throttle-debounce@5.0.2: 1306 | resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} 1307 | engines: {node: '>=12.22'} 1308 | 1309 | to-regex-range@5.0.1: 1310 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1311 | engines: {node: '>=8.0'} 1312 | 1313 | toggle-selection@1.0.6: 1314 | resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} 1315 | 1316 | ts-pattern@5.5.0: 1317 | resolution: {integrity: sha512-jqbIpTsa/KKTJYWgPNsFNbLVpwCgzXfFJ1ukNn4I8hMwyQzHMJnk/BqWzggB0xpkILuKzaO/aMYhS0SkaJyKXg==} 1318 | 1319 | typescript@5.6.3: 1320 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 1321 | engines: {node: '>=14.17'} 1322 | hasBin: true 1323 | 1324 | uberproto@1.2.0: 1325 | resolution: {integrity: sha512-pGtPAQmLwh+R9w81WVHzui1FfedpQWQpiaIIfPCwhtsBez4q6DYbJFfyXPVHPUTNFnedAvNEnkoFiLuhXIR94w==} 1326 | 1327 | undici@6.21.0: 1328 | resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} 1329 | engines: {node: '>=18.17'} 1330 | 1331 | universalify@2.0.1: 1332 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 1333 | engines: {node: '>= 10.0.0'} 1334 | 1335 | update-browserslist-db@1.1.1: 1336 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} 1337 | hasBin: true 1338 | peerDependencies: 1339 | browserslist: '>= 4.21.0' 1340 | 1341 | uuid@11.0.3: 1342 | resolution: {integrity: sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==} 1343 | hasBin: true 1344 | 1345 | validate.io-array@1.0.6: 1346 | resolution: {integrity: sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==} 1347 | 1348 | validate.io-function@1.0.2: 1349 | resolution: {integrity: sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==} 1350 | 1351 | validate.io-integer-array@1.0.0: 1352 | resolution: {integrity: sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==} 1353 | 1354 | validate.io-integer@1.0.5: 1355 | resolution: {integrity: sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==} 1356 | 1357 | validate.io-number@1.0.3: 1358 | resolution: {integrity: sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==} 1359 | 1360 | vite@5.4.11: 1361 | resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} 1362 | engines: {node: ^18.0.0 || >=20.0.0} 1363 | hasBin: true 1364 | peerDependencies: 1365 | '@types/node': ^18.0.0 || >=20.0.0 1366 | less: '*' 1367 | lightningcss: ^1.21.0 1368 | sass: '*' 1369 | sass-embedded: '*' 1370 | stylus: '*' 1371 | sugarss: '*' 1372 | terser: ^5.4.0 1373 | peerDependenciesMeta: 1374 | '@types/node': 1375 | optional: true 1376 | less: 1377 | optional: true 1378 | lightningcss: 1379 | optional: true 1380 | sass: 1381 | optional: true 1382 | sass-embedded: 1383 | optional: true 1384 | stylus: 1385 | optional: true 1386 | sugarss: 1387 | optional: true 1388 | terser: 1389 | optional: true 1390 | 1391 | whatwg-encoding@3.1.1: 1392 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} 1393 | engines: {node: '>=18'} 1394 | 1395 | whatwg-mimetype@4.0.0: 1396 | resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} 1397 | engines: {node: '>=18'} 1398 | 1399 | yallist@3.1.1: 1400 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1401 | 1402 | snapshots: 1403 | 1404 | '@ampproject/remapping@2.3.0': 1405 | dependencies: 1406 | '@jridgewell/gen-mapping': 0.3.5 1407 | '@jridgewell/trace-mapping': 0.3.25 1408 | optional: true 1409 | 1410 | '@ant-design/colors@7.1.0': 1411 | dependencies: 1412 | '@ctrl/tinycolor': 3.6.1 1413 | 1414 | '@ant-design/cssinjs-utils@1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1415 | dependencies: 1416 | '@ant-design/cssinjs': 1.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1417 | '@babel/runtime': 7.26.0 1418 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1419 | react: 18.3.1 1420 | react-dom: 18.3.1(react@18.3.1) 1421 | 1422 | '@ant-design/cssinjs@1.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1423 | dependencies: 1424 | '@babel/runtime': 7.26.0 1425 | '@emotion/hash': 0.8.0 1426 | '@emotion/unitless': 0.7.5 1427 | classnames: 2.5.1 1428 | csstype: 3.1.3 1429 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1430 | react: 18.3.1 1431 | react-dom: 18.3.1(react@18.3.1) 1432 | stylis: 4.3.4 1433 | 1434 | '@ant-design/fast-color@2.0.6': 1435 | dependencies: 1436 | '@babel/runtime': 7.26.0 1437 | 1438 | '@ant-design/icons-svg@4.4.2': {} 1439 | 1440 | '@ant-design/icons@5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1441 | dependencies: 1442 | '@ant-design/colors': 7.1.0 1443 | '@ant-design/icons-svg': 4.4.2 1444 | '@babel/runtime': 7.26.0 1445 | classnames: 2.5.1 1446 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1447 | react: 18.3.1 1448 | react-dom: 18.3.1(react@18.3.1) 1449 | 1450 | '@ant-design/react-slick@1.1.2(react@18.3.1)': 1451 | dependencies: 1452 | '@babel/runtime': 7.26.0 1453 | classnames: 2.5.1 1454 | json2mq: 0.2.0 1455 | react: 18.3.1 1456 | resize-observer-polyfill: 1.5.1 1457 | throttle-debounce: 5.0.2 1458 | 1459 | '@babel/code-frame@7.26.2': 1460 | dependencies: 1461 | '@babel/helper-validator-identifier': 7.25.9 1462 | js-tokens: 4.0.0 1463 | picocolors: 1.1.1 1464 | optional: true 1465 | 1466 | '@babel/compat-data@7.26.2': 1467 | optional: true 1468 | 1469 | '@babel/core@7.26.0': 1470 | dependencies: 1471 | '@ampproject/remapping': 2.3.0 1472 | '@babel/code-frame': 7.26.2 1473 | '@babel/generator': 7.26.2 1474 | '@babel/helper-compilation-targets': 7.25.9 1475 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) 1476 | '@babel/helpers': 7.26.0 1477 | '@babel/parser': 7.26.2 1478 | '@babel/template': 7.25.9 1479 | '@babel/traverse': 7.25.9 1480 | '@babel/types': 7.26.0 1481 | convert-source-map: 2.0.0 1482 | debug: 4.3.7 1483 | gensync: 1.0.0-beta.2 1484 | json5: 2.2.3 1485 | semver: 6.3.1 1486 | transitivePeerDependencies: 1487 | - supports-color 1488 | optional: true 1489 | 1490 | '@babel/generator@7.26.2': 1491 | dependencies: 1492 | '@babel/parser': 7.26.2 1493 | '@babel/types': 7.26.0 1494 | '@jridgewell/gen-mapping': 0.3.5 1495 | '@jridgewell/trace-mapping': 0.3.25 1496 | jsesc: 3.0.2 1497 | optional: true 1498 | 1499 | '@babel/helper-compilation-targets@7.25.9': 1500 | dependencies: 1501 | '@babel/compat-data': 7.26.2 1502 | '@babel/helper-validator-option': 7.25.9 1503 | browserslist: 4.24.2 1504 | lru-cache: 5.1.1 1505 | semver: 6.3.1 1506 | optional: true 1507 | 1508 | '@babel/helper-module-imports@7.25.9': 1509 | dependencies: 1510 | '@babel/traverse': 7.25.9 1511 | '@babel/types': 7.26.0 1512 | transitivePeerDependencies: 1513 | - supports-color 1514 | optional: true 1515 | 1516 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': 1517 | dependencies: 1518 | '@babel/core': 7.26.0 1519 | '@babel/helper-module-imports': 7.25.9 1520 | '@babel/helper-validator-identifier': 7.25.9 1521 | '@babel/traverse': 7.25.9 1522 | transitivePeerDependencies: 1523 | - supports-color 1524 | optional: true 1525 | 1526 | '@babel/helper-plugin-utils@7.25.9': 1527 | optional: true 1528 | 1529 | '@babel/helper-string-parser@7.25.9': 1530 | optional: true 1531 | 1532 | '@babel/helper-validator-identifier@7.25.9': 1533 | optional: true 1534 | 1535 | '@babel/helper-validator-option@7.25.9': 1536 | optional: true 1537 | 1538 | '@babel/helpers@7.26.0': 1539 | dependencies: 1540 | '@babel/template': 7.25.9 1541 | '@babel/types': 7.26.0 1542 | optional: true 1543 | 1544 | '@babel/parser@7.26.2': 1545 | dependencies: 1546 | '@babel/types': 7.26.0 1547 | optional: true 1548 | 1549 | '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': 1550 | dependencies: 1551 | '@babel/core': 7.26.0 1552 | '@babel/helper-plugin-utils': 7.25.9 1553 | optional: true 1554 | 1555 | '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': 1556 | dependencies: 1557 | '@babel/core': 7.26.0 1558 | '@babel/helper-plugin-utils': 7.25.9 1559 | optional: true 1560 | 1561 | '@babel/runtime@7.26.0': 1562 | dependencies: 1563 | regenerator-runtime: 0.14.1 1564 | 1565 | '@babel/template@7.25.9': 1566 | dependencies: 1567 | '@babel/code-frame': 7.26.2 1568 | '@babel/parser': 7.26.2 1569 | '@babel/types': 7.26.0 1570 | optional: true 1571 | 1572 | '@babel/traverse@7.25.9': 1573 | dependencies: 1574 | '@babel/code-frame': 7.26.2 1575 | '@babel/generator': 7.26.2 1576 | '@babel/parser': 7.26.2 1577 | '@babel/template': 7.25.9 1578 | '@babel/types': 7.26.0 1579 | debug: 4.3.7 1580 | globals: 11.12.0 1581 | transitivePeerDependencies: 1582 | - supports-color 1583 | optional: true 1584 | 1585 | '@babel/types@7.26.0': 1586 | dependencies: 1587 | '@babel/helper-string-parser': 7.25.9 1588 | '@babel/helper-validator-identifier': 7.25.9 1589 | optional: true 1590 | 1591 | '@crxjs/vite-plugin@1.0.14(vite@5.4.11)': 1592 | dependencies: 1593 | '@rollup/pluginutils': 4.2.1 1594 | '@webcomponents/custom-elements': 1.6.0 1595 | acorn-walk: 8.3.4 1596 | cheerio: 1.0.0 1597 | connect-injector: 0.4.4 1598 | debug: 4.3.7 1599 | es-module-lexer: 0.10.5 1600 | fast-glob: 3.3.2 1601 | fs-extra: 10.1.0 1602 | jsesc: 3.0.2 1603 | magic-string: 0.26.7 1604 | picocolors: 1.1.1 1605 | react-refresh: 0.13.0 1606 | rollup: 2.79.2 1607 | vite: 5.4.11 1608 | optionalDependencies: 1609 | '@vitejs/plugin-react': 4.3.3(vite@5.4.11) 1610 | transitivePeerDependencies: 1611 | - supports-color 1612 | 1613 | '@ctrl/tinycolor@3.6.1': {} 1614 | 1615 | '@emotion/hash@0.8.0': {} 1616 | 1617 | '@emotion/unitless@0.7.5': {} 1618 | 1619 | '@esbuild/aix-ppc64@0.21.5': 1620 | optional: true 1621 | 1622 | '@esbuild/android-arm64@0.21.5': 1623 | optional: true 1624 | 1625 | '@esbuild/android-arm@0.21.5': 1626 | optional: true 1627 | 1628 | '@esbuild/android-x64@0.21.5': 1629 | optional: true 1630 | 1631 | '@esbuild/darwin-arm64@0.21.5': 1632 | optional: true 1633 | 1634 | '@esbuild/darwin-x64@0.21.5': 1635 | optional: true 1636 | 1637 | '@esbuild/freebsd-arm64@0.21.5': 1638 | optional: true 1639 | 1640 | '@esbuild/freebsd-x64@0.21.5': 1641 | optional: true 1642 | 1643 | '@esbuild/linux-arm64@0.21.5': 1644 | optional: true 1645 | 1646 | '@esbuild/linux-arm@0.21.5': 1647 | optional: true 1648 | 1649 | '@esbuild/linux-ia32@0.21.5': 1650 | optional: true 1651 | 1652 | '@esbuild/linux-loong64@0.21.5': 1653 | optional: true 1654 | 1655 | '@esbuild/linux-mips64el@0.21.5': 1656 | optional: true 1657 | 1658 | '@esbuild/linux-ppc64@0.21.5': 1659 | optional: true 1660 | 1661 | '@esbuild/linux-riscv64@0.21.5': 1662 | optional: true 1663 | 1664 | '@esbuild/linux-s390x@0.21.5': 1665 | optional: true 1666 | 1667 | '@esbuild/linux-x64@0.21.5': 1668 | optional: true 1669 | 1670 | '@esbuild/netbsd-x64@0.21.5': 1671 | optional: true 1672 | 1673 | '@esbuild/openbsd-x64@0.21.5': 1674 | optional: true 1675 | 1676 | '@esbuild/sunos-x64@0.21.5': 1677 | optional: true 1678 | 1679 | '@esbuild/win32-arm64@0.21.5': 1680 | optional: true 1681 | 1682 | '@esbuild/win32-ia32@0.21.5': 1683 | optional: true 1684 | 1685 | '@esbuild/win32-x64@0.21.5': 1686 | optional: true 1687 | 1688 | '@jridgewell/gen-mapping@0.3.5': 1689 | dependencies: 1690 | '@jridgewell/set-array': 1.2.1 1691 | '@jridgewell/sourcemap-codec': 1.5.0 1692 | '@jridgewell/trace-mapping': 0.3.25 1693 | optional: true 1694 | 1695 | '@jridgewell/resolve-uri@3.1.2': 1696 | optional: true 1697 | 1698 | '@jridgewell/set-array@1.2.1': 1699 | optional: true 1700 | 1701 | '@jridgewell/sourcemap-codec@1.5.0': 1702 | optional: true 1703 | 1704 | '@jridgewell/trace-mapping@0.3.25': 1705 | dependencies: 1706 | '@jridgewell/resolve-uri': 3.1.2 1707 | '@jridgewell/sourcemap-codec': 1.5.0 1708 | optional: true 1709 | 1710 | '@nodelib/fs.scandir@2.1.5': 1711 | dependencies: 1712 | '@nodelib/fs.stat': 2.0.5 1713 | run-parallel: 1.2.0 1714 | 1715 | '@nodelib/fs.stat@2.0.5': {} 1716 | 1717 | '@nodelib/fs.walk@1.2.8': 1718 | dependencies: 1719 | '@nodelib/fs.scandir': 2.1.5 1720 | fastq: 1.17.1 1721 | 1722 | '@rc-component/async-validator@5.0.4': 1723 | dependencies: 1724 | '@babel/runtime': 7.26.0 1725 | 1726 | '@rc-component/color-picker@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1727 | dependencies: 1728 | '@ant-design/fast-color': 2.0.6 1729 | '@babel/runtime': 7.26.0 1730 | classnames: 2.5.1 1731 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1732 | react: 18.3.1 1733 | react-dom: 18.3.1(react@18.3.1) 1734 | 1735 | '@rc-component/context@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1736 | dependencies: 1737 | '@babel/runtime': 7.26.0 1738 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1739 | react: 18.3.1 1740 | react-dom: 18.3.1(react@18.3.1) 1741 | 1742 | '@rc-component/mini-decimal@1.1.0': 1743 | dependencies: 1744 | '@babel/runtime': 7.26.0 1745 | 1746 | '@rc-component/mutate-observer@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1747 | dependencies: 1748 | '@babel/runtime': 7.26.0 1749 | classnames: 2.5.1 1750 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1751 | react: 18.3.1 1752 | react-dom: 18.3.1(react@18.3.1) 1753 | 1754 | '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1755 | dependencies: 1756 | '@babel/runtime': 7.26.0 1757 | classnames: 2.5.1 1758 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1759 | react: 18.3.1 1760 | react-dom: 18.3.1(react@18.3.1) 1761 | 1762 | '@rc-component/qrcode@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1763 | dependencies: 1764 | '@babel/runtime': 7.26.0 1765 | classnames: 2.5.1 1766 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1767 | react: 18.3.1 1768 | react-dom: 18.3.1(react@18.3.1) 1769 | 1770 | '@rc-component/tour@1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1771 | dependencies: 1772 | '@babel/runtime': 7.26.0 1773 | '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1774 | '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1775 | classnames: 2.5.1 1776 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1777 | react: 18.3.1 1778 | react-dom: 18.3.1(react@18.3.1) 1779 | 1780 | '@rc-component/trigger@2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1781 | dependencies: 1782 | '@babel/runtime': 7.26.0 1783 | '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1784 | classnames: 2.5.1 1785 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1786 | rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1787 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1788 | react: 18.3.1 1789 | react-dom: 18.3.1(react@18.3.1) 1790 | 1791 | '@remix-run/router@1.21.0': {} 1792 | 1793 | '@rjsf/antd@5.22.4(@ant-design/icons@5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@rjsf/core@5.22.4(@rjsf/utils@5.22.4(react@18.3.1))(react@18.3.1))(@rjsf/utils@5.22.4(react@18.3.1))(antd@5.22.1(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 1794 | dependencies: 1795 | '@ant-design/icons': 5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1796 | '@rjsf/core': 5.22.4(@rjsf/utils@5.22.4(react@18.3.1))(react@18.3.1) 1797 | '@rjsf/utils': 5.22.4(react@18.3.1) 1798 | antd: 5.22.1(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1799 | classnames: 2.5.1 1800 | dayjs: 1.11.13 1801 | lodash: 4.17.21 1802 | lodash-es: 4.17.21 1803 | rc-picker: 2.7.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1804 | react: 18.3.1 1805 | transitivePeerDependencies: 1806 | - react-dom 1807 | 1808 | '@rjsf/core@5.22.4(@rjsf/utils@5.22.4(react@18.3.1))(react@18.3.1)': 1809 | dependencies: 1810 | '@rjsf/utils': 5.22.4(react@18.3.1) 1811 | lodash: 4.17.21 1812 | lodash-es: 4.17.21 1813 | markdown-to-jsx: 7.6.2(react@18.3.1) 1814 | nanoid: 3.3.7 1815 | prop-types: 15.8.1 1816 | react: 18.3.1 1817 | 1818 | '@rjsf/utils@5.22.4(react@18.3.1)': 1819 | dependencies: 1820 | json-schema-merge-allof: 0.8.1 1821 | jsonpointer: 5.0.1 1822 | lodash: 4.17.21 1823 | lodash-es: 4.17.21 1824 | react: 18.3.1 1825 | react-is: 18.3.1 1826 | 1827 | '@rjsf/validator-ajv8@5.22.4(@rjsf/utils@5.22.4(react@18.3.1))': 1828 | dependencies: 1829 | '@rjsf/utils': 5.22.4(react@18.3.1) 1830 | ajv: 8.17.1 1831 | ajv-formats: 2.1.1(ajv@8.17.1) 1832 | lodash: 4.17.21 1833 | lodash-es: 4.17.21 1834 | 1835 | '@rollup/pluginutils@4.2.1': 1836 | dependencies: 1837 | estree-walker: 2.0.2 1838 | picomatch: 2.3.1 1839 | 1840 | '@rollup/rollup-android-arm-eabi@4.27.2': 1841 | optional: true 1842 | 1843 | '@rollup/rollup-android-arm64@4.27.2': 1844 | optional: true 1845 | 1846 | '@rollup/rollup-darwin-arm64@4.27.2': 1847 | optional: true 1848 | 1849 | '@rollup/rollup-darwin-x64@4.27.2': 1850 | optional: true 1851 | 1852 | '@rollup/rollup-freebsd-arm64@4.27.2': 1853 | optional: true 1854 | 1855 | '@rollup/rollup-freebsd-x64@4.27.2': 1856 | optional: true 1857 | 1858 | '@rollup/rollup-linux-arm-gnueabihf@4.27.2': 1859 | optional: true 1860 | 1861 | '@rollup/rollup-linux-arm-musleabihf@4.27.2': 1862 | optional: true 1863 | 1864 | '@rollup/rollup-linux-arm64-gnu@4.27.2': 1865 | optional: true 1866 | 1867 | '@rollup/rollup-linux-arm64-musl@4.27.2': 1868 | optional: true 1869 | 1870 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': 1871 | optional: true 1872 | 1873 | '@rollup/rollup-linux-riscv64-gnu@4.27.2': 1874 | optional: true 1875 | 1876 | '@rollup/rollup-linux-s390x-gnu@4.27.2': 1877 | optional: true 1878 | 1879 | '@rollup/rollup-linux-x64-gnu@4.27.2': 1880 | optional: true 1881 | 1882 | '@rollup/rollup-linux-x64-musl@4.27.2': 1883 | optional: true 1884 | 1885 | '@rollup/rollup-win32-arm64-msvc@4.27.2': 1886 | optional: true 1887 | 1888 | '@rollup/rollup-win32-ia32-msvc@4.27.2': 1889 | optional: true 1890 | 1891 | '@rollup/rollup-win32-x64-msvc@4.27.2': 1892 | optional: true 1893 | 1894 | '@types/babel__core@7.20.5': 1895 | dependencies: 1896 | '@babel/parser': 7.26.2 1897 | '@babel/types': 7.26.0 1898 | '@types/babel__generator': 7.6.8 1899 | '@types/babel__template': 7.4.4 1900 | '@types/babel__traverse': 7.20.6 1901 | optional: true 1902 | 1903 | '@types/babel__generator@7.6.8': 1904 | dependencies: 1905 | '@babel/types': 7.26.0 1906 | optional: true 1907 | 1908 | '@types/babel__template@7.4.4': 1909 | dependencies: 1910 | '@babel/parser': 7.26.2 1911 | '@babel/types': 7.26.0 1912 | optional: true 1913 | 1914 | '@types/babel__traverse@7.20.6': 1915 | dependencies: 1916 | '@babel/types': 7.26.0 1917 | optional: true 1918 | 1919 | '@types/chrome@0.0.283': 1920 | dependencies: 1921 | '@types/filesystem': 0.0.36 1922 | '@types/har-format': 1.2.16 1923 | 1924 | '@types/estree@1.0.6': {} 1925 | 1926 | '@types/filesystem@0.0.36': 1927 | dependencies: 1928 | '@types/filewriter': 0.0.33 1929 | 1930 | '@types/filewriter@0.0.33': {} 1931 | 1932 | '@types/har-format@1.2.16': {} 1933 | 1934 | '@types/history@4.7.11': {} 1935 | 1936 | '@types/prop-types@15.7.13': {} 1937 | 1938 | '@types/react-dom@18.3.1': 1939 | dependencies: 1940 | '@types/react': 18.3.12 1941 | 1942 | '@types/react-router-dom@5.3.3': 1943 | dependencies: 1944 | '@types/history': 4.7.11 1945 | '@types/react': 18.3.12 1946 | '@types/react-router': 5.1.20 1947 | 1948 | '@types/react-router@5.1.20': 1949 | dependencies: 1950 | '@types/history': 4.7.11 1951 | '@types/react': 18.3.12 1952 | 1953 | '@types/react@18.3.12': 1954 | dependencies: 1955 | '@types/prop-types': 15.7.13 1956 | csstype: 3.1.3 1957 | 1958 | '@types/uuid@10.0.0': {} 1959 | 1960 | '@vitejs/plugin-react@4.3.3(vite@5.4.11)': 1961 | dependencies: 1962 | '@babel/core': 7.26.0 1963 | '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) 1964 | '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) 1965 | '@types/babel__core': 7.20.5 1966 | react-refresh: 0.14.2 1967 | vite: 5.4.11 1968 | transitivePeerDependencies: 1969 | - supports-color 1970 | optional: true 1971 | 1972 | '@webcomponents/custom-elements@1.6.0': {} 1973 | 1974 | acorn-walk@8.3.4: 1975 | dependencies: 1976 | acorn: 8.14.0 1977 | 1978 | acorn@8.14.0: {} 1979 | 1980 | ajv-formats@2.1.1(ajv@8.17.1): 1981 | optionalDependencies: 1982 | ajv: 8.17.1 1983 | 1984 | ajv@8.17.1: 1985 | dependencies: 1986 | fast-deep-equal: 3.1.3 1987 | fast-uri: 3.0.3 1988 | json-schema-traverse: 1.0.0 1989 | require-from-string: 2.0.2 1990 | 1991 | antd@5.22.1(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 1992 | dependencies: 1993 | '@ant-design/colors': 7.1.0 1994 | '@ant-design/cssinjs': 1.22.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1995 | '@ant-design/cssinjs-utils': 1.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1996 | '@ant-design/icons': 5.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 1997 | '@ant-design/react-slick': 1.1.2(react@18.3.1) 1998 | '@babel/runtime': 7.26.0 1999 | '@ctrl/tinycolor': 3.6.1 2000 | '@rc-component/color-picker': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2001 | '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2002 | '@rc-component/qrcode': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2003 | '@rc-component/tour': 1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2004 | '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2005 | classnames: 2.5.1 2006 | copy-to-clipboard: 3.3.3 2007 | dayjs: 1.11.13 2008 | rc-cascader: 3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2009 | rc-checkbox: 3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2010 | rc-collapse: 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2011 | rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2012 | rc-drawer: 7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2013 | rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2014 | rc-field-form: 2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2015 | rc-image: 7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2016 | rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2017 | rc-input-number: 9.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2018 | rc-mentions: 2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2019 | rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2020 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2021 | rc-notification: 5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2022 | rc-pagination: 4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2023 | rc-picker: 4.8.1(date-fns@2.30.0)(dayjs@1.11.13)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2024 | rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2025 | rc-rate: 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2026 | rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2027 | rc-segmented: 2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2028 | rc-select: 14.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2029 | rc-slider: 11.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2030 | rc-steps: 6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2031 | rc-switch: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2032 | rc-table: 7.48.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2033 | rc-tabs: 15.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2034 | rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2035 | rc-tooltip: 6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2036 | rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2037 | rc-tree-select: 5.24.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2038 | rc-upload: 4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2039 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2040 | react: 18.3.1 2041 | react-dom: 18.3.1(react@18.3.1) 2042 | scroll-into-view-if-needed: 3.1.0 2043 | throttle-debounce: 5.0.2 2044 | transitivePeerDependencies: 2045 | - date-fns 2046 | - luxon 2047 | - moment 2048 | 2049 | boolbase@1.0.0: {} 2050 | 2051 | braces@3.0.3: 2052 | dependencies: 2053 | fill-range: 7.1.1 2054 | 2055 | browserslist@4.24.2: 2056 | dependencies: 2057 | caniuse-lite: 1.0.30001680 2058 | electron-to-chromium: 1.5.62 2059 | node-releases: 2.0.18 2060 | update-browserslist-db: 1.1.1(browserslist@4.24.2) 2061 | optional: true 2062 | 2063 | caniuse-lite@1.0.30001680: 2064 | optional: true 2065 | 2066 | cheerio-select@2.1.0: 2067 | dependencies: 2068 | boolbase: 1.0.0 2069 | css-select: 5.1.0 2070 | css-what: 6.1.0 2071 | domelementtype: 2.3.0 2072 | domhandler: 5.0.3 2073 | domutils: 3.1.0 2074 | 2075 | cheerio@1.0.0: 2076 | dependencies: 2077 | cheerio-select: 2.1.0 2078 | dom-serializer: 2.0.0 2079 | domhandler: 5.0.3 2080 | domutils: 3.1.0 2081 | encoding-sniffer: 0.2.0 2082 | htmlparser2: 9.1.0 2083 | parse5: 7.2.1 2084 | parse5-htmlparser2-tree-adapter: 7.1.0 2085 | parse5-parser-stream: 7.1.2 2086 | undici: 6.21.0 2087 | whatwg-mimetype: 4.0.0 2088 | 2089 | classnames@2.5.1: {} 2090 | 2091 | compute-gcd@1.2.1: 2092 | dependencies: 2093 | validate.io-array: 1.0.6 2094 | validate.io-function: 1.0.2 2095 | validate.io-integer-array: 1.0.0 2096 | 2097 | compute-lcm@1.1.2: 2098 | dependencies: 2099 | compute-gcd: 1.2.1 2100 | validate.io-array: 1.0.6 2101 | validate.io-function: 1.0.2 2102 | validate.io-integer-array: 1.0.0 2103 | 2104 | compute-scroll-into-view@3.1.0: {} 2105 | 2106 | connect-injector@0.4.4: 2107 | dependencies: 2108 | debug: 2.6.9 2109 | q: 1.5.1 2110 | stream-buffers: 0.2.6 2111 | uberproto: 1.2.0 2112 | transitivePeerDependencies: 2113 | - supports-color 2114 | 2115 | convert-source-map@2.0.0: 2116 | optional: true 2117 | 2118 | copy-to-clipboard@3.3.3: 2119 | dependencies: 2120 | toggle-selection: 1.0.6 2121 | 2122 | css-select@5.1.0: 2123 | dependencies: 2124 | boolbase: 1.0.0 2125 | css-what: 6.1.0 2126 | domhandler: 5.0.3 2127 | domutils: 3.1.0 2128 | nth-check: 2.1.1 2129 | 2130 | css-what@6.1.0: {} 2131 | 2132 | csstype@3.1.3: {} 2133 | 2134 | date-fns@2.30.0: 2135 | dependencies: 2136 | '@babel/runtime': 7.26.0 2137 | 2138 | dayjs@1.11.13: {} 2139 | 2140 | debug@2.6.9: 2141 | dependencies: 2142 | ms: 2.0.0 2143 | 2144 | debug@4.3.7: 2145 | dependencies: 2146 | ms: 2.1.3 2147 | 2148 | dom-align@1.12.4: {} 2149 | 2150 | dom-serializer@2.0.0: 2151 | dependencies: 2152 | domelementtype: 2.3.0 2153 | domhandler: 5.0.3 2154 | entities: 4.5.0 2155 | 2156 | domelementtype@2.3.0: {} 2157 | 2158 | domhandler@5.0.3: 2159 | dependencies: 2160 | domelementtype: 2.3.0 2161 | 2162 | domutils@3.1.0: 2163 | dependencies: 2164 | dom-serializer: 2.0.0 2165 | domelementtype: 2.3.0 2166 | domhandler: 5.0.3 2167 | 2168 | electron-to-chromium@1.5.62: 2169 | optional: true 2170 | 2171 | encoding-sniffer@0.2.0: 2172 | dependencies: 2173 | iconv-lite: 0.6.3 2174 | whatwg-encoding: 3.1.1 2175 | 2176 | entities@4.5.0: {} 2177 | 2178 | es-module-lexer@0.10.5: {} 2179 | 2180 | esbuild@0.21.5: 2181 | optionalDependencies: 2182 | '@esbuild/aix-ppc64': 0.21.5 2183 | '@esbuild/android-arm': 0.21.5 2184 | '@esbuild/android-arm64': 0.21.5 2185 | '@esbuild/android-x64': 0.21.5 2186 | '@esbuild/darwin-arm64': 0.21.5 2187 | '@esbuild/darwin-x64': 0.21.5 2188 | '@esbuild/freebsd-arm64': 0.21.5 2189 | '@esbuild/freebsd-x64': 0.21.5 2190 | '@esbuild/linux-arm': 0.21.5 2191 | '@esbuild/linux-arm64': 0.21.5 2192 | '@esbuild/linux-ia32': 0.21.5 2193 | '@esbuild/linux-loong64': 0.21.5 2194 | '@esbuild/linux-mips64el': 0.21.5 2195 | '@esbuild/linux-ppc64': 0.21.5 2196 | '@esbuild/linux-riscv64': 0.21.5 2197 | '@esbuild/linux-s390x': 0.21.5 2198 | '@esbuild/linux-x64': 0.21.5 2199 | '@esbuild/netbsd-x64': 0.21.5 2200 | '@esbuild/openbsd-x64': 0.21.5 2201 | '@esbuild/sunos-x64': 0.21.5 2202 | '@esbuild/win32-arm64': 0.21.5 2203 | '@esbuild/win32-ia32': 0.21.5 2204 | '@esbuild/win32-x64': 0.21.5 2205 | 2206 | escalade@3.2.0: 2207 | optional: true 2208 | 2209 | estree-walker@2.0.2: {} 2210 | 2211 | fast-deep-equal@3.1.3: {} 2212 | 2213 | fast-glob@3.3.2: 2214 | dependencies: 2215 | '@nodelib/fs.stat': 2.0.5 2216 | '@nodelib/fs.walk': 1.2.8 2217 | glob-parent: 5.1.2 2218 | merge2: 1.4.1 2219 | micromatch: 4.0.8 2220 | 2221 | fast-uri@3.0.3: {} 2222 | 2223 | fastq@1.17.1: 2224 | dependencies: 2225 | reusify: 1.0.4 2226 | 2227 | fill-range@7.1.1: 2228 | dependencies: 2229 | to-regex-range: 5.0.1 2230 | 2231 | fs-extra@10.1.0: 2232 | dependencies: 2233 | graceful-fs: 4.2.11 2234 | jsonfile: 6.1.0 2235 | universalify: 2.0.1 2236 | 2237 | fsevents@2.3.3: 2238 | optional: true 2239 | 2240 | gensync@1.0.0-beta.2: 2241 | optional: true 2242 | 2243 | glob-parent@5.1.2: 2244 | dependencies: 2245 | is-glob: 4.0.3 2246 | 2247 | globals@11.12.0: 2248 | optional: true 2249 | 2250 | graceful-fs@4.2.11: {} 2251 | 2252 | htmlparser2@9.1.0: 2253 | dependencies: 2254 | domelementtype: 2.3.0 2255 | domhandler: 5.0.3 2256 | domutils: 3.1.0 2257 | entities: 4.5.0 2258 | 2259 | iconv-lite@0.6.3: 2260 | dependencies: 2261 | safer-buffer: 2.1.2 2262 | 2263 | is-extglob@2.1.1: {} 2264 | 2265 | is-glob@4.0.3: 2266 | dependencies: 2267 | is-extglob: 2.1.1 2268 | 2269 | is-number@7.0.0: {} 2270 | 2271 | js-tokens@4.0.0: {} 2272 | 2273 | jsesc@3.0.2: {} 2274 | 2275 | json-schema-compare@0.2.2: 2276 | dependencies: 2277 | lodash: 4.17.21 2278 | 2279 | json-schema-merge-allof@0.8.1: 2280 | dependencies: 2281 | compute-lcm: 1.1.2 2282 | json-schema-compare: 0.2.2 2283 | lodash: 4.17.21 2284 | 2285 | json-schema-traverse@1.0.0: {} 2286 | 2287 | json2mq@0.2.0: 2288 | dependencies: 2289 | string-convert: 0.2.1 2290 | 2291 | json5@2.2.3: 2292 | optional: true 2293 | 2294 | jsonc-parser@3.3.1: {} 2295 | 2296 | jsonfile@6.1.0: 2297 | dependencies: 2298 | universalify: 2.0.1 2299 | optionalDependencies: 2300 | graceful-fs: 4.2.11 2301 | 2302 | jsonpointer@5.0.1: {} 2303 | 2304 | lodash-es@4.17.21: {} 2305 | 2306 | lodash@4.17.21: {} 2307 | 2308 | loose-envify@1.4.0: 2309 | dependencies: 2310 | js-tokens: 4.0.0 2311 | 2312 | lru-cache@5.1.1: 2313 | dependencies: 2314 | yallist: 3.1.1 2315 | optional: true 2316 | 2317 | magic-string@0.26.7: 2318 | dependencies: 2319 | sourcemap-codec: 1.4.8 2320 | 2321 | markdown-to-jsx@7.6.2(react@18.3.1): 2322 | dependencies: 2323 | react: 18.3.1 2324 | 2325 | merge2@1.4.1: {} 2326 | 2327 | micromatch@4.0.8: 2328 | dependencies: 2329 | braces: 3.0.3 2330 | picomatch: 2.3.1 2331 | 2332 | moment@2.30.1: {} 2333 | 2334 | monaco-editor@0.52.0: {} 2335 | 2336 | ms@2.0.0: {} 2337 | 2338 | ms@2.1.3: {} 2339 | 2340 | nanoid@3.3.7: {} 2341 | 2342 | node-releases@2.0.18: 2343 | optional: true 2344 | 2345 | nth-check@2.1.1: 2346 | dependencies: 2347 | boolbase: 1.0.0 2348 | 2349 | object-assign@4.1.1: {} 2350 | 2351 | parse5-htmlparser2-tree-adapter@7.1.0: 2352 | dependencies: 2353 | domhandler: 5.0.3 2354 | parse5: 7.2.1 2355 | 2356 | parse5-parser-stream@7.1.2: 2357 | dependencies: 2358 | parse5: 7.2.1 2359 | 2360 | parse5@7.2.1: 2361 | dependencies: 2362 | entities: 4.5.0 2363 | 2364 | picocolors@1.1.1: {} 2365 | 2366 | picomatch@2.3.1: {} 2367 | 2368 | postcss@8.4.49: 2369 | dependencies: 2370 | nanoid: 3.3.7 2371 | picocolors: 1.1.1 2372 | source-map-js: 1.2.1 2373 | 2374 | prop-types@15.8.1: 2375 | dependencies: 2376 | loose-envify: 1.4.0 2377 | object-assign: 4.1.1 2378 | react-is: 16.13.1 2379 | 2380 | q@1.5.1: {} 2381 | 2382 | queue-microtask@1.2.3: {} 2383 | 2384 | rc-align@4.0.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2385 | dependencies: 2386 | '@babel/runtime': 7.26.0 2387 | classnames: 2.5.1 2388 | dom-align: 1.12.4 2389 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2390 | react: 18.3.1 2391 | react-dom: 18.3.1(react@18.3.1) 2392 | resize-observer-polyfill: 1.5.1 2393 | 2394 | rc-cascader@3.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2395 | dependencies: 2396 | '@babel/runtime': 7.26.0 2397 | classnames: 2.5.1 2398 | rc-select: 14.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2399 | rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2400 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2401 | react: 18.3.1 2402 | react-dom: 18.3.1(react@18.3.1) 2403 | 2404 | rc-checkbox@3.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2405 | dependencies: 2406 | '@babel/runtime': 7.26.0 2407 | classnames: 2.5.1 2408 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2409 | react: 18.3.1 2410 | react-dom: 18.3.1(react@18.3.1) 2411 | 2412 | rc-collapse@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2413 | dependencies: 2414 | '@babel/runtime': 7.26.0 2415 | classnames: 2.5.1 2416 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2417 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2418 | react: 18.3.1 2419 | react-dom: 18.3.1(react@18.3.1) 2420 | 2421 | rc-dialog@9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2422 | dependencies: 2423 | '@babel/runtime': 7.26.0 2424 | '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2425 | classnames: 2.5.1 2426 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2427 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2428 | react: 18.3.1 2429 | react-dom: 18.3.1(react@18.3.1) 2430 | 2431 | rc-drawer@7.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2432 | dependencies: 2433 | '@babel/runtime': 7.26.0 2434 | '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2435 | classnames: 2.5.1 2436 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2437 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2438 | react: 18.3.1 2439 | react-dom: 18.3.1(react@18.3.1) 2440 | 2441 | rc-dropdown@4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2442 | dependencies: 2443 | '@babel/runtime': 7.26.0 2444 | '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2445 | classnames: 2.5.1 2446 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2447 | react: 18.3.1 2448 | react-dom: 18.3.1(react@18.3.1) 2449 | 2450 | rc-field-form@2.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2451 | dependencies: 2452 | '@babel/runtime': 7.26.0 2453 | '@rc-component/async-validator': 5.0.4 2454 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2455 | react: 18.3.1 2456 | react-dom: 18.3.1(react@18.3.1) 2457 | 2458 | rc-image@7.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2459 | dependencies: 2460 | '@babel/runtime': 7.26.0 2461 | '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2462 | classnames: 2.5.1 2463 | rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2464 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2465 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2466 | react: 18.3.1 2467 | react-dom: 18.3.1(react@18.3.1) 2468 | 2469 | rc-input-number@9.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2470 | dependencies: 2471 | '@babel/runtime': 7.26.0 2472 | '@rc-component/mini-decimal': 1.1.0 2473 | classnames: 2.5.1 2474 | rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2475 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2476 | react: 18.3.1 2477 | react-dom: 18.3.1(react@18.3.1) 2478 | 2479 | rc-input@1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2480 | dependencies: 2481 | '@babel/runtime': 7.26.0 2482 | classnames: 2.5.1 2483 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2484 | react: 18.3.1 2485 | react-dom: 18.3.1(react@18.3.1) 2486 | 2487 | rc-mentions@2.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2488 | dependencies: 2489 | '@babel/runtime': 7.26.0 2490 | '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2491 | classnames: 2.5.1 2492 | rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2493 | rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2494 | rc-textarea: 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2495 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2496 | react: 18.3.1 2497 | react-dom: 18.3.1(react@18.3.1) 2498 | 2499 | rc-menu@9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2500 | dependencies: 2501 | '@babel/runtime': 7.26.0 2502 | '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2503 | classnames: 2.5.1 2504 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2505 | rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2506 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2507 | react: 18.3.1 2508 | react-dom: 18.3.1(react@18.3.1) 2509 | 2510 | rc-motion@2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2511 | dependencies: 2512 | '@babel/runtime': 7.26.0 2513 | classnames: 2.5.1 2514 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2515 | react: 18.3.1 2516 | react-dom: 18.3.1(react@18.3.1) 2517 | 2518 | rc-notification@5.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2519 | dependencies: 2520 | '@babel/runtime': 7.26.0 2521 | classnames: 2.5.1 2522 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2523 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2524 | react: 18.3.1 2525 | react-dom: 18.3.1(react@18.3.1) 2526 | 2527 | rc-overflow@1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2528 | dependencies: 2529 | '@babel/runtime': 7.26.0 2530 | classnames: 2.5.1 2531 | rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2532 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2533 | react: 18.3.1 2534 | react-dom: 18.3.1(react@18.3.1) 2535 | 2536 | rc-pagination@4.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2537 | dependencies: 2538 | '@babel/runtime': 7.26.0 2539 | classnames: 2.5.1 2540 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2541 | react: 18.3.1 2542 | react-dom: 18.3.1(react@18.3.1) 2543 | 2544 | rc-picker@2.7.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2545 | dependencies: 2546 | '@babel/runtime': 7.26.0 2547 | classnames: 2.5.1 2548 | date-fns: 2.30.0 2549 | dayjs: 1.11.13 2550 | moment: 2.30.1 2551 | rc-trigger: 5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2552 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2553 | react: 18.3.1 2554 | react-dom: 18.3.1(react@18.3.1) 2555 | shallowequal: 1.1.0 2556 | 2557 | rc-picker@4.8.1(date-fns@2.30.0)(dayjs@1.11.13)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2558 | dependencies: 2559 | '@babel/runtime': 7.26.0 2560 | '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2561 | classnames: 2.5.1 2562 | rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2563 | rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2564 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2565 | react: 18.3.1 2566 | react-dom: 18.3.1(react@18.3.1) 2567 | optionalDependencies: 2568 | date-fns: 2.30.0 2569 | dayjs: 1.11.13 2570 | moment: 2.30.1 2571 | 2572 | rc-progress@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2573 | dependencies: 2574 | '@babel/runtime': 7.26.0 2575 | classnames: 2.5.1 2576 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2577 | react: 18.3.1 2578 | react-dom: 18.3.1(react@18.3.1) 2579 | 2580 | rc-rate@2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2581 | dependencies: 2582 | '@babel/runtime': 7.26.0 2583 | classnames: 2.5.1 2584 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2585 | react: 18.3.1 2586 | react-dom: 18.3.1(react@18.3.1) 2587 | 2588 | rc-resize-observer@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2589 | dependencies: 2590 | '@babel/runtime': 7.26.0 2591 | classnames: 2.5.1 2592 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2593 | react: 18.3.1 2594 | react-dom: 18.3.1(react@18.3.1) 2595 | resize-observer-polyfill: 1.5.1 2596 | 2597 | rc-segmented@2.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2598 | dependencies: 2599 | '@babel/runtime': 7.26.0 2600 | classnames: 2.5.1 2601 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2602 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2603 | react: 18.3.1 2604 | react-dom: 18.3.1(react@18.3.1) 2605 | 2606 | rc-select@14.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2607 | dependencies: 2608 | '@babel/runtime': 7.26.0 2609 | '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2610 | classnames: 2.5.1 2611 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2612 | rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2613 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2614 | rc-virtual-list: 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2615 | react: 18.3.1 2616 | react-dom: 18.3.1(react@18.3.1) 2617 | 2618 | rc-slider@11.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2619 | dependencies: 2620 | '@babel/runtime': 7.26.0 2621 | classnames: 2.5.1 2622 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2623 | react: 18.3.1 2624 | react-dom: 18.3.1(react@18.3.1) 2625 | 2626 | rc-steps@6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2627 | dependencies: 2628 | '@babel/runtime': 7.26.0 2629 | classnames: 2.5.1 2630 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2631 | react: 18.3.1 2632 | react-dom: 18.3.1(react@18.3.1) 2633 | 2634 | rc-switch@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2635 | dependencies: 2636 | '@babel/runtime': 7.26.0 2637 | classnames: 2.5.1 2638 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2639 | react: 18.3.1 2640 | react-dom: 18.3.1(react@18.3.1) 2641 | 2642 | rc-table@7.48.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2643 | dependencies: 2644 | '@babel/runtime': 7.26.0 2645 | '@rc-component/context': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2646 | classnames: 2.5.1 2647 | rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2648 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2649 | rc-virtual-list: 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2650 | react: 18.3.1 2651 | react-dom: 18.3.1(react@18.3.1) 2652 | 2653 | rc-tabs@15.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2654 | dependencies: 2655 | '@babel/runtime': 7.26.0 2656 | classnames: 2.5.1 2657 | rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2658 | rc-menu: 9.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2659 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2660 | rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2661 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2662 | react: 18.3.1 2663 | react-dom: 18.3.1(react@18.3.1) 2664 | 2665 | rc-textarea@1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2666 | dependencies: 2667 | '@babel/runtime': 7.26.0 2668 | classnames: 2.5.1 2669 | rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2670 | rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2671 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2672 | react: 18.3.1 2673 | react-dom: 18.3.1(react@18.3.1) 2674 | 2675 | rc-tooltip@6.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2676 | dependencies: 2677 | '@babel/runtime': 7.26.0 2678 | '@rc-component/trigger': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2679 | classnames: 2.5.1 2680 | react: 18.3.1 2681 | react-dom: 18.3.1(react@18.3.1) 2682 | 2683 | rc-tree-select@5.24.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2684 | dependencies: 2685 | '@babel/runtime': 7.26.0 2686 | classnames: 2.5.1 2687 | rc-select: 14.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2688 | rc-tree: 5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2689 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2690 | react: 18.3.1 2691 | react-dom: 18.3.1(react@18.3.1) 2692 | 2693 | rc-tree@5.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2694 | dependencies: 2695 | '@babel/runtime': 7.26.0 2696 | classnames: 2.5.1 2697 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2698 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2699 | rc-virtual-list: 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2700 | react: 18.3.1 2701 | react-dom: 18.3.1(react@18.3.1) 2702 | 2703 | rc-trigger@5.3.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2704 | dependencies: 2705 | '@babel/runtime': 7.26.0 2706 | classnames: 2.5.1 2707 | rc-align: 4.0.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2708 | rc-motion: 2.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2709 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2710 | react: 18.3.1 2711 | react-dom: 18.3.1(react@18.3.1) 2712 | 2713 | rc-upload@4.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2714 | dependencies: 2715 | '@babel/runtime': 7.26.0 2716 | classnames: 2.5.1 2717 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2718 | react: 18.3.1 2719 | react-dom: 18.3.1(react@18.3.1) 2720 | 2721 | rc-util@5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2722 | dependencies: 2723 | '@babel/runtime': 7.26.0 2724 | react: 18.3.1 2725 | react-dom: 18.3.1(react@18.3.1) 2726 | react-is: 18.3.1 2727 | 2728 | rc-virtual-list@3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2729 | dependencies: 2730 | '@babel/runtime': 7.26.0 2731 | classnames: 2.5.1 2732 | rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2733 | rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 2734 | react: 18.3.1 2735 | react-dom: 18.3.1(react@18.3.1) 2736 | 2737 | react-dom@18.3.1(react@18.3.1): 2738 | dependencies: 2739 | loose-envify: 1.4.0 2740 | react: 18.3.1 2741 | scheduler: 0.23.2 2742 | 2743 | react-is@16.13.1: {} 2744 | 2745 | react-is@18.3.1: {} 2746 | 2747 | react-monaco-editor@0.56.2(@types/react@18.3.12)(monaco-editor@0.52.0)(react@18.3.1): 2748 | dependencies: 2749 | '@types/react': 18.3.12 2750 | monaco-editor: 0.52.0 2751 | prop-types: 15.8.1 2752 | react: 18.3.1 2753 | 2754 | react-refresh@0.13.0: {} 2755 | 2756 | react-refresh@0.14.2: 2757 | optional: true 2758 | 2759 | react-router-dom@6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): 2760 | dependencies: 2761 | '@remix-run/router': 1.21.0 2762 | react: 18.3.1 2763 | react-dom: 18.3.1(react@18.3.1) 2764 | react-router: 6.28.0(react@18.3.1) 2765 | 2766 | react-router@6.28.0(react@18.3.1): 2767 | dependencies: 2768 | '@remix-run/router': 1.21.0 2769 | react: 18.3.1 2770 | 2771 | react@18.3.1: 2772 | dependencies: 2773 | loose-envify: 1.4.0 2774 | 2775 | regenerator-runtime@0.14.1: {} 2776 | 2777 | require-from-string@2.0.2: {} 2778 | 2779 | resize-observer-polyfill@1.5.1: {} 2780 | 2781 | reusify@1.0.4: {} 2782 | 2783 | rollup@2.79.2: 2784 | optionalDependencies: 2785 | fsevents: 2.3.3 2786 | 2787 | rollup@4.27.2: 2788 | dependencies: 2789 | '@types/estree': 1.0.6 2790 | optionalDependencies: 2791 | '@rollup/rollup-android-arm-eabi': 4.27.2 2792 | '@rollup/rollup-android-arm64': 4.27.2 2793 | '@rollup/rollup-darwin-arm64': 4.27.2 2794 | '@rollup/rollup-darwin-x64': 4.27.2 2795 | '@rollup/rollup-freebsd-arm64': 4.27.2 2796 | '@rollup/rollup-freebsd-x64': 4.27.2 2797 | '@rollup/rollup-linux-arm-gnueabihf': 4.27.2 2798 | '@rollup/rollup-linux-arm-musleabihf': 4.27.2 2799 | '@rollup/rollup-linux-arm64-gnu': 4.27.2 2800 | '@rollup/rollup-linux-arm64-musl': 4.27.2 2801 | '@rollup/rollup-linux-powerpc64le-gnu': 4.27.2 2802 | '@rollup/rollup-linux-riscv64-gnu': 4.27.2 2803 | '@rollup/rollup-linux-s390x-gnu': 4.27.2 2804 | '@rollup/rollup-linux-x64-gnu': 4.27.2 2805 | '@rollup/rollup-linux-x64-musl': 4.27.2 2806 | '@rollup/rollup-win32-arm64-msvc': 4.27.2 2807 | '@rollup/rollup-win32-ia32-msvc': 4.27.2 2808 | '@rollup/rollup-win32-x64-msvc': 4.27.2 2809 | fsevents: 2.3.3 2810 | 2811 | run-parallel@1.2.0: 2812 | dependencies: 2813 | queue-microtask: 1.2.3 2814 | 2815 | safer-buffer@2.1.2: {} 2816 | 2817 | scheduler@0.23.2: 2818 | dependencies: 2819 | loose-envify: 1.4.0 2820 | 2821 | scroll-into-view-if-needed@3.1.0: 2822 | dependencies: 2823 | compute-scroll-into-view: 3.1.0 2824 | 2825 | semver@6.3.1: 2826 | optional: true 2827 | 2828 | shallowequal@1.1.0: {} 2829 | 2830 | source-map-js@1.2.1: {} 2831 | 2832 | sourcemap-codec@1.4.8: {} 2833 | 2834 | stream-buffers@0.2.6: {} 2835 | 2836 | string-convert@0.2.1: {} 2837 | 2838 | stylis@4.3.4: {} 2839 | 2840 | throttle-debounce@5.0.2: {} 2841 | 2842 | to-regex-range@5.0.1: 2843 | dependencies: 2844 | is-number: 7.0.0 2845 | 2846 | toggle-selection@1.0.6: {} 2847 | 2848 | ts-pattern@5.5.0: {} 2849 | 2850 | typescript@5.6.3: {} 2851 | 2852 | uberproto@1.2.0: {} 2853 | 2854 | undici@6.21.0: {} 2855 | 2856 | universalify@2.0.1: {} 2857 | 2858 | update-browserslist-db@1.1.1(browserslist@4.24.2): 2859 | dependencies: 2860 | browserslist: 4.24.2 2861 | escalade: 3.2.0 2862 | picocolors: 1.1.1 2863 | optional: true 2864 | 2865 | uuid@11.0.3: {} 2866 | 2867 | validate.io-array@1.0.6: {} 2868 | 2869 | validate.io-function@1.0.2: {} 2870 | 2871 | validate.io-integer-array@1.0.0: 2872 | dependencies: 2873 | validate.io-array: 1.0.6 2874 | validate.io-integer: 1.0.5 2875 | 2876 | validate.io-integer@1.0.5: 2877 | dependencies: 2878 | validate.io-number: 1.0.3 2879 | 2880 | validate.io-number@1.0.3: {} 2881 | 2882 | vite@5.4.11: 2883 | dependencies: 2884 | esbuild: 0.21.5 2885 | postcss: 8.4.49 2886 | rollup: 4.27.2 2887 | optionalDependencies: 2888 | fsevents: 2.3.3 2889 | 2890 | whatwg-encoding@3.1.1: 2891 | dependencies: 2892 | iconv-lite: 0.6.3 2893 | 2894 | whatwg-mimetype@4.0.0: {} 2895 | 2896 | yallist@3.1.1: 2897 | optional: true 2898 | -------------------------------------------------------------------------------- /popup.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/tampery/4a7dd6d923f289cf0bed4e57a91b295494a96f8d/public/icon.png -------------------------------------------------------------------------------- /src/background.ts: -------------------------------------------------------------------------------- 1 | // // Apply change sync from remote 2 | // chrome.storage.onChanged.addListener((changes, areaName) => { 3 | // console.log("Storage change:", changes, areaName); 4 | // if (areaName === "sync" && changes.data) { 5 | // // Remove all deleted listener 6 | // Object.entries(changes.data.oldValue || {}).forEach(([id]) => { 7 | // if (!changes.data.newValue[id]) { 8 | // removeListener(id); 9 | // } 10 | // }); 11 | // // Apply new active state 12 | // Object.entries(changes.data.newValue as Data).forEach( 13 | // ([id, { name, code, active }]) => { 14 | // if (active && !mapper[id]) { 15 | // addListener(id, name, code); 16 | // } else if (!active && mapper[id]) { 17 | // removeListener(id); 18 | // } 19 | // }, 20 | // ); 21 | // } 22 | // }); 23 | -------------------------------------------------------------------------------- /src/dashboard/about.tsx: -------------------------------------------------------------------------------- 1 | import { type FC } from "react"; 2 | 3 | export const About: FC = () => ( 4 |
5 |

Tampery is an open source project.

6 |

7 | Source code here:{" "} 8 | 9 | https://github.com/pd4d10/tampery 10 | 11 |

12 |

13 | If something went wrong, please{" "} 14 | 15 | submit an issue 16 | 17 |

18 |
19 | ); 20 | -------------------------------------------------------------------------------- /src/dashboard/app.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | } 4 | 5 | .logo { 6 | width: 120px; 7 | min-width: 120px; 8 | height: 32px; 9 | background: rgba(255, 255, 255, 0.2); 10 | border-radius: 6px; 11 | margin-inline-end: 24px; 12 | } 13 | -------------------------------------------------------------------------------- /src/dashboard/app.tsx: -------------------------------------------------------------------------------- 1 | import { HashRouter, Route, Link, Routes, useNavigate } from "react-router-dom"; 2 | import React, { type FC } from "react"; 3 | import { Layout, Menu, Dropdown, Button } from "antd"; 4 | import { About } from "./about"; 5 | import { Home } from "./home"; 6 | import { Edit } from "./edit"; 7 | import { examples } from "./utils"; 8 | import { DataProvider } from "./context"; 9 | import "./app.css"; 10 | 11 | const AddScriptButton: FC = () => { 12 | const navigate = useNavigate(); 13 | return ( 14 | ({ 17 | key: index, 18 | title: example.title, 19 | onClick: async () => { 20 | navigate(`/add/${index}`); 21 | }, 22 | })), 23 | }} 24 | placement="bottomLeft" 25 | > 26 | 27 | 28 | ); 29 | }; 30 | 31 | export const App: React.FC = () => { 32 | return ( 33 | 34 | 35 | 36 | 37 |
38 | Home }, 44 | { key: "/about", label: About }, 45 | ]} 46 | /> 47 |
48 | 49 | 50 | 51 |
52 | 53 | } /> 54 | } /> 55 | } /> 56 | } /> 57 | 58 |
59 |
60 | 61 | 62 | 63 | ); 64 | }; 65 | -------------------------------------------------------------------------------- /src/dashboard/context.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | useEffect, 3 | createContext, 4 | type FC, 5 | type PropsWithChildren, 6 | useReducer, 7 | type Reducer, 8 | } from "react"; 9 | import { type Item, byIdKey, type ById, parseRule } from "../utils"; 10 | import { match } from "ts-pattern"; 11 | 12 | type State = { 13 | byId: ById; 14 | disabledRules: number[]; 15 | }; 16 | 17 | type Action = 18 | | { type: "load"; payload: ById } 19 | | { type: "add"; payload: [number, Item] } 20 | | { type: "remove"; payload: number } 21 | | { type: "enable"; payload: number } 22 | | { type: "disable"; payload: number }; 23 | 24 | const initialState: State = { 25 | byId: {}, 26 | disabledRules: [], 27 | }; 28 | 29 | type MyReducer = Reducer; 30 | 31 | export const DataContext = createContext<{ 32 | state: State; 33 | dispatch: React.Dispatch; 34 | }>({ 35 | state: initialState, 36 | dispatch: () => {}, 37 | }); 38 | 39 | export const DataProvider: FC = ({ children }) => { 40 | const [state, dispatch] = useReducer( 41 | (s, action) => 42 | match(action) 43 | .with({ type: "load" }, ({ payload: byId }) => { 44 | return { ...s, byId }; 45 | }) 46 | .with({ type: "add" }, ({ payload: [id, item] }) => { 47 | return { ...s, byId: { ...s.byId, [id]: item } }; 48 | }) 49 | .with({ type: "remove" }, ({ payload: id }) => { 50 | const { [id]: _, ...newById } = s.byId; 51 | return { 52 | ...s, 53 | byId: newById, 54 | // clean invalid ids 55 | disabledRules: s.disabledRules.filter((ruleId) => ruleId !== id), 56 | }; 57 | }) 58 | .with({ type: "enable" }, ({ payload: id }) => { 59 | return { 60 | ...s, 61 | disabledRules: s.disabledRules.filter((ruleId) => ruleId !== id), 62 | }; 63 | }) 64 | .with({ type: "disable" }, ({ payload: id }) => { 65 | return { ...s, disabledRules: [...s.disabledRules, id] }; 66 | }) 67 | .otherwise(() => s), 68 | initialState, 69 | ); 70 | 71 | useEffect(() => { 72 | chrome.storage.sync.get([byIdKey]).then((data) => { 73 | dispatch({ type: "load", payload: data[byIdKey] ?? {} }); 74 | }); 75 | }, []); 76 | 77 | useEffect(() => { 78 | chrome.declarativeNetRequest.updateDynamicRules({ 79 | removeRuleIds: Object.keys(state.byId).map(Number), 80 | addRules: Object.entries(state.byId).map(([key, item]) => { 81 | const rule = parseRule(item.rule); 82 | return { ...rule, id: parseInt(key) }; 83 | }), 84 | }); 85 | 86 | chrome.storage.sync.set({ [byIdKey]: state.byId }).then(() => { 87 | console.log("Storage set:", state.byId); 88 | }); 89 | }, [state.byId]); 90 | 91 | return ( 92 | 93 | {children} 94 | 95 | ); 96 | }; 97 | -------------------------------------------------------------------------------- /src/dashboard/edit.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect, type FC, useContext } from "react"; 2 | import MonacoEditor from "react-monaco-editor"; 3 | import { examples } from "./utils"; 4 | import { useMatch, useParams } from "react-router-dom"; 5 | import { DataContext } from "./context"; 6 | import { useNavigate } from "react-router-dom"; 7 | import { Button, Form, Input } from "antd"; 8 | import { findNewRuleId } from "../utils"; 9 | 10 | export const Edit: FC = () => { 11 | const [title, setTitle] = useState(""); 12 | const [code, setCode] = useState(""); 13 | const { state, dispatch } = useContext(DataContext); 14 | 15 | const navigate = useNavigate(); 16 | const params = useParams<{ id: string; index: string }>(); 17 | const isAdd = useMatch("/add/:id"); 18 | const isEdit = useMatch("/edit/:id"); 19 | 20 | useEffect(() => { 21 | if (!params.id) throw new Error("no id"); 22 | const currentId = parseInt(params.id); 23 | 24 | if (isAdd) { 25 | const example = examples[currentId]; 26 | if (example) { 27 | setTitle(example.title); 28 | setCode(example.code); 29 | } 30 | } else if (isEdit) { 31 | const item = state.byId[currentId]; 32 | if (item) { 33 | setTitle(item.title); 34 | setCode(item.rule); 35 | } 36 | } 37 | }, []); 38 | 39 | const formItemLayout = { 40 | labelCol: { 41 | sm: { span: 4 }, 42 | }, 43 | wrapperCol: { 44 | sm: { span: 16 }, 45 | }, 46 | }; 47 | const tailFormItemLayout = { 48 | wrapperCol: { 49 | sm: { 50 | span: 16, 51 | offset: 4, 52 | }, 53 | }, 54 | }; 55 | 56 | return ( 57 |
58 | 59 | { 62 | setTitle(e.target.value); 63 | }} 64 | /> 65 | 66 | 67 |
68 | { 76 | setCode(value); 77 | }} 78 | editorDidMount={(editor, monaco) => { 79 | // editor.focus() 80 | }} 81 | /> 82 |
83 |
84 | 85 | {" "} 103 | 110 | 111 |
112 | ); 113 | }; 114 | -------------------------------------------------------------------------------- /src/dashboard/home.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from "react"; 2 | import { Link } from "react-router-dom"; 3 | import { DataContext } from "./context"; 4 | import { Divider, Modal, Switch, Table } from "antd"; 5 | import type { ColumnsType } from "antd/es/table"; 6 | import type { Item } from "../utils"; 7 | import Form from "@rjsf/antd"; 8 | import type { RJSFSchema } from "@rjsf/utils"; 9 | import validator from "@rjsf/validator-ajv8"; 10 | import schema from "../schema/fields.json"; 11 | 12 | // { 13 | // title: "Todo", 14 | // type: "object", 15 | // required: ["title"], 16 | // properties: { 17 | // title: { type: "string", title: "Title", default: "A new task" }, 18 | // done: { type: "boolean", title: "Done?", default: false }, 19 | // }, 20 | // }; 21 | 22 | export const Home = () => { 23 | const { 24 | state: { byId, disabledRules }, 25 | dispatch, 26 | } = useContext(DataContext); 27 | 28 | const dataSource = Object.entries(byId).map(([id, item]) => ({ 29 | ...item, 30 | id: parseInt(id), 31 | key: id, 32 | })); 33 | 34 | const records: ColumnsType = [ 35 | { title: "Title" }, 36 | { 37 | title: "Enabled", 38 | render: (text, record) => { 39 | const enabled = !disabledRules.includes(record.id); 40 | 41 | return ( 42 | { 45 | dispatch({ 46 | type: enabled ? "disable" : "enable", 47 | payload: record.id, 48 | }); 49 | }} 50 | /> 51 | ); 52 | }, 53 | }, 54 | { 55 | title: "Actions", 56 | render: (text, record) => ( 57 | 58 | Edit 59 | 60 | { 63 | e.preventDefault(); 64 | 65 | Modal.confirm({ 66 | title: "Do you want to delete this item?", 67 | content: 68 | "This operation will delete this item permanently. If you want to keep the code for future use, disable it instead.", 69 | onOk: async () => { 70 | dispatch({ type: "remove", payload: record.id }); 71 | }, 72 | onCancel() {}, 73 | }); 74 | }} 75 | > 76 | Delete 77 | 78 | 79 | ), 80 | }, 81 | ]; 82 | 83 | return ( 84 |
85 |
{ 89 | // 90 | }} 91 | onSubmit={(data) => { 92 | // 93 | }} 94 | onError={(errors) => { 95 | // 96 | }} 97 | /> 98 |
99 | {dataSource.length ? ( 100 |
101 | 102 | 103 | ) : ( 104 |
105 |

Seems we don't have any scripts yet.

106 |

Click add button at top right corner to add a new one :)

107 |
108 | )} 109 | 110 | 111 | ); 112 | }; 113 | -------------------------------------------------------------------------------- /src/dashboard/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from "react-dom/client"; 2 | import { App } from "./app"; 3 | 4 | const root = document.createElement("div"); 5 | root.style.height = "100%"; 6 | document.body.appendChild(root); 7 | createRoot(root).render(); 8 | -------------------------------------------------------------------------------- /src/dashboard/utils.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import exampleBlank from "../examples/blank.jsonc?raw"; 3 | import exampleChangeUserAgent from "../examples/change-user-agent.jsonc?raw"; 4 | import exampleAllowCors from "../examples/allow-cors.jsonc?raw"; 5 | 6 | export const examples = [ 7 | { title: "Blank", code: exampleBlank }, 8 | { title: "Change User-Agent", code: exampleChangeUserAgent }, 9 | { title: "Allow CORS", code: exampleAllowCors }, 10 | ]; 11 | -------------------------------------------------------------------------------- /src/examples/allow-cors.jsonc: -------------------------------------------------------------------------------- 1 | /** 2 | * Allow CORS for every site by adding `Access-Control-Allow-Origin: *` to response headers 3 | * This script may break some sites, because when it is set to `*`, 4 | * it does not allow requests to supply credentials like cookies 5 | * Please change filter.urls before use 6 | */ 7 | { 8 | "action": { 9 | "type": "modifyHeaders", 10 | "responseHeaders": [ 11 | { 12 | "header": "Access-Control-Allow-Origin", 13 | "operation": "set", 14 | "value": "*" 15 | } 16 | ] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/examples/blank.jsonc: -------------------------------------------------------------------------------- 1 | /** 2 | * An exmaple script which does nothing 3 | * 4 | * chrome.webRequest[{{lifecycle}}].addListener( 5 | * {{callback}}, 6 | * {{filter}}, 7 | * {{extraInfoSpec}}, 8 | * ) 9 | * 10 | * For more information, please see webRequest documentation: 11 | * https://developer.chrome.com/extensions/webRequest 12 | * https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest 13 | */ 14 | { 15 | "action": { 16 | "type": "block" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/examples/change-user-agent.jsonc: -------------------------------------------------------------------------------- 1 | /** 2 | * This script changes all requests' User-Agent to iOS Safari 3 | * Change myUserAgent below to apply another UA 4 | */ 5 | { 6 | "action": { 7 | "type": "modifyHeaders", 8 | "responseHeaders": [ 9 | { 10 | "header": "User-Agent", 11 | "operation": "set", 12 | "value": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1" 13 | } 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/popup.tsx: -------------------------------------------------------------------------------- 1 | import { type FC, useEffect, useState } from "react"; 2 | import { createRoot } from "react-dom/client"; 3 | import { List, Switch } from "antd"; 4 | 5 | const App: FC = () => { 6 | const [data, setData] = useState({}); 7 | const updateDataFromStorage = async () => { 8 | // 9 | }; 10 | useEffect(() => { 11 | // 12 | }, []); 13 | const handleToggleActive = async (id: string) => { 14 | if (data[id].active) { 15 | // 16 | } else { 17 | // 18 | } 19 | await updateDataFromStorage(); 20 | }; 21 | return ( 22 |
23 | Header
} 25 | footer={ 26 | 30 | Open dashboard 31 | 32 | } 33 | bordered 34 | dataSource={Object.keys(data)} 35 | renderItem={(id) => ( 36 | 37 |
{data[id].name}
38 | handleToggleActive(id)} 41 | /> 42 |
43 | )} 44 | /> 45 | 46 | ); 47 | }; 48 | 49 | const root = document.createElement("div"); 50 | document.body.appendChild(root); 51 | createRoot(root).render(); 52 | -------------------------------------------------------------------------------- /src/schema/README.md: -------------------------------------------------------------------------------- 1 | ```sh 2 | npx ts-json-schema-generator --path fields.ts 3 | ``` 4 | -------------------------------------------------------------------------------- /src/schema/fields.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "definitions": { 4 | "DomainType": { 5 | "description": "TThis describes whether the request is first or third party to the frame in which it originated. A request is said to be first party if it has the same domain (eTLD+1) as the frame in which the request originated.", 6 | "enum": [ 7 | "firstParty", 8 | "thirdParty" 9 | ], 10 | "type": "string" 11 | }, 12 | "ExtensionActionOptions": { 13 | "additionalProperties": false, 14 | "properties": { 15 | "displayActionCountAsBadgeText": { 16 | "description": "Whether to automatically display the action count for a page as the extension's badge text. This preference is persisted across sessions.", 17 | "type": "boolean" 18 | }, 19 | "tabUpdate": { 20 | "$ref": "#/definitions/TabActionCountUpdate", 21 | "description": "Details of how the tab's action count should be adjusted." 22 | } 23 | }, 24 | "type": "object" 25 | }, 26 | "HeaderOperation": { 27 | "description": "This describes the possible operations for a \"modifyHeaders\" rule.", 28 | "enum": [ 29 | "append", 30 | "set", 31 | "remove" 32 | ], 33 | "type": "string" 34 | }, 35 | "IsRegexSupportedResult": { 36 | "additionalProperties": false, 37 | "properties": { 38 | "isSupported": { 39 | "type": "boolean" 40 | }, 41 | "reason": { 42 | "$ref": "#/definitions/UnsupportedRegexReason", 43 | "description": "Specifies the reason why the regular expression is not supported. Only provided if isSupported is false." 44 | } 45 | }, 46 | "required": [ 47 | "isSupported" 48 | ], 49 | "type": "object" 50 | }, 51 | "MatchedRule": { 52 | "additionalProperties": false, 53 | "properties": { 54 | "ruleId": { 55 | "description": "A matching rule's ID.", 56 | "type": "number" 57 | }, 58 | "rulesetId": { 59 | "description": "ID of the Ruleset this rule belongs to. For a rule originating from the set of dynamic rules, this will be equal to DYNAMIC_RULESET_ID.", 60 | "type": "string" 61 | } 62 | }, 63 | "required": [ 64 | "ruleId", 65 | "rulesetId" 66 | ], 67 | "type": "object" 68 | }, 69 | "MatchedRuleInfo": { 70 | "additionalProperties": false, 71 | "properties": { 72 | "rule": { 73 | "$ref": "#/definitions/MatchedRule" 74 | }, 75 | "tabId": { 76 | "description": "The tabId of the tab from which the request originated if the tab is still active. Else -1.", 77 | "type": "number" 78 | }, 79 | "timeStamp": { 80 | "description": "The time the rule was matched. Timestamps will correspond to the Javascript convention for times, i.e. number of milliseconds since the epoch.", 81 | "type": "number" 82 | } 83 | }, 84 | "required": [ 85 | "rule", 86 | "tabId", 87 | "timeStamp" 88 | ], 89 | "type": "object" 90 | }, 91 | "MatchedRuleInfoDebug": { 92 | "additionalProperties": false, 93 | "properties": { 94 | "request": { 95 | "$ref": "#/definitions/RequestDetails", 96 | "description": "Details about the request for which the rule was matched." 97 | }, 98 | "rule": { 99 | "$ref": "#/definitions/MatchedRule" 100 | } 101 | }, 102 | "required": [ 103 | "request", 104 | "rule" 105 | ], 106 | "type": "object" 107 | }, 108 | "MatchedRulesFilter": { 109 | "additionalProperties": false, 110 | "properties": { 111 | "minTimeStamp": { 112 | "description": "If specified, only matches rules after the given timestamp.", 113 | "type": "number" 114 | }, 115 | "tabId": { 116 | "description": "If specified, only matches rules for the given tab. Matches rules not associated with any active tab if set to -1.", 117 | "type": "number" 118 | } 119 | }, 120 | "type": "object" 121 | }, 122 | "ModifyHeaderInfo": { 123 | "additionalProperties": false, 124 | "properties": { 125 | "header": { 126 | "description": "The name of the header to be modified.", 127 | "type": "string" 128 | }, 129 | "operation": { 130 | "$ref": "#/definitions/HeaderOperation", 131 | "description": "The operation to be performed on a header." 132 | }, 133 | "value": { 134 | "description": "The new value for the header. Must be specified for append and set operations.", 135 | "type": "string" 136 | } 137 | }, 138 | "required": [ 139 | "header", 140 | "operation" 141 | ], 142 | "type": "object" 143 | }, 144 | "QueryKeyValue": { 145 | "additionalProperties": false, 146 | "properties": { 147 | "key": { 148 | "type": "string" 149 | }, 150 | "value": { 151 | "type": "string" 152 | } 153 | }, 154 | "required": [ 155 | "key", 156 | "value" 157 | ], 158 | "type": "object" 159 | }, 160 | "QueryTransform": { 161 | "additionalProperties": false, 162 | "properties": { 163 | "addOrReplaceParams": { 164 | "description": "The list of query key-value pairs to be added or replaced.", 165 | "items": { 166 | "$ref": "#/definitions/QueryKeyValue" 167 | }, 168 | "type": "array" 169 | }, 170 | "removeParams": { 171 | "description": "The list of query keys to be removed.", 172 | "items": { 173 | "type": "string" 174 | }, 175 | "type": "array" 176 | } 177 | }, 178 | "type": "object" 179 | }, 180 | "Redirect": { 181 | "additionalProperties": false, 182 | "properties": { 183 | "extensionPath": { 184 | "description": "Path relative to the extension directory. Should start with '/'.", 185 | "type": "string" 186 | }, 187 | "regexSubstitution": { 188 | "description": "Substitution pattern for rules which specify a regexFilter. The first match of regexFilter within the url will be replaced with this pattern. Within regexSubstitution, backslash-escaped digits (\\1 to \\9) can be used to insert the corresponding capture groups. \\0 refers to the entire matching text.", 189 | "type": "string" 190 | }, 191 | "transform": { 192 | "$ref": "#/definitions/URLTransform", 193 | "description": "Url transformations to perform." 194 | }, 195 | "url": { 196 | "description": "The redirect url. Redirects to JavaScript urls are not allowed.", 197 | "type": "string" 198 | } 199 | }, 200 | "type": "object" 201 | }, 202 | "RegexOptions": { 203 | "additionalProperties": false, 204 | "properties": { 205 | "isCaseSensitive": { 206 | "description": "Whether the regex specified is case sensitive. Default is true.", 207 | "type": "boolean" 208 | }, 209 | "regex": { 210 | "description": "The regular expression to check.", 211 | "type": "string" 212 | }, 213 | "requireCapturing": { 214 | "description": "Whether the regex specified requires capturing. Capturing is only required for redirect rules which specify a regexSubstitution action. The default is false.", 215 | "type": "boolean" 216 | } 217 | }, 218 | "required": [ 219 | "regex" 220 | ], 221 | "type": "object" 222 | }, 223 | "RequestDetails": { 224 | "additionalProperties": false, 225 | "properties": { 226 | "frameId": { 227 | "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (type is main_frame or sub_frame), frameId indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab.", 228 | "type": "number" 229 | }, 230 | "initiator": { 231 | "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used.", 232 | "type": "string" 233 | }, 234 | "method": { 235 | "description": "Standard HTTP method.", 236 | "type": "string" 237 | }, 238 | "partentFrameId": { 239 | "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists.", 240 | "type": "number" 241 | }, 242 | "requestId": { 243 | "description": "The ID of the request. Request IDs are unique within a browser session.", 244 | "type": "string" 245 | }, 246 | "tabId": { 247 | "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab.", 248 | "type": "number" 249 | }, 250 | "type": { 251 | "$ref": "#/definitions/ResourceType", 252 | "description": "The resource type of the request." 253 | }, 254 | "url": { 255 | "description": "The URL of the request.", 256 | "type": "string" 257 | } 258 | }, 259 | "required": [ 260 | "frameId", 261 | "method", 262 | "partentFrameId", 263 | "requestId", 264 | "tabId", 265 | "type", 266 | "url" 267 | ], 268 | "type": "object" 269 | }, 270 | "RequestMethod": { 271 | "description": "This describes the HTTP request method of a network request.", 272 | "enum": [ 273 | "connect", 274 | "delete", 275 | "get", 276 | "head", 277 | "options", 278 | "patch", 279 | "post", 280 | "put" 281 | ], 282 | "type": "string" 283 | }, 284 | "ResourceType": { 285 | "description": "This describes the resource type of the network request.", 286 | "enum": [ 287 | "main_frame", 288 | "sub_frame", 289 | "stylesheet", 290 | "script", 291 | "image", 292 | "font", 293 | "object", 294 | "xmlhttprequest", 295 | "ping", 296 | "csp_report", 297 | "media", 298 | "websocket", 299 | "other" 300 | ], 301 | "type": "string" 302 | }, 303 | "Rule": { 304 | "additionalProperties": false, 305 | "properties": { 306 | "action": { 307 | "$ref": "#/definitions/RuleAction", 308 | "description": "The action to take if this rule is matched." 309 | }, 310 | "condition": { 311 | "$ref": "#/definitions/RuleCondition", 312 | "description": "The condition under which this rule is triggered." 313 | }, 314 | "id": { 315 | "description": "An id which uniquely identifies a rule. Mandatory and should be >= 1.", 316 | "type": "number" 317 | }, 318 | "priority": { 319 | "description": "Rule priority. Defaults to 1. When specified, should be >= 1.", 320 | "type": "number" 321 | } 322 | }, 323 | "required": [ 324 | "action", 325 | "condition", 326 | "id" 327 | ], 328 | "type": "object" 329 | }, 330 | "RuleAction": { 331 | "additionalProperties": false, 332 | "properties": { 333 | "redirect": { 334 | "$ref": "#/definitions/Redirect", 335 | "description": "Describes how the redirect should be performed. Only valid for redirect rules." 336 | }, 337 | "requestHeaders": { 338 | "description": "The request headers to modify for the request. Only valid if RuleActionType is \"modifyHeaders\".", 339 | "items": { 340 | "$ref": "#/definitions/ModifyHeaderInfo" 341 | }, 342 | "type": "array" 343 | }, 344 | "responseHeaders": { 345 | "description": "The response headers to modify for the request. Only valid if RuleActionType is \"modifyHeaders\".", 346 | "items": { 347 | "$ref": "#/definitions/ModifyHeaderInfo" 348 | }, 349 | "type": "array" 350 | }, 351 | "type": { 352 | "$ref": "#/definitions/RuleActionType", 353 | "description": "The type of action to perform." 354 | } 355 | }, 356 | "required": [ 357 | "type" 358 | ], 359 | "type": "object" 360 | }, 361 | "RuleActionType": { 362 | "description": "Describes the kind of action to take if a given RuleCondition matches.", 363 | "enum": [ 364 | "block", 365 | "redirect", 366 | "allow", 367 | "upgradeScheme", 368 | "modifyHeaders", 369 | "allowAllRequests" 370 | ], 371 | "type": "string" 372 | }, 373 | "RuleCondition": { 374 | "additionalProperties": false, 375 | "properties": { 376 | "domainType": { 377 | "$ref": "#/definitions/DomainType", 378 | "description": "Specifies whether the network request is first-party or third-party to the domain from which it originated. If omitted, all requests are accepted." 379 | }, 380 | "domains": { 381 | "deprecated": "since Chrome 101. Use initiatorDomains instead.\n\nThe rule will only match network requests originating from the list of domains.\nIf the list is omitted, the rule is applied to requests from all domains.\nAn empty list is not allowed.\n\nNotes:\nSub-domains like \"a.example.com\" are also allowed.\nThe entries must consist of only ascii characters.\nUse punycode encoding for internationalized domains.\nThis matches against the request initiator and not the request url.", 382 | "items": { 383 | "type": "string" 384 | }, 385 | "type": "array" 386 | }, 387 | "excludedDomains": { 388 | "deprecated": "since Chrome 101. Use excludedInitiatorDomains instead\n\nThe rule will not match network requests originating from the list of excludedDomains.\nIf the list is empty or omitted, no domains are excluded.\nThis takes precedence over domains.\n\nNotes:\nSub-domains like \"a.example.com\" are also allowed.\nThe entries must consist of only ascii characters.\nUse punycode encoding for internationalized domains.\nThis matches against the request initiator and not the request url.", 389 | "items": { 390 | "type": "string" 391 | }, 392 | "type": "array" 393 | }, 394 | "excludedInitiatorDomains": { 395 | "description": "The rule will not match network requests originating from the list of excludedInitiatorDomains. If the list is empty or omitted, no domains are excluded. This takes precedence over initiatorDomains.\n\nNotes: Sub-domains like \"a.example.com\" are also allowed. The entries must consist of only ascii characters. Use punycode encoding for internationalized domains. This matches against the request initiator and not the request url.", 396 | "items": { 397 | "type": "string" 398 | }, 399 | "type": "array" 400 | }, 401 | "excludedRequestDomains": { 402 | "description": "The rule will not match network requests when the domains matches one from the list of excludedRequestDomains. If the list is empty or omitted, no domains are excluded. This takes precedence over requestDomains.\n\nNotes: Sub-domains like \"a.example.com\" are also allowed. The entries must consist of only ascii characters. Use punycode encoding for internationalized domains.", 403 | "items": { 404 | "type": "string" 405 | }, 406 | "type": "array" 407 | }, 408 | "excludedRequestMethods": { 409 | "description": "List of request methods which the rule won't match. Only one of requestMethods and excludedRequestMethods should be specified. If neither of them is specified, all request methods are matched.", 410 | "items": { 411 | "$ref": "#/definitions/RequestMethod" 412 | }, 413 | "type": "array" 414 | }, 415 | "excludedResourceTypes": { 416 | "description": "List of resource types which the rule won't match. Only one of {@link chrome.declarativeNetRequest.RuleCondition.resourceTypes } and {@link chrome.declarativeNetRequest.RuleCondition.excludedResourceTypes } should be specified. If neither of them is specified, all resource types except \"main_frame\" are blocked.", 417 | "items": { 418 | "$ref": "#/definitions/ResourceType" 419 | }, 420 | "type": "array" 421 | }, 422 | "excludedTabIds": { 423 | "description": "List of {@link chrome.tabs.Tab.id } which the rule should not match. An ID of {@link chrome.tabs.TAB_ID_NONE } excludes requests which don't originate from a tab. Only supported for session-scoped rules.", 424 | "items": { 425 | "type": "number" 426 | }, 427 | "type": "array" 428 | }, 429 | "initiatorDomains": { 430 | "description": "The rule will only match network requests originating from the list of initiatorDomains. If the list is omitted, the rule is applied to requests from all domains. An empty list is not allowed.\n\nNotes: Sub-domains like \"a.example.com\" are also allowed. The entries must consist of only ascii characters. Use punycode encoding for internationalized domains. This matches against the request initiator and not the request url.", 431 | "items": { 432 | "type": "string" 433 | }, 434 | "type": "array" 435 | }, 436 | "isUrlFilterCaseSensitive": { 437 | "default": "false Before Chrome 118 the default was true.", 438 | "description": "Whether the urlFilter or regexFilter (whichever is specified) is case sensitive.", 439 | "type": "boolean" 440 | }, 441 | "regexFilter": { 442 | "description": "Regular expression to match against the network request url. This follows the RE2 syntax.\n\nNote: Only one of urlFilter or regexFilter can be specified.\n\nNote: The regexFilter must be composed of only ASCII characters. This is matched against a url where the host is encoded in the punycode format (in case of internationalized domains) and any other non-ascii characters are url encoded in utf-8.", 443 | "type": "string" 444 | }, 445 | "requestDomains": { 446 | "description": "The rule will only match network requests when the domain matches one from the list of requestDomains. If the list is omitted, the rule is applied to requests from all domains. An empty list is not allowed.\n\nNotes: Sub-domains like \"a.example.com\" are also allowed. The entries must consist of only ascii characters. Use punycode encoding for internationalized domains.", 447 | "items": { 448 | "type": "string" 449 | }, 450 | "type": "array" 451 | }, 452 | "requestMethods": { 453 | "description": "List of HTTP request methods which the rule can match. An empty list is not allowed. Note: Specifying a {@link chrome.declarativeNetRequest.RuleCondition.requestMethods } rule condition will also exclude non-HTTP(s) requests, whereas specifying {@link chrome.declarativeNetRequest.RuleCondition.excludedRequestMethods } will not.", 454 | "items": { 455 | "$ref": "#/definitions/RequestMethod" 456 | }, 457 | "type": "array" 458 | }, 459 | "resourceTypes": { 460 | "description": "List of resource types which the rule can match. An empty list is not allowed.\n\nNote: this must be specified for allowAllRequests rules and may only include the sub_frame and main_frame resource types.", 461 | "items": { 462 | "$ref": "#/definitions/ResourceType" 463 | }, 464 | "type": "array" 465 | }, 466 | "tabIds": { 467 | "description": "List of {@link chrome.tabs.Tab.id } which the rule should not match. An ID of {@link chrome.tabs.TAB_ID_NONE } excludes requests which don't originate from a tab. An empty list is not allowed. Only supported for session-scoped rules.", 468 | "items": { 469 | "type": "number" 470 | }, 471 | "type": "array" 472 | }, 473 | "urlFilter": { 474 | "description": "The pattern which is matched against the network request url. Supported constructs:\n\n'*' : Wildcard: Matches any number of characters.\n\n'|' : Left/right anchor: If used at either end of the pattern, specifies the beginning/end of the url respectively.\n\n'||' : Domain name anchor: If used at the beginning of the pattern, specifies the start of a (sub-)domain of the URL.\n\n'^' : Separator character: This matches anything except a letter, a digit or one of the following: _ - . %. This can also match the end of the URL.\n\nTherefore urlFilter is composed of the following parts: (optional Left/Domain name anchor) + pattern + (optional Right anchor).\n\nIf omitted, all urls are matched. An empty string is not allowed.\n\nA pattern beginning with || is not allowed. Use instead.\n\nNote: Only one of urlFilter or regexFilter can be specified.\n\nNote: The urlFilter must be composed of only ASCII characters. This is matched against a url where the host is encoded in the punycode format (in case of internationalized domains) and any other non-ascii characters are url encoded in utf-8. For example, when the request url is http://abc.рф?q=ф, the urlFilter will be matched against the url http://abc.xn--p1ai/?q=%D1%84.", 475 | "type": "string" 476 | } 477 | }, 478 | "type": "object" 479 | }, 480 | "RulesMatchedDetails": { 481 | "additionalProperties": false, 482 | "properties": { 483 | "rulesMatchedInfo": { 484 | "description": "Rules matching the given filter.", 485 | "items": { 486 | "$ref": "#/definitions/MatchedRuleInfo" 487 | }, 488 | "type": "array" 489 | } 490 | }, 491 | "required": [ 492 | "rulesMatchedInfo" 493 | ], 494 | "type": "object" 495 | }, 496 | "Ruleset": { 497 | "additionalProperties": false, 498 | "properties": { 499 | "enabled": { 500 | "description": "Whether the ruleset is enabled by default.", 501 | "type": "boolean" 502 | }, 503 | "id": { 504 | "description": "A non-empty string uniquely identifying the ruleset. IDs beginning with '_' are reserved for internal use.", 505 | "type": "string" 506 | }, 507 | "path": { 508 | "description": "The path of the JSON ruleset relative to the extension directory.", 509 | "type": "string" 510 | } 511 | }, 512 | "required": [ 513 | "enabled", 514 | "id", 515 | "path" 516 | ], 517 | "type": "object" 518 | }, 519 | "TabActionCountUpdate": { 520 | "additionalProperties": false, 521 | "properties": { 522 | "increment": { 523 | "description": "The amount to increment the tab's action count by. Negative values will decrement the count", 524 | "type": "number" 525 | }, 526 | "tabId": { 527 | "description": "The tab for which to update the action count.", 528 | "type": "number" 529 | } 530 | }, 531 | "required": [ 532 | "increment", 533 | "tabId" 534 | ], 535 | "type": "object" 536 | }, 537 | "URLTransform": { 538 | "additionalProperties": false, 539 | "properties": { 540 | "fragment": { 541 | "description": "The new fragment for the request. Should be either empty, in which case the existing fragment is cleared; or should begin with '#'.", 542 | "type": "string" 543 | }, 544 | "host": { 545 | "description": "The new host for the request.", 546 | "type": "string" 547 | }, 548 | "password": { 549 | "description": "The new password for the request.", 550 | "type": "string" 551 | }, 552 | "path": { 553 | "description": "The new path for the request. If empty, the existing path is cleared.", 554 | "type": "string" 555 | }, 556 | "port": { 557 | "description": "The new port for the request. If empty, the existing port is cleared.", 558 | "type": "string" 559 | }, 560 | "query": { 561 | "description": "The new query for the request. Should be either empty, in which case the existing query is cleared; or should begin with '?'.", 562 | "type": "string" 563 | }, 564 | "queryTransform": { 565 | "$ref": "#/definitions/QueryTransform", 566 | "description": "Add, remove or replace query key-value pairs." 567 | }, 568 | "scheme": { 569 | "description": "The new scheme for the request. Allowed values are \"http\", \"https\", \"ftp\" and \"chrome-extension\".", 570 | "type": "string" 571 | }, 572 | "username": { 573 | "description": "The new username for the request.", 574 | "type": "string" 575 | } 576 | }, 577 | "type": "object" 578 | }, 579 | "UnsupportedRegexReason": { 580 | "description": "Describes the reason why a given regular expression isn't supported.", 581 | "enum": [ 582 | "syntaxError", 583 | "memoryLimitExceeded" 584 | ], 585 | "type": "string" 586 | }, 587 | "UpdateRuleOptions": { 588 | "additionalProperties": false, 589 | "properties": { 590 | "addRules": { 591 | "description": "Rules to add.", 592 | "items": { 593 | "$ref": "#/definitions/Rule" 594 | }, 595 | "type": "array" 596 | }, 597 | "removeRuleIds": { 598 | "description": "IDs of the rules to remove. Any invalid IDs will be ignored.", 599 | "items": { 600 | "type": "number" 601 | }, 602 | "type": "array" 603 | } 604 | }, 605 | "type": "object" 606 | }, 607 | "UpdateRulesetOptions": { 608 | "additionalProperties": false, 609 | "properties": { 610 | "disableRulesetIds": { 611 | "description": "The set of ids corresponding to a static Ruleset that should be disabled.", 612 | "items": { 613 | "type": "string" 614 | }, 615 | "type": "array" 616 | }, 617 | "enableRulesetIds": { 618 | "description": "The set of ids corresponding to a static Ruleset that should be enabled.", 619 | "items": { 620 | "type": "string" 621 | }, 622 | "type": "array" 623 | } 624 | }, 625 | "type": "object" 626 | }, 627 | "UpdateStaticRulesOptions": { 628 | "additionalProperties": false, 629 | "properties": { 630 | "disableRuleIds": { 631 | "description": "Set of ids corresponding to rules in the Ruleset to disable.", 632 | "items": { 633 | "type": "number" 634 | }, 635 | "type": "array" 636 | }, 637 | "enableRuleIds": { 638 | "description": "Set of ids corresponding to rules in the Ruleset to enable.", 639 | "items": { 640 | "type": "number" 641 | }, 642 | "type": "array" 643 | }, 644 | "rulesetId": { 645 | "description": "The id corresponding to a static Ruleset.", 646 | "type": "string" 647 | } 648 | }, 649 | "required": [ 650 | "rulesetId" 651 | ], 652 | "type": "object" 653 | } 654 | } 655 | } 656 | -------------------------------------------------------------------------------- /src/schema/fields.ts: -------------------------------------------------------------------------------- 1 | /** This describes the HTTP request method of a network request. */ 2 | export enum RequestMethod { 3 | CONNECT = "connect", 4 | DELETE = "delete", 5 | GET = "get", 6 | HEAD = "head", 7 | OPTIONS = "options", 8 | PATCH = "patch", 9 | POST = "post", 10 | PUT = "put", 11 | } 12 | 13 | /** This describes the resource type of the network request. */ 14 | export enum ResourceType { 15 | MAIN_FRAME = "main_frame", 16 | SUB_FRAME = "sub_frame", 17 | STYLESHEET = "stylesheet", 18 | SCRIPT = "script", 19 | IMAGE = "image", 20 | FONT = "font", 21 | OBJECT = "object", 22 | XMLHTTPREQUEST = "xmlhttprequest", 23 | PING = "ping", 24 | CSP_REPORT = "csp_report", 25 | MEDIA = "media", 26 | WEBSOCKET = "websocket", 27 | OTHER = "other", 28 | } 29 | 30 | /** Describes the kind of action to take if a given RuleCondition matches. */ 31 | export enum RuleActionType { 32 | BLOCK = "block", 33 | REDIRECT = "redirect", 34 | ALLOW = "allow", 35 | UPGRADE_SCHEME = "upgradeScheme", 36 | MODIFY_HEADERS = "modifyHeaders", 37 | ALLOW_ALL_REQUESTS = "allowAllRequests", 38 | } 39 | 40 | /** Describes the reason why a given regular expression isn't supported. */ 41 | export enum UnsupportedRegexReason { 42 | SYNTAX_ERROR = "syntaxError", 43 | MEMORY_LIMIT_EXCEEDED = "memoryLimitExceeded", 44 | } 45 | 46 | /** TThis describes whether the request is first or third party to the frame in which it originated. 47 | * A request is said to be first party if it has the same domain (eTLD+1) as the frame in which the request originated. 48 | */ 49 | export enum DomainType { 50 | FIRST_PARTY = "firstParty", 51 | THIRD_PARTY = "thirdParty", 52 | } 53 | 54 | /** This describes the possible operations for a "modifyHeaders" rule. */ 55 | export enum HeaderOperation { 56 | APPEND = "append", 57 | SET = "set", 58 | REMOVE = "remove", 59 | } 60 | 61 | export interface RequestDetails { 62 | /** The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. 63 | * If the document of a (sub-)frame is loaded (type is main_frame or sub_frame), frameId indicates the ID of this frame, not the ID of the outer frame. 64 | * Frame IDs are unique within a tab. 65 | */ 66 | frameId: number; 67 | 68 | /** The origin where the request was initiated. 69 | * This does not change through redirects. 70 | * If this is an opaque origin, the string 'null' will be used. 71 | */ 72 | initiator?: string | undefined; 73 | 74 | /** Standard HTTP method. */ 75 | method: string; 76 | 77 | /** ID of frame that wraps the frame which sent the request. 78 | * Set to -1 if no parent frame exists. 79 | */ 80 | partentFrameId: number; 81 | 82 | /** The ID of the request. 83 | * Request IDs are unique within a browser session. 84 | */ 85 | requestId: string; 86 | 87 | /** The ID of the tab in which the request takes place. 88 | * Set to -1 if the request isn't related to a tab. 89 | */ 90 | tabId: number; 91 | 92 | /** The resource type of the request. */ 93 | type: ResourceType; 94 | 95 | /** The URL of the request. */ 96 | url: string; 97 | } 98 | 99 | export interface Rule { 100 | /** The action to take if this rule is matched. */ 101 | action: RuleAction; 102 | 103 | /** The condition under which this rule is triggered. */ 104 | condition: RuleCondition; 105 | 106 | /** An id which uniquely identifies a rule. 107 | * Mandatory and should be >= 1. 108 | */ 109 | id: number; 110 | 111 | /** Rule priority. 112 | * Defaults to 1. 113 | * When specified, should be >= 1. 114 | */ 115 | priority?: number | undefined; 116 | } 117 | 118 | export interface RuleAction { 119 | /** Describes how the redirect should be performed. 120 | * Only valid for redirect rules. 121 | */ 122 | redirect?: Redirect | undefined; 123 | 124 | /** The request headers to modify for the request. 125 | * Only valid if RuleActionType is "modifyHeaders". 126 | */ 127 | requestHeaders?: ModifyHeaderInfo[] | undefined; 128 | 129 | /** The response headers to modify for the request. 130 | * Only valid if RuleActionType is "modifyHeaders". 131 | */ 132 | responseHeaders?: ModifyHeaderInfo[] | undefined; 133 | 134 | /** The type of action to perform. */ 135 | type: RuleActionType; 136 | } 137 | 138 | export interface RuleCondition { 139 | /** 140 | * Specifies whether the network request is first-party or third-party to the domain from which it originated. 141 | * If omitted, all requests are accepted. 142 | */ 143 | domainType?: DomainType | undefined; 144 | 145 | /** 146 | * @deprecated since Chrome 101. Use initiatorDomains instead. 147 | 148 | * The rule will only match network requests originating from the list of domains. 149 | * If the list is omitted, the rule is applied to requests from all domains. 150 | * An empty list is not allowed. 151 | * 152 | * Notes: 153 | * Sub-domains like "a.example.com" are also allowed. 154 | * The entries must consist of only ascii characters. 155 | * Use punycode encoding for internationalized domains. 156 | * This matches against the request initiator and not the request url. 157 | */ 158 | domains?: string[] | undefined; 159 | 160 | /** 161 | * @deprecated since Chrome 101. Use excludedInitiatorDomains instead 162 | * 163 | * The rule will not match network requests originating from the list of excludedDomains. 164 | * If the list is empty or omitted, no domains are excluded. 165 | * This takes precedence over domains. 166 | * 167 | * Notes: 168 | * Sub-domains like "a.example.com" are also allowed. 169 | * The entries must consist of only ascii characters. 170 | * Use punycode encoding for internationalized domains. 171 | * This matches against the request initiator and not the request url. 172 | */ 173 | excludedDomains?: string[] | undefined; 174 | 175 | /** 176 | * The rule will only match network requests originating from the list of initiatorDomains. 177 | * If the list is omitted, the rule is applied to requests from all domains. 178 | * An empty list is not allowed. 179 | * 180 | * Notes: 181 | * Sub-domains like "a.example.com" are also allowed. 182 | * The entries must consist of only ascii characters. 183 | * Use punycode encoding for internationalized domains. 184 | * This matches against the request initiator and not the request url. 185 | */ 186 | initiatorDomains?: string[] | undefined; 187 | 188 | /** 189 | * The rule will not match network requests originating from the list of excludedInitiatorDomains. 190 | * If the list is empty or omitted, no domains are excluded. 191 | * This takes precedence over initiatorDomains. 192 | * 193 | * Notes: 194 | * Sub-domains like "a.example.com" are also allowed. 195 | * The entries must consist of only ascii characters. 196 | * Use punycode encoding for internationalized domains. 197 | * This matches against the request initiator and not the request url. 198 | */ 199 | excludedInitiatorDomains?: string[] | undefined; 200 | 201 | /** 202 | * The rule will only match network requests when the domain matches one from the list of requestDomains. 203 | * If the list is omitted, the rule is applied to requests from all domains. 204 | * An empty list is not allowed. 205 | * 206 | * Notes: 207 | * Sub-domains like "a.example.com" are also allowed. 208 | * The entries must consist of only ascii characters. 209 | * Use punycode encoding for internationalized domains. 210 | */ 211 | requestDomains?: string[] | undefined; 212 | 213 | /** 214 | * The rule will not match network requests when the domains matches one from the list of excludedRequestDomains. 215 | * If the list is empty or omitted, no domains are excluded. 216 | * This takes precedence over requestDomains. 217 | * 218 | * Notes: 219 | * Sub-domains like "a.example.com" are also allowed. 220 | * The entries must consist of only ascii characters. 221 | * Use punycode encoding for internationalized domains. 222 | */ 223 | excludedRequestDomains?: string[] | undefined; 224 | 225 | /** 226 | * List of request methods which the rule won't match. 227 | * Only one of requestMethods and excludedRequestMethods should be specified. 228 | * If neither of them is specified, all request methods are matched. 229 | */ 230 | excludedRequestMethods?: RequestMethod[] | undefined; 231 | 232 | /** 233 | * List of resource types which the rule won't match. 234 | * Only one of {@link chrome.declarativeNetRequest.RuleCondition.resourceTypes} 235 | * and {@link chrome.declarativeNetRequest.RuleCondition.excludedResourceTypes} should be specified. 236 | * If neither of them is specified, all resource types except "main_frame" are blocked. 237 | */ 238 | excludedResourceTypes?: ResourceType[] | undefined; 239 | 240 | /** 241 | * List of {@link chrome.tabs.Tab.id} which the rule should not match. 242 | * An ID of {@link chrome.tabs.TAB_ID_NONE} excludes requests which don't originate from a tab. 243 | * Only supported for session-scoped rules. 244 | */ 245 | excludedTabIds?: number[] | undefined; 246 | 247 | /** 248 | * Whether the urlFilter or regexFilter (whichever is specified) is case sensitive. 249 | * @default false Before Chrome 118 the default was true. 250 | */ 251 | isUrlFilterCaseSensitive?: boolean | undefined; 252 | 253 | /** 254 | * Regular expression to match against the network request url. 255 | * This follows the RE2 syntax. 256 | * 257 | * Note: Only one of urlFilter or regexFilter can be specified. 258 | * 259 | * Note: The regexFilter must be composed of only ASCII characters. 260 | * This is matched against a url where the host is encoded in the punycode format (in case of internationalized domains) and any other non-ascii characters are url encoded in utf-8. 261 | */ 262 | regexFilter?: string | undefined; 263 | 264 | /** 265 | * List of HTTP request methods which the rule can match. An empty list is not allowed. 266 | * Note: Specifying a {@link chrome.declarativeNetRequest.RuleCondition.requestMethods} rule condition will also exclude non-HTTP(s) requests, 267 | * whereas specifying {@link chrome.declarativeNetRequest.RuleCondition.excludedRequestMethods} will not. 268 | */ 269 | requestMethods?: RequestMethod[]; 270 | 271 | /** 272 | * List of {@link chrome.tabs.Tab.id} which the rule should not match. 273 | * An ID of {@link chrome.tabs.TAB_ID_NONE} excludes requests which don't originate from a tab. 274 | * An empty list is not allowed. Only supported for session-scoped rules. 275 | */ 276 | tabIds?: number[] | undefined; 277 | 278 | /** 279 | * The pattern which is matched against the network request url. 280 | * Supported constructs: 281 | * 282 | * '*' : Wildcard: Matches any number of characters. 283 | * 284 | * '|' : Left/right anchor: If used at either end of the pattern, specifies the beginning/end of the url respectively. 285 | * 286 | * '||' : Domain name anchor: If used at the beginning of the pattern, specifies the start of a (sub-)domain of the URL. 287 | * 288 | * '^' : Separator character: This matches anything except a letter, a digit or one of the following: _ - . %. 289 | * This can also match the end of the URL. 290 | * 291 | * Therefore urlFilter is composed of the following parts: (optional Left/Domain name anchor) + pattern + (optional Right anchor). 292 | * 293 | * If omitted, all urls are matched. An empty string is not allowed. 294 | * 295 | * A pattern beginning with || is not allowed. Use instead. 296 | * 297 | * Note: Only one of urlFilter or regexFilter can be specified. 298 | * 299 | * Note: The urlFilter must be composed of only ASCII characters. 300 | * This is matched against a url where the host is encoded in the punycode format (in case of internationalized domains) and any other non-ascii characters are url encoded in utf-8. 301 | * For example, when the request url is http://abc.рф?q=ф, the urlFilter will be matched against the url http://abc.xn--p1ai/?q=%D1%84. 302 | */ 303 | urlFilter?: string | undefined; 304 | 305 | /** 306 | * List of resource types which the rule can match. 307 | * An empty list is not allowed. 308 | * 309 | * Note: this must be specified for allowAllRequests rules and may only include the sub_frame and main_frame resource types. 310 | */ 311 | resourceTypes?: ResourceType[] | undefined; 312 | } 313 | 314 | export interface MatchedRule { 315 | /** A matching rule's ID. */ 316 | ruleId: number; 317 | 318 | /** ID of the Ruleset this rule belongs to. 319 | * For a rule originating from the set of dynamic rules, this will be equal to DYNAMIC_RULESET_ID. 320 | */ 321 | rulesetId: string; 322 | } 323 | 324 | export interface MatchedRuleInfo { 325 | rule: MatchedRule; 326 | 327 | /** The tabId of the tab from which the request originated if the tab is still active. Else -1. */ 328 | tabId: number; 329 | 330 | /** The time the rule was matched. 331 | * Timestamps will correspond to the Javascript convention for times, i.e. number of milliseconds since the epoch. 332 | */ 333 | timeStamp: number; 334 | } 335 | 336 | export interface MatchedRulesFilter { 337 | /** If specified, only matches rules after the given timestamp. */ 338 | minTimeStamp?: number | undefined; 339 | 340 | /** If specified, only matches rules for the given tab. 341 | * Matches rules not associated with any active tab if set to -1. 342 | */ 343 | tabId?: number | undefined; 344 | } 345 | 346 | export interface ModifyHeaderInfo { 347 | /** The name of the header to be modified. */ 348 | header: string; 349 | 350 | /** The operation to be performed on a header. */ 351 | operation: HeaderOperation; 352 | 353 | /** The new value for the header. 354 | * Must be specified for append and set operations. 355 | */ 356 | value?: string | undefined; 357 | } 358 | 359 | export interface QueryKeyValue { 360 | key: string; 361 | value: string; 362 | } 363 | 364 | export interface QueryTransform { 365 | /** The list of query key-value pairs to be added or replaced. */ 366 | addOrReplaceParams?: QueryKeyValue[] | undefined; 367 | 368 | /** The list of query keys to be removed. */ 369 | removeParams?: string[] | undefined; 370 | } 371 | 372 | export interface URLTransform { 373 | /** The new fragment for the request. 374 | * Should be either empty, in which case the existing fragment is cleared; or should begin with '#'. 375 | */ 376 | fragment?: string | undefined; 377 | 378 | /** The new host for the request. */ 379 | host?: string | undefined; 380 | 381 | /** The new password for the request. */ 382 | password?: string | undefined; 383 | 384 | /** The new path for the request. 385 | * If empty, the existing path is cleared. 386 | */ 387 | path?: string | undefined; 388 | 389 | /** The new port for the request. 390 | * If empty, the existing port is cleared. 391 | */ 392 | port?: string | undefined; 393 | 394 | /** The new query for the request. 395 | * Should be either empty, in which case the existing query is cleared; or should begin with '?'. 396 | */ 397 | query?: string | undefined; 398 | 399 | /** Add, remove or replace query key-value pairs. */ 400 | queryTransform?: QueryTransform | undefined; 401 | 402 | /** The new scheme for the request. 403 | * Allowed values are "http", "https", "ftp" and "chrome-extension". 404 | */ 405 | scheme?: string | undefined; 406 | 407 | /** The new username for the request. */ 408 | username?: string | undefined; 409 | } 410 | 411 | export interface RegexOptions { 412 | /** Whether the regex specified is case sensitive. 413 | * Default is true. 414 | */ 415 | isCaseSensitive?: boolean | undefined; 416 | 417 | /** The regular expression to check. */ 418 | regex: string; 419 | 420 | /** Whether the regex specified requires capturing. 421 | * Capturing is only required for redirect rules which specify a regexSubstitution action. 422 | * The default is false. 423 | */ 424 | requireCapturing?: boolean | undefined; 425 | } 426 | 427 | export interface IsRegexSupportedResult { 428 | isSupported: boolean; 429 | 430 | /** Specifies the reason why the regular expression is not supported. 431 | * Only provided if isSupported is false. 432 | */ 433 | reason?: UnsupportedRegexReason | undefined; 434 | } 435 | 436 | export interface TabActionCountUpdate { 437 | /** The amount to increment the tab's action count by. 438 | * Negative values will decrement the count 439 | */ 440 | increment: number; 441 | 442 | /** The tab for which to update the action count. */ 443 | tabId: number; 444 | } 445 | 446 | export interface ExtensionActionOptions { 447 | /** Whether to automatically display the action count for a page as the extension's badge text. 448 | * This preference is persisted across sessions. 449 | */ 450 | displayActionCountAsBadgeText?: boolean | undefined; 451 | 452 | /** Details of how the tab's action count should be adjusted. */ 453 | tabUpdate?: TabActionCountUpdate | undefined; 454 | } 455 | 456 | export interface Redirect { 457 | /** Path relative to the extension directory. 458 | * Should start with '/'. 459 | */ 460 | extensionPath?: string | undefined; 461 | 462 | /** Substitution pattern for rules which specify a regexFilter. 463 | * The first match of regexFilter within the url will be replaced with this pattern. 464 | * Within regexSubstitution, backslash-escaped digits (\1 to \9) can be used to insert the corresponding capture groups. 465 | * \0 refers to the entire matching text. 466 | */ 467 | regexSubstitution?: string | undefined; 468 | 469 | /** Url transformations to perform. */ 470 | transform?: URLTransform | undefined; 471 | 472 | /** The redirect url. 473 | * Redirects to JavaScript urls are not allowed. 474 | */ 475 | url?: string | undefined; 476 | } 477 | 478 | export interface UpdateRuleOptions { 479 | /** Rules to add. */ 480 | addRules?: Rule[] | undefined; 481 | 482 | /** 483 | * IDs of the rules to remove. 484 | * Any invalid IDs will be ignored. 485 | */ 486 | removeRuleIds?: number[] | undefined; 487 | } 488 | 489 | export interface UpdateStaticRulesOptions { 490 | /** Set of ids corresponding to rules in the Ruleset to disable. */ 491 | disableRuleIds?: number[]; 492 | 493 | /** Set of ids corresponding to rules in the Ruleset to enable. */ 494 | enableRuleIds?: number[]; 495 | 496 | /** The id corresponding to a static Ruleset. */ 497 | rulesetId: string; 498 | } 499 | 500 | export interface UpdateRulesetOptions { 501 | /** The set of ids corresponding to a static Ruleset that should be disabled. */ 502 | disableRulesetIds?: string[] | undefined; 503 | 504 | /** The set of ids corresponding to a static Ruleset that should be enabled. */ 505 | enableRulesetIds?: string[] | undefined; 506 | } 507 | 508 | export interface MatchedRuleInfoDebug { 509 | /** Details about the request for which the rule was matched. */ 510 | request: RequestDetails; 511 | 512 | rule: MatchedRule; 513 | } 514 | 515 | export interface Ruleset { 516 | /** Whether the ruleset is enabled by default. */ 517 | enabled: boolean; 518 | 519 | /** A non-empty string uniquely identifying the ruleset. 520 | * IDs beginning with '_' are reserved for internal use. 521 | */ 522 | id: string; 523 | 524 | /** The path of the JSON ruleset relative to the extension directory. */ 525 | path: string; 526 | } 527 | 528 | export interface RulesMatchedDetails { 529 | /** Rules matching the given filter. */ 530 | rulesMatchedInfo: MatchedRuleInfo[]; 531 | } 532 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { parse } from "jsonc-parser"; 2 | 3 | export type Item = { title: string; rule: string }; 4 | 5 | export type ById = Record; 6 | 7 | // the preivous version is `data` 8 | export const byIdKey = "byId"; 9 | 10 | export const updateRules = async ( 11 | options: chrome.declarativeNetRequest.UpdateRuleOptions, 12 | ) => { 13 | return new Promise((resolve, reject) => { 14 | chrome.declarativeNetRequest.updateDynamicRules(options, () => { 15 | if (chrome.runtime.lastError) { 16 | reject(chrome.runtime.lastError); 17 | } else { 18 | console.log("Rule added or removed successfully"); 19 | resolve(0); 20 | } 21 | }); 22 | }); 23 | }; 24 | 25 | export const findNewRuleId = async () => { 26 | const currentRules = await chrome.declarativeNetRequest.getDynamicRules(); 27 | const ruleId = Math.max(...currentRules.map((rule) => rule.id)) + 1; 28 | return ruleId; 29 | }; 30 | 31 | export const parseRule = (rule: string) => { 32 | // TODO: runtime type checking 33 | return parse(rule) as Omit; 34 | }; 35 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["src"], 3 | "compilerOptions": { 4 | "target": "es5", 5 | "module": "esnext", 6 | "lib": ["esnext", "dom"], 7 | "jsx": "react-jsx", 8 | "noEmit": true, 9 | "strict": true, 10 | "moduleResolution": "node", 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "resolveJsonModule": true, 14 | "noUncheckedIndexedAccess": true, 15 | "verbatimModuleSyntax": true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import { crx } from "@crxjs/vite-plugin"; 3 | import pkg from "./package.json"; 4 | 5 | export default defineConfig({ 6 | build: { 7 | rollupOptions: { 8 | input: ["dashboard.html"], 9 | }, 10 | }, 11 | plugins: [ 12 | crx({ 13 | manifest: { 14 | manifest_version: 3, 15 | name: "Tampery", 16 | version: pkg.version, 17 | description: "Tamper browser requests in flight", 18 | homepage_url: "https://github.com/pd4d10/tampery", 19 | icons: { 20 | "128": "icon.png", 21 | }, 22 | background: { 23 | service_worker: "src/background.ts", 24 | }, 25 | permissions: ["webRequest", "storage", "declarativeNetRequest"], 26 | host_permissions: [""], 27 | action: { 28 | default_popup: "popup.html", 29 | }, 30 | }, 31 | }), 32 | ], 33 | }); 34 | --------------------------------------------------------------------------------