.babelrc000066400000000000000000000003501517671130100124510ustar00rootroot00000000000000{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "current" } } ] ], "plugins": ["angularjs-annotate"] } .github/000077500000000000000000000000001517671130100124205ustar00rootroot00000000000000.github/workflows/000077500000000000000000000000001517671130100144555ustar00rootroot00000000000000.github/workflows/build.yml000066400000000000000000000016761517671130100163110ustar00rootroot00000000000000# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions name: build on: schedule: - cron: '0 0 1 * *' push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: ['lts/*'] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - run: npm i -g grunt-cli - run: npm install - run: grunt .gitignore000066400000000000000000000003601517671130100130470ustar00rootroot00000000000000/build /node_modules /*.log /*.iws .idea/workspace.xml .idea/tasks.xml .idea/profiles_settings.xml .idea/inspectionProfiles/Project_Default.xml .idea/inspectionProfiles/profiles_settings.xml node_modules/.yarn-integrity /dist .DS_Store .ncurc.json000066400000000000000000000000611517671130100131400ustar00rootroot00000000000000{ "reject": [ "pretty-bytes" ] } .npmignore000066400000000000000000000002661517671130100130630ustar00rootroot00000000000000/.idea /artifacts /build /test /node_modules /*.iml /*.ipr /*.iws /.travis.yml /.scrutinizer.yml /Gruntfile.js /*.lock *.log /corifeus-boot.json /secure /src/**/*.* /.github /.vscodeGruntfile.js000066400000000000000000000102121517671130100133510ustar00rootroot00000000000000const utils = require('corifeus-utils'); module.exports = (grunt) => { const builder = require(`corifeus-builder`); const gruntUtil = builder.utils; const loader = new builder.loader(grunt); loader.js({ jit: { injector: 'grunt-injector', }, config: { injector: { options: {}, jsAngular: { options: { transform: function (filePath) { const relative = gruntUtil.injectorRelativePathGenerator({ srcDir: 'src/angular/', filePath: filePath, }) return `require('./${relative}');`; }, starttag: '//injector-angular-start', endtag: '//injector-angular-end' }, files: { 'src/angular/injector.js': [ 'src/angular/**/*.js', '!src/angular/injector.js', '!src/angular/boot.js', '!src/angular/angular-bootstrap.js', '!src/angular/routes.js', ], } }, sass: { options: { transform: function (filePath) { const relative = gruntUtil.injectorRelativePathGenerator({ srcDir: 'src/', filePath: filePath, }) return `@use "./${relative}";`; }, starttag: '//injector-sass-start', endtag: '//injector-sass-end', }, files: { 'src/injector.scss': [ 'src/**/*.scss', '!src/scss/index.scss', '!src/injector.scss', '!src/vendor.scss', ] } }, }, watch: { options: { atBegin: true }, js: { files: [ 'src/angular/**/*.js', '!src/angular/injector.js', '!src/angular/boot.js', '!src/angular/routes.js', ], tasks: [ 'injector:jsAngular', ], }, sass: { files: [ 'src/**/*.scss', '!src/scss/index.scss', '!src/injector.scss', ], tasks: [ 'injector:sass' ], }, }, } }); grunt.registerTask('default', ['cory-npm', 'clean', 'cory-replace', 'cory:license', 'injector', 'publish']); grunt.registerTask('inject', ['watch:js', 'watch:sass']); grunt.registerTask('build', ['injector']); grunt.registerTask('publish', async function() { const done = this.async() const cwd = process.cwd() try { await gruntUtil.spawn({ grunt: grunt, gruntThis: this, }, { cmd: `${cwd}/node_modules/.bin/grunt${gruntUtil.commandAddon}`, args: [ 'injector' ] }); await gruntUtil.spawn({ grunt: grunt, gruntThis: this, }, { cmd: `${cwd}/node_modules/.bin/webpack${gruntUtil.commandAddon}`, args: [ '--config', './src/builder/webpack.config.js', '--mode=production' ] }); done() } catch(e) { done(e) } }) } LICENSE000066400000000000000000000020131517671130100120610ustar00rootroot00000000000000MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.README.md000066400000000000000000000107211517671130100123400ustar00rootroot00000000000000# This is a development package For the full-blown package, please follow: https://github.com/patrikx3/redis-ui https://www.npmjs.com/package/p3x-redis-ui https://corifeus.com/redis-ui [//]: #@corifeus-header [![NPM](https://img.shields.io/npm/v/p3x-redis-ui-material.svg)](https://www.npmjs.com/package/p3x-redis-ui-material) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://paypal.me/patrikx3) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Corifeus @ Facebook](https://img.shields.io/badge/Facebook-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Uptime Robot ratio (30 days)](https://img.shields.io/uptimerobot/ratio/m780749701-41bcade28c1ea8154eda7cca.svg)](https://stats.uptimerobot.com/9ggnzcWrw) --- # πŸ’Ώ The p3x-redis-ui-material web interface that connects to the p3x-redis-ui-server via http and socket.io v2025.4.119 🌌 **Bugs are evidentβ„’ - MATRIX️** 🚧 **This project is under active development!** πŸ“’ **We welcome your feedback and contributions.** ### NodeJS LTS is supported ### πŸ› οΈ Built on NodeJs version ```txt v22.13.0 ``` # πŸ“ Description [//]: #@corifeus-header:end The is the `p3x-redis-ui-material` web gui, that uses the `p3x-redis-ui-server`. It is based on Socket.IO and AngularJs Material, uses themes light/dark schema and internationalization (English is implemented by default). # For development standalone For file names do not use camelCase, but use kebab-case. Folder should be named as kebab-case as well. As you can see, all code filenames are using it like that, please do not change that. Please apply the `.editorconfig` settings in your IDE. Make sure that the server app is running at for development standalone: https://github.com/patrikx3/redis-ui-server Then: ```bash npm install npm run dev ``` The frontend is available @ http://localhost:8080 [//]: #@corifeus-footer --- ## πŸš€ Quick and Affordable Web Development Services If you want to quickly and affordably develop your next digital project, visit [corifeus.eu](https://corifeus.eu) for expert solutions tailored to your needs. --- ## 🌐 Powerful Online Networking Tool Discover the powerful and free online networking tool at [network.corifeus.com](https://network.corifeus.com). **πŸ†“ Free** Designed for professionals and enthusiasts, this tool provides essential features for network analysis, troubleshooting, and management. Additionally, it offers tools for: - πŸ“‘ Monitoring TCP, HTTP, and Ping to ensure optimal network performance and reliability. - πŸ“Š Status page management to track uptime, performance, and incidents in real time with customizable dashboards. All these features are completely free to use. --- ## ❀️ Support Our Open-Source Project If you appreciate our work, consider ⭐ starring this repository or πŸ’° making a donation to support server maintenance and ongoing development. Your support means the world to usβ€”thank you! --- ### 🌍 About My Domains All my domains, including [patrikx3.com](https://patrikx3.com), [corifeus.eu](https://corifeus.eu), and [corifeus.com](https://corifeus.com), are developed in my spare time. While you may encounter minor errors, the sites are generally stable and fully functional. --- ### πŸ“ˆ Versioning Policy **Version Structure:** We follow a **Major.Minor.Patch** versioning scheme: - **Major:** πŸ“… Corresponds to the current year. - **Minor:** πŸŒ“ Set as 4 for releases from January to June, and 10 for July to December. - **Patch:** πŸ”§ Incremental, updated with each build. **🚨 Important Changes:** Any breaking changes are prominently noted in the readme to keep you informed. --- [**P3X-REDIS-UI-MATERIAL**](https://corifeus.com/redis-ui-material) Build v2025.4.119 [![NPM](https://img.shields.io/npm/v/p3x-redis-ui-material.svg)](https://www.npmjs.com/package/p3x-redis-ui-material) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [//]: #@corifeus-footer:end artifacts/000077500000000000000000000000001517671130100130405ustar00rootroot00000000000000artifacts/reduce-bundle-size.txt000066400000000000000000000022451517671130100172720ustar00rootroot000000000000002020 October 18 08:00 AM -r--r----- 1 www-data www-data 2.3K Oct 17 20:38 2eb6240af39282952504b5e016895183.js -r--r----- 1 www-data www-data 2.6K Oct 17 20:38 59bde89bce5c1126ba5ee99c55ec48c8.js -r--r----- 1 www-data www-data 186K Oct 17 20:38 main.3b4993afb7ef0c773dd2.js -r--r----- 1 www-data www-data 12K Oct 17 20:38 main.82603f4092c1cd8f8cf9.css -r--r----- 1 www-data www-data 2.2M Oct 17 20:38 vendor.2bf99f4796897bbcdde3.js -r--r----- 1 www-data www-data 500K Oct 17 20:38 vendor.8cec4ee3d875369b3db2.css 2955,7 2020 October 18 11:00 AM -r-------- 1 www-data www-data 2.3K Oct 18 10:43 2eb6240af39282952504b5e016895183.js -r-------- 1 www-data www-data 2.6K Oct 18 10:43 59bde89bce5c1126ba5ee99c55ec48c8.js -r-------- 1 www-data www-data 23K Oct 18 10:43 f7186078e00d958aa2b316483dfc7e1c.js -r-------- 1 www-data www-data 1.2M Oct 18 10:43 362.chunk.js -r-------- 1 www-data www-data 189K Oct 18 10:43 main.5bb26a2fed2bb6572b27.js -r-------- 1 www-data www-data 12K Oct 18 10:43 main.f0afde82d9f3f4ba2c8d.css -r-------- 1 www-data www-data 925K Oct 18 10:43 vendor.423e956f43a2d1406ae5.js -r-------- 1 www-data www-data 500K Oct 18 10:43 vendor.8adbf377a94fd3e73b2c.css 2882,7 package.json000066400000000000000000000072621517671130100133550ustar00rootroot00000000000000{ "name": "p3x-redis-ui-material", "version": "2025.4.119", "description": "πŸ’Ώ The p3x-redis-ui-material web interface that connects to the p3x-redis-ui-server via http and socket.io", "corifeus": { "icon": "fas fa-database", "code": "Fireball", "opencollective": false, "build": true, "nodejs": "v22.13.0", "reponame": "redis-ui-material", "publish": true, "prefix": "p3x-", "type": "p3x" }, "main": "src/index.js", "scripts": { "test": "grunt", "dev": "concurrently \"grunt watch:js\" \"grunt watch:sass\" \"webpack serve --hot --config ./src/builder/webpack.config.js\"", "dev-webpack": "webpack serve --config ./src/builder/webpack.config.js", "build": "grunt build && webpack --config ./src/builder/webpack.config.js --mode=production", "stats": "grunt build && WEBPACK_STATS=1 webpack --mode=production --config ./src/builder/webpack.config.js && webpack-bundle-analyzer ./dist/stats.json" }, "repository": { "type": "git", "url": "https://github.com/patrikx3/redis-ui-material.git" }, "keywords": [ "redis", "ui", "gui", "web", "electron", "desktop", "server", "angularjs", "javascript", "material", "dark", "light" ], "author": "Patrik Laszlo ", "license": "MIT", "devDependencies": { "@babel/core": "^7.26.0", "@babel/preset-env": "^7.26.0", "@fontsource/roboto": "^5.1.1", "@fontsource/roboto-mono": "^5.1.1", "@fortawesome/fontawesome-free": "^6.7.2", "@uirouter/angularjs": "^1.1.1", "@uirouter/core": "^6.1.1", "angular": "^1.8.3", "angular-animate": "^1.8.3", "angular-aria": "^1.8.3", "angular-cookies": "^1.8.3", "angular-inview": "^3.1.0", "angular-json-tree": "^1.1.0", "angular-material": "=1.2.5", "angular-messages": "^1.8.3", "angular-sanitize": "^1.8.3", "angular-tree-control": "git+https://github.com/wix/angular-tree-control.git", "babel-loader": "^9.2.1", "babel-plugin-angularjs-annotate": "^0.10.0", "clean-webpack-plugin": "^4.0.0", "concurrently": "^9.1.2", "copy-webpack-plugin": "^12.0.2", "corifeus-builder": "^2025.4.123", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.0", "grunt-injector": "^1.1.0", "html-loader": "^5.1.0", "html-webpack-plugin": "^5.6.3", "humanize-duration": "^3.32.1", "jquery": "^3.7.1", "js-htmlencode": "^0.3.0", "jsoneditor": "^10.1.2", "lodash": "^4.17.21", "material-design-icons-iconfont": "^6.7.0", "mini-css-extract-plugin": "^2.9.2", "mobile-detect": "^1.4.5", "moment": "^2.30.1", "pretty-bytes": "^5.6.0", "raw-loader": "^4.0.2", "sass": "^1.83.4", "sass-loader": "^16.0.4", "socket.io-client": "^4.8.1", "source-map-loader": "^5.0.0", "style-loader": "^4.0.0", "terser-webpack-plugin": "^5.3.11", "timestring": "^7.0.0", "webpack": "^5.97.1", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^6.0.1", "webpack-dev-server": "^5.2.0", "webpack-remove-debug": "^0.1.0" }, "engines": { "node": ">=12.13.0" }, "homepage": "https://corifeus.com/redis-ui-material", "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" }src/000077500000000000000000000000001517671130100116475ustar00rootroot00000000000000src/angular/000077500000000000000000000000001517671130100133005ustar00rootroot00000000000000src/angular/angular-bootstrap.js000066400000000000000000000007071517671130100173060ustar00rootroot00000000000000module.exports = () => { angular.element(document).ready(() => { try { const bootstrapElement = document.getElementById('p3xr-redis-ui-bootstrap'); angular.bootstrap(bootstrapElement, ['p3xr-redis-ui']); } catch(e) { if (e && e.message && e.message.includes('bootstrapped')) { location.reload() } else { console.error(e) } } }) } src/angular/boot.js000066400000000000000000000344721517671130100146130ustar00rootroot00000000000000 p3xr.ng = angular.module('p3xr-redis-ui', [ 'ngCookies', 'ngAnimate', 'ngAria', 'ngSanitize', 'ngMessages', 'ngMaterial', 'ui.router', 'treeControl', 'angular-json-tree', 'angular-inview', ]); require('./injector') p3xr.ng.config(($qProvider, $locationProvider, $urlRouterProvider, $stateProvider, p3xrThemeProvider, $mdAriaProvider) => { $mdAriaProvider.disableWarnings(); $qProvider.errorOnUnhandledRejections(false); $locationProvider.html5Mode(true); // $urlRouterProvider.otherwise('/'); // $httpProvider.interceptors.push('ngivrHttpInterceptor'); p3xrThemeProvider.start(); const routes = require('./routes') $urlRouterProvider.otherwise('/main'); routes($stateProvider); }) p3xr.ng.run(($rootScope, p3xrSocket, p3xrTheme, $mdMedia, $state, $timeout, $cookies, p3xrRedisParser, $animate) => { $rootScope.p3xr = p3xr; $rootScope.$mdMedia = $mdMedia; $rootScope.isElectron = (/electron/i.test(navigator.userAgent)) $rootScope.hasConnected = () => { if (Object.keys(p3xr.state.redisConnections).length === 0) { return false } return true; } $rootScope.locationReload = () => { // $state.go('main') // location.reload() location.href = '/' } let search Object.defineProperty($rootScope.p3xr.state, 'search', { get: () => { search = $cookies.get('p3xr-state-search') //console.warn('search', search) if (search === undefined) { search = '' } return search }, set: (value) => { //console.warn(`set value ${value}`) search = value search = $cookies.put('p3xr-state-search', value, { expires: p3xr.settings.cookieExpiry, }) } }) let treeDivider Object.defineProperty($rootScope.p3xr.settings, 'redisTreeDivider', { get: () => { treeDivider = $cookies.get(p3xr.settings.tree.cookieName) if (treeDivider === undefined) { treeDivider = p3xr.settings.tree.defaultDivider } return treeDivider }, set: (value) => { treeDivider = value treeDivider = $cookies.put(p3xr.settings.tree.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) let jsonFormat Object.defineProperty($rootScope.p3xr.settings, 'jsonFormat', { get: () => { jsonFormat = $cookies.get(p3xr.settings.jsonFormatSettings.cookieName) if (jsonFormat === undefined) { jsonFormat = p3xr.settings.jsonFormatSettings.default } return parseInt(jsonFormat) }, set: (value) => { jsonFormat = value jsonFormat = $cookies.put(p3xr.settings.jsonFormatSettings.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) const setAnimation = () => { console.log('set animation', $rootScope.p3xr.settings.animation) $animate.enabled($rootScope.p3xr.settings.animation) $body.removeClass('p3xr-no-animation') $body.removeClass('p3xr-animation') if ($rootScope.p3xr.settings.animation) { $body.addClass('p3xr-animation') } else { $body.addClass('p3xr-no-animation') } } let animation Object.defineProperty($rootScope.p3xr.settings, 'animation', { get: () => { animation = $cookies.get(p3xr.settings.animationSettings.cookieName) if (animation === undefined) { animation = p3xr.settings.animationSettings.default } return parseInt(animation) === 1 }, set: (value) => { animation = value animation = $cookies.put(p3xr.settings.animationSettings.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) setAnimation() } }) setAnimation() let maxValueDisplay Object.defineProperty($rootScope.p3xr.settings, 'maxValueDisplay', { get: () => { maxValueDisplay = $cookies.get(p3xr.settings.maxValueDisplaySetting.cookieName) if (maxValueDisplay === undefined) { maxValueDisplay = p3xr.settings.maxValueDisplaySetting.default } return parseInt(maxValueDisplay) }, set: (value) => { maxValueDisplay = parseInt(value) maxValueDisplay = $cookies.put(p3xr.settings.maxValueDisplaySetting.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) let maxKeysDisplay Object.defineProperty($rootScope.p3xr.settings, 'maxKeys', { get: () => { maxKeysDisplay = $cookies.get(p3xr.settings.maxKeysSettings.cookieName) if (maxKeysDisplay === undefined) { maxKeysDisplay = p3xr.settings.maxKeysSettings.default } let value = parseInt(maxKeysDisplay) if (isNaN(value) || value < 5 || value > p3xr.settings.maxKeysSettings.max) { value = p3xr.settings.maxKeysSettings.default } return value }, set: (value) => { maxKeysDisplay = parseInt(value) maxKeysDisplay = $cookies.put(p3xr.settings.maxKeysSettings.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) let language Object.defineProperty($rootScope.p3xr.settings.language, 'current', { get: () => { language = $cookies.get(p3xr.settings.language.cookieName) if (language === undefined) { language = p3xr.settings.language.defaultLanguage require('moment').locale(p3xr.settings.language.momentDateMap[language]) } return language }, set: (value) => { //console.warn('p3xr-language set incoming' , value) if (value === undefined) { value = p3xr.settings.language.defaultLanguage } //console.warn('p3xr-language set actual' , value) language = value require('moment').locale(p3xr.settings.language.momentDateMap[language]) $rootScope.p3xr.strings = p3xr.settings.language.translation[value] //console.warn('p3xr-language set strings' , $rootScope.p3xr.strings) language = $cookies.put(p3xr.settings.language.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) $rootScope.p3xr.settings.language.current = $cookies.get(p3xr.settings.language.cookieName) let keysSort Object.defineProperty($rootScope.p3xr.settings, 'keysSort', { get: () => { keysSort = $cookies.get(p3xr.settings.keySortInfo.cookieName) if (keysSort === undefined) { keysSort = p3xr.settings.keySortInfo.default } else if (keysSort === 'true') { keysSort = true } else if (keysSort === 'false') { keysSort = false } return keysSort }, set: (value) => { keysSort = value keysSort = $cookies.put(p3xr.settings.keySortInfo.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) let searchClientSide Object.defineProperty($rootScope.p3xr.settings, 'searchClientSide', { get: () => { searchClientSide = $cookies.get(p3xr.settings.searchInfoClientSide.cookieName) if (searchClientSide === undefined) { searchClientSide = p3xr.settings.searchInfoClientSide.default } else if (searchClientSide === 'true') { searchClientSide = true } else if (searchClientSide === 'false') { searchClientSide = false } if (p3xr.state.keysRaw.length > p3xr.settings.maxLightKeysCount || p3xr.state.dbsize > p3xr.settings.maxLightKeysCount) { searchClientSide = false } return searchClientSide }, set: (value) => { searchClientSide = value searchClientSide = $cookies.put(p3xr.settings.searchInfoClientSide.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) let searchStartsWith Object.defineProperty($rootScope.p3xr.settings, 'searchStartsWith', { get: () => { searchStartsWith = $cookies.get(p3xr.settings.searchInfoStartsWith.cookieName) if (searchStartsWith === undefined) { searchStartsWith = p3xr.settings.searchInfoStartsWith.default } else if (searchStartsWith === 'true') { searchStartsWith = true } else if (searchStartsWith === 'false') { searchStartsWith = false } return searchStartsWith }, set: (value) => { searchStartsWith = value searchStartsWith = $cookies.put(p3xr.settings.searchInfoStartsWith.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) let expandedNodes = [] Object.defineProperty($rootScope, 'expandedNodes', { get: () => { //console.warn('expandedNodes get', expandedNodes) return expandedNodes }, set: (value) => { //console.warn('expandedNodes set', expandedNodes) expandedNodes = value } }) $rootScope.savedExpandedNodes = [] let page = 1 Object.defineProperty($rootScope.p3xr.state, 'page', { get: () => { return page }, set: (value) => { page = parseInt(value) } }) $rootScope.keysTreeRendered = [] let keysTree Object.defineProperty($rootScope, 'keysTree', { get: () => { //const startNow = Date.now() if ($rootScope.p3xr.state.redisChanged === true || JSON.stringify(keysTree) !== JSON.stringify(p3xr.state.keys)) { $rootScope.p3xr.state.redisChanged = false $rootScope.keysTreeRendered = p3xrRedisParser.keysToTreeControl({ keys: p3xr.state.keys, }) keysTree = p3xr.state.keys } //console.log('keysTreeRendered', $rootScope.keysTreeRendered) return $rootScope.keysTreeRendered }, }) /* let chunked = [] let chunks = [] Object.defineProperty($rootScope, 'keysTreeChunked', { get: () => { if ($rootScope.keysTree.length < 50) { return $rootScope.keysTree; } let i, j, chunk = 50; for (i = 0, j = $rootScope.keysTree.length; i < j; i += chunk) { chunks.push($rootScope.keysTree.slice(i, i + chunk)); } console.log(chunks) return chunks } }) */ let globalKeysRaw = []; Object.defineProperty($rootScope.p3xr.state, 'keys', { get: () => { //const startNow = Date.now() globalKeysRaw = $rootScope.p3xr.state.keysRaw.slice() if ($rootScope.p3xr.settings.searchClientSide && typeof ($rootScope.p3xr.state.search) === 'string' && $rootScope.p3xr.state.search.length > 0) { //console.log($rootScope.p3xr.settings.searchStartsWith) if ($rootScope.p3xr.settings.searchStartsWith) { //console.log('startswith') globalKeysRaw = globalKeysRaw.filter(keyRaw => { return keyRaw.startsWith($rootScope.p3xr.state.search) }) } else { //console.log('includes') globalKeysRaw = globalKeysRaw.filter(keyRaw => { return keyRaw.includes($rootScope.p3xr.state.search) }) } } if (globalKeysRaw <= $rootScope.p3xr.settings.pageCount) { return globalKeysRaw } else { //console.log('new scope change', ($rootScope.p3xr.state.page -1) * $rootScope.p3xr.settings.pageCount, $rootScope.p3xr.settings.pageCount) const start = ($rootScope.p3xr.state.page - 1) * $rootScope.p3xr.settings.pageCount const keys = globalKeysRaw.slice(start, start + $rootScope.p3xr.settings.pageCount) //console.warn('parse keys', ((Date.now() - startNow)) / 1000) return keys } } }) Object.defineProperty($rootScope.p3xr.state, 'pages', { get: () => { return Math.ceil(globalKeysRaw.length / $rootScope.p3xr.settings.pageCount) //const pages = Math.ceil($rootScope.p3xr.state.keysRaw.length / $rootScope.p3xr.settings.pageCount) //return pages } }) let pageCount Object.defineProperty($rootScope.p3xr.settings, 'pageCount', { get: () => { pageCount = $cookies.get(p3xr.settings.paging.cookieName) if (pageCount === undefined) { pageCount = p3xr.settings.paging.default } else { pageCount = parseInt(pageCount) } return pageCount }, set: (value) => { pageCount = value pageCount = $cookies.put(p3xr.settings.paging.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) let keyPageCount Object.defineProperty($rootScope.p3xr.settings, 'keyPageCount', { get: () => { keyPageCount = $cookies.get(p3xr.settings.keyPage.cookieName) if (keyPageCount === undefined) { keyPageCount = p3xr.settings.keyPage.default } else { keyPageCount = parseInt(keyPageCount) } return keyPageCount }, set: (value) => { keyPageCount = value keyPageCount = $cookies.put(p3xr.settings.keyPage.cookieName, value, { expires: p3xr.settings.cookieExpiry, }) } }) //console.warn('p3xrTheme', p3xrTheme) p3xrTheme.start() console.info('P3X Redis UI ran') }) require('./angular-bootstrap')() src/angular/dialog/000077500000000000000000000000001517671130100145375ustar00rootroot00000000000000src/angular/dialog/p3xr-dialog-ask-authorization.html000066400000000000000000000037371517671130100232420ustar00rootroot00000000000000

{{ $root.p3xr.strings.label.askAuth}}

close
cancel {{ $root.p3xr.strings.intention.cancel }} done {{ $root.p3xr.strings.intention.ok }}
src/angular/dialog/p3xr-dialog-ask-authorization.js000066400000000000000000000025211517671130100227000ustar00rootroot00000000000000p3xr.ng.factory('p3xrDialogAskAuthorization', function (p3xrCommon, $mdDialog) { return new function () { this.show = async (options) => { return await $mdDialog.show({ controller: function ($scope, $mdDialog) { // Promise reject $scope.cancel = function () { /* p3xrCommon.toast({ message: p3xr.strings.status.cancelled }) */ $mdDialog.cancel(); }; $scope.model = { username: undefined, password: undefined, } $scope.submit = async () => { $mdDialog.hide($scope.model); } }, template: require('./p3xr-dialog-ask-authorization.html'), parent: angular.element(document.body), targetEvent: options.$event, clickOutsideToClose: true, multiple: true, // fullscreen: true // Only for -xs, -sm breakpoints. }) } } }); src/angular/dialog/p3xr-dialog-connection.html000066400000000000000000000515371517671130100217260ustar00rootroot00000000000000

{{ $root.p3xr.state.cfg.readonlyConnections ? $root.p3xr.strings.label.connectiondView : options.type === 'new' ? $root.p3xr.strings.label.connectiondAdd : $root.p3xr.strings.label.connectiondEdit }}

close
{{ $root.p3xr.strings.label.id.info}}
{{ $root.p3xr.strings.form.error.required }}
{{ model.ssh ? $root.p3xr.strings.label.ssh.on : $root.p3xr.strings.label.ssh.off }}
SSH
{{ $root.p3xr.strings.form.error.required }}
{{ $root.p3xr.strings.form.error.required }}
{{ $root.p3xr.strings.form.error.required }}
{{!sshPasswordType ? 'visibility' : 'visibility_off'}}
{{ $root.p3xr.strings.label.passwordSecure }}
{{ $root.p3xr.strings.label.secureFeature }}


Node 1
{{ $root.p3xr.strings.form.error.port }}
{{ $root.p3xr.strings.label.askAuth }} {{!passwordType ? 'visibility' : 'visibility_off'}}
{{ $root.p3xr.strings.label.passwordSecure }}


{{ model.readonly ? $root.p3xr.strings.label.readonly.on : $root.p3xr.strings.label.readonly.off }}
{{ model.cluster ? $root.p3xr.strings.label.cluster.on : $root.p3xr.strings.label.cluster.off }}
{{ model.sentinel ? $root.p3xr.strings.label.sentinel.on : $root.p3xr.strings.label.sentinel.off }}
{{ $root.p3xr.strings.label.addNode }} add
{{ $root.p3xr.strings.form.error.required }}
Node {{$index + 2}}
{{ $root.p3xr.strings.confirm.deleteConnectionText }} delete {{ $root.p3xr.strings.label.addNode }} add

{{ $root.p3xr.strings.label.id.info}}
{{ $root.p3xr.strings.form.error.port }}
{{ $root.p3xr.strings.form.error.required }}
{{!$scope['password' + $index] ? 'visibility' : 'visibility_off'}}
{{ $root.p3xr.strings.label.passwordSecure }}
 
{{ $root.p3xr.strings.label.tlsWithoutCert }} {{ $root.p3xr.strings.label.tlsRejectUnauthorized }}
TLS
{{ $root.p3xr.strings.label.tlsSecure }}

{{ $root.p3xr.strings.label.tlsSecure }}

{{ $root.p3xr.strings.label.tlsSecure }}

cancel {{ $root.p3xr.strings.intention.cancel }} {{ $root.p3xr.strings.intention.cancel }} {{ $root.p3xr.strings.intention.testConnection }} {{ options.type === 'new' ? 'add' : 'save' }} {{ options.type === 'new' ? $root.p3xr.strings.intention.add : $root.p3xr.strings.intention.save }}
src/angular/dialog/p3xr-dialog-connection.js000066400000000000000000000267631517671130100214010ustar00rootroot00000000000000p3xr.ng.factory('p3xrDialogConnection', function (p3xrCommon, $mdDialog, p3xrSocket, p3xrDialogAskAuthorization) { return new function () { this.show = async (options) => { try { const result = await $mdDialog.show({ controller: function ($scope, $mdDialog) { $scope.options = options if (options.model !== undefined) { $scope.model = p3xr.clone(options.model) //$scope.model.askAuth = options.model.askAuth $scope.model.password = options.model.id $scope.model.tlsCrt = options.model.id $scope.model.tlsKey = options.model.id $scope.model.tlsCa = options.model.id $scope.model.sshPassword = options.model.id $scope.model.sshPrivateKey = options.model.id } else { $scope.model = { name: undefined, host: undefined, port: 6379, askAuth: false, password: undefined, username: undefined, id: undefined, readonly: undefined, tlsWithoutCert: false, tlsRejectUnauthorized: false, tlsCrt: undefined, tlsKey: undefined, tlsCa: undefined, } } if (!$scope.model.hasOwnProperty('ssh')) { $scope.model = { ...$scope.model, ssh: false, sshHost: undefined, sshPort: 22, sshUsername: undefined, sshPassword: options.model?.id, sshPrivateKey: options.model?.id, } } if (!$scope.model.hasOwnProperty('cluster')) { $scope.model.cluster = false } if (!$scope.model.hasOwnProperty('sentinel')) { $scope.model.sentinel = false } if (!$scope.model.hasOwnProperty('nodes')) { $scope.model.nodes = [] } for (let node of $scope.model.nodes) { node.password = node.id } $scope.$watch('model.ssh', function (newValue, oldValue) { if (newValue === true) { $scope.model.sentinel = false $scope.model.cluster = false } }) $scope.$watch('model.cluster', function (newValue, oldValue) { if (newValue === true) { $scope.model.sentinel = false $scope.model.ssh = false } }) $scope.$watch('model.sentinel', function (newValue, oldValue) { if (newValue === true) { $scope.model.cluster = false $scope.model.ssh = false } }) // Promise reject $scope.cancel = function () { /* p3xrCommon.toast({ message: p3xr.strings.status.cancelled }) */ $mdDialog.cancel(); }; /* // Promise resolve $scope.hide = function () { $mdDialog.hide(); }; // Promise resolve - with result $scope.answer = function (answer) { $mdDialog.hide(answer); }; */ //console.warn('$scope.model', $scope.model) const handleInvalidForm = () => { if ($scope.p3xrConnectionForm.$invalid) { p3xrCommon.toast({ message: p3xr.strings.form.error.invalid }) return false } return true } $scope.addNode = (index) => { const newNode = { host: undefined, port: undefined, password: undefined, username: undefined, id: p3xr.nextId(), } if (index === undefined) { $scope.model.nodes.push(newNode) } else { $scope.model.nodes.splice(index + 1, 0, newNode) } } $scope.removeNode = async (ev, index) => { try { await p3xrCommon.confirm({ event: ev, message: p3xr.strings.confirm.deleteConnectionText }); $scope.model.nodes.splice(index, 1) p3xrCommon.toast({ message: p3xr.strings.status.nodeRemoved }) } catch (e) { if (e === undefined) { /* p3xrCommon.toast({ message: p3xr.strings.status.cancelled }); */ return; } p3xrCommon.generalHandleError(e) } } $scope.testConnection = async ($event) => { $scope.p3xrConnectionForm.$setSubmitted(); if (!handleInvalidForm()) { return; } try { const authModel = p3xr.clone($scope.model) if ($scope.model.askAuth === true) { const auth = await p3xrDialogAskAuthorization.show({ $event: $event }) authModel.username = undefined authModel.password = undefined if (auth.username) { authModel.username = auth.username } if (auth.password) { authModel.password = auth.password } } p3xr.ui.overlay.show({ message: p3xr.strings.title.connectingRedis }) //await new Promise(resolve => setTimeout(resolve, 5000000)) const response = await p3xrSocket.request({ action: 'redis-test-connection', payload: { model: authModel }, }) console.warn('response', response) p3xrCommon.toast({ message: p3xr.strings.status.redisConnected }) } catch (e) { p3xrCommon.generalHandleError(e) } finally { p3xr.ui.overlay.hide() } } $scope.submit = async () => { if (!handleInvalidForm()) { return; } if ($scope.model.host === undefined) { $scope.model.host = 'localhost' } if ($scope.model.port === undefined) { $scope.model.port = 6379 } if (options.type === 'new') { $scope.model.id = p3xr.nextId() } for (let node of $scope.model.nodes) { if (node.host === undefined) { node.host = 'localhost' } if (node.id === undefined) { node.id = p3xr.nextId() } } try { const saveModel = p3xr.clone($scope.model) //console.log('saveModel', saveModel) const response = await p3xrSocket.request({ action: 'connection-save', payload: { model: saveModel }, }) p3xrCommon.toast({ message: $scope.options.type === 'new' ? p3xr.strings.status.added : p3xr.strings.status.saved }) //$scope.options.type = 'edit'; $mdDialog.cancel(); } catch (e) { p3xrCommon.generalHandleError(e) } } }, template: require('./p3xr-dialog-connection.html'), parent: angular.element(document.body), targetEvent: options.$event, clickOutsideToClose: true, fullscreen: true // Only for -xs, -sm breakpoints. }) // console.warn(result) } catch (error) { p3xrCommon.generalHandleError(error) } } } }); src/angular/dialog/p3xr-dialog-connection.scss000066400000000000000000000000001517671130100217100ustar00rootroot00000000000000src/angular/dialog/p3xr-dialog-json-editor.html000066400000000000000000000051651517671130100220200ustar00rootroot00000000000000
edit   {{ $root.p3xr.strings.intention.jsonViewEditor }} close
{{ $root.p3xr.strings.label.jsonViewNotParsable}}
{{ $root.p3xr.strings.label.jsonViewNotParsable}} cancel {{ $root.p3xr.strings.intention.cancel }} {{ $root.p3xr.strings.intention.cancel }} save {{ $root.p3xr.strings.intention.save }} {{ $root.p3xr.strings.intention.save }} save format_line_spacing {{ $root.p3xr.strings.intention.saveWithFormatJson }} {{ $root.p3xr.strings.intention.saveWithFormatJson }}
src/angular/dialog/p3xr-dialog-json-editor.js000066400000000000000000000161241517671130100214650ustar00rootroot00000000000000p3xr.ng.factory('p3xrDialogJsonEditor', function (p3xrCommon, $mdDialog, $timeout) { const debounce = require('lodash/debounce') return new function () { this.show = async(options) => { /* webpackChunkName: "editor" */ await import( /* webpackPrefetch: true */ "../../editor" ) return $mdDialog.show({ controller: function ($scope, $mdDialog, p3xrCommon, $rootScope, p3xrTheme, $mdMedia) { $rootScope.$broadcast('p3xr-main-resizer', { drag: false }) let editor let obj try { obj = JSON.parse(options.value) $scope.isJson = true } catch (e) { obj = undefined $scope.isJson = false } if ($scope.isJson) { // https://webpack.js.org/guides/code-splitting/ // /* webpackMode: "lazy" */ const execAsync = async() => { try { $timeout(() => { const container = document.getElementById("p3xr-jsoneditor") const options = { //sortObjectKeys: false, limitDragging: false, modes: ['tree', 'code', 'view', 'preview'], //history: false, mode: 'code', //search: true, //mainMenuBar: false, language: p3xr.settings.getJSONEditorLanguage(), //enableSort: false, //enableTransform: false, //ace: ace, indentation: p3xr.settings.jsonFormat, //theme: p3xrTheme.isDark() ? 'ace/theme/twilight' : 'ace/theme/github' } if (p3xrTheme.isDark()) { options.theme = 'ace/theme/twilight' } /* if (JSON.stringify(obj).length > 10240) { p3xrCommon.toast({ message: p3xr.strings.label.bigJson, hideDelay: 10000 }) } */ editor = new JSONEditor(container, options, obj) }) } catch(e) { p3xrCommon.generalHandleError(e) } } execAsync() } const close = (event) => { const keycode = event.which || event.keyCode; // If this is the escape key //console.log('close') if ( keycode === 27 ) { event.preventDefault(); event.stopPropagation(); // $mdDialog.cancel(); const pico = $('.pico-close') if (pico.length > 0) { pico.click() } else { $mdDialog.cancel(); } } } document.documentElement.addEventListener('keydown', close, true) const resize = () => { if ($mdMedia('(max-width:959px)')) { $scope.minHeight = '100%' } else { $scope.minHeight = `${Math.max(10, window.innerHeight - 100)}px` } } resize() const editorResize = debounce(() => { if (editor && editor.aceEditor) { console.log('resize json editor ace resize') resize() $scope.$digest() editor.aceEditor.resize() } }, p3xr.settings.debounce) $window.on('resize', editorResize) $scope.$on('$destroy', () => { $window.off('resize', editorResize) if (editor){ editor.destroy() editor = undefined } $rootScope.$broadcast('p3xr-main-resizer', { drag: true }) document.documentElement.removeEventListener('keydown', close, true) }) // Promise reject $scope.ok = function () { $mdDialog.cancel(); }; // Promise resolve $scope.save = function ({ format }) { try { $mdDialog.hide({ obj: JSON.stringify(editor.get(), null, format ? p3xr.settings.jsonFormat : 0) }); } catch(e) { p3xrCommon.generalHandleError(e) } }; /* // Promise resolve - with result $scope.answer = function (answer) { $mdDialog.hide(answer); }; */ }, template: require('./p3xr-dialog-json-editor.html'), parent: angular.element(document.body), targetEvent: options.$event, clickOutsideToClose: false, fullscreen: true, // Only for -xs, -sm breakpoints. multiple: true, escapeToClose: false, }) } } }); src/angular/dialog/p3xr-dialog-json-editor.scss000066400000000000000000000003061517671130100220170ustar00rootroot00000000000000.jsoneditor-poweredBy { display: none; } .ace_mobile-menu { display: none !important } @media (min-width:960px) { md-dialog.fullscreen-dialog-fix-width { min-width: 75%; } } src/angular/dialog/p3xr-dialog-json-view.html000066400000000000000000000041761517671130100215050ustar00rootroot00000000000000
table_chart   {{ $root.p3xr.strings.intention.jsonViewShow }} {{ $root.p3xr.strings.page.treeControls.expandAll}} keyboard_arrow_down {{ $root.p3xr.strings.page.treeControls.collapseAll}} keyboard_arrow_up close
{{ $root.p3xr.strings.label.jsonViewNotParsable}}
close {{ $root.p3xr.strings.intention.close }}
src/angular/dialog/p3xr-dialog-json-view.js000066400000000000000000000046141517671130100211520ustar00rootroot00000000000000p3xr.ng.factory('p3xrDialogJsonView', function (p3xrCommon, $mdDialog) { return new function () { this.show = async (options) => { try { const result = await $mdDialog.show({ controller: function ($scope, $mdDialog, $timeout) { $scope.treeExpandAll = () => { p3xr.ui.overlay.show({ message: p3xr.strings.title.jsonRecursive }) $timeout(() => { $scope.howExpanded = 'recursive' $timeout(() => { p3xr.ui.overlay.hide() }) }) } $scope.treeCollapseAll = () => { $scope.howExpanded = true } try { $scope.howExpanded = true $scope.obj = JSON.parse(options.value) $scope.isJson = true } catch (e) { $scope.obj = undefined $scope.isJson = false } // Promise reject $scope.ok = function () { $mdDialog.cancel(); }; /* // Promise resolve $scope.hide = function () { $mdDialog.hide(); }; // Promise resolve - with result $scope.answer = function (answer) { $mdDialog.hide(answer); }; */ }, template: require('./p3xr-dialog-json-view.html'), parent: angular.element(document.body), targetEvent: options.$event, clickOutsideToClose: true, fullscreen: true, // Only for -xs, -sm breakpoints. multiple: true, }) // console.warn(result) } catch (error) { p3xrCommon.generalHandleError(error) } } } }); src/angular/dialog/p3xr-dialog-json-view.scss000066400000000000000000000005751517671130100215130ustar00rootroot00000000000000json-tree > json-node > ul { margin: 0; } json-tree * { font-size: 13px !important; } json-tree > json-node > span.key { position: relative; top: -8px; } /* json-tree json-node.expandable::before { font-family: 'Font Awesome 5 Free'; content: "\f07b"; } json-tree json-node.expandable.expanded::before { content: "\f07c"; transform: none; } */ src/angular/dialog/p3xr-dialog-key-new-or-set.html000066400000000000000000000236731517671130100223550ustar00rootroot00000000000000

{{ options.type === 'edit' ? $root.p3xr.strings.form.key.label.formName.edit : ( options.type === 'append' ? $root.p3xr.strings.form.key.label.formName.append : $root.p3xr.strings.form.key.label.formName.add ) }}

close
{{ $root.p3xr.strings.form.key.error.key }}
{{ $root.p3xr.strings.redisTypes[type] }}
{{ $root.p3xr.strings.label.redisListIndexInfo }}
{{ $root.p3xr.strings.form.key.error.hashKey }}
{{ $root.p3xr.strings.form.key.error.score }}
{{ $root.p3xr.strings.form.key.error.streamTimestamp }}
{{ $root.p3xr.strings.label.streamTimestampId }}
upload {{ $root.p3xr.strings.intention.setBuffer }} {{ $root.p3xr.strings.intention.setBuffer }} {{ $root.p3xr.strings.intention.jsonViewEditor }} {{ $root.p3xr.strings.intention.jsonViewEditor }} format_line_spacing {{ $root.p3xr.strings.intention.formatJson }} {{ $root.p3xr.strings.intention.formatJson }} table_chart {{ $root.p3xr.strings.intention.jsonViewShow }} {{ $root.p3xr.strings.intention.jsonViewShow }} {{ $root.p3xr.strings.intention.copy }} content_copy {{ $root.p3xr.strings.label.validateJson }}
{{ $root.p3xr.strings.label.streamValue }}
{{ $root.p3xr.strings.label.isBuffer({ maxValueAsBuffer: $root.p3xr.settings.prettyBytes($root.p3xr.settings.maxValueAsBuffer)}) }} {{ bufferDisplay(model.value) }}
{{ $root.p3xr.strings.form.key.error.value }}
{{ $root.p3xr.strings.label.jsonViewNotParsable }}
cancel {{ $root.p3xr.strings.intention.cancel }} {{ options.type === 'edit' ? 'edit' : 'add'}} {{ options.type === 'edit' ? $root.p3xr.strings.intention.save : $root.p3xr.strings.intention.add }}
src/angular/dialog/p3xr-dialog-key-new-or-set.js000066400000000000000000000234071517671130100220200ustar00rootroot00000000000000p3xr.ng.factory('p3xrDialogKeyNewOrSet', function (p3xrCommon, $mdDialog, p3xrSocket, p3xrDialogJsonEditor, p3xrDialogJsonView) { return new function () { this.show = (options) => { return new Promise(async (resolve, reject) => { try { const result = await $mdDialog.show({ controller: function ($scope, $mdDialog) { $scope.bufferDisplay = (value) => { const result = '(' + p3xr.settings.prettyBytes(value.byteLength) + ')' //console.log('bufferDisplay', result ) return result } $scope.setBufferUpload = () => { const input = document.getElementById('p3xr-main-key-new-upload-buffer'); input.value = ''; // Clear the input value input.click(); } $scope.readFileAsBuffer = async (event) => { const file = event.target.files[0]; if (!file) { return; } const reader = new FileReader(); reader.onload = async (loadEvent) => { try { await p3xrCommon.confirm({ message: p3xr.strings.confirm.uploadBuffer }) const arrayBuffer = loadEvent.target.result; $scope.model.value = arrayBuffer //console.log('buffer', $scope.model.value) p3xrCommon.toast(p3xr.strings.confirm.uploadBufferDone) } catch(e) { p3xrCommon.generalHandleError(e) } }; reader.onerror = (error) => { p3xrCommon.generalHandleError(error) } reader.readAsArrayBuffer(file); } $scope.jsonViewer = (options) => { p3xrDialogJsonView.show({ event: options.$event, value: options.value }) // this.showJson = !this.showJson } $scope.copy = async (opts) => { await global.p3xr.clipboard({ value: opts.value }) p3xrCommon.toast(p3xr.strings.status.dataCopied) } $scope.types = [ 'string', 'list', 'hash', 'set', 'zset', 'stream', ] $scope.validateJson = false; $scope.model = { type: 'string', key: options.node !== undefined ? options.node.key + p3xr.settings.redisTreeDivider : '', value: undefined, score: undefined, streamTimestamp: '*', hashKey: undefined, index: undefined, } $scope.options = options; if (options.hasOwnProperty('model')) { Object.assign($scope.model, options.model) } Object.defineProperty($scope, 'valueType', { get: () => { return typeof $scope.model.value } }) //console.warn($scope.model) // Promise reject $scope.cancel = function () { /* p3xrCommon.toast({ message: p3xr.strings.status.cancelled }) */ $mdDialog.cancel(); reject() }; /* // Promise resolve $scope.hide = function () { $mdDialog.hide(); }; // Promise resolve - with result $scope.answer = function (answer) { $mdDialog.hide(answer); }; */ const handleInvalidForm = () => { if ($scope.p3xrKeyNewForm.$invalid) { p3xrCommon.toast({ message: p3xr.strings.form.error.invalid }) return false } return true } $scope.submit = async () => { if (!handleInvalidForm()) { return; } try { p3xr.ui.overlay.show() const response = await p3xrSocket.request({ action: 'key-new-or-set', payload: { type: options.type, originalValue: options.hasOwnProperty('model') ? options.model.value : undefined, originalHashKey: options.hasOwnProperty('model') ? options.model.hashKey : undefined, model: p3xr.clone($scope.model) }, }) window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/key-new-or-set' } ); resolve(response) p3xrCommon.toast({ message: p3xr.strings.status.set }) //$scope.options.type = 'edit'; $mdDialog.cancel(); } catch (e) { //reject(e) p3xrCommon.generalHandleError(e) } finally { p3xr.ui.overlay.hide() } } $scope.jsonEditor = async(options) => { try { const result = await p3xrDialogJsonEditor.show({ event: options.$event, value: options.value }) $scope.model.value = result.obj $scope.$digest(); } catch(e) { p3xrCommon.generalHandleError(e) } // this.showJson = !this.showJson } $scope.formatJson = () => { try { $scope.model.value = JSON.stringify(JSON.parse($scope.model.value), null, p3xr.settings.jsonFormat) } catch(e) { p3xrCommon.toast({ message: p3xr.strings.label.jsonViewNotParsable }) } } }, template: require('./p3xr-dialog-key-new-or-set.html'), parent: angular.element(document.body), targetEvent: options.$event, clickOutsideToClose: false, fullscreen: true, // Only for -xs, -sm breakpoints. multiple: true, //escapeToClose: false, }) // console.warn(result) } catch (error) { reject(error) p3xrCommon.generalHandleError(error) } }) } } }); src/angular/dialog/p3xr-dialog-treecontrol-settings.html000066400000000000000000000227561517671130100237660ustar00rootroot00000000000000

{{$root.p3xr.strings.form.treeSettings.label.formName}}

close
{{ $root.p3xr.strings.form.treeSettings.keyCount() }}

{{ $root.p3xr.strings.label.tooManyKeys({ count: $root.p3xr.state.keysRaw.length, maxLightKeysCount: $root.p3xr.settings.maxLightKeysCount}) }}

{{ $root.p3xr.strings.label.treeSeparatorEmpty }}

{{ $root.p3xr.strings.form.treeSettings.error.page }}

{{ $root.p3xr.strings.form.treeSettings.error.keyPageCount }}

{{ $root.p3xr.strings.form.treeSettings.error.maxValueDisplay }}
{{ $root.p3xr.strings.form.treeSettings.maxValueDisplayInfo }}

{{ $root.p3xr.strings.form.treeSettings.error.maxKeys }}
{{ $root.p3xr.strings.form.treeSettings.maxKeysInfo }}
{{ model.keysSort ? $root.p3xr.strings.label.keysSort.on : $root.p3xr.strings.label.keysSort.off }}
{{ $root.p3xr.strings.label.treeKeyStore }}
{{ model.searchClientSide ? $root.p3xr.strings.form.treeSettings.label.searchModeClient : $root.p3xr.strings.form.treeSettings.label.searchModeServer }}
{{ $root.p3xr.strings.page.treeControls.search.info }}

{{ $root.p3xr.strings.page.treeControls.search.largeSetInfo }}

{{ model.searchStartsWith ? $root.p3xr.strings.form.treeSettings.label.searchModeStartsWith : $root.p3xr.strings.form.treeSettings.label.searchModeIncludes }} {{ model.jsonFormat ? $root.p3xr.strings.form.treeSettings.label.jsonFormatTwoSpace : $root.p3xr.strings.form.treeSettings.label.jsonFormatFourSpace }} {{ model.animation ? $root.p3xr.strings.form.treeSettings.label.animation : $root.p3xr.strings.form.treeSettings.label.noAnimation }}
cancel {{ $root.p3xr.strings.intention.cancel }} save {{ $root.p3xr.strings.intention.save }}
src/angular/dialog/p3xr-dialog-treecontrol-settings.js000066400000000000000000000122501517671130100234220ustar00rootroot00000000000000p3xr.ng.factory('p3xrDialogTreecontrolSettings', function (p3xrCommon, $mdDialog, $timeout) { return new function () { this.show = async (options) => { try { await $mdDialog.show({ controller: function ($scope, $rootScope) { //console.log('$rootScope.p3xr.settings.maxValueDisplay', $rootScope.p3xr.settings.maxValueDisplay) $scope.model = { treeSeparator: $rootScope.p3xr.settings.redisTreeDivider, pageCount: $rootScope.p3xr.settings.pageCount, keyPageCount: $rootScope.p3xr.settings.keyPageCount, keysSort: $rootScope.p3xr.settings.keysSort, searchClientSide: $rootScope.p3xr.settings.searchClientSide, searchStartsWith: $rootScope.p3xr.settings.searchStartsWith, maxValueDisplay: $rootScope.p3xr.settings.maxValueDisplay, maxKeys: $rootScope.p3xr.settings.maxKeys, jsonFormat: $rootScope.p3xr.settings.jsonFormat === 2, animation: $rootScope.p3xr.settings.animation, } // Promise reject $scope.cancel = function () { /* p3xrCommon.toast({ message: p3xr.strings.status.cancelled }) */ $mdDialog.cancel(); }; /* // Promise resolve $scope.hide = function () { $mdDialog.hide(); }; // Promise resolve - with result $scope.answer = function (answer) { $mdDialog.hide(answer); }; */ const handleInvalidForm = () => { if ($scope.p3xrDialogTreecontrolSettingsForm.$invalid) { p3xrCommon.toast({ message: p3xr.strings.form.error.invalid }) return false } return true } $scope.submit = async () => { if (!handleInvalidForm()) { return; } try { $rootScope.p3xr.settings.redisTreeDivider = $scope.model.treeSeparator $rootScope.p3xr.settings.pageCount = $scope.model.pageCount $rootScope.p3xr.settings.keyPageCount = $scope.model.keyPageCount $rootScope.p3xr.settings.keysSort = $scope.model.keysSort $rootScope.p3xr.settings.searchClientSide = $scope.model.searchClientSide $rootScope.p3xr.settings.searchStartsWith = $scope.model.searchStartsWith $rootScope.p3xr.state.page = 1 $rootScope.p3xr.state.redisChanged = true; $rootScope.p3xr.settings.maxValueDisplay = $scope.model.maxValueDisplay $rootScope.p3xr.settings.maxKeys = $scope.model.maxKeys $rootScope.p3xr.settings.jsonFormat = $scope.model.jsonFormat === true ? 2 : 4 $rootScope.p3xr.settings.animation = $scope.model.animation === true ? 1 : 0 /* $timeout(() => { $rootScope.$digest() }) */ //if ( !$rootScope.p3xr.settings.searchClientSide ) { //if (options.p3xrMainRef !== undefined) { // await options.p3xrMainRef.refresh() //} //} //$scope.options.type = 'edit'; $mdDialog.cancel(); $rootScope.$broadcast('p3xr-refresh'); } catch (e) { p3xrCommon.generalHandleError(e) } } }, template: require('./p3xr-dialog-treecontrol-settings.html'), parent: angular.element(document.body), targetEvent: options.$event, clickOutsideToClose: true, fullscreen: true // Only for -xs, -sm breakpoints. }) // console.warn(result) } catch (error) { p3xrCommon.generalHandleError(error) } } } }); src/angular/dialog/p3xr-dialog-ttl.html000066400000000000000000000047411517671130100203650ustar00rootroot00000000000000

{{ $root.p3xr.strings.confirm.ttl.title}}

close
{{ $root.p3xr.strings.confirm.ttl.textContent }}
https://www.npmjs.com/package/timestring
cancel {{ $root.p3xr.strings.intention.cancel }} timer {{ $root.p3xr.strings.intention.ttl }}
src/angular/dialog/p3xr-dialog-ttl.js000066400000000000000000000074361517671130100200410ustar00rootroot00000000000000p3xr.ng.factory('p3xrDialogTtl', function (p3xrCommon, $mdDialog) { const timestring = require('timestring') return new function () { this.show = async (options) => { try { const result = await $mdDialog.show({ controller: function ($scope, $mdDialog) { // Promise reject $scope.cancel = function () { /* p3xrCommon.toast({ message: p3xr.strings.status.cancelled }) */ $mdDialog.cancel(); }; $scope.model = options.model const humanizeDuration = require("humanize-duration"); if (typeof $scope.model.ttl === 'number' && $scope.model.ttl > 0) { $scope.convertTextToTime = humanizeDuration($scope.model.ttl * 1000, { delimiter: ' ', language: p3xr.settings.getHumanizeDurationLanguage(), }) } else { $scope.convertTextToTime = ''; } $scope.openTimestringNpm = () => { location.href = 'https://www.npmjs.com/package/timestring#keywords' } let firstWatchConvertTextToTime = true $scope.$watch('convertTextToTime', (newVal, oldValue) => { if (firstWatchConvertTextToTime) { firstWatchConvertTextToTime = !firstWatchConvertTextToTime return } try { $scope.model.ttl = timestring(String(newVal), 's') } catch(e) { console.warn('timestring parse error', e) } }) const handleInvalidForm = () => { if ($scope.p3xrTtlForm.$invalid) { p3xrCommon.toast({ message: p3xr.strings.form.error.invalid }) return false } return true } $scope.submit = async () => { if (!handleInvalidForm()) { return; } try { if (isNaN($scope.model.ttl)) { $scope.model.ttl = Math.round($scope.model.ttl) } const hide = { model: $scope.model, } $mdDialog.hide(hide); } catch (e) { p3xrCommon.generalHandleError(e) } } }, template: require('./p3xr-dialog-ttl.html'), parent: angular.element(document.body), targetEvent: options.$event, clickOutsideToClose: true, // fullscreen: true // Only for -xs, -sm breakpoints. }) // console.warn(result) return result } catch (error) { p3xrCommon.generalHandleError(error) } } } }); src/angular/directive/000077500000000000000000000000001517671130100152565ustar00rootroot00000000000000src/angular/directive/p3x-validate-json.js000066400000000000000000000034631517671130100210720ustar00rootroot00000000000000p3xr.ng.directive('p3xValidateJson', function ($timeout, $rootScope) { return { restrict: 'A', require: 'ngModel', scope: { p3xValidateJsonRequired: '<', model : '=ngModel', }, link: function (scope, elm, attrs, ngModel) { let required = scope.p3xValidateJsonRequired || false let globalValue const setValidate = (isValid) => { ngModel.$setValidity('p3xValidateJson', isValid); } scope.$watch('p3xValidateJsonRequired', (val, oldVal) => { required = val; //console.warn('p3x-validate-json p3xValidateJsonRequired', 'required', required) if (!required) { // ngModel.$modelValue = globalValue setValidate(true) scope.model = globalValue } else { try { JSON.parse(globalValue) setValidate(true) } catch (e) { setValidate(false) } } }) ngModel.$validators.p3xValidateJson = (modelValue, viewValue) => { globalValue = modelValue //console.warn('p3x-validate-json p3xIsJson', 'modelValue', modelValue, 'viewValue', viewValue, 'required', required) if (!required) { setValidate(true) return modelValue } try { JSON.parse(modelValue) setValidate(true) return modelValue } catch (e) { setValidate(false) return false } }; } }; }); src/angular/directive/p3xr-monitor-input.js000066400000000000000000000036731517671130100213430ustar00rootroot00000000000000p3xr.ng.directive('p3xrMonitorInput', function($compile, $timeout) { return { restrict: 'A', scope: { controller: '=' // Two-way binding to pass the controller }, link: function(scope, element, attrs) { let popupElement = angular.element(`
`); $compile(popupElement)(scope); element.append(popupElement); scope.modelOptions = { debounce: 1000 // Use provided debounce setting or default to 300ms }; scope.$ctrl = scope.controller; let hoverTimeout; element.on('mouseenter', function() { if (hoverTimeout) $timeout.cancel(hoverTimeout); scope.$apply(function() { scope.showPopup = true; }); }); element.on('mouseleave', function() { if (hoverTimeout) $timeout.cancel(hoverTimeout); hoverTimeout = $timeout(function() { scope.$apply(function() { scope.showPopup = false; }); }, scope.modelOptions.debounce); // Delay hiding the popup }); } } }) src/angular/directive/p3xr-monitor.input.scss000066400000000000000000000014411517671130100216720ustar00rootroot00000000000000 @use '../../scss/vars' as v; .p3xr-monitor-input { position: absolute; transform: translateX(20px); top: 48px; display: block; /* Hide by default and let AngularJS show it */ md-toolbar { border: none !important; padding: 4px; min-height: auto !important; height: auto !important; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-left-radius: v.$border-radius; border-bottom-right-radius: v.$border-radius; .md-toolbar-tools { min-height: auto !important; height: auto !important; padding: 0px;; input { width: 100px; font-size: 0.9rem; } } } } src/angular/directive/p3xr-ng-enter.js000066400000000000000000000005651517671130100202330ustar00rootroot00000000000000p3xr.ng.directive('ngEnter', function () { return function (scope, element, attrs) { element.bind("keydown keypress", function (event) { if (event.which === 13) { scope.$apply(function () { scope.$eval(attrs.ngEnter); }); event.preventDefault(); } }); }; })src/angular/factory/000077500000000000000000000000001517671130100147475ustar00rootroot00000000000000src/angular/factory/p3xr-common.js000066400000000000000000000116311517671130100174710ustar00rootroot00000000000000p3xr.ng.factory('p3xrCommon', function ($mdToast, $mdDialog, $mdColors, $rootScope, p3xrRedisParser, $timeout, p3xrTheme) { const generalHandleError = (dataOrError) => { if (dataOrError === undefined) { return; } if (!(dataOrError instanceof Error || dataOrError instanceof Object)) { dataOrError = new Error(dataOrError) } if (dataOrError instanceof Error || dataOrError.status === 'error') { let error if (dataOrError instanceof Error) { error = dataOrError } else { error = dataOrError.error } console.warn('generalHandleError') console.error(error) if (typeof error === 'string' && p3xr.strings.code.hasOwnProperty(error)) { error = new Error(p3xr.strings.code[error]) } else if (error.hasOwnProperty('code') && p3xr.strings.code.hasOwnProperty(error.code)) { error.message = p3xr.strings.code[error.code] } else if (p3xr.strings.code.hasOwnProperty(error.message)) { error.message = p3xr.strings.code[error.message] } p3xr.settings.handleConnectionIsClosed (error, $rootScope) result.alert({ title: p3xr.strings.title.error, message: '
' + (error.hasOwnProperty('message') ? error.message : error) + '
', }) return false } return true } const toast = (options) => { if (typeof options === 'string') { options = { message: options } } const template = '' + options.message + '' $mdToast.show({ controller: 'p3xrToastController', template: template, hideDelay: options.hideDelay || p3xr.settings.toast.timeout, position: p3xr.settings.toast.position, }); } const confirm = (options) => { let confirm, title, okButton if (!options.hasOwnProperty('disableCancel')) { confirm = $mdDialog.confirm() title = p3xr.strings.confirm.title okButton = p3xr.strings.intention.sure } else { confirm = $mdDialog.alert() title = p3xr.strings.confirm.info okButton = p3xr.strings.intention.ok } confirm .title(title) .htmlContent(options.message) .targetEvent(options.event) .ok(okButton) .multiple(true) if (!options.hasOwnProperty('disableCancel')) { confirm.cancel(p3xr.strings.intention.cancel); } return $mdDialog.show(confirm) } let lastResponse const loadRedisInfoResponse = (options = {}) => { let response if (!options.response) { response = lastResponse } else { response = options.response } lastResponse = response //console.warn('response', response) console.time('loadRedisInfoResponse') $rootScope.p3xr.state.info = p3xrRedisParser.info(response.info) //$rootScope.p3xr.state.infoObject = response.infoObject $rootScope.p3xr.state.keysRaw = response.keys if ($rootScope.p3xr.settings.keysSort && $rootScope.p3xr.state.keysRaw.length <= p3xr.settings.maxLightKeysCount) { $rootScope.p3xr.state.keysRaw = response.keys.sort(p3xr.sort.naturalCompareDocument()) } else { $rootScope.p3xr.state.keysRaw = response.keys } $rootScope.p3xr.state.keysInfo = response.keysInfo console.timeEnd('loadRedisInfoResponse') /* $timeout(() => { $rootScope.p3xr.state.reducedFunctions = $rootScope.p3xr.state.keysRaw.length > p3xr.settings.maxLightKeysCount $rootScope.$digest() console.timeEnd('loadRedisInfoResponse') }) */ } const result = { inputBackground: () => { return p3xrTheme.isDark() ? 'rgba(64, 64, 64, 1)' : 'white' }, inputBorderColor: () => { return $mdColors.getThemeColor(p3xr.state.themeLayout + '-primary-hue-1') }, inputColor: () => { return p3xrTheme.isDark() ? 'white' : 'black' }, generalHandleError: generalHandleError, toast: toast, alert: (opts) => { if (typeof opts === 'string') { opts = { message: opts } } opts.disableCancel = true return confirm(opts) }, confirm: confirm, loadRedisInfoResponse: loadRedisInfoResponse, } return result; }).controller('p3xrToastController', function ($scope, $mdToast) { $scope.closeToast = function() { $mdToast.hide(); }; }) src/angular/factory/p3xr-key-paging.js000066400000000000000000000037071517671130100202410ustar00rootroot00000000000000p3xr.ng.factory('p3xrKeyPaging', function ($mdToast, $mdDialog, $mdColors, $rootScope, p3xrRedisParser, $timeout,) { return function({ $ctrl, $scope, watch, figurePagingType }) { //console.log('$ctrl, $scope, watch, figurePagingType', $ctrl, $scope, watch, figurePagingType) const figurePaging = () => { switch(figurePagingType) { case 'zset': $ctrl.pages = Math.ceil(Object.keys($ctrl.p3xrValue).length / 2 / p3xr.settings.keyPageCount) break; default: $ctrl.pages = Math.ceil(Object.keys($ctrl.p3xrValue).length / p3xr.settings.keyPageCount) break; } $ctrl.page = 1 } this.figurePaging = figurePaging if (watch !== false) { $scope.$watch('$ctrl.p3xrValue', (n, o) => { figurePaging() }) } $scope.$watch('$root.p3xr.settings.keyPageCount', () => { figurePaging() }) $ctrl.pager = (options) => { const {page} = options ///console.log(page ) switch (page) { case 'prev': if ($ctrl.page - 1 >= 1) { $ctrl.page = $ctrl.page - 1 } break; case 'next': if ($ctrl.page + 1 <= $ctrl.pages) { $ctrl.page = $ctrl.page + 1 } break; case 'last': $ctrl.page = $ctrl.pages break; case 'first': $ctrl.page = 1 break; } } $ctrl.pageChange = () => { if ($ctrl.page < 1) { $ctrl.page = 1 } else if ($ctrl.page > $ctrl.pages) { $ctrl.page = $ctrl.pages } } }; }) src/angular/factory/p3xr-redis-parser.js000066400000000000000000000160551517671130100206060ustar00rootroot00000000000000p3xr.ng.factory('p3xrRedisParser', function ($rootScope) { return new function () { const selfMain = this; this.array = (options) => { const {line} = options let {divider, fieldDivider} = options if (divider === undefined) { divider = ',' } if (fieldDivider === undefined) { fieldDivider = '=' } const rows = line.split(divider) const obj = {} for (let row of rows) { const rowLine = row.split(fieldDivider) const rowLineData = rowLine[1] ?? '' obj[rowLine[0]] = rowLineData.trim() } return obj } this.info = (str) => { //console.log( str) const lines = str.split('\n') const obj = {} let section let currentSectionObj let hadSection = false let pikaIndex = 0 for (let line of lines) { if (line.startsWith('#')) { if (hadSection) { continue } hadSection = true if (section !== undefined) { obj[section] = currentSectionObj } section = line.substring(1).toLowerCase().trim() currentSectionObj = {} } else if (line.length > 2) { hadSection = false let lineArray let value if (line.includes(':')) { lineArray = line.split(':') value = lineArray[1] ?? ""; currentSectionObj[lineArray[0]] = value.includes(',') ? selfMain.array({ line: value.trim() }) : value.trim() } else { // pika let [key, values] = line.split(/ (.+)/); lineArray = key value = values ?? ""; value = value.split(',').map((item) => `${(pikaIndex) + '-' + item.trim()}`).join(',') //console.log('value', value) if (currentSectionObj.hasOwnProperty('db0')) { Object.assign(currentSectionObj['db0'], value.includes(',') ? selfMain.array({ line: value.trim() }) : value.trim() ) } else { currentSectionObj['db0'] = value.includes(',') ? selfMain.array({ line: value.trim() }) : value.trim() } pikaIndex++ } } } if (section !== undefined && Object.keys(currentSectionObj).length > 0) { obj[section] = currentSectionObj } console.warn('info', obj) obj.keyspaceDatabases = {} if (obj.hasOwnProperty('keyspace')) { //alert('ok') Object.keys(obj.keyspace).forEach(key => { key = parseInt(key.substring(2)) obj.keyspaceDatabases[key] = true }) } //console.log('obj', obj) return obj } this.keysToTreeControl = (options) => { let {keys} = options; let {divider} = options; if (divider === undefined) { divider = p3xr.settings.redisTreeDivider; } const mainNodes = []; const newExpandedNodes = []; $rootScope.expandedNodes = []; const recursiveNodes = (splitKey, level = 0, nodes = mainNodes) => { let foundNode = false; if (level + 1 < splitKey.length) { for (let node of nodes) { if (node.label === splitKey[level] && node.type === 'folder') { foundNode = node; } } } if (!foundNode) { const defaultFoundNode = { label: splitKey[level], key: splitKey.slice(0, level + 1).join(divider), children: [], childCount: 0, // Initialize with 0, will be calculated later type: level + 1 === splitKey.length ? 'element' : 'folder', }; if (defaultFoundNode.type === 'element') { defaultFoundNode.keysInfo = p3xr.state.keysInfo[defaultFoundNode.key]; } nodes.push(defaultFoundNode); foundNode = defaultFoundNode; for (let saveExpandedNode of $rootScope.savedExpandedNodes) { if (saveExpandedNode.key === foundNode.key) { newExpandedNodes.push(foundNode); } } } if (level + 1 < splitKey.length) { recursiveNodes(splitKey, level + 1, foundNode.children); } }; $rootScope.expandedNodes = newExpandedNodes; for (let key of keys) { let splitkey = divider === '' ? [key] : key.split(divider); recursiveNodes(splitkey); } const recursiveKeyCount = (node) => { // Directly modify childCount here based on type 'element' node.childCount = node.children.filter(child => child.type === 'element').length; for (let child of node.children) { recursiveKeyCount(child); // For folders, accumulate child counts from their children if (child.type === 'folder') { node.childCount += child.childCount; } } }; for (let node of mainNodes) { recursiveKeyCount(node); } $rootScope.savedExpandedNodes = []; return mainNodes; }; this.console = new function () { const selfConsole = this; selfConsole.parse = (responseResult) => { if (typeof responseResult === 'object') { let result = '' Object.keys(responseResult).forEach(key => { if (result !== '') { result += "\n" } result += responseResult[key] }) return result } else { return responseResult } } } }; });src/angular/factory/p3xr-socket.js000066400000000000000000000156351517671130100175010ustar00rootroot00000000000000p3xr.ng.factory('p3xrSocket', function ($rootScope, p3xrCommon, $state, $cookies ) { // socket.io now auto-configures its connection when we ommit a connection url const ioOptions = { rejectUnauthorized: false, path: '/socket.io', // transports: ['websocket'], secure: true, } if (global.p3xrDevMode === true ) { ioOptions.transports = ['websocket'] } /* // on reconnection, reset the transports option, as the Websocket // connection may have failed (caused by proxy, firewall, browser, ...) // https://socket.io/docs/client-api/ ioClient.on('reconnect_attempt', () => { ioClient.io.opts.transports = ['polling', 'websocket']; }); */ const ioClient = io.connect(p3xr.api.host, ioOptions); //console.warn(p3xr.api.host, ioOptions) let reconnect = false; ioClient.on('connect', async function () { if (reconnect) { console.log('p3xr-socket (socket) RE-connected', ioClient.id) //return; } else { console.log('p3xr-socket (socket) connected', ioClient.id) } reconnect = true; }) ioClient.on('disconnect', function () { location.reload() }) let donated = undefined ioClient.on('info-interval', (data) => { $rootScope.p3xr.state.donated = data.donated if (data.donated !== donated) { if (!global.p3xr.isBot()) { window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': p3xr.state.donated ? '/donated' : '/free' } ); } donated = data.donated $rootScope.$digest(); } }) let connectErrorWas = false const socketError = async function (error) { if (!connectErrorWas) { connectErrorWas = true; try { $cookies.remove(p3xr.settings.connectInfo.cookieName) p3xrCommon.generalHandleError(error) $state.go('socketio-error', { error: error }) await p3xrCommon.confirm({ disableCancel: false, message: p3xr.strings.confirm.socketioConnectError }) location.reload() } catch (e) { p3xrCommon.generalHandleError(e) } } } ioClient.on('error', socketError) ioClient.on('connect_error', socketError) ioClient.on('connections', (data) => { //console.log(data) if (!p3xrCommon.generalHandleError(data)) { p3xr.connectionsReset() return; } p3xr.state.connections = data.connections $rootScope.$digest() }) ioClient.on('redis-disconnected', async (data) => { if ($rootScope.p3xr.state.connection !== undefined && $rootScope.p3xr.state.connection.id === data.connectionId) { $rootScope.p3xr.monitor = false; $rootScope.p3xr.state.connection = undefined; if (data.status === 'error') { p3xrCommon.toast({ message: p3xr.strings.status.redisDisconnected(data) }) } else if (data.status === 'code') { if (!p3xr.strings.code.hasOwnProperty(data.code)) { p3xrCommon.toast({ message: `unknown redis disconnect code: ${data.code}` }) } else { p3xrCommon.toast({ message: p3xr.strings.code[data.code] }) } } $state.go('main') try { await request({ action: 'trigger-redis-disconnect', enableResponse: false, }) } catch (e) { p3xrCommon.generalHandleError(e) } //$rootScope.$digest(); } }) ioClient.on('redis-status', (data) => { $rootScope.p3xr.state.redisConnections = data.redisConnections setTimeout(() => { $rootScope.$digest() }) }) let receivedVersion = false ioClient.on('configuration', (data) => { $rootScope.p3xr.state.cfg = data; if (p3xr.state.cfg.snapshot === true) { p3xr.state.version = 'SNAPSHOT' } else { p3xr.state.version = 'v' + p3xr.state.cfg.version if (!receivedVersion) { receivedVersion = true window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/version/' + p3xr.state.version} ); } } $rootScope.$digest(); }) ioClient.on('error', p3xrCommon.generalHandleError) const request = (options) => { if (!options.payload) { options.payload = {} } if (typeof $rootScope.p3xr.state.search === 'string' && $rootScope.p3xr.state.search.length > 0) { if ($rootScope.p3xr.settings.searchStartsWith) { options.payload.match = $rootScope.p3xr.state.search + '*'; } else { options.payload.match = '*' + $rootScope.p3xr.state.search + '*'; } } options.payload.maxKeys = parseInt(p3xr.settings.maxKeys) let {enableResponse} = options if (enableResponse !== false) { enableResponse = true } if (enableResponse) { return new Promise((resolve, reject) => { options.requestId = p3xr.nextId(); const responseEvent = `p3xr-response-${options.requestId}` let timeout const response = (data) => { clearTimeout(timeout) //console.warn('data', data) //console.trace('data', data) ioClient.off(responseEvent) if (data.status === 'ok') { resolve(data) } else { const error = new Error(data.error) //error.code = data.error.code reject(error) } $rootScope.$digest() } timeout = setTimeout(() => { ioClient.off(responseEvent, response) reject(new Error(p3xr.strings.label.socketIoTimeout({ timeout: p3xr.settings.socket.timeout }))); $rootScope.$digest() }, p3xr.settings.socket.timeout) ioClient.on(responseEvent, response) ioClient.emit('p3xr-request', options) }) } else { ioClient.emit('p3xr-request', options) } } return { ioClient: ioClient, request: request, }; }); src/angular/injector.js000066400000000000000000000037161517671130100154620ustar00rootroot00000000000000//injector-angular-start require('./dialog/p3xr-dialog-ask-authorization.js'); require('./dialog/p3xr-dialog-connection.js'); require('./dialog/p3xr-dialog-json-editor.js'); require('./dialog/p3xr-dialog-json-view.js'); require('./dialog/p3xr-dialog-key-new-or-set.js'); require('./dialog/p3xr-dialog-treecontrol-settings.js'); require('./dialog/p3xr-dialog-ttl.js'); require('./directive/p3x-validate-json.js'); require('./directive/p3xr-monitor-input.js'); require('./directive/p3xr-ng-enter.js'); require('./factory/p3xr-common.js'); require('./factory/p3xr-key-paging.js'); require('./factory/p3xr-redis-parser.js'); require('./factory/p3xr-socket.js'); require('./layout/p3xr-layout.js'); require('./pages/main/key/p3xr-main-key-hash.js'); require('./pages/main/key/p3xr-main-key-list.js'); require('./pages/main/key/p3xr-main-key-set.js'); require('./pages/main/key/p3xr-main-key-stream.js'); require('./pages/main/key/p3xr-main-key-string.js'); require('./pages/main/key/p3xr-main-key-zset.js'); require('./pages/main/p3xr-main-key.js'); require('./pages/main/p3xr-main-statistics.js'); require('./pages/main/p3xr-main-treecontrol-controls.js'); require('./pages/main/p3xr-main-treecontrol.js'); require('./pages/p3xr-console.js'); require('./pages/p3xr-error.js'); require('./pages/p3xr-main.js'); require('./pages/p3xr-overview.js'); require('./pages/p3xr-settings.js'); require('./provider/p3xr-theme.js'); require('./provider/theme-generator/p3xr-theme-dark-neu.js'); require('./provider/theme-generator/p3xr-theme-dark.js'); require('./provider/theme-generator/p3xr-theme-darko-bluo.js'); require('./provider/theme-generator/p3xr-theme-enterprise.js'); require('./provider/theme-generator/p3xr-theme-light.js'); require('./provider/theme-generator/p3xr-theme-matrix.js'); require('./provider/theme-generator/p3xr-theme-redis.js'); require('./ui/p3xr-accordion.js'); require('./ui/p3xr-button.js'); require('./ui/p3xr-input.js'); require('./ui/p3xr-key-pager.js'); //injector-angular-endsrc/angular/layout/000077500000000000000000000000001517671130100146155ustar00rootroot00000000000000src/angular/layout/p3xr-layout.html000066400000000000000000000201151517671130100177110ustar00rootroot00000000000000
{{ $root.p3xr.state.version }}
{{ $root.p3xr.state.version }}
warning {{ $root.p3xr.strings.label.reducedFunction }}
src/angular/layout/p3xr-layout.js000066400000000000000000000262551517671130100173740ustar00rootroot00000000000000p3xr.ng.component('p3xrLayout', { template: require('./p3xr-layout.html'), controller: function (p3xrTheme, $rootScope, p3xrSocket, p3xrCommon, $state, $cookies, $timeout, $scope, p3xrDialogAskAuthorization) { let themesCache this.getThemeKey = (themes) => { if (themesCache === undefined) { const themesKeys = Object.keys(themes) themesCache = themesKeys.sort((a, b) => { return themes[a].order - themes[b].order; }) } return themesCache } this.getVersionColor = () => { return p3xrTheme.getCurrentThemeName() === 'p3xrThemeMatrix' ? 'grey-900' : 'background-A100' } this.setTheme = (theme) => { p3xrTheme.setTheme(p3xrTheme.generateThemeName(theme)) } this.openLink = { github: () => { location.href = `https://github.com/patrikx3/redis-ui` }, githubRelease: () => { location.href = `https://github.com/patrikx3/redis-ui/releases` }, githubChangelog: () => { location.href = `https://github.com/patrikx3/redis-ui/blob/master/change-log.md#change-log` }, donate: () => { location.href = `https://www.paypal.me/patrikx3` }, corifeusNetwork: () => { location.href = `https://network.corifeus.com` } } const camelCase = require('lodash/camelCase') Object.defineProperty(this, 'themeSelectedKey', { get: () => { let key = p3xr.state.theme key = key.slice('p3xrTheme'.length) key = camelCase(key) return key } }) let $warning const resize = () => { $warning.css('left', ((document.documentElement.clientWidth / 2) - ($warning.outerWidth() / 2)) + 'px') } this.reducedFunctionalty = () => { p3xrCommon.confirm({ disableCancel: true, message: p3xr.strings.label.tooManyKeys({ count: $rootScope.p3xr.state.keysRaw.length, maxLightKeysCount: p3xr.settings.maxLightKeysCount, }) }) } this.$onInit = () => { $warning = $('#p3xr-layout-reduced') resize() $window.on('resize', resize) const connection = $cookies.getObject(p3xr.settings.connectInfo.cookieName) if (connection !== undefined) { this.connect(connection) } $timeout(() => { global.p3xrSetLanguage = (key) => { $rootScope.$apply(() => { $rootScope.isElectron = true this.setLanguage(key) }) } global.p3xrSetMenu = (menu) => { $rootScope.$apply(() => { $rootScope.isElectron = true $state.go(menu) }) } }, 3000) /* $('head').append(` `) */ /* $http.get(p3xr.api.host + '/nonce').then((response) => { // Inject the AdSense script dynamically with the nonce const adsContainer = document.getElementById('adsbygoogle-container'); adsContainer.innerHTML = ` `; }) */ if (Math.random() > 0.5) { p3xrCommon.toast({ message: p3xr.strings.corifeusNetwork }) //global.p3xre.toast('test') } } this.$onDestroy = function () { $window.off('resize', resize) }; //let waitForGoogleTag //let waitedForGoogleTag = false //const maxWaitForGooglaTag = 4 * 5 if (!global.p3xr.isBot()) { $rootScope.$on('$locationChangeSuccess', async function (event, to, from) { const url = new URL(to) if (url.pathname.toLowerCase().startsWith('/main/key/')) { window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/main/key' } ); return } console.log('$locationChangeSuccess gtag', url.pathname) window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': url.pathname } ); }); } $scope.$on('p3xr-connect', (event, { connection }) => { this.connect(connection, true) }) $scope.$on('p3xr-disconnect', (event) => { this.disconnect() }) this.connect = async (connection, disableState = false) => { console.time('connect') //console.log('connection', connection) //p3xr.state.search = ''; connection = global.p3xr.clone(connection) try { const originalStateArr = location.pathname.split('/') originalStateArr.shift() let originalState = originalStateArr.join('.') if (originalState === '') { originalState = 'main' } const db = $cookies.get(p3xr.settings.connection.getCookieNameCurrentDatabase(connection.id)) if (connection.askAuth === true) { const auth = await p3xrDialogAskAuthorization.show({ $event: undefined }) connection.username = undefined connection.password = undefined if (auth.username) { connection.username = auth.username } if (auth.password) { connection.password = auth.password } } p3xr.ui.overlay.show({ message: p3xr.strings.title.connectingRedis }) const response = await p3xrSocket.request({ action: 'connection-connect', payload: { connection: connection, db: db }, }) $rootScope.p3xr.state.page = 1 $rootScope.p3xr.state.monitor = false p3xr.state.dbsize = response.dbsize let dbIndex = 0 const databaseIndexes = [] //console.warn(response) while (dbIndex < response.databases) { databaseIndexes.push(dbIndex++) } p3xr.state.commands = [] Object.keys(response.commands).forEach(key => { p3xr.state.commands.push(response.commands[key][0]) }) p3xr.state.commands.sort() //console.warn('p3xr.state.commands', p3xr.state.commands) $rootScope.p3xr.state.databaseIndexes = databaseIndexes $rootScope.p3xr.state.connection = connection p3xrCommon.loadRedisInfoResponse({ response: response }) $cookies.putObject(p3xr.settings.connectInfo.cookieName, connection, { expires: p3xr.settings.cookieExpiry }) //$state.go('main.statistics') //$state.reload(); if (disableState === true) { if (originalState.startsWith('main.key')) { originalState = 'main' } } $timeout(() => { //console.warn('console original state', originalState) if (originalState === 'main') { $state.go('main.statistics') } else { if (originalState.startsWith('main.key')) { //console.warn('trigger state', originalStateArr[2]) $state.go('main.key', { key: decodeURIComponent(originalStateArr[2].replace(/~/g, '%')) }) } else { $state.go(originalState) } } }, p3xr.settings.debounce) } catch (error) { $cookies.remove(p3xr.settings.connectInfo.cookieName) $rootScope.p3xr.state.connection = undefined //$state.go('main.statistics') p3xrCommon.generalHandleError(error) } finally { p3xr.ui.overlay.hide() } // $rootScope.$digest() console.timeEnd('connect') } this.disconnect = async () => { try { $cookies.remove(p3xr.settings.connectInfo.cookieName) await p3xrSocket.request({ action: 'connection-disconnect', payload: { connectionId: p3xr.state.connection.id, }, }) $rootScope.p3xr.state.connection = undefined } catch (error) { p3xrCommon.generalHandleError(error) } finally { $state.go('settings') } // $rootScope.$digest() } Object.defineProperty(this, 'connectionName', { get: () => { if ($rootScope.p3xr.state.connection !== undefined) { return $rootScope.p3xr.strings.label.connected({ name: $rootScope.p3xr.state.connection.name }) } else { return $rootScope.p3xr.strings.intention.connect } } }) this.isMain = () => { return $state.current.name.startsWith('main') } this.isElectronInitialized = false this.setLanguage = async (key) => { try { $rootScope.p3xr.settings.language.current = key if ($rootScope.isElectron) { await p3xrSocket.request({ action: 'set-language', payload: { key: key, } }) this.isElectronInitialized = true $scope.$digest() } } catch (e) { p3xrCommon.generalHandleError(e) } } } }) src/angular/layout/p3xr-layout.scss000066400000000000000000000026121517671130100177220ustar00rootroot00000000000000@use '../../scss/vars' as v; .p3xr-layout-content, .p3xr-layout-content-electron { position: absolute; left: 0px; right: 0px; margin-bottom: v.$toolbar-height; } .p3xr-layout-content-electron { } .p3xr-layout-content { padding: v.$layout-padding; margin-top: v.$toolbar-height; } #p3xr-layout-header-container { top: 0px; } #p3xr-layout-footer-container { bottom: 0px; } #p3xr-layout-header-version-free { position: fixed; z-index: 6; top: 32px; left: 128px; font-size: 75%; } #p3xr-layout-header-version-donated { position: fixed; z-index: 6; top: 32px; left: 128px; font-size: 75%; } #p3xr-layout-header-container, #p3xr-layout-footer-container { position: fixed; z-index: 2; left: 0px; width: 100%; md-toolbar, .md-toolbar-tools { height: v.$toolbar-height !important; min-height: v.$toolbar-height !important; max-height: v.$toolbar-height !important; } } #p3xr-layout-reduced { position: fixed; z-index: 11; max-width: 310px; width: 310px; text-align: center; padding-left: 5px; padding-right: 5px; height: calc(v.$toolbar-height / 2); bottom: calc(v.$toolbar-height + 5px); font-weight: bold; text-transform: uppercase; line-height: calc(v.$toolbar-height / 2); border-style: solid; border-width: 5px; cursor: pointer; } src/angular/pages/000077500000000000000000000000001517671130100143775ustar00rootroot00000000000000src/angular/pages/main/000077500000000000000000000000001517671130100153235ustar00rootroot00000000000000src/angular/pages/main/key/000077500000000000000000000000001517671130100161135ustar00rootroot00000000000000src/angular/pages/main/key/p3xr-main-key-hash.html000066400000000000000000000067261517671130100223410ustar00rootroot00000000000000
 {{ $root.p3xr.strings.page.key.hash.table.hashkey }}
{{ $root.p3xr.strings.page.key.hash.table.value }}
{{ $root.p3xr.strings.intention.add }} add
 {{ key.substring(0, $root.p3xr.settings.maxValueDisplay) }}...{{ key }}
{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}... {{ value }}
{{ $root.p3xr.strings.intention.delete }} delete {{ $root.p3xr.strings.intention.jsonViewShow }} table_chart {{ $root.p3xr.strings.intention.copy }} content_copy download {{ $root.p3xr.strings.intention.downloadBuffer }} {{ $root.p3xr.strings.intention.edit }} edit
src/angular/pages/main/key/p3xr-main-key-hash.js000066400000000000000000000107201517671130100217760ustar00rootroot00000000000000p3xr.ng.component('p3xrMainKeyHash', { template: require('./p3xr-main-key-hash.html'), bindings: { p3xrValue: '=', p3xrValueBuffer: ' =', p3xrKey: '<', p3xrResponse: '<', }, controller: function (p3xrCommon, p3xrSocket, p3xrDialogJsonView, p3xrDialogKeyNewOrSet, $rootScope, $scope, p3xrKeyPaging) { const self = this const keyPaging = new p3xrKeyPaging({ $ctrl: self, $scope: $scope, }) this.$onInit = () => { keyPaging.figurePaging() } const load = (n, o) => { let values values = {} const index = p3xr.settings.keyPageCount * (this.page - 1) let indexKeys = 0 for(let keys of Object.keys(this.p3xrValue)) { if (indexKeys >= index && indexKeys < index + p3xr.settings.keyPageCount) { values[keys] = this.p3xrValue[keys] } indexKeys++ } //console.log('test', values) return values } $scope.$watch('$ctrl.page', load) this.pageBasedList = () => { const result = load() //console.log('result', result) return result } this.copy = async(opts) => { await global.p3xr.clipboard({ value: opts.value }) p3xrCommon.toast(p3xr.strings.status.dataCopied) } this.downloadBuffer = async ({key, $event}) => { try { /* const response = await p3xrSocket.request({ action: 'key-get-string-buffer', payload: { key: this.p3xrKey, } }) */ //console.log('response', response) //console.log('key', key, 'buffer', this.p3xrValueBuffer) const blob = new Blob([this.p3xrValueBuffer[key]]); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${this.p3xrKey}-${key}.bin`; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); } catch (e) { p3xrCommon.generalHandleError(e) } finally { } } this.addHash = async (options) => { try { await p3xrDialogKeyNewOrSet.show({ type: 'append', $event: options.$event, model: { type: 'hash', key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.deleteHashKey = async (options) => { try { await p3xrCommon.confirm({ event: options.$event, message: p3xr.strings.confirm.deleteHashKey, }) await p3xrSocket.request({ action: 'key-hash-delete-field', payload: { key: this.p3xrKey, hashKey: options.hashKey, } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.editValue = async (options) => { try { const {hashKey, value} = options await p3xrDialogKeyNewOrSet.show({ type: 'edit', $event: options.$event, model: { type: 'hash', value: value.length < p3xr.settings.maxValueAsBuffer ? value : this.p3xrValueBuffer[hashKey], hashKey: hashKey, key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.showJson = (options) => { const {value} = options; p3xrDialogJsonView.show({ value: value }) } } }) src/angular/pages/main/key/p3xr-main-key-list.html000066400000000000000000000070411517671130100223600ustar00rootroot00000000000000
  {{ $root.p3xr.strings.page.key.list.table.index }}
{{ $root.p3xr.strings.page.key.list.table.value }}
{{ $root.p3xr.strings.intention.add }} add
  {{ $index + (($ctrl.page -1) * $root.p3xr.settings.keyPageCount ) }}
{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}... {{ value }}
{{ $root.p3xr.strings.intention.delete }} delete {{ $root.p3xr.strings.intention.jsonViewShow }} table_chart {{ $root.p3xr.strings.intention.copy }} content_copy download {{ $root.p3xr.strings.intention.downloadBuffer }} {{ $root.p3xr.strings.intention.edit }} edit
src/angular/pages/main/key/p3xr-main-key-list.js000066400000000000000000000103101517671130100220210ustar00rootroot00000000000000p3xr.ng.component('p3xrMainKeyList', { template: require('./p3xr-main-key-list.html'), bindings: { p3xrValue: '=', p3xrValueBuffer: ' =', p3xrKey: '<', p3xrResponse: '<', }, controller: function ($mdColors, p3xrCommon, p3xrSocket, $rootScope, p3xrDialogJsonView, p3xrDialogKeyNewOrSet, $scope, p3xrKeyPaging) { const self = this const keyPaging = new p3xrKeyPaging({ $ctrl: self, $scope: $scope, }) this.$onInit = () => { keyPaging.figurePaging() } const load = () => { const startIndex = p3xr.settings.keyPageCount * (this.page - 1); const endIndex = startIndex + p3xr.settings.keyPageCount; return this.p3xrValue.slice(startIndex, endIndex); }; $scope.$watch('$ctrl.page', (n, o) => { return load() }) this.pageBasedList = (n, o) => { return load() } this.copy = async(opts) => { await global.p3xr.clipboard({ value: opts.value }) p3xrCommon.toast(p3xr.strings.status.dataCopied) } this.downloadBuffer = async ({$index, $event}) => { try { /* const response = await p3xrSocket.request({ action: 'key-get-string-buffer', payload: { key: this.p3xrKey, } }) */ //console.log('response', response) const blob = new Blob([this.p3xrValueBuffer[$index]]); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${this.p3xrKey}-${$index}.bin`; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); } catch (e) { p3xrCommon.generalHandleError(e) } finally { } } this.appendValue = async (options) => { try { const {index, value} = options await p3xrDialogKeyNewOrSet.show({ type: 'append', $event: options.$event, model: { type: 'list', key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.editValue = async (options) => { try { const {index, value} = options await p3xrDialogKeyNewOrSet.show({ type: 'edit', $event: options.$event, model: { type: 'list', value: value.length < p3xr.settings.maxValueAsBuffer ? value : this.p3xrValueBuffer[index], index: options.index, key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.deleteListElement = async (options) => { try { await p3xrCommon.confirm({ event: options.$event, message: p3xr.strings.confirm.deleteListItem, }) const response = await p3xrSocket.request({ action: 'key-list-delete-index', payload: { key: this.p3xrKey, index: options.index, } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.showJson = (options) => { const {value} = options; p3xrDialogJsonView.show({ value: value }) } } }) src/angular/pages/main/key/p3xr-main-key-list.scss000066400000000000000000000000321517671130100223600ustar00rootroot00000000000000p3xr-main-key-list { } src/angular/pages/main/key/p3xr-main-key-set.html000066400000000000000000000061751517671130100222070ustar00rootroot00000000000000
{{ $root.p3xr.strings.page.key.set.table.value }}
{{ $root.p3xr.strings.intention.add }} add
{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}... {{ value }}
{{ $root.p3xr.strings.intention.delete }} delete {{ $root.p3xr.strings.intention.jsonViewShow }} table_chart {{ $root.p3xr.strings.intention.copy }} content_copy download {{ $root.p3xr.strings.intention.downloadBuffer }} {{ $root.p3xr.strings.intention.edit }} edit
src/angular/pages/main/key/p3xr-main-key-set.js000066400000000000000000000104601517671130100216470ustar00rootroot00000000000000p3xr.ng.component('p3xrMainKeySet', { template: require('./p3xr-main-key-set.html'), bindings: { p3xrValue: '=', p3xrValueBuffer: ' =', p3xrKey: '<', p3xrResponse: '<', }, controller: function (p3xrCommon, p3xrSocket, p3xrDialogJsonView, p3xrDialogKeyNewOrSet, $rootScope, $scope, p3xrKeyPaging) { const self = this const keyPaging = new p3xrKeyPaging({ $ctrl: self, $scope: $scope, }) this.$onInit = () => { keyPaging.figurePaging() } const load = (n, o) => { const values = [] const index = p3xr.settings.keyPageCount * (this.page - 1) let indexKeys = 0 for(let valueIndex in this.p3xrValue) { if (indexKeys >= index && indexKeys < index + p3xr.settings.keyPageCount) { values.push(this.p3xrValue[valueIndex]) } indexKeys++ } return values } $scope.$watch('$ctrl.page', (n, o) => { return load() }) this.pageBasedList = (n, o) => { return load() } this.downloadBuffer = async ({$index, $event}) => { try { /* const response = await p3xrSocket.request({ action: 'key-get-string-buffer', payload: { key: this.p3xrKey, } }) */ //console.log('response', response) const blob = new Blob([this.p3xrValueBuffer[$index]]); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${this.p3xrKey}-${$index}.bin`; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); } catch (e) { p3xrCommon.generalHandleError(e) } finally { } } this.copy = async(opts) => { await global.p3xr.clipboard({ value: opts.value }) p3xrCommon.toast(p3xr.strings.status.dataCopied) } this.addSet = async (options) => { try { await p3xrDialogKeyNewOrSet.show({ type: 'append', $event: options.$event, model: { type: 'set', key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.deleteSetMember = async (options) => { try { await p3xrCommon.confirm({ event: options.$event, message: p3xr.strings.confirm.deleteSetMember, }) await p3xrSocket.request({ action: 'key-set-delete-member', payload: { key: this.p3xrKey, value: this.p3xrValueBuffer[options.$index], } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.editValue = async (options) => { try { const {value} = options await p3xrDialogKeyNewOrSet.show({ type: 'edit', $event: options.$event, model: { type: 'set', value: value.length < p3xr.settings.maxValueAsBuffer ? value : this.p3xrValueBuffer[options.$index], key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.showJson = (options) => { const {value} = options; p3xrDialogJsonView.show({ value: value }) } } }) src/angular/pages/main/key/p3xr-main-key-stream.html000066400000000000000000000040431517671130100226770ustar00rootroot00000000000000
 {{ $root.p3xr.strings.page.key.stream.table.timestamp }}
{{ $root.p3xr.strings.page.key.stream.table.field }} {{ $root.p3xr.strings.page.key.stream.table.value }}
{{ $root.p3xr.strings.intention.add }} add
{{ value[0] }} {{ $ctrl.showTimestamp({ timestamp: value[0]})}}
{{ dataArr[0]}} {{ dataArr[1]}}
{{ $root.p3xr.strings.intention.delete }} delete
src/angular/pages/main/key/p3xr-main-key-stream.js000066400000000000000000000065161517671130100223560ustar00rootroot00000000000000p3xr.ng.component('p3xrMainKeyStream', { template: require('./p3xr-main-key-stream.html'), bindings: { p3xrValue: '=', p3xrValueBuffer: ' =', p3xrKey: '<', p3xrResponse: '<', }, controller: function ($scope, p3xrCommon, p3xrSocket, p3xrDialogJsonView, p3xrDialogKeyNewOrSet, $rootScope, p3xrKeyPaging) { const self = this const keyPaging = new p3xrKeyPaging({ $ctrl: self, $scope: $scope, watch: false, }) this.$onInit = () => { keyPaging.figurePaging() } let values $scope.$watch('$ctrl.page', (n, o) => { values = {} const index = p3xr.settings.keyPageCount * (this.page - 1) let indexKeys = 0 for(let keys of Object.keys(this.p3xrValue)) { if (indexKeys >= index && indexKeys < index + p3xr.settings.keyPageCount) { values[keys] = this.p3xrValue[keys] } indexKeys++ } }) this.pageBasedList = () => { return values } this.p3xrValueGenerated = [] $scope.$watch('$ctrl.p3xrValue', (n, o) => { this.p3xrValueGenerated = [] for(let value of this.p3xrValue) { const data = value[1] const result = [] for(let i = 0; i < data.length; i = i + 2) { result.push([ data[i], data[i + 1], ]) } this.p3xrValueGenerated.push(result) } keyPaging.figurePaging() }) this.copy = async(opts) => { await global.p3xr.clipboard({ value: opts.value }) p3xrCommon.toast(p3xr.strings.status.dataCopied) } this.addStream = async (options) => { try { await p3xrDialogKeyNewOrSet.show({ type: 'append', $event: options.$event, model: { type: 'stream', key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.deleteStreamTimestamp = async (options) => { try { await p3xrCommon.confirm({ event: options.$event, message: p3xr.strings.confirm.deleteStreamTimestamp, }) await p3xrSocket.request({ action: 'key-stream-delete-timestamp', payload: { key: this.p3xrKey, streamTimestamp: options.streamTimestamp, } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } const moment = require('moment') this.showTimestamp = ({ timestamp }) => { const dateNow = Number(timestamp.slice(0, timestamp.indexOf('-') )) const date = new Date(dateNow) return moment(date).format('L LTS') } } }) src/angular/pages/main/key/p3xr-main-key-string.html000066400000000000000000000161211517671130100227120ustar00rootroot00000000000000
upload {{ $root.p3xr.strings.intention.setBuffer }} {{ $root.p3xr.strings.intention.setBuffer }} download {{ $root.p3xr.strings.intention.downloadBuffer }} {{ $root.p3xr.strings.intention.downloadBuffer }} table_chart {{ $root.p3xr.strings.intention.jsonViewShow }} {{ $root.p3xr.strings.intention.jsonViewShow }} content_copy {{ $root.p3xr.strings.intention.copy }} {{ $root.p3xr.strings.intention.copy }} format_line_spacing {{ $root.p3xr.strings.intention.formatJson }} {{ $root.p3xr.strings.intention.formatJson }} {{ $root.p3xr.strings.intention.jsonViewEditor }} {{ $root.p3xr.strings.intention.jsonViewEditor }} edit {{ $root.p3xr.strings.intention.edit }} {{ $root.p3xr.strings.intention.edit }}
{{ $root.p3xr.strings.label.validateJson }}
cancel {{ $root.p3xr.strings.intention.cancel }} {{ $root.p3xr.strings.intention.cancel }}
upload {{ $root.p3xr.strings.intention.setBuffer }} {{ $root.p3xr.strings.intention.setBuffer }}
save {{ $root.p3xr.strings.intention.save }} {{ $root.p3xr.strings.intention.save }}
{{ $ctrl.p3xrValue.substring(0, $root.p3xr.settings.maxValueDisplay) }}... {{ $ctrl.p3xrValue }}
{{ $root.p3xr.strings.label.isBuffer({ maxValueAsBuffer: $root.p3xr.settings.prettyBytes($root.p3xr.settings.maxValueAsBuffer)}) }} {{$ctrl.bufferDisplay($ctrl.p3xrValue)}}
{{ $root.p3xr.strings.label.isBuffer({ maxValueAsBuffer: $root.p3xr.settings.prettyBytes($root.p3xr.settings.maxValueAsBuffer)}) }} {{$ctrl.bufferDisplay($ctrl.p3xrValueBuffer)}}
src/angular/pages/main/key/p3xr-main-key-string.js000066400000000000000000000170541517671130100223700ustar00rootroot00000000000000p3xr.ng.component('p3xrMainKeyString', { template: require('./p3xr-main-key-string.html'), bindings: { p3xrValue: '=', p3xrValueBuffer: ' =', p3xrKey: '<', p3xrResponse: '<', }, controller: function (p3xrSocket, p3xrCommon, $rootScope, p3xrDialogJsonView, p3xrDialogJsonEditor, $scope) { this.setBufferUpload = () => { const input = document.getElementById('p3xr-main-key-string-upload-buffer'); input.value = ''; // Clear the input value input.click(); } this.bufferDisplay = (value) => { const result = '(' + p3xr.settings.prettyBytes(value.byteLength) + ')' //console.log('bufferDisplay', result ) return result } $scope.readFileAsBuffer = async (event) => { const file = event.target.files[0]; if (!file) { return; } const reader = new FileReader(); reader.onload = async (loadEvent) => { const arrayBuffer = loadEvent.target.result; // Process the buffer here //console.log(arrayBuffer); try { if (this.editable === true) { await p3xrCommon.confirm({ message: p3xr.strings.confirm.uploadBuffer }) if (this.buffer === true) { this.p3xrValueBuffer = arrayBuffer } else { this.p3xrValue = arrayBuffer } p3xrCommon.toast(p3xr.strings.confirm.uploadBufferDone) $scope.$digest() return } } catch(e) { p3xrCommon.generalHandleError(e) return } try { await p3xrCommon.confirm({ message: p3xr.strings.confirm.uploadBuffer }) p3xr.ui.overlay.show() const response = await p3xrSocket.request({ action: 'key-set', payload: { type: this.p3xrResponse.type, value: arrayBuffer, key: this.p3xrKey, } }) p3xrCommon.toast(p3xr.strings.confirm.uploadBufferDoneAndSave) window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/key-set' } ); $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } finally { p3xr.ui.overlay.hide() } }; reader.onerror = (error) => { p3xrCommon.generalHandleError(error) } reader.readAsArrayBuffer(file); } this.copy = async() => { await global.p3xr.clipboard({ value: this.p3xrValue }) p3xrCommon.toast(p3xr.strings.status.dataCopied) } this.downloadBuffer = async () => { try { /* const response = await p3xrSocket.request({ action: 'key-get-string-buffer', payload: { key: this.p3xrKey, } }) */ //console.log('response', response) const blob = new Blob([this.p3xrValueBuffer]); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${this.p3xrKey}.bin`; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); } catch (e) { p3xrCommon.generalHandleError(e) } finally { } } this.editable = false; this.buffer = false this.originalValue = undefined this.edit = () => { if (this.p3xrValue.length < p3xr.settings.maxValueAsBuffer ) { this.originalValue = p3xr.clone(this.p3xrValue) this.buffer = false } else { this.originalValue = p3xr.clone(this.p3xrValueBuffer) this.buffer = true } this.editable = true } this.cancelEdit = () => { console.log('cancelEdit', this.originalValue) if (this.buffer === true) { this.p3xrValueBuffer = this.originalValue } else { this.p3xrValue = this.originalValue } this.editable = false this.buffer = false } this.validateJson = false this.save = async () => { if (this.validateJson === true) { try { JSON.parse(this.buffer ? this.p3xrValueBuffer : this.p3xrValue) } catch (e) { p3xrCommon.toast({ message: p3xr.strings.label.jsonViewNotParsable }) return } } try { p3xr.ui.overlay.show() const request = { action: 'key-set', payload: { type: this.p3xrResponse.type, value: this.buffer ? this.p3xrValueBuffer : this.p3xrValue, key: this.p3xrKey, } } //console.log('request', request) const response = await p3xrSocket.request(request) window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/key-set' } ); this.editable = false } catch (e) { p3xrCommon.generalHandleError(e) } finally { p3xr.ui.overlay.hide() $rootScope.$broadcast('p3xr-refresh-key'); } } this.jsonViewer = (options) => { p3xrDialogJsonView.show({ event: options.$event, value: this.p3xrValue }) // this.showJson = !this.showJson } this.jsonEditor = async(options) => { try { const result = await p3xrDialogJsonEditor.show({ event: options.$event, value: this.p3xrValue }) this.p3xrValue = result.obj await this.save() } catch(e) { p3xrCommon.generalHandleError(e) } // this.showJson = !this.showJson } this.formatJson = async () => { try { this.p3xrValue = JSON.stringify(JSON.parse(this.p3xrValue), null, p3xr.settings.jsonFormat) await this.save() } catch(e) { p3xrCommon.toast({ message: p3xr.strings.label.jsonViewNotParsable }) } } } }) src/angular/pages/main/key/p3xr-main-key-string.scss000066400000000000000000000001071517671130100227160ustar00rootroot00000000000000p3xr-main-key-string { textarea { width: 100%; } } src/angular/pages/main/key/p3xr-main-key-zset.html000066400000000000000000000070721517671130100223760ustar00rootroot00000000000000
  {{ $root.p3xr.strings.page.key.zset.table.score }}
{{ $root.p3xr.strings.page.key.zset.table.value }}
{{ $root.p3xr.strings.intention.add }} add
  {{ value[0] }}
{{ value[1].substring(0, $root.p3xr.settings.maxValueDisplay) }}... {{ value[1] }}
{{ $root.p3xr.strings.intention.delete }} delete {{ $root.p3xr.strings.intention.jsonViewShow }} table_chart {{ $root.p3xr.strings.intention.copy }} content_copy download {{ $root.p3xr.strings.intention.downloadBuffer }} {{ $root.p3xr.strings.intention.edit }} edit
src/angular/pages/main/key/p3xr-main-key-zset.js000066400000000000000000000127471517671130100220530ustar00rootroot00000000000000p3xr.ng.component('p3xrMainKeyZset', { template: require('./p3xr-main-key-zset.html'), bindings: { p3xrValue: '=', p3xrValueBuffer: ' =', p3xrKey: '<', p3xrResponse: '<', }, controller: function ($scope, p3xrCommon, p3xrSocket, p3xrDialogJsonView, p3xrDialogKeyNewOrSet, $rootScope, p3xrKeyPaging) { const self = this const keyPaging = new p3xrKeyPaging({ $ctrl: self, $scope: $scope, watch: false, figurePagingType: 'zset', }) this.$onInit = () => { keyPaging.figurePaging() } let page = 1 const onPage = (n, o) => { values = [] const index = p3xr.settings.keyPageCount * (this.page - 1) let indexKeys = 0 // console.warn(this.generatedValue) for(let valueIndex in this.generatedValue) { if (indexKeys >= index && indexKeys < index + p3xr.settings.keyPageCount) { values.push(this.generatedValue[valueIndex]) } indexKeys++ } } let values $scope.$watch('$ctrl.page', onPage) this.pageBasedList = () => { return values } this.copy = async(opts) => { await global.p3xr.clipboard({ value: opts.value }) p3xrCommon.toast(p3xr.strings.status.dataCopied) } this.downloadBuffer = async ({$index, $event}) => { try { /* const response = await p3xrSocket.request({ action: 'key-get-string-buffer', payload: { key: this.p3xrKey, } }) */ //console.log('response', response) //console.log('$index', $index, 'this.p3xrValueBuffer', this.p3xrValueBuffer) //return const blob = new Blob([this.p3xrValueBuffer[($index * 2) ]]); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${this.p3xrKey}.bin`; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); } catch (e) { p3xrCommon.generalHandleError(e) } finally { } } const generateHashFromRedisSortedSet = (value,) => { const generatedValue = []; let savedValue = undefined; for (let item of value) { if (savedValue === undefined) { savedValue = item; } else { generatedValue.push([ parseFloat(item), savedValue ]) savedValue = undefined } } return generatedValue; } let lastVal $scope.$watch('$ctrl.p3xrValue', (newVal, oldVal) => { if (newVal !== lastVal) { //console.warn('p3xr main key zset update') lastVal = newVal this.generatedValue = generateHashFromRedisSortedSet(this.p3xrValue) keyPaging.figurePaging() onPage() } }) this.showJson = (options) => { const {value} = options; p3xrDialogJsonView.show({ value: value }) } this.addZSet = async (options) => { try { await p3xrDialogKeyNewOrSet.show({ type: 'append', $event: options.$event, model: { type: 'zset', key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.deleteZSet = async (options) => { try { await p3xrCommon.confirm({ event: options.$event, message: p3xr.strings.confirm.deleteZSetMember, }) await p3xrSocket.request({ action: 'key-zset-delete-member', payload: { key: this.p3xrKey, value: this.p3xrValueBuffer[options.$index * 2 ], } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } this.editValue = async (options) => { try { const {member} = options await p3xrDialogKeyNewOrSet.show({ type: 'edit', $event: options.$event, model: { type: 'zset', score: options.score, value: member.length < p3xr.settings.maxValueAsBuffer ? member : this.p3xrValueBuffer[(options.$index * 2) ], key: this.p3xrKey } }) $rootScope.$broadcast('p3xr-refresh-key'); } catch (e) { p3xrCommon.generalHandleError(e) } } } }) src/angular/pages/main/p3xr-main-key.html000066400000000000000000000172761517671130100206320ustar00rootroot00000000000000
add {{ $root.p3xr.strings.intention.addKey }} {{ $root.p3xr.strings.intention.addKey }} delete {{ $root.p3xr.strings.intention.delete }} {{ $root.p3xr.strings.intention.delete }} timer {{ $root.p3xr.strings.intention.ttl }} {{ $root.p3xr.strings.intention.ttl }} {{ $root.p3xr.strings.label.ttlTitle }} fingerprint {{ $root.p3xr.strings.intention.rename }} {{ $root.p3xr.strings.intention.rename }} refresh {{ $root.p3xr.strings.intention.reloadKey }} {{ $root.p3xr.strings.intention.reloadKey }}

{{ $root.p3xr.strings.page.key.label.key }}: 

{{ $ctrl.$stateParams.key }}

{{ $root.p3xr.strings.page.key.label.ttl }}:

{{ $root.p3xr.strings.page.key.label.ttlNotExpire }}

{{ $root.p3xr.strings.page.key.label.ttl }}:
{{ $root.p3xr.strings.page.key.label.ttlNotExpire }} {{ $ctrl.response.ttl }}

{{ $root.p3xr.strings.page.key.label.type }}:

{{ $root.p3xr.strings.redisTypes[$ctrl.response.type] }}

{{ $root.p3xr.strings.page.key.label.encoding }}:

{{ $ctrl.response.encoding }}

{{ $root.p3xr.strings.page.key.label.length }}:

{{ $ctrl.charactersPrettyBytes($ctrl.response.size) }}  {{ $ctrl.response.size }} {{ $root.p3xr.strings.page.key.label.lengthString }} , {{ $ctrl.response.length }} {{ $root.p3xr.strings.page.key.label.lengthItem }}
src/angular/pages/main/p3xr-main-key.js000066400000000000000000000326201517671130100202700ustar00rootroot00000000000000//const moment = require("moment"); //const momentDurationFormatSetup = require("moment-duration-format"); let interval p3xr.ng.component('p3xrMainKey', { template: require('./p3xr-main-key.html'), bindings: { p3xrResize: '&', }, controller: function (p3xrCommon, p3xrRedisParser, p3xrSocket, $rootScope, $stateParams, $timeout, $scope, $mdDialog, $state, $interval, p3xrDialogTtl, p3xrTheme, $mdColors) { $interval.cancel(interval) this.$stateParams = $stateParams; let wasExpiring = false const checkTtl = () => { if (this.response.ttl < -1 || (wasExpiring && this.response.ttl < 1)) { p3xrCommon.toast({ message: p3xr.strings.status.keyIsNotExisting }) $interval.cancel(interval) p3xr.state.redisChanged = true $state.go('main.statistics') // $rootScope.$broadcast('p3xr-refresh') return false } return true } const humanizeDuration = require("humanize-duration"); const loadTtl = () => { if (this.response.ttl > -1) { const actualTtl = () => { if (checkTtl()) { /* let years, months, days, hours, mins, seconds let diff diff = this.response.ttl * 1000; years = Math.floor((diff) / (1000 * 60 * 60 * 24 * 365)); diff = ((diff) % (1000 * 60 * 60 * 24 * 365)); months = Math.floor((diff) / (1000 * 60 * 60 * 24 * 30)); diff = ((diff) % (1000 * 60 * 60 * 24 * 30)); days = Math.floor((diff) / (1000 * 60 * 60 * 24)); diff = ((diff) % (1000 * 60 * 60 * 24)); hours = Math.floor((diff) / (1000 * 60 * 60)); diff = ((diff) % (1000 * 60 * 60)); mins = Math.floor((diff) / (1000 * 60)); diff = ((diff) / (1000 * 60)); seconds = Math.round((diff - mins) * 0.6 * 100); let duration = ''; if (years > 0) { duration += years + ' ' + (years === 1 ? $rootScope.p3xr.strings.time.year : $rootScope.p3xr.strings.time.years) duration += ', ' } if (months > 0) { duration += months + ' ' + (months === 1 ? $rootScope.p3xr.strings.time.month : $rootScope.p3xr.strings.time.months) duration += ', ' } if (days > 0) { duration += days + ' ' + (days === 1 ? $rootScope.p3xr.strings.time.day : $rootScope.p3xr.strings.time.days) duration += ', ' } duration += `${hours < 10 ? '0' + hours : hours}:${mins < 10 ? '0' + mins : mins}:${seconds < 10 ? '0' + seconds : seconds}`; this.ttlParsed = ' ' + duration */ this.ttlParsed = ' ' + humanizeDuration(this.response.ttl * 1000, { language: p3xr.settings.getHumanizeDurationLanguage(), delimiter: ' ', }) const counterEl = document.getElementById('p3xr-main-key-ttl-counter') if (counterEl) { counterEl.innerText = this.ttlParsed } } else { $interval.cancel(interval) } } actualTtl() if (!$rootScope.p3xr.state.reducedFunctions) { $interval.cancel(interval) interval = $interval(() => { this.response.ttl = this.response.ttl - 1 //console.log('aha', this.response.ttl) actualTtl() }, 1000) } } } this.loading = false const loadKey = async (options = {}) => { $interval.cancel(interval) let {withoutParent} = options if (withoutParent === undefined) { withoutParent = false } let hadError = undefined try { // it can throw an error, when we switch the database //p3xr.ui.overlay.show({ // message: p3xr.strings.intention.getKey //}) this.loading = true setTimeout(() => { $scope.$digest(); }) //const type = p3xr.state.keysInfo[$stateParams.key].type //console.warn('$stateParams.key', $stateParams.key) const response = await p3xrSocket.request({ action: 'key-get', payload: { key: $stateParams.key, //type: type, } }) this.response = response //const type = response.type if (response.ttl === -2) { checkTtl() return; } response.size = 0 if (response.type !== 'stream') { if (typeof response.valueBuffer === 'object' && response.length > 0) { for (let keys of Object.keys(response.valueBuffer)) { response.size += response.valueBuffer[keys].byteLength } } else if (Array.isArray(response.valueBuffer)) { for (let i = 0; i < response.valueBuffer.length; i++) { response.size += response.valueBuffer[i].byteLength } } else { response.size = response.valueBuffer.byteLength } } else { //console.log('response', response) function sumMaxByteLength(arr) { let total = 0; function processElement(element) { if (ArrayBuffer.isView(element) || element instanceof ArrayBuffer) { total += element.byteLength; } else if (Array.isArray(element)) { element.forEach(processElement); } } arr.forEach(processElement); return total; } response.size = sumMaxByteLength(response.valueBuffer) } if (response.ttl > -1) { wasExpiring = true } loadTtl() $scope.$digest() } catch (e) { hadError = e console.error(e) if (!p3xr.settings.handleConnectionIsClosed(e, $rootScope)) { p3xrCommon.alert(p3xr.strings.label.unableToLoadKey({ key: $stateParams.key })) } else{ p3xrCommon.alert(e.message) } //p3xrCommon.generalHandleError(e) } finally { //p3xr.ui.overlay.hide() if (hadError !== undefined) { $state.go('main.statistics'); } else if (!withoutParent && $stateParams.resize !== null) { $stateParams.resize() } $timeout(() => { this.loading = false $scope.$digest() }, p3xr.settings.debounce) } } const generateHighlight = () => { $('#p3xr-theme-styles-tree-key').remove() $('head').append('') } this.$onInit = () => { loadKey() generateHighlight() } $scope.$on('p3xr-theme-switched', generateHighlight) this.$onDestroy = function () { $('#p3xr-theme-styles-tree-key').remove() $interval.cancel(interval) }; this.charactersPrettyBytes = (length) => { if (length < 1024 || length === undefined) { return '' } return '(' + p3xr.settings.prettyBytes(length) + ')' } this.refresh = async (options) => { window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/refresh' } ); await loadKey(options) $scope.$digest() } this.rename = (opts) => { $rootScope.$broadcast('p3xr-key-rename', { key: $stateParams.key, $event: opts.$event, }); } this.delete = (options) => { $rootScope.$broadcast('p3xr-key-delete', { key: $stateParams.key, event: options.$event, }); } this.addKey = (options) => { options.$event.stopPropagation(); $rootScope.$broadcast('p3xr-key-new', { event: options.$event, node: { key: options.key, } }); } this.setTtl = async (options) => { try { /* const confirm = $mdDialog.prompt() .title(p3xr.strings.confirm.ttl.title) .textContent(p3xr.strings.confirm.ttl.textContent) .placeholder(p3xr.strings.confirm.ttl.placeholder) .ariaLabel(p3xr.strings.confirm.ttl.placeholder) .initialValue(this.response.ttl === -1 ? '' : this.response.ttl) .targetEvent(options.$event) .ok(p3xr.strings.intention.ttl) .cancel(p3xr.strings.intention.cancel); */ // const confirmResponse = await $mdDialog.show(confirm) const confirmResponse = await p3xrDialogTtl.show({ $event: options.$event, model: { ttl: this.response.ttl === -1 ? '' : this.response.ttl } }) // console.error('confirmResponse', confirmResponse) // console.error('String(confirmResponse.model.ttl).trim()', String(confirmResponse.model.ttl).trim()) if (confirmResponse === undefined) { return } if (confirmResponse.model.ttl == null || String(confirmResponse.model.ttl).trim() === '') { const response = await p3xrSocket.request({ action: 'persist', payload: { key: $stateParams.key, } }) window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/persist' } ); await this.refresh() p3xrCommon.toast({ message: p3xr.strings.status.persisted }) } else if (!String(confirmResponse.model.ttl).match(/^-{0,1}\d+$/)) { p3xrCommon.toast({ message: p3xr.strings.status.notInteger }) } else { const response = await p3xrSocket.request({ action: 'expire', payload: { key: $stateParams.key, ttl: parseInt(confirmResponse.model.ttl), } }) window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/expire' } ); await this.refresh() p3xrCommon.toast({ message: p3xr.strings.status.ttlChanged }) } } catch (e) { p3xrCommon.generalHandleError(e) } } // const refreshDebounced = debounce(this.refresh, 1000) /* $scope.$on('p3xr-refresh', () => { this.refresh({ withoutParent: true }) }) */ $scope.$on('p3xr-refresh-key', () => { this.refresh({ withoutParent: true }) }) } }) src/angular/pages/main/p3xr-main-key.scss000066400000000000000000000003021517671130100206170ustar00rootroot00000000000000p3xr-main-key { .p3xr-main-key-label-key-title { cursor: pointer; font-weight: bold; } md-list-item { p { font-weight: bold; } } } src/angular/pages/main/p3xr-main-statistics.html000066400000000000000000000027501517671130100222230ustar00rootroot00000000000000

{{ $ctrl.generateKey(itemKey) }}

{{ itemValue }}

{{ $ctrl.generateKey(itemKey) }}

{{ itemValue }}
src/angular/pages/main/p3xr-main-statistics.js000066400000000000000000000060621517671130100216730ustar00rootroot00000000000000p3xr.ng.component('p3xrMainStatistics', { template: require('./p3xr-main-statistics.html'), controller: function (p3xrCommon, p3xrRedisParser, p3xrSocket, $rootScope, $scope, $timeout, $stateParams, $mdMedia) { const exclude = ['in', 'run', 'per'] const include = ['sha1',] const replace = { 'perc': 'percent', 'sec': 'seconds' } //const $container = let isXsmall = true const resize = () => { //console.log('container', $container, $container[0].offsetHeight) if (isXsmall) { this.maxHeight = 'auto' } else { this.maxHeight = document.getElementById('p3xr-main-content-container').offsetHeight - 50 } } $scope.$watch(() => $mdMedia('xs'), (newVal, oldVal) => { isXsmall = newVal resize() }) $window.on('resize', resize) this.$doCheck = resize this.$onInit = () => { if (p3xr.state.redisChanged) { p3xr.state.redisChanged = false $rootScope.$broadcast('p3xr-refresh') } } this.$onDestroy = () => { $window.off('resize', resize) } this.hasDatabases = Object.keys($rootScope.p3xr.state.info.keyspaceDatabases).length > 0 //console.warn(p3xr.state.info) this.generateKey = (key) => { if (p3xr.strings.title.hasOwnProperty(key)) { return p3xr.strings.title[key] } const keyElem = key.split('_').map((instance, index) => { if (replace.hasOwnProperty(instance)) { instance = replace[instance] } if (include.includes(instance) || (instance.length < 4 && !exclude.includes(instance))) { return instance.toUpperCase() } else if (index === 0) { return instance[0].toUpperCase() + instance.substring(1) } return instance }) return keyElem.join(' ') } //FIXME disable hacking on the tab /* $scope.$on('p3xr-refresh-statistics-tabs', () => { $timeout(() => { p3xr.state.info.hack = { hack: 'hacking' } this.hasDatabases = Object.keys($rootScope.p3xr.state.info.keyspaceDatabases).length > 0 $timeout(() => { delete p3xr.state.info.hack; $rootScope.$digest(); }) }) }) */ /* console.warn('$stateParams', $stateParams, $stateParams.action) if ($stateParams.action && $stateParams.action === 'reload-delete') { // $rootScope.savedExpandedNodes = $stateParams.expandedNodes console.log($stateParams.expandedNodes) $rootScope.$broadcast('p3xr-refresh') //p3xrCommon.loadRedisInfoResponse({response: $stateParams.response}) } */ } }) src/angular/pages/main/p3xr-main-statistics.scss000066400000000000000000000000661517671130100222300ustar00rootroot00000000000000#p3xr-main-statistics-dbs { border-radius: 0px; } src/angular/pages/main/p3xr-main-treecontrol-controls.html000066400000000000000000000126421517671130100242330ustar00rootroot00000000000000
{{ $root.p3xr.strings.page.treeControls.expandAll}} keyboard_arrow_down {{ $root.p3xr.strings.page.treeControls.collapseAll}} keyboard_arrow_up {{ $root.p3xr.strings.intention.refresh}} refresh {{ $root.p3xr.strings.form.treeSettings.label.formName}} settings {{ $root.p3xr.strings.form.treeSettings.field.treeSeparator }} {{ divider }} {{ $root.p3xr.strings.form.treeSettings.field.treeSeparatorSelector }}
{{ $root.p3xr.strings.status.keyCount({keyCount: $root.p3xr.state.keysRaw.length }) }} {{ $root.p3xr.strings.page.treeControls.pager.first}} skip_previous {{ $root.p3xr.strings.page.treeControls.pager.prev}} keyboard_arrow_left / {{ $root.p3xr.state.pages }} {{ $root.p3xr.strings.page.treeControls.pager.next}} keyboard_arrow_right {{ $root.p3xr.strings.page.treeControls.pager.last}} skip_next {{ $root.p3xr.strings.status.keyCount({keyCount: $root.p3xr.state.keysRaw.length }) }}  src/angular/pages/main/p3xr-main-treecontrol-controls.js000066400000000000000000000123671517671130100237070ustar00rootroot00000000000000p3xr.ng.component('p3xrMainTreecontrolControls', { template: require('./p3xr-main-treecontrol-controls.html'), bindings: { p3xrMainRef: '<' }, controller: function ($cookies, $rootScope, p3xrCommon, $timeout, p3xrDialogTreecontrolSettings, $scope) { this.treeExpandAll = () => { try { $rootScope.$broadcast('p3xr-main-treecontrol', false) p3xr.ui.overlay.show({ message: p3xr.strings.status.treeExpandAll }) let expandedNodes = [] /* require('../../../core/node-inview-recursive').recursive({ status: false, nodes: $rootScope.keysTreeRendered, nodeCallback: (opts) => { const { node } = opts if (node.type === 'folder') { expandedNodes.push(node) } } }) */ //FIXME use with general recursive solution, as above (just not working, too tired) const recursiveFolders = (node, level = 0) => { delete node.$inview if (node.type === 'folder') { expandedNodes.push(node) for (let childNode of node.children) { recursiveFolders(childNode, level++) } } } for (let node of $rootScope.keysTreeRendered) { recursiveFolders(node) } $rootScope.expandedNodes = expandedNodes } catch (e) { p3xrCommon.generalHandleError(e) } finally { p3xr.ui.overlay.hide() $timeout(() => { $rootScope.$broadcast('p3xr-main-treecontrol', true) }) } } this.treeCollapseAll = () => { $rootScope.$broadcast('p3xr-main-treecontrol', false) $rootScope.expandedNodes = [] $timeout(() => { $rootScope.$broadcast('p3xr-main-treecontrol', true) }) } this.page = (options) => { const {page} = options ///console.log(page ) switch (page) { case 'prev': if ($rootScope.p3xr.state.page - 1 >= 1) { $rootScope.p3xr.state.page = $rootScope.p3xr.state.page - 1 } break; case 'next': if ($rootScope.p3xr.state.page + 1 <= $rootScope.p3xr.state.pages) { $rootScope.p3xr.state.page = $rootScope.p3xr.state.page + 1 } break; case 'last': $rootScope.p3xr.state.page = $rootScope.p3xr.state.pages break; case 'first': $rootScope.p3xr.state.page = 1 break; } $timeout(() => { $rootScope.$digest() }) } this.pageChange = () => { if ($rootScope.p3xr.state.page < 1) { $rootScope.p3xr.state.page = 1 } else if ($rootScope.p3xr.state.page > $rootScope.p3xr.state.pages) { $rootScope.p3xr.state.page = $rootScope.p3xr.state.pages } } this.openTreeSettingDialog = (opts) => { opts.p3xrMainRef = this.p3xrMainRef p3xrDialogTreecontrolSettings.show(opts); //console.warn($rootScope.p3xr.state.redisTreeDivider) } this.search = '' this.$onInit = () => { this.search = $rootScope.p3xr.state.search } //console.warn($rootScope.p3xr.state.search) this.onSearchChange = () => { // $rootScope.p3xr.state.search = this.search if ($rootScope.p3xr.settings.searchClientSide) { // $rootScope.p3xr.settings.searchClientSide // $rootScope.p3xr.settings.searchStartsWith $rootScope.p3xr.state.redisChanged = true } else { this.p3xrMainRef.refresh() } $rootScope.p3xr.state.page = 1; } this.treeDividerChange = () => { $rootScope.p3xr.state.redisChanged = true // this.p3xrMainRef.refresh() $rootScope.$broadcast('p3xr-refresh'); } /* this.dividerSelectStatus = (show) => { if (show === true) { console.log('dividerSelectStatus show', show) const input = $('#p3xr-main-treecontrol-controls-tree-divider-input') const offset = input.offset() const container = $('.p3xr-main-treecontrol-controls-divider-select-container') const top = offset.top + input.height() const left = offset.left container[0].style.top = `${top}px` container[0].style.left = `${left}px` console.log(offset, input.height(), container[0].style.top, container[0].style.left, top, left) } } */ } }) src/angular/pages/main/p3xr-main-treecontrol-controls.scss000066400000000000000000000032211517671130100242330ustar00rootroot00000000000000p3xr-main-treecontrol-controls { margin-top: 2px; display: block; text-align: center; min-height: 24px; .md-icon-button { height: auto !important; min-height: auto !important;; width: auto !important;; min-width: auto !important;; margin: 0 !important;; padding: 0 !important; } .p3xr-main-treecontrol-controls-search { clear: both; text-align: left; padding: 5px; input.withSearch { width: calc(100% - 100px) !important; } input.withoutSearch { width: calc(100% - 80px) !important; } } } .p3xr-main-treecontrol-controls-divider-select { display: inline-block; .md-select-value { min-width: 0px !important; min-height: 0px !important; span:not(.md-select-icon) { visibility: hidden !important; display: none !important; } .md-select-icon { width: 3px !important; position: relative; left: -8px; top: -2px; } } } .p3xr-main-treecontrol-controls-divider-select-container { font-family: 'Roboto Mono' !important; font-weight: 500; font-size: 14px; padding: 0px !important; top: 137px !important; left: 103px !important; md-select-menu { md-content { min-width: auto; } } } .p3xr-main-treecontrol-controls-pager { position: relative; display: inline-block; top: 2px; } .p3xr-main-treecontrol-controls-keycount { opacity: 0.5; float: right; line-height: 26px; margin-top: 6px; } src/angular/pages/main/p3xr-main-treecontrol.html000066400000000000000000000105331517671130100223670ustar00rootroot00000000000000 {{ $ctrl.extractNodeTooltip(node) }} {{ $root.p3xr.strings.confirm.deleteAllKeys({key: node.key}) }} close {{ $root.p3xr.strings.intention.delete }} close {{ $root.p3xr.strings.intention.addKey }} add src/angular/pages/main/p3xr-main-treecontrol.js000066400000000000000000000224461517671130100220450ustar00rootroot00000000000000p3xr.ng.component('p3xrMainTree', { template: require('./p3xr-main-treecontrol.html'), bindings: { p3xrResize: '&', p3xrMainRef: '<' }, controller: function (p3xrCommon, p3xrRedisParser, p3xrSocket, $rootScope, $timeout, $state, $scope, $mdDialog, p3xrDialogKeyNewOrSet, p3xrTheme, $stateParams) { /* this.$onInit = () => { this.p3xrResize() $rootScope.$broadcast('p3x-resize') } */ /* let check = 0 this.$doCheck = () => { if (check < 10) { check++ // console.log('resize for tree') this.p3xrMainRef.resizeRaw() // $rootScope.$broadcast('p3x-resize') } } */ /* this.$onChanges = (changesObj) => { $rootScope.$broadcast('p3x-resize') } this.$postLink = () => { $rootScope.$broadcast('p3x-resize') } */ this.displayNode = (node, $inview) => { node.$inview = $inview } this.getTreeTheme = () => { if (!p3xrTheme.isDark()) { return 'tree-classic' } return 'tree-dark' } this.keysTreeOptions = { nodeChildren: "children", dirSelectable: false, multiSelection: false, /* injectClasses: { ul: "a1", li: "a2", liSelected: "a7", iExpanded: "a3", iCollapsed: "a4", iLeaf: "a5", label: "a6", labelSelected: "a8" } */ }; this.selectTreeNode = function (node, selected, $parentNode, $index, $first, $middle, $last, $odd, $even, $path) { //console.warn('selectTreeNode', arguments) $state.go('main.key', { key: node.key, resize: this.p3xrResize, }) } this.showToggle = function (node, expanded, $parentNode, $index, $first, $middle, $last, $odd, $even, $path) { if (!expanded) { require('../../../core/node-inview-recursive').recursive({ nodes: $rootScope.keysTreeRendered, }) } $rootScope.$broadcast('p3xr-main-treecontrol-control-noop') // console.warn('showToggle', arguments, $path()) /* p3xrCommon.toast({ message: 'key ' + node.key }) */ } this.delete = async (options) => { try { options.event.preventDefault() options.event.stopPropagation() await p3xrCommon.confirm({ event: options.$event, message: p3xr.strings.confirm.deleteKey }) //const expandedNodes = global.p3xr.clone($rootScope.expandedNodes); await p3xrSocket.request({ action: 'delete', payload: { key: options.key } }) window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/delete' } ); /* $timeout(() => { $rootScope.savedExpandedNodes = expandedNodes p3xrCommon.loadRedisInfoResponse({response: response}) }) */ /* const params = { action: 'reload-delete', expandedNodes: expandedNodes, response: expandedNodes, } */ //console.log('delete params', params) $state.go('main.statistics' /*, params*/) p3xrCommon.toast({ message: p3xr.strings.status.deletedKey({ key: options.key }) }) await this.p3xrMainRef.refresh() } catch (e) { p3xrCommon.generalHandleError(e) } } this.rename = async (options) => { try { const confirm = $mdDialog.prompt() .title(p3xr.strings.confirm.rename.title) .textContent(p3xr.strings.confirm.rename.textContent) .placeholder(p3xr.strings.confirm.rename.placeholder) .ariaLabel(p3xr.strings.confirm.rename.placeholder) .initialValue(options.key) .targetEvent(options.$event) .required(true) .ok(p3xr.strings.intention.rename) .cancel(p3xr.strings.intention.cancel); const confirmResponse = await $mdDialog.show(confirm) await p3xrSocket.request({ action: 'rename', payload: { key: options.key, keyNew: confirmResponse, } }) window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': '/rename' } ); $state.go('main.key', { key: confirmResponse, resize: this.p3xrResize, }) p3xrCommon.toast({ message: p3xr.strings.status.renamedKey }) await this.p3xrMainRef.refresh() } catch (e) { p3xrCommon.generalHandleError(e) } } this.deleteTree = async (options) => { try { const {event, node} = options // event.preventDefault() event.stopPropagation(); await p3xrCommon.confirm({ event: event, message: p3xr.strings.confirm.deleteAllKeys({ key: node.key }) }) await p3xrSocket.request({ action: 'key-del-tree', payload: { key: node.key, redisTreeDivider: p3xr.settings.redisTreeDivider } }) p3xrCommon.toast({ message: p3xr.strings.status.treeDeleted({ key: node.key }) }) if ($stateParams.key !== undefined && $stateParams.key.startsWith(node.key + p3xr.settings.redisTreeDivider)) { $state.go('main.statistics') } await this.p3xrMainRef.refresh() } catch (e) { p3xrCommon.generalHandleError(e) } } this.addKey = async (options) => { const {event, node} = options event.stopPropagation(); try { const response = await p3xrDialogKeyNewOrSet.show({ $event: event, node: node, type: 'add', }) await this.p3xrMainRef.refresh() $state.go('main.key', { key: response.key, resize: this.p3xrResize, }) } catch (e) { p3xrCommon.generalHandleError(e) } } this.extractNodeTooltip = (node) => { if (node.type !== 'folder' && node.keysInfo !== undefined) { if (node.keysInfo === undefined) { return ''; } return p3xr.ui.htmlEncode(p3xr.strings.redisTypes[node.keysInfo.type] + ' - ' + node.key) } return p3xr.ui.htmlEncode(node.key) } this.extractNodeKey = (node) => { if (node.type === 'folder') { return '' } return p3xr.ui.htmlEncode(node.key) } $scope.$on('p3xr-key-delete', (event, arg) => { this.delete(arg) }); $scope.$on('p3xr-key-rename', (event, arg) => { this.rename(arg) }); $scope.$on('p3xr-key-new', (event, arg) => { this.addKey(arg) }); $scope.$on('p3xr-main-treecontrol', (event, arg) => { this.isEnabled = arg }); this.hover = ({node}) => { if (p3xr.state.connection.readonly === true) { return } node.show = true } this.isEnabled = true const focusListener = () => { if (this.isEnabled === true) { this.isEnabled = false //console.log('enabled', this.isEnabled) $rootScope.$digest() $timeout(() => { this.isEnabled = true //console.log('enabled', this.isEnabled) $rootScope.$digest() }) } } window.addEventListener('focus', focusListener) $scope.$on('$destroy', () => { window.removeEventListener('focus', focusListener) }) } }) src/angular/pages/main/p3xr-main-treecontrol.scss000066400000000000000000000036761517671130100224100ustar00rootroot00000000000000p3xr-main { .p3xr-main-treecontrol-node-icon { display: inline-block; min-width: 12px; text-align: center; } treecontrol > ul > li.tree-expanded > i.tree-branch-head, treecontrol > ul > li.tree-collapsed > i.tree-branch-head { margin-left: 4px !important; margin-right: 4px !important; white-space: nowrap !important; } treecontrol li.tree-expanded > i.tree-branch-head, treecontrol li.tree-collapsed > i.tree-branch-head { display: inline-block; background-image: none !important; font-family: 'Font Awesome 5 Free'; font-style: normal; font-weight: 900; font-size: 15px; padding: 0 !important; // margin-left: 10px !important; // margin-left: 8px !important; line-height: 20px; min-width: 12px; text-align: center; } treecontrol li { white-space: nowrap; } treecontrol li.tree-collapsed > i.tree-branch-head:before { content: "\f07b"; } treecontrol li.tree-expanded > i.tree-branch-head:before { content: "\f07c"; } treecontrol { ul { overflow: visible !important; /*# STEP1 #### Override overflow attribute like uncledb said */ } .tree-leaf-head { display: none !important; background-image: none; } } treecontrol > ul > li { padding-left: 4px; } treecontrol .tree-label:focus, treecontrol .tree-label.tree-selected { outline: none; font-weight: 500; background: none; } .p3xr-main-tree { .p3xr-main-tree-node { cursor: pointer; line-height: 28px !important; white-space: nowrap; /*# STEP-2 #Set nowrap for node labels ###### THIS DID THE TRICK FOR ME ########*/ .p3xr-main-tree-node-count { opacity: 0.5; } } } } src/angular/pages/p3xr-console.html000066400000000000000000000075051517671130100176300ustar00rootroot00000000000000

{{ $root.p3xr.strings.label.console }}

{{ $root.p3xr.strings.intention.pubsubMonitor }} {{ $root.p3xr.strings.intention.pubsubMonitor }}

{{ $root.p3xr.strings.intention.quickConsole }}

{{ $root.p3xr.strings.intention.pubsubMonitor }} {{ $root.p3xr.strings.intention.pubsubMonitor }}
{{item}} src/angular/pages/p3xr-console.js000066400000000000000000000320161517671130100172730ustar00rootroot00000000000000let actionHistoryPosition = -1 const htmlEncode = global.htmlEncode; //localStorage.setItem('console-history', '[]') p3xr.ng.component('p3xrConsole', { template: require('./p3xr-console.html'), bindings: { type: '@', }, controller: function (p3xrCommon, p3xrSocket, $state, $rootScope, p3xrRedisParser, $mdDialog, $timeout, $scope) { // .p3xr-layout-footer-container // .p3xr-layout-header-container // #p3xr-console-header // #p3xr-console-input // $window.height() const getActionHistory = () => { return JSON.parse(localStorage.getItem('console-history') || "[]"); } let $container let $header; let $footer; let $consoleHeader let $input let $output let scrollers let index = 0 const $outputAppend = (message) => { // write, so it only keep the last 1000 lines by p3xr-console-content-output-item class $output.append(`${message}
`) let items = $output.find('.p3xr-console-content-output-item'); const max = 256 if (items.length > max) { items.slice(0, items.length - max).remove(); // Remove the oldest items exceeding 1000 lines } } if (!$rootScope.hasConnected()) { $state.go('main') } const debounce = require('lodash/debounce') this.dragStart = () => { //console.warn('dragStart') $scope.$emit('p3xr-quick-console', { start: true, }) } this.dragEnd = () => { //console.warn('dragEnd') $scope.$emit('p3xr-quick-console', { start: false, }) } this.closeConsole = () => { $scope.$emit('p3xr-quick-console-quit') } const rawResize = () => { let minus = 0 let $components //if ($rootScope.isElectron) { // $components = [$footer, $consoleHeader] //} else { $components = [$header, $footer, $consoleHeader] //} for (let item of $components) { minus += item.outerHeight() } const windowHeight = $window.height() //console.log(windowHeight, minus) let adjustments if (this.type === 'quick') { adjustments = 105 } else { adjustments = 70 } const outputHeight = Math.max(windowHeight - minus - adjustments, 0) $container.height(outputHeight) $container.css('max-height', `${outputHeight}px`) console.log('outputHeight', outputHeight) } const resize = debounce(rawResize, p3xr.settings.debounce) /* let resizeObserver = new ResizeObserver(entries => { console.log('ResizeObserver', entries) rawResize() }) */ /* let check = 0 this.$doCheck = () => { if (check < 10) { check++ // console.log('resize for tree') rawResize() // $rootScope.$broadcast('p3x-resize') } } */ const onPubSubMessage = (data) => { //console.warn('pub-sub', data) if (p3xr.state.monitor === false) { return } let message = htmlEncode(String(data.message)) $outputAppend(`PubSub channel: ${data.channel}
${message}
`) scrollers.scrollTop = scrollers.scrollHeight; } this.$onInit = () => { $container = $('#p3xr-console-content') $header = $('#p3xr-layout-header-container') $footer = $('#p3xr-layout-footer-container') $consoleHeader = $('#p3xr-console-header') $output = $('#p3xr-console-content-output') scrollers = $container[0] $window.on('resize', resize) resize() p3xrSocket.ioClient.on('pubsub-message', onPubSubMessage) setTimeout(() => { $input = $('#p3xr-console-input') $input.on('keydown', this.action) /* md-colors="{'border-color': $ctrl.inputBorderColor()}" ng-style="{ 'background': $ctrl.inputBackground(), 'color': $ctrl.inputColor()}" this.inputBackground = () => { return p3xrTheme.isDark() ? 'rgba(64, 64, 64, 1)' : 'white' } this.inputBorderColor = () => { return p3xrTheme.isDark() ? 'primary-hue-1' : 'primary-hue-1' } this.inputColor = () => { return p3xrTheme.isDark() ? 'white' : 'black' } */ this.setTheme() this.clearConsole() }) } this.setTheme = () => { const css = { borderColor: p3xrCommon.inputBorderColor(), backgroundColor: p3xrCommon.inputBackground(), color: p3xrCommon.inputColor(), } //console.warn('dark', p3xrTheme.isDark(), css) $input.css(css) } $scope.$on('p3xr-theme-switched', () => { this.setTheme() }) this.$postLink = () => { rawResize() } this.$onDestroy = function () { $window.off('resize', resize) p3xrSocket.ioClient.removeListener('pubsub-message', onPubSubMessage) }; //this.inputValue = '' this.actionEnter = async (inputValue) => { var $acElement = angular.element(document.getElementById('p3xr-console-autocomplete')); var acCtrl = $acElement.controller('mdAutocomplete'); acCtrl.hidden = true; let response; const enter = String(inputValue).trim() if (enter === '') { return; } try { response = await p3xrSocket.request({ action: 'console', payload: { command: enter } }) //console.warn(typeof response.result, response.result, response.generatedCommand) const result = htmlEncode(String(p3xrRedisParser.console.parse(response.result))) //console.log(result) $outputAppend(`${enter}
${result}
`) if (response.hasOwnProperty('database')) { $rootScope.p3xr.state.currentDatabase = response.database $rootScope.p3xr.state.redisChanged = true } $scope.searchText = '' $scope.$digest() } catch (e) { console.error(e) $outputAppend(`${enter}
${p3xr.strings.code[e.message] || e.message}
`) } finally { let history if (response !== undefined) { history = response.generatedCommand } else { history = enter } let actionHistory = getActionHistory() const actionHistoryIndexOf = actionHistory.indexOf(history) if (actionHistoryIndexOf > -1) { actionHistory.splice(actionHistoryIndexOf, 1) } actionHistory.unshift(history) //console.log('actionHistory', actionHistory) if (actionHistory.length > 20) { actionHistory = actionHistory.slice(0, 20) } localStorage.setItem('console-history', JSON.stringify(actionHistory)) actionHistoryPosition = -1 // //console.log(scrollers.scrollHeight, scrollers.scrollTop, scrollers.height) scrollers.scrollTop = scrollers.scrollHeight; $output.scrollTop($output.prop("scrollHeight")); // //$input.focus() if (this.type === 'quick') { $rootScope.$broadcast('p3xr-refresh'); } } } this.action = ($event) => { switch ($event.keyCode) { // keydown 40 case 40: { $event.preventDefault() $event.stopPropagation() const actionHistory = getActionHistory() if (actionHistory.length < 1) { return; } if (actionHistoryPosition === -1) { actionHistoryPosition = actionHistory.length } actionHistoryPosition-- if (actionHistoryPosition < 0) { actionHistoryPosition = actionHistory.length - 1 } $scope.searchText = actionHistory[actionHistoryPosition] break; } // keyup 38 case 38: { $event.preventDefault() $event.stopPropagation() const actionHistory = getActionHistory() if (actionHistory.length < 1) { return; } actionHistoryPosition++ if (actionHistoryPosition >= actionHistory.length) { actionHistoryPosition = 0 } $scope.searchText = actionHistory[actionHistoryPosition] break; } default: actionHistoryPosition = -1 break; } //const log = getActionHistory() //console.log('actionHistoryPosition', actionHistoryPosition, 'getActionHistory()', 'log', log, 'log.length', log.length) } this.clearConsole = () => { $output.empty() $outputAppend('' + $rootScope.p3xr.strings.label.welcomeConsole + '') $outputAppend($rootScope.p3xr.strings.label.welcomeConsoleInfo + '
') $input.focus() } this.getMatches = (searchText) => { const matches = p3xr.state.commands.filter(e => e.includes(searchText)) return matches } this.setMonitorState = async() => { try { console.log('$rootScope.p3xr.state.monitor', $rootScope.p3xr.state.monitor) response = await p3xrSocket.request({ action: 'set-subscription', payload: { subscription: $rootScope.p3xr.state.monitor, subscriberPattern: $rootScope.p3xr.state.monitorPattern, } }) //console.log('$rootScope.p3xr.state.monitor after', $rootScope.p3xr.state.monitor) } catch(e) { p3xrCommon.generalHandleError(e) $rootScope.p3xr.state.monitor = false $scope.$digest() } } this.commands = (options) => { $mdDialog.show({ controller: function ($scope, $mdDialog) { $scope.ok = function () { $mdDialog.hide(); }; $scope.$watch(function () { const height = $('#p3xr-console-commands').parent().height(); return height; }, (newValue, oldValue) => { $scope.height = newValue; }) }, fullscreen: true, targetEvent: options.$event, template: `
keyboard   {{ $root.p3xr.strings.intention.commands }} close
close {{ $root.p3xr.strings.intention.close }}
`, }); } } }) src/angular/pages/p3xr-console.scss000066400000000000000000000037731517671130100176420ustar00rootroot00000000000000@use '../ui/p3xr-input'; @use '../../scss/vars' as v; p3xr-console { .p3xr-console-electron { margin: v.$layout-padding; } md-toolbar { border-top-left-radius: v.$border-radius; border-top-right-radius: v.$border-radius; } #p3xr-console-content { font-family: 'Roboto Mono' !important; //font-weight: 500; $minWidthCalc: 20px; text-align: center; #p3xr-console-content-resizer { cursor: ew-resize; position: relative; left: -10px; width: 20px !important; } #p3xr-console-content-output { min-width: calc(100% - #{$minWidthCalc}); text-align: left; pre { font-family: 'Roboto Mono' !important; //font-weight: 500; //white-space: pre-wrap; } .p3xr-console-content-output-item:before { content: "> "; opacity: 0.5; } .p3xr-console-content-output-item { pre { // word-break: break-all; // overflow-wrap: break-word; // white-space: pre-wrap; } } } } .p3xr-console-monitor-quick { position: relative; top: 2px; } } #p3xr-console-input { min-width: calc(100% - 9px); position: fixed; bottom: v.$toolbar-height + 8px; left: 3px; right: 3px; } #p3xr-console-input:focus { @extend .p3xr-input, :focus; } #p3xr-console-autocomplete.p3xr-console-autocomplete-quick #p3xr-console-input { min-width: calc(100% - 20px); position: fixed; left: 10px; right: 10px; } .p3xr-console { background-color: transparent !important; md-autocomplete-wrap { box-shadow: none; background: none !important; } } src/angular/pages/p3xr-error.html000066400000000000000000000037411517671130100173150ustar00rootroot00000000000000

{{ $root.p3xr.strings.title.socketioConnectError }}



{{ $ctrl.$stateParams.error.message }}

src/angular/pages/p3xr-error.js000066400000000000000000000003451517671130100167620ustar00rootroot00000000000000p3xr.ng.component('p3xrError', { template: require('./p3xr-error.html'), controller: function ($stateParams, $rootScope) { this.$stateParams = $stateParams $rootScope.p3xr.state.failed = true; } }) src/angular/pages/p3xr-main.html000066400000000000000000000125761517671130100171160ustar00rootroot00000000000000

{{ $root.p3xr.strings.intention.main }}

{{ $root.p3xr.strings.title.main }}
{{ $root.p3xr.strings.intention.noConnections }}
src/angular/pages/p3xr-main.js000066400000000000000000000505451517671130100165640ustar00rootroot00000000000000p3xr.ng.component('p3xrMain', { template: require('./p3xr-main.html'), controller: function ($cookies, p3xrSocket, p3xrCommon, p3xrRedisParser, $rootScope, $state, $timeout, $scope, $mdMedia, $mdSidenav) { $scope.$watch('$root.p3xr.state.connection', (newVal, oldVal) => { if (!newVal) { $state.go('settings') } }) let $container let $header; let $footer; let $consoleHeader let scrollers let $resizer let resizerMouseoverOn = false; let resizeClicked = false; let resizeLeft = undefined Object.defineProperty($scope, 'resizerColor', { get: () => { if (resizeClicked || resizerMouseoverOn) { return 'accent-400'; } return 'accent' }, set: (val) => { // unused } }) const resizeMinWidth = p3xr.settings.resizeMinWidth; const debounce = require('lodash/debounce') let screenSizeIsSmall = false let $timeoutResize $scope.$watch(function () { return $mdMedia('xs'); }, function (isScreenSizeIsSmall) { if (!isScreenSizeIsSmall && screenSizeIsSmall === true) { if ($timeoutResize !== undefined) { $timeout.cancel($timeoutResize) } $timeoutResize = $timeout(resize, 4 * p3xr.settings.debounce) //console.warn('aha!') } screenSizeIsSmall = isScreenSizeIsSmall; }); /* const debouncedTabs = debounce(() => { $rootScope.$broadcast('p3xr-refresh-statistics-tabs') }, p3xr.settings.debounce) */ const rawResize = (options = {}) => { //console.log('p3xr-main rawResize') //console.time('p3xr-main-resize') //console.info('p3xr-main resize') /* let {redrawTabs} = options if (redrawTabs === undefined) { redrawTabs = false; } */ let minus = 0 let $components //if ($rootScope.isElectron) { // $components = [$footer, $consoleHeader] //} else { $components = [$header, $footer, $consoleHeader] //} for (let item of $components) { minus += item.outerHeight() } const windowHeight = $window.outerHeight() //console.log(windowHeight, minus) //const outputPositionMinus = $rootScope.isElectron ? 0 : 10 const outputPositionMinus = 11 const outputHeight = Math.max(windowHeight - minus - outputPositionMinus, 100) $container.height(outputHeight) $container.css('max-height', `${outputHeight}px`) const containerPosition = p3xr.dom.getPosition($container[0]) const $treeControl = $('#p3xr-main-treecontrol-container') if ($treeControl) { const $treeControlControls = $('#p3xr-main-treecontrol-controls-container') const treeControlControlsPosition = p3xr.dom.getPosition($treeControlControls[0]) $treeControl.css('top', (containerPosition.top + treeControlControlsPosition.height) + 'px') $treeControl.css('left', containerPosition.left + 'px'); $treeControl.css('height', (containerPosition.height - treeControlControlsPosition.height) + 'px') $treeControl.css('max-height', containerPosition.height + 'px') if (resizeLeft !== undefined) { $treeControl.css('width', (resizeLeft - containerPosition.left) + 'px') } else { $treeControl.css('width', resizeMinWidth + 'px') } $treeControl.css('min-width', resizeMinWidth + 'px') const treeControlPosition = p3xr.dom.getPosition($treeControl[0]) if ($resizer === undefined) { decorateResizer(); } const resizerWidth = 5; if ($resizer !== undefined) { // $resizer.removeEventListener('mouseover', resizerMouseover) // $resizer.removeEventListener('mouseout', resizeMouseout ) $resizer = document.getElementById('p3xr-main-content-sizer') if ($resizer !== null) { $resizer.addEventListener('mouseover', resizerMouseover) $resizer.addEventListener('mouseout', resizeMouseout) $resizer.style.top = containerPosition.top + 'px' $resizer.style.height = containerPosition.height + 'px' $resizer.style.left = (containerPosition.left + treeControlPosition.width) + 'px' $resizer.style.width = (resizerWidth) + 'px' } } const $content = $('#p3xr-main-content-container'); $content.css('top', containerPosition.top + 'px') $content.css('height', containerPosition.height + 'px') $content.css('left', (containerPosition.left + treeControlPosition.width + resizerWidth) + 'px') $content.css('width', (containerPosition.width - treeControlPosition.width - resizerWidth) + 'px') $treeControlControls.width(treeControlPosition.width) } else { destroyResizer() } /* if (redrawTabs) { debouncedTabs() } */ //console.timeEnd('p3xr-main-resize') }; const resize = debounce(() => { resizeLeft = undefined rawResize() }, p3xr.settings.debounce) const resizerMouseover = () => { resizerMouseoverOn = true; $scope.$digest(); } const resizeMouseout = () => { resizerMouseoverOn = false; $scope.$digest(); } const resizeClick = (event) => { if (event.type === 'mousedown' && event.target.id !== 'p3xr-main-content-sizer') { return } if (event.type === 'mousedown') { resizeClicked = true document.documentElement.style.cursor = `ew-resize` $body.addClass('p3xr-not-selectable') } else if (event.type === 'mouseup') { document.documentElement.style.cursor = `auto` resizeClicked = false $body.removeClass('p3xr-not-selectable') } if (resizeClicked === false) { rawResize({ //redrawTabs: true }); } event.stopPropagation(); $scope.$digest(); } const documentMousemove = (event) => { if (resizeClicked) { const containerPosition = p3xr.dom.getPosition($container[0]) if (event.clientX < containerPosition.left + resizeMinWidth || event.clientX > window.innerWidth - resizeMinWidth) { // console.warn('not allowed to resize with too small position') document.documentElement.style.cursor = 'not-allowed' } else { document.documentElement.style.cursor = 'ew-resize' $resizer.style.left = event.clientX + 'px' resizeLeft = event.clientX; rawResize(); } } } const decorateResizer = () => { $resizer = document.getElementById('p3xr-main-content-sizer'); if ($resizer === null) { $resizer = undefined return; } $resizer.addEventListener('mouseover', resizerMouseover) $resizer.addEventListener('mouseout', resizeMouseout) // $resizer.on('click', resizeClick) document.addEventListener("mousemove", documentMousemove); document.addEventListener("mousedown", resizeClick); document.addEventListener("mouseup", resizeClick); // document.addEventListener("click", documentClick); } $scope.$on('p3xr-main-resizer', (event, opts) => { console.info('p3xr-main-resizer dragging:', opts.drag) if (opts.drag === true) { document.addEventListener("mousemove", documentMousemove); document.addEventListener("mousedown", resizeClick); document.addEventListener("mouseup", resizeClick); } else { document.removeEventListener("mousemove", documentMousemove); document.removeEventListener("mousedown", resizeClick); document.removeEventListener("mouseup", resizeClick); } }) const destroyResizer = () => { if ($resizer !== undefined && $resizer !== null) { $resizer.removeEventListener('mouseover', resizerMouseover) $resizer.removeEventListener('mouseout', resizeMouseout) $resizer = undefined } document.removeEventListener("mousedown", resizeClick); document.removeEventListener("mouseup", resizeClick); document.removeEventListener("mousemove", documentMousemove); } this.resize = debounce(rawResize, p3xr.settings.debounce) this.resizeRaw = rawResize /* this.$doCheck = () => { console.log('do check') rawResize() } */ this.$onInit = () => { require('../../core/node-inview-recursive').recursive({ nodes: $rootScope.keysTreeRendered, }) $container = $('#p3xr-main-content') $header = $('#p3xr-layout-header-container') $footer = $('#p3xr-layout-footer-container') $consoleHeader = $('#p3xr-main-header') scrollers = $container[0] rawResize() $window.on('resize', rawResize) if ($state.current.url === '/main') { $state.go('main.statistics') } if (p3xr.state.redisChanged) { p3xr.state.redisChanged = false; //console.warn('p3xr', p3xr) if (p3xr.state.connection) { this.refresh() } } //if (p3xr.state.connections.list.length === 0 && p3xr.state.connection === undefined) { setTimeout(() => { rawResize() }, 250) //} } this.$onDestroy = function () { $window.off('resize', rawResize) destroyResizer(); }; $rootScope.p3xr.state.page = 1; let selectedDatabase = 0 let currentDatabase Object.defineProperty(this, 'currentDatabase', { get: () => { let currentDatabase = p3xr.state.currentDatabase if (currentDatabase === undefined) { currentDatabase = $cookies.get(p3xr.settings.connection.getCookieNameCurrentDatabase(p3xr.state.connection.id)) } if (currentDatabase === undefined) { currentDatabase = 0; } return currentDatabase; }, set: async (value) => { currentDatabase = value if (selectedDatabase !== currentDatabase) { selectedDatabase = value try { const response = await p3xrSocket.request({ action: 'console', payload: { command: `select ${selectedDatabase}` } }) } catch (e) { p3xrCommon.generalHandleError(e) } } $cookies.put(p3xr.settings.connection.getCookieNameCurrentDatabase(p3xr.state.connection.id), String(value), { expires: p3xr.settings.cookieExpiry, }) } }) this.selectDatabase = async (selectDbIndex) => { this.currentDatabase = selectDbIndex try { $rootScope.p3xr.state.page = 1; const response = await p3xrSocket.request({ action: 'console', payload: { command: `select ${selectDbIndex}` } }) p3xrCommon.toast({ message: p3xr.strings.status.dbChanged({ db: selectDbIndex }) }) await this.statistics() } catch (e) { p3xrCommon.generalHandleError(e) } } this.save = async () => { try { const response = await p3xrSocket.request({ action: 'save', }) $rootScope.p3xr.state.info = p3xrRedisParser.info(response.info) //$rootScope.p3xr.state.infoObject = response.infoObject $rootScope.$digest() p3xrCommon.toast({ message: p3xr.strings.status.savedRedis }) } catch (e) { p3xrCommon.generalHandleError(e) } } this.statistics = async () => { try { $state.go('main.statistics') await this.refresh() } catch (e) { p3xrCommon.generalHandleError(e) } } this.refresh = async (options = {}) => { console.time('refresh') let { withoutParent } = options if (withoutParent === undefined) { withoutParent = false } let expandedNodes = p3xr.clone($rootScope.expandedNodes); try { /* p3xr.ui.overlay.show({ message: p3xr.strings.status.reloadingDataInfo }) */ const payload = {} if (!$rootScope.p3xr.settings.searchClientSide && typeof ($rootScope.p3xr.state.search) === 'string' && $rootScope.p3xr.state.search.length > 0) { if ($rootScope.p3xr.settings.searchStartsWith) { payload.match = $rootScope.p3xr.state.search + '*'; } else { payload.match = '*' + $rootScope.p3xr.state.search + '*'; } } //console.warn('match', payload.match, 'search', $rootScope.p3xr.state.search) const response = await p3xrSocket.request({ action: 'refresh', payload: payload }) p3xr.state.dbsize = response.dbsize $rootScope.p3xr.state.redisChanged = true // if (keepTree) { // $timeout(() => { $rootScope.savedExpandedNodes = expandedNodes // p3xrCommon.loadRedisInfoResponse() // }) // } p3xrCommon.loadRedisInfoResponse({ response: response }) if (!withoutParent) { $rootScope.$broadcast('p3xr-refresh-key'); } } catch (e) { p3xrCommon.generalHandleError(e) /* $timeout(() => { p3xr.ui.overlay.hide() }, p3xr.settings.debounce) */ } finally { /* p3xr.ui.overlay.hide() */ } console.timeEnd('refresh') setTimeout(() => { console.log('refresh') $rootScope.$digest() }) } $scope.$on('p3xr-refresh', () => { this.refresh({ withoutParent: true }) //resize() }) let currentElement let resizeObserver = new ResizeObserver(entries => { if (!resizeClicked) { //console.log('ResizeObserver resize', JSON.parse(JSON.stringify(entries))) window.requestAnimationFrame(() => { if (!Array.isArray(entries) || !entries.length) { return; } rawResize() }); } }) const watchResize = async(newVal, oldVal) => { if (currentElement) { resizeObserver.unobserve(currentElement) } if (p3xr.state.connection === undefined) { console.log('no connection for resizing') return } if ($mdMedia('xs')) { rawResize() return } let elem = null while (elem === null ) { elem = document.getElementById('p3xr-main-treecontrol-controls-container') console.info('waiting for observing tree control controls') await new Promise(resolve => setTimeout(() => { resolve() })) } console.info('found observing tree control controls') // console.log('elem', elem) currentElement = elem resizeObserver.observe(currentElement) // console.log('watching width') } $scope.$watch(() => { return ($mdMedia('xs') ? 'true' : 'false') + '-' + (p3xr.state.connection ? 'true' : 'false') }, watchResize) $scope.$on('$destroy', () => { resizeObserver.disconnect() }) this.addKey = (options) => { const {event, node} = options // event.preventDefault() event.stopPropagation(); $rootScope.$broadcast('p3xr-key-new', { event: event, node: node, }); } const $document = $(document) this.sidenavWidth = Math.min($document.width() - 100, 600) this.quickConsole = () => { $mdSidenav('quickConsoleSidenav').open() } this.startResizingFlag = false $scope.$on('p3xr-quick-console', (event, data) => { //console.warn('p3xr-quick-console', event, data) this.startResizingFlag = data.start }) $scope.$on('p3xr-quick-console-quit', () => { $mdSidenav('quickConsoleSidenav').close() }) this.startResizing = (event) => { if (!this.startResizingFlag) { return } const startX = event.clientX; const startWidth = this.sidenavWidth; const handleResizing = (event) => { const deltaX = event.clientX - startX; document.body.style.cursor = 'ew-resize' const sideNavWidth = Math.min(startWidth - deltaX, window.innerWidth - 250); this.sidenavWidth = sideNavWidth $scope.$apply(); // Update AngularJS bindings } const endResizing = () => { document.body.style.cursor = 'default' $document.off('mousemove', handleResizing); $document.off('mouseup', endResizing); } $document.on('mousemove', handleResizing); $document.on('mouseup', endResizing); } /* redis version = server - redis_version keys = keyspace - dbIndex -> keys memory used -> memory - used_memory_human uptime -> server - uptime_in_days last save - save = 0) { echo format_time(time() - $info[$i]['Persistence']['rdb_last_save_time']) . " ago"; } else { echo format_time(-(time() - $info[$i]['Persistence']['rdb_last_save_time'])) . "in the future"; } } else { echo 'never'; } ?> */ if (p3xr.state.connection === undefined) { $state.go('settings') } } }) src/angular/pages/p3xr-main.scss000066400000000000000000000024671517671130100171230ustar00rootroot00000000000000@use "../../scss/vars" as v; p3xr-main { @media (max-width:350px) { .p3xr-main-toolbar-button-hide-on-small { display: none; } } md-toolbar, .p3xr-content-border { border-top-left-radius: v.$border-radius; border-top-right-radius: v.$border-radius; } #p3xr-main-treecontrol-container { position: fixed; overflow: auto; } #p3xr-main-treecontrol-container-directive-small { max-height: 220px; overflow: auto; } .p3xr-main-treecontrol-folder-icon { transform: scale(0.75); } #p3xr-main-content-container { position: fixed; overflow: auto; display: block; } .p3xr-main-toolbar-button { } .p3xr-main-db-select { position: relative; top: -2px; .md-select-value { border-bottom: none !important; } } } #p3xr-main-content-sizer { position: fixed; display: block; cursor: ew-resize; z-index: 10; } .p3xr-quick-console { margin: 10px; } .p3xr-quick-console-sidenav { overflow: hidden !important; min-width: 240px !important; background-color: transparent !important; transition: none !important; max-width: 100%; //position: relative; //cursor: ew-resize; } src/angular/pages/p3xr-overview.html000066400000000000000000000020441517671130100200250ustar00rootroot00000000000000 {{ $root.p3xr.strings.page.overview.overviewClients }}

{{ connectionValue.connection.name }}

{{ connectionValue.connection.host }}:{{ connectionValue.connection.port }}

{{ $root.p3xr.strings.page.overview.connectedCount({ length: connectionValue.clients.length }) }}

src/angular/pages/p3xr-overview.js000066400000000000000000000003451517671130100174770ustar00rootroot00000000000000/* p3xr.ng.component('p3xrOverview', { template: require('./p3xr-overview.html'), controller: function ($rootScope, $state) { if (!$rootScope.hasConnected()) { $state.go('main') } } }) */ src/angular/pages/p3xr-settings.html000066400000000000000000000270251517671130100200250ustar00rootroot00000000000000
{{ $root.p3xr.strings.intention.noConnectionsInSettings }}

{{connection.name}}

{{connection.host}}:{{connection.port}}

{{ $root.p3xr.strings.page.overview.connectedCount({ length: connectionValue.clients.length }) }}  

power {{ $root.p3xr.strings.intention.connect }} {{ $root.p3xr.strings.intention.connect }} {{ $root.p3xr.strings.intention.disconnect }} {{ $root.p3xr.strings.intention.disconnect }} delete_forever {{ $root.p3xr.strings.intention.delete }} {{ $root.p3xr.strings.intention.delete }} edit {{ $root.p3xr.strings.intention.edit }} {{ $root.p3xr.strings.intention.edit }} mode_comment {{ $root.p3xr.strings.intention.view }} {{ $root.p3xr.strings.intention.view }}

{{ $root.p3xr.strings.form.treeSettings.field.treeSeparator}}
{{ $root.p3xr.settings.redisTreeDivider}} {{ $root.p3xr.strings.label.treeSeparatorEmptyNote}}

{{ $root.p3xr.strings.form.treeSettings.field.page}}
{{ $root.p3xr.settings.pageCount}}

{{ $root.p3xr.strings.form.treeSettings.error.page }}

{{ $root.p3xr.strings.form.treeSettings.field.keyPageCount}}
{{ $root.p3xr.settings.keyPageCount}}

{{ $root.p3xr.strings.form.treeSettings.error.keyPageCount }}

{{ $root.p3xr.strings.form.treeSettings.maxValueDisplay}}
{{ $root.p3xr.settings.maxValueDisplay}}

{{ $root.p3xr.strings.form.treeSettings.maxValueDisplayInfo }}

{{ $root.p3xr.strings.form.treeSettings.maxKeys}}
{{ $root.p3xr.settings.maxKeys}}

{{ $root.p3xr.strings.form.treeSettings.maxKeysInfo }}

{{ $root.p3xr.strings.form.treeSettings.field.keysSort}}
{{ $root.p3xr.settings.keysSort ? $root.p3xr.strings.label.keysSort.on : $root.p3xr.strings.label.keysSort.off }}
{{ $root.p3xr.strings.form.treeSettings.field.searchMode}}
{{ $root.p3xr.settings.searchClientSide ? $root.p3xr.strings.form.treeSettings.label.searchModeClient : $root.p3xr.strings.form.treeSettings.label.searchModeServer }}
{{ $root.p3xr.strings.form.treeSettings.field.searchModeStartsWith}}
{{ $root.p3xr.settings.searchStartsWith ? $root.p3xr.strings.form.treeSettings.label.searchModeStartsWith : $root.p3xr.strings.form.treeSettings.label.searchModeIncludes }}
{{ $root.p3xr.settings.jsonFormat == 2 ? $root.p3xr.strings.form.treeSettings.label.jsonFormatTwoSpace : $root.p3xr.strings.form.treeSettings.label.jsonFormatFourSpace }}
{{ $root.p3xr.settings.animation ? $root.p3xr.strings.form.treeSettings.label.animation : $root.p3xr.strings.form.treeSettings.label.noAnimation }}
src/angular/pages/p3xr-settings.js000066400000000000000000000071371517671130100174770ustar00rootroot00000000000000p3xr.ng.component('p3xrSettings', { template: require('./p3xr-settings.html'), controller: function (p3xrCommon, p3xrDialogConnection, $mdDialog, p3xrSocket, p3xrDialogTreecontrolSettings, $scope) { this.connectionForm = (options) => { p3xrDialogConnection.show(options) } this.connect = ({ connection }) => { //console.log('connection', connection) $scope.$emit('p3xr-connect', { connection: connection }) } this.disconnect = () => { //console.log('connection', connection) $scope.$emit('p3xr-disconnect') } this.setLicense = async (options) => { try { const confirm = $mdDialog.prompt() .title(p3xr.strings.confirm.license.title) .textContent(p3xr.strings.confirm.license.textContent) .placeholder(p3xr.strings.confirm.license.placeholder) .ariaLabel(p3xr.strings.confirm.license.placeholder) .initialValue('') .targetEvent(options.$event) .ok(p3xr.strings.intention.license) .cancel(p3xr.strings.intention.cancel); const confirmResponse = await $mdDialog.show(confirm) const response = await p3xrSocket.request({ action: 'set-license', payload: { license: confirmResponse } }) if (!global.p3xr.isBot() && response.donated !== p3xr.state.donated) { window['gtag']('config', p3xr.settings.googleAnalytics, { 'page_path': response.donated ? '/donated' : '/free' } ); } p3xr.state.donated = response.donated //await this.refresh() p3xrCommon.toast({ message: response.info !== 'ok' ? p3xr.strings.error[response.info] : p3xr.strings.status.licenseSaved, }) } catch (e) { if (e === undefined) { return } if (p3xr.strings.error[e.message]) { e = new Error(p3xr.strings.error[e.message]) } p3xrCommon.generalHandleError(e) } } this.openTreeSettingDialog = (opts) => { p3xrDialogTreecontrolSettings.show(opts); //console.warn($rootScope.p3xr.state.redisTreeDivider) } this.deleteConnection = async (options) => { const {model, ev} = options; try { await p3xrCommon.confirm({ event: ev, message: p3xr.strings.confirm.deleteConnectionText }); const response = await p3xrSocket.request({ action: 'connection-delete', payload: { id: model.id }, }) p3xrCommon.toast({ message: p3xr.strings.status.deleted }); } catch (error) { if (error === undefined) { /* p3xrCommon.toast({ message: p3xr.strings.status.cancelled }); */ return; } p3xrCommon.generalHandleError(error) } } } }) src/angular/pages/p3xr-settings.scss000066400000000000000000000001261517671130100200250ustar00rootroot00000000000000@use "../../scss/vars" as v; .p3xr-settings-bottom { height: v.$toolbar-height; } src/angular/provider/000077500000000000000000000000001517671130100151325ustar00rootroot00000000000000src/angular/provider/p3xr-theme.js000066400000000000000000000212131517671130100174630ustar00rootroot00000000000000const MobileDetect = require('mobile-detect') const md = new MobileDetect(window.navigator.userAgent); const isMobile = md.mobile() !== null || md.phone() !== null || md.tablet() !== null p3xr.ng.provider('p3xrTheme', function p3xrThemeProvider($mdThemingProvider,) { const selfProvider = this; $mdThemingProvider.generateThemesOnDemand(true); $mdThemingProvider.alwaysWatchTheme(true); $mdThemingProvider.setNonce(); const themeCookieName = 'p3xr-theme' const themeDefault = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'p3xrThemeDark' : 'p3xrThemeEnterprise'; this.start = () => { // console.warn('ngivrTheme we are in the provider eg: config')( Object.keys(p3xr.theme).forEach(theme => { //console.warn('provider theme: ', theme) p3xr.theme[theme]($mdThemingProvider) }) $mdThemingProvider.setDefaultTheme(themeDefault); } const themeIsGenerated = {}; const themeType = { dark: [ 'p3xrThemeDarkNeu', 'p3xrThemeDark', 'p3xrThemeDarkoBluo', 'p3xrThemeMatrix', ], light: [ 'p3xrThemeLight', 'p3xrThemeEnterprise', 'p3xrThemeRedis', ] } // this is the service eg: ngivrTheme this.$get = ['$mdTheming', '$rootScope', '$cookies', '$mdColors', function p3xThemeFactory($mdTheming, $rootScope, $cookies, $mdColors) { // let's assume that the UnicornLauncher constructor was also changed to // accept and use the useTinfoilShielding argument return new function p3xrTheme() { const self = this; this.isDark = () => { return themeType.dark.includes(this.getCurrentThemeName()) } this.start = () => { // console.log(selfProvider); // console.log('ngivrTheme we are in the service eg: run or injector') self.setTheme(); } this.setTheme = (themeName) => { console.warn('setTheme', themeName) if (themeName === undefined) { themeName = $cookies.get(themeCookieName) if (themeName === undefined) { themeName = themeDefault } } //console.warn(`theme will generate theme on the fly: ${theme}`); if (!themeIsGenerated.hasOwnProperty(themeName)) { //console.warn(`theme generating theme on the fly: ${theme}`); $mdTheming.generateTheme(themeName); $mdTheming.generateTheme(`${themeName}Layout`); $mdTheming.generateTheme(`${themeName}Common`); themeIsGenerated[themeName] = true; } //console.warn(themeIsGenerated) //console.warn(`theme registered: ${$mdTheming.registered(theme)}`); $mdThemingProvider.setDefaultTheme(themeName); $rootScope.p3xr.state.theme = themeName; $cookies.put(themeCookieName, themeName, {expires: p3xr.settings.cookieExpiry,}); $body.removeClass('p3xr-theme-light') $body.removeClass('p3xr-theme-dark') if (themeType.dark.includes(themeName)) { $body.addClass('p3xr-theme-dark') } else { $body.addClass('p3xr-theme-light') } $('#p3xr-theme-styles').remove() const darkColor = p3xr.state.themeCommon + '-background'; //console.warn(darkColor) const borderColor = $mdColors.getThemeColor(p3xr.state.themeLayout + '-primary-hue-1'); const styles = ` body.p3xr-theme-dark[md-theme="p3xrThemeDarkNeuLayout"] md-toolbar.md-hue-1 .md-button-dark-hover-fix:hover, body.p3xr-theme-dark[md-theme="p3xrThemeDarkLayout"] md-toolbar.md-hue-1 .md-button-dark-hover-fix:hover, body[md-theme="p3xrThemeEnterpriseLayout"] md-toolbar.md-hue-1 .md-button-dark-hover-fix:hover { background-color: rgba(0, 0, 0, 0.1) !important; /* Lighten on hover for example */ } [data-p3xr-tree-key]:hover .p3xr-main-tree-node-label { background-color: ${this.isDark() ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)'} } .p3xr-theme-dark .p3xr-content-border { border-left: 1px solid ${borderColor}; border-right: 1px solid ${borderColor}; border-bottom: 1px solid ${borderColor}; } .p3xr-theme-light .p3xr-content-border { border-left: 1px solid transparent; border-right: 1px solid transparent; border-bottom: 1px solid transparent; } .p3xr-theme-light .p3xr-content-border-fixed { border-left: 1px solid ${borderColor}; border-right: 1px solid ${borderColor}; border-bottom: 1px solid ${borderColor}; } .p3xr-theme-dark .p3xr-content-border-fixed { border-left: 1px solid ${borderColor}; border-right: 1px solid ${borderColor}; border-bottom: 1px solid ${borderColor}; } .p3xr-theme-dark .p3xr-content-border-toolbar { border-left: 1px solid ${borderColor}; border-right: 1px solid ${borderColor}; border-top: 1px solid ${borderColor}; } .p3xr-theme-light .p3xr-content-border-toolbar { border-left: 1px solid ${borderColor}; border-right: 1px solid ${borderColor}; border-top: 1px solid ${borderColor}; } .p3xr-toast-default .md-toast-content { background-color: ${this.isDark() ? $mdColors.getThemeColor(darkColor) : 'auto'} !important; border: solid 1px ${this.isDark() ? 'rgba(255, 255, 255, 0.5)' : 'auto'} !important; ${this.isDark() ? 'box-shadow: 0 0 10px rgba(0,0,0,0.6);' : ''} } treecontrol i.tree-branch-head:before { color: ${this.isDark() ? $mdColors.getThemeColor('amber-A100') : $mdColors.getThemeColor('amber-A400')}; ${this.isDark() ? 'text-shadow: 1px 1px 1px rgba(55, 29, 27, 0.5);' : 'text-shadow: 1px 1px 0px rgba(55, 11, 0, 0.5);' } } body.p3xr-theme-dark[md-theme="p3xrThemeMatrixLayout"] treecontrol i.tree-branch-head:before { color: ${$mdColors.getThemeColor('lime-A400')} !important; } .p3xr-list-key-odd-item { background-color: ${$mdColors.getThemeColor(p3xr.state.themeLayout + '-background-500-0.1')}; } .p3xr-list-key-item { border-bottom: 1px solid ${this.isDark() ? $mdColors.getThemeColor(p3xr.state.themeLayout + '-background-300-0.1') : $mdColors.getThemeColor(p3xr.state.themeLayout + '-background-700-0.1') }; } input:-webkit-autofill, input:-webkit-autofill:focus { -webkit-box-shadow:0 0 0 50px ${this.isDark() ? 'rgb(66, 66, 66, 0.9)' : 'rgba(255, 255, 255, 0.5)'} inset !important; -webkit-text-fill-color: ${this.isDark() ? 'white' : 'black'} !important; } ` $('head').append('') const ngivrCoreThemeMetaName = 'p3xr-theme-meta' const ngivrCoreThemeMetaElement = document.getElementById(ngivrCoreThemeMetaName) if (ngivrCoreThemeMetaElement) { ngivrCoreThemeMetaElement.remove() } const meta = document.createElement('meta'); meta.id = ngivrCoreThemeMetaName // meta.name = 'theme-color' meta.content = $mdColors.getThemeColor(p3xr.state.themeLayout + '-accent') document.head.appendChild(meta) // https://stackoverflow.com/questions/65940522/how-do-i-switch-to-chromes-dark-scrollbar-like-github-does // but fixed by p3x-robot document.documentElement.style.display = 'none'; document.documentElement.setAttribute( "data-color-scheme", this.isDark() ? "dark" : "light" ); // remove scrollbars // document.documentElement.style.overflow = "hidden"; // trigger reflow so that overflow style is applied document.body.clientWidth; // remove overflow style, which will bring back the scrollbar with the correct scheme // document.documentElement.style.overflow = ""; document.documentElement.style.display = ''; $rootScope.$broadcast('p3xr-theme-switched') } this.getCurrentThemeName = () => { return $cookies.get(themeCookieName); } this.generateThemeName = (themeNameRaw) => { const generateThemeName = 'p3xrTheme' + themeNameRaw[0].toUpperCase() + themeNameRaw.substring(1) return generateThemeName; } }; }]; }); src/angular/provider/p3xr-theme.scss000066400000000000000000000037211517671130100200260ustar00rootroot00000000000000[data-color-scheme="dark"] { color-scheme: dark; } [data-color-scheme="light"] { color-scheme: light; } .p3xr-theme-light { md-checkbox.md-checked .md-icon { background-color: rgba(0, 0, 0, 0.5); } } .md-hue-3 { md-checkbox:not(.md-checked) .md-icon, md-checkbox.md-checked .md-icon { background-color: rgba(255, 255, 255, 1) !important; color: black !important; } md-checkbox.md-checked .md-icon:after { border-color: black !important; } } md-checkbox:not(.md-checked) .md-icon { border-color: rgb(0, 0, 0) !important; } .p3xr-theme-dark { md-checkbox.md-checked .md-icon { background-color: rgba(255, 255, 255, 0.5); } md-select-menu md-content md-option[selected], md-select-menu md-content md-option[selected].md-focused, md-select-menu md-content md-option[selected]:focus { color: white; } #p3xr-main-header .md-select-icon { color: black !important; } } body.p3xr-theme-dark[md-theme="p3xrThemeDarkoBluoLayout"] { #p3xr-main-header .md-select-icon { color: white !important; } md-checkbox:not(.md-checked) .md-icon { border-color: rgb(255, 255, 255) !important; } } body.p3xr-theme-light[md-theme="p3xrThemeRedisLayout"] { md-checkbox.md-checked .md-icon { background-color: rgba(255, 255, 255, 0.5); } .p3xr-main-db-select-container { md-select-menu md-content md-option[selected], md-select-menu md-content md-option[selected].md-focused, md-select-menu md-content md-option[selected]:focus { color: white; } } #p3xr-main-header .md-select-icon { color: black !important; } } body.p3xr-theme-dark[md-theme="p3xrThemeMatrixLayout"] { md-checkbox.md-checked .md-icon { background-color: transparent; border-color: black; } } md-select:not([disabled]):focus .md-select-value { color: inherit !important; } src/angular/provider/theme-generator/000077500000000000000000000000001517671130100202205ustar00rootroot00000000000000src/angular/provider/theme-generator/p3xr-theme-dark-neu.js000066400000000000000000000017471517671130100242670ustar00rootroot00000000000000p3xr.theme.darkNeu = function ($mdThemingProvider, p3xrThemeNameGenerator) { p3xr.theme.darkNeu.order = 1 $mdThemingProvider.theme('p3xrThemeDarkNeuLayout') .primaryPalette('blue-grey', { 'default': '800', 'hue-1': '300', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('blue-grey', { 'default': '300', }) .warnPalette('grey') .backgroundPalette('grey', { default: '900', }) .dark() ; $mdThemingProvider.theme(`p3xrThemeDarkNeu`) .primaryPalette('cyan') .accentPalette('blue') .warnPalette('yellow') // .backgroundPalette('blue-grey') .dark() ; $mdThemingProvider.theme(`p3xrThemeDarkNeuCommon`) .primaryPalette('green') .accentPalette('grey') .warnPalette('blue') .backgroundPalette('blue-grey', { default: '900' }) .dark() ; } src/angular/provider/theme-generator/p3xr-theme-dark.js000066400000000000000000000021771517671130100235000ustar00rootroot00000000000000p3xr.theme.dark = function ($mdThemingProvider) { p3xr.theme.dark.order = 3 $mdThemingProvider.theme(`p3xrThemeDarkLayout`) .primaryPalette('grey', { 'default': '800', 'hue-1': '500', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('grey') .warnPalette('grey') .backgroundPalette('grey', { 'default': '900', 'hue-1': '800', 'hue-2': '700', 'hue-3': '900', }) ; $mdThemingProvider.theme(`p3xrThemeDarkLayout`).dark() $mdThemingProvider.theme(`p3xrThemeDark`) .primaryPalette('indigo', { default: '300' }) .accentPalette('blue') .warnPalette('orange') .backgroundPalette('grey') ; $mdThemingProvider.theme(`p3xrThemeDark`).dark() $mdThemingProvider.theme(`p3xrThemeDarkCommon`) .primaryPalette('green') .accentPalette('grey') .warnPalette('indigo', { default: '200', }) .backgroundPalette('grey') ; $mdThemingProvider.theme(`p3xrThemeDarkCommon`).dark() } src/angular/provider/theme-generator/p3xr-theme-darko-bluo.js000066400000000000000000000026051517671130100246120ustar00rootroot00000000000000p3xr.theme.darkoBluo = function ($mdThemingProvider) { p3xr.theme.darkoBluo.order = 5 $mdThemingProvider.theme(`p3xrThemeDarkoBluoLayout`) .primaryPalette('indigo', { 'default': '900', 'hue-1': '500', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('indigo', { 'default': '600', 'hue-1': '50', 'hue-2': '700', 'hue-3': '900', }) .warnPalette('indigo') .backgroundPalette('grey', { 'default': '900', 'hue-1': '900', 'hue-2': '500', 'hue-3': '100', }) ; $mdThemingProvider.theme(`p3xrThemeDarkoBluoLayout`).dark() $mdThemingProvider.theme(`p3xrThemeDarkoBluo`) .primaryPalette('indigo', { 'default': '300', 'hue-1': '50', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('blue') .warnPalette('orange') .backgroundPalette('grey') ; $mdThemingProvider.theme(`p3xrThemeDarkoBluo`).dark() $mdThemingProvider.theme(`p3xrThemeDarkoBluoCommon`) .primaryPalette('green') .accentPalette('grey') .warnPalette('light-blue') .backgroundPalette('indigo', { default: '700' }) ; $mdThemingProvider.theme(`p3xrThemeDarkoBluoCommon`).dark() } src/angular/provider/theme-generator/p3xr-theme-enterprise.js000066400000000000000000000020651517671130100247330ustar00rootroot00000000000000p3xr.theme.enterprise = function ($mdThemingProvider, p3xrThemeNameGenerator) { p3xr.theme.enterprise.order = 2 $mdThemingProvider.theme('p3xrThemeEnterpriseLayout') .primaryPalette('grey', { 'default': '800', 'hue-1': '500', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('grey', { 'default': '600', 'hue-1': '50', 'hue-2': '700', 'hue-3': '900', }) .warnPalette('grey') .backgroundPalette('grey', { default: '400' }) ; $mdThemingProvider.theme(`p3xrThemeEnterprise`) .primaryPalette('indigo') .accentPalette('blue', { default: '700', }) .warnPalette('red', { default: '700', }) // .backgroundPalette('grey') ; $mdThemingProvider.theme(`p3xrThemeEnterpriseCommon`) .primaryPalette('green') .accentPalette('grey') .warnPalette('light-blue') // .backgroundPalette('grey') ; } src/angular/provider/theme-generator/p3xr-theme-light.js000066400000000000000000000020401517671130100236530ustar00rootroot00000000000000p3xr.theme.light = function ($mdThemingProvider, p3xrThemeNameGenerator) { p3xr.theme.light.order = 0; $mdThemingProvider.theme('p3xrThemeLightLayout') .primaryPalette('blue-grey', { 'default': '800', 'hue-1': '200', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('blue-grey') .warnPalette('grey') .backgroundPalette('blue-grey', { 'default': 'A100', 'hue-1': '50', 'hue-2': '700', 'hue-3': '900', }) ; $mdThemingProvider.theme(`p3xrThemeLight`) .primaryPalette('deep-purple') .accentPalette('purple', { default: '500' }) .warnPalette('red', { default: '700' }) .backgroundPalette('blue-grey') ; $mdThemingProvider.theme(`p3xrThemeLightCommon`) .primaryPalette('green') .accentPalette('grey') .warnPalette('blue-grey') .backgroundPalette('blue-grey') ; return this } src/angular/provider/theme-generator/p3xr-theme-matrix.js000066400000000000000000000031361517671130100240570ustar00rootroot00000000000000p3xr.theme.matrix = function ($mdThemingProvider) { p3xr.theme.matrix.order = 5 $mdThemingProvider.theme(`p3xrThemeMatrixLayout`) .primaryPalette('light-green', { 'default': 'A400', 'hue-1': 'A400', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('light-green', { 'default': 'A400', 'hue-1': '100', 'hue-2': '600', 'hue-3': '800', }) .warnPalette('green') .backgroundPalette('grey', { 'default': '900', 'hue-1': '900', 'hue-2': '500', 'hue-3': '100', }) .dark() ; $mdThemingProvider.theme(`p3xrThemeMatrix`) .primaryPalette('light-green', { 'default': 'A400', 'hue-1': '50', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('lime', { 'default': 'A400', }) .warnPalette('green', { 'default': 'A700', }) .backgroundPalette('grey') .dark() ; $mdThemingProvider.theme(`p3xrThemeMatrixCommon`) .primaryPalette('light-green', { default: 'A400', 'hue-1': 'A400', 'hue-2': 'A400', 'hue-3': 'A400', }) .accentPalette('light-green', { default: 'A400', 'hue-1': 'A400', 'hue-2': 'A400', 'hue-3': 'A400', }) .warnPalette('green') .backgroundPalette('grey', { default: '900' }) .dark() ; } src/angular/provider/theme-generator/p3xr-theme-redis.js000066400000000000000000000020231517671130100236530ustar00rootroot00000000000000p3xr.theme.redis = function ($mdThemingProvider, p3xrThemeNameGenerator) { p3xr.theme.redis.order = 4 $mdThemingProvider.theme('p3xrThemeRedisLayout') .primaryPalette('red', { 'default': '800', 'hue-1': '200', 'hue-2': '700', 'hue-3': '900', }) .accentPalette('red', { default: '200' }) .warnPalette('red') .backgroundPalette('red', { 'default': '900', 'hue-1': '600', 'hue-2': '200', 'hue-3': '200', }) ; $mdThemingProvider.theme(`p3xrThemeRedis`) .primaryPalette('grey', { default: '900' }) .accentPalette('grey', { default: '600' }) .warnPalette('amber') // .backgroundPalette('blue-grey') ; $mdThemingProvider.theme(`p3xrThemeRedisCommon`) .primaryPalette('green') .accentPalette('grey') .warnPalette('red') .backgroundPalette('grey') ; } src/angular/routes.js000066400000000000000000000023641517671130100151640ustar00rootroot00000000000000const routes = ($stateProvider, $urlRouterProvider) => { $stateProvider.state({ name: 'settings', url: '/settings', template: '' }) $stateProvider.state({ name: 'main', url: '/main', template: '' }) /* $stateProvider.state({ name: 'overview', url: '/overview', template: '' }) */ $stateProvider.state({ name: 'console', url: '/console', template: '' }) $stateProvider.state('main.statistics', { url: '/statistics', template: '', params: { action: null, expandedNodes: null, response: null, }, }); $stateProvider.state('main.key', { url: '/key/:key', template: '', params: { resize: null, } }); $stateProvider.state('socketio-error', { url: '/socketio-error', template: '', params: { error: null } }); } module.exports = routes src/angular/ui/000077500000000000000000000000001517671130100137155ustar00rootroot00000000000000src/angular/ui/p3xr-accordion.html000066400000000000000000000020571517671130100174420ustar00rootroot00000000000000

{{ $ctrl.p3xrTitle }}

{{ !$ctrl.extended ? 'keyboard_arrow_down' : 'keyboard_arrow_up' }} {{ !$ctrl.extended ? $root.p3xr.strings.intention.extend : $root.p3xr.strings.intention.collapse}}
src/angular/ui/p3xr-accordion.js000066400000000000000000000024351517671130100171120ustar00rootroot00000000000000let accordionKey = 0 p3xr.ng.component('p3xrAccordion', { template: require('./p3xr-accordion.html'), bindings: { p3xrTitle: '<', p3xrAccordionKey: '@', }, transclude: { 'actions': '?p3xrAccordionActions', 'content': 'p3xrAccordionContent', }, controller: function ($transclude, $cookies) { this.transcludePresent = function (slot) { return $transclude.isSlotFilled(slot); }; this.$onInit = function () { //console.log(this.p3xrAccordionKey) if (this.p3xrAccordionKey === undefined || this.p3xrAccordionKey === '') { this.p3xAccordionKey = ++accordionKey; } const cookieName = `p3xr-accordion-extended-${this.p3xrAccordionKey}` //console.log(cookieName) Object.defineProperty(this, 'extended', { get: () => { const cookieValue = $cookies.get(cookieName) return cookieValue === undefined ? true : cookieValue === 'true' }, set: (value) => { $cookies.put(cookieName, String(value), { expires: p3xr.settings.cookieExpiry, }) } }) } } }) src/angular/ui/p3xr-accordion.scss000066400000000000000000000005531517671130100174500ustar00rootroot00000000000000@use "../../scss/vars" as v; .p3xr-accordion-electron { margin-left: v.$layout-padding; margin-right: v.$layout-padding; margin-bottom: v.$layout-padding; } p3xr-accordion md-toolbar { // fix with border radious only left and right top of the toolbar border-top-left-radius: v.$border-radius; border-top-right-radius: v.$border-radius; }src/angular/ui/p3xr-button.html000066400000000000000000000007731517671130100170170ustar00rootroot00000000000000 {{ $ctrl.p3xrMdIcon }} {{ $ctrl.p3xrLabel }} {{ $ctrl.p3xrLabel }} src/angular/ui/p3xr-button.js000066400000000000000000000003601517671130100164570ustar00rootroot00000000000000p3xr.ng.component('p3xrButton', { template: require('./p3xr-button.html'), bindings: { p3xrLabel: '<', p3xrMdIcon: '@', p3xrFaIcon: '@', p3xrTooltipDirection: '@', p3xrClasses: '@' }, }) src/angular/ui/p3xr-input.js000066400000000000000000000010341517671130100163020ustar00rootroot00000000000000p3xr.ng.directive('p3xrInput', function (p3xrTheme, p3xrCommon) { return { template: ``, replace: true, link: function (scope) { scope.focused = false scope.p3xrCommon = p3xrCommon } } }) src/angular/ui/p3xr-input.scss000066400000000000000000000002661517671130100166470ustar00rootroot00000000000000.p3xr-input { padding: 3px; border-style: solid; border-width: 2px; margin: 1px; } .p3xr-input:focus { margin: 0px; border-width: 3px; outline: none; } src/angular/ui/p3xr-key-pager.html000066400000000000000000000025501517671130100173630ustar00rootroot00000000000000
{{ $root.p3xr.strings.page.treeControls.pager.first}} skip_previous {{ $root.p3xr.strings.page.treeControls.pager.prev}} keyboard_arrow_left / {{ $ctrl.p3xrController.pages }} {{ $root.p3xr.strings.page.treeControls.pager.next}} keyboard_arrow_right {{ $root.p3xr.strings.page.treeControls.pager.last}} skip_next
src/angular/ui/p3xr-key-pager.js000066400000000000000000000003051517671130100170270ustar00rootroot00000000000000p3xr.ng.component('p3xrKeyPager', { template: require('./p3xr-key-pager.html'), bindings: { p3xrController: '<', }, controller: function ($transclude, $cookies) { } }) src/builder/000077500000000000000000000000001517671130100132755ustar00rootroot00000000000000src/builder/webpack.config.js000066400000000000000000000154751517671130100165270ustar00rootroot00000000000000const config = require('corifeus-builder/src/utils/config').config const webpack = require('webpack'); const {CleanWebpackPlugin} = require('clean-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin') const CopyWebpackPlugin = require('copy-webpack-plugin') const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const minimize = process.argv.includes('--mode=production'); const mode = minimize ? 'production' : 'development'; const useStats = process.env.hasOwnProperty('WEBPACK_STATS') const filenamePrefix = minimize ? '[id].[contenthash]' : '[name]' let minimizer = undefined; const top = process.cwd() const buildDir = top + `/dist`; let devtool; const pkg = require('../../package') // https://github.com/webpack-contrib/webpack-hot-middleware/tree/master/example /* https://stackoverflow.com/questions/44317394/webpack-dev-server-with-hot-reload-reloading-entire-page-with-css-changes 'webpack-dev-server/client?http://localhost:8080', 'webpack/hot/only-dev-server', */ const vendorEntry = [ top + "/src/vendor.js" ] const mainEntry = [ top + (minimize ? "/src/main.js" : '/src/main-development.js') ] const entry = { vendor: vendorEntry, main: mainEntry, // editor: editorEntry, } if (!minimize) { vendorEntry.push('webpack/hot/only-dev-server') vendorEntry.unshift('webpack-dev-server/client?http://localhost:8080/') } const plugins = [ new webpack.IgnorePlugin({ resourceRegExp: /^\.\/locale$/, contextRegExp: /moment$/ }), new HtmlWebpackPlugin({ template: `${top}/src/index.html`, inject: 'head', scriptLoading: 'defer', chunks: ['vendor', 'main'], title: pkg.description, minify: minimize }), new MiniCssExtractPlugin({ // Options similar to the same options in webpackOptions.output // both options are optional filename: !minimize ? '[name].css' : '[id].[contenthash].css', chunkFilename: !minimize ? '[name].css' : '[id].[contenthash].css', }), ]; if (useStats) { const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; plugins.push( new BundleAnalyzerPlugin() ) } if (minimize) { plugins.unshift( new CleanWebpackPlugin() ) devtool = false; const bannerText = require('corifeus-builder').utils.license(); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); minimizer = [ new CssMinimizerPlugin(), new TerserPlugin({ parallel: true, extractComments: { condition: /^\**!|@preserve|@license|@cc_on/, filename: function (fileOptions) { return `${fileOptions.filename}.LICENSE.txt`; }, banner: function (webpackBanner) { return ` ${bannerText} For more information about all licenses, please see ${webpackBanner} `; } }, terserOptions: { compress: { warnings: false }, ecma: config.ecma, // todo found out if mangle use or not // mangle: false === keep function names // mangle: true === drop function names // for mangle true we are using angularjs-annotate with babel mangle: true, }, }), ] plugins.push( new webpack.BannerPlugin({ banner: bannerText, include: /\.css$/, exclude: /\.ts$|\.js$/, // hash:[hash], chunkhash:[chunkhash], name:[name], filebase:[filebase], query:[query], file:[file] }) ) /* https://webpack.js.org/guides/build-performance/#source-maps plugins.push( new webpack.SourceMapDevToolPlugin({ filename: 'sourcemaps/[file].map', append: '\n//# sourceMappingURL=./[url]' }) ) */ } else { plugins.push( new webpack.HotModuleReplacementPlugin() ) } const rules = [ { test: /\.js$/, enforce: 'pre', use: ['source-map-loader'], }, { test: /\.(scss|css)$/, // exclude: [`${cwd}/src/assets/ngivr.scss`], use: [ { loader: MiniCssExtractPlugin.loader, options: { }, }, 'css-loader', 'sass-loader', ], }, { test: /\.html$/i, use: [{ loader: 'html-loader', options: { minimize: minimize, esModule: false, }, }] }, { test: /\.(png|jpe?g|gif|ico)$/, type: 'asset/resource', }, { test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource', }, { test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource', }, { test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource', }, { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource', }, { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource', }, ] let optimization = { minimize: minimize, minimizer: minimizer, /* */ } if (minimize) { /* rules.push({ test: /\.js$/, loader: 'webpack-remove-debug' }) */ rules.push( { test: /\.js$/, exclude: /node_modules/, use: { loader: "babel-loader?cacheDirectory" } }) } else { optimization = Object.assign(optimization, { runtimeChunk: 'single', splitChunks: { cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendor-modules', chunks: 'all', }, }, }, }) } const webpackConfig = { // watch: true, devtool: devtool, entry: entry, output: { path: buildDir, filename: `${filenamePrefix}.js`, // chunkFilename: `${filenamePrefix}.js`, // publicPath: '{{ app.url_subdir }}/webpack/', publicPath: ``, assetModuleFilename: 'assets/[hash][ext]', }, module: { rules: rules }, optimization: optimization, plugins: plugins, mode: mode, devServer: { static: { directory: './src/public', staticOptions: {}, publicPath: "/", serveIndex: true, watch: true, }, host: '0.0.0.0', historyApiFallback: { rewrites: [ {from: /.*\..*/, to: '/index.html'} ] }, hot: true, // hotOnly: true, }, } webpackConfig.ignoreWarnings = [/Failed to parse source map/]; module.exports = webpackConfig src/core/000077500000000000000000000000001517671130100125775ustar00rootroot00000000000000src/core/api.js000066400000000000000000000004341517671130100137070ustar00rootroot00000000000000global.p3xr.api = { host: undefined, } const apiUrl = new URL(location.toString()) if (global.p3xrDevMode === true && apiUrl.port === "8080") { global.p3xr.api.host = `http://${apiUrl.hostname}:7843` } else { global.p3xr.api.host = `${apiUrl.protocol}//${apiUrl.host}` } src/core/clipboard.js000066400000000000000000000003431517671130100150740ustar00rootroot00000000000000global.p3xr.clipboard = async (opts) => { try { await navigator.clipboard.writeText(opts.value); return true; } catch (err) { console.error("Failed to copy:", err); return false; } };src/core/clone.js000066400000000000000000000015601517671130100142370ustar00rootroot00000000000000const isObject = require('lodash/isObject'); const transform = require('lodash/transform'); function removeHashKeys(data) { if (data instanceof ArrayBuffer) { const clone = new ArrayBuffer(data.byteLength); new Uint8Array(clone).set(new Uint8Array(data)); return clone; } // Check explicitly for null and array to prevent treating them as objects if (Array.isArray(data)) { return data.map(item => removeHashKeys(item)); } else if (isObject(data) && !Array.isArray(data) && data !== null && typeof data !== 'string') { return transform(data, (result, value, key) => { if (key !== '$$hashKey') { result[key] = isObject(value) ? removeHashKeys(value) : value; } }); } else { return data; } } p3xr.clone = (value) => { return removeHashKeys(value); }; src/core/dom.js000066400000000000000000000046121517671130100137170ustar00rootroot00000000000000// https://www.google.hu/search?q=javascript+vanilla+position&oq=javascript+vanilla+position&aqs=chrome..69i57.3908j0j7&sourceid=chrome&ie=UTF-8 // https://www.kirupa.com/html5/get_element_position_using_javascript.htm const dom = {} dom.getPosition = function getPosition(el) { let leftPos = 0; let topPos = 0; if (el === undefined) { return { left: 0, top: 0, width: 0, height: 0, } } const style = el.currentStyle || window.getComputedStyle(el); const width = el.offsetWidth // or use style.width const marginSide = parseFloat(style.marginLeft) + parseFloat(style.marginRight) const paddingSide = parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) const borderSide = parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth) const height = el.offsetHeight // or use style.width const marginHorizontal = parseFloat(style.marginTop) + parseFloat(style.marginBottom) const paddingHorizontal = parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) const borderHorizontal = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth) const result = { width: width + marginSide + paddingSide + borderSide, height: height + marginHorizontal + paddingHorizontal + borderHorizontal } while (el) { if (el.tagName === "BODY") { // deal with browser quirks with body/window/document and page scroll const leftScroll = el.scrollLeft || document.documentElement.scrollLeft; const topScroll = el.scrollTop || document.documentElement.scrollTop; leftPos += (el.offsetLeft - leftScroll + el.clientLeft); topPos += (el.offsetTop - topScroll + el.clientTop); } else { // for all other non-BODY elements leftPos += (el.offsetLeft - el.scrollLeft + el.clientLeft); topPos += (el.offsetTop - el.scrollTop + el.clientTop); } el = el.offsetParent; } result.left = leftPos result.top = topPos return result; } /* // deal with the page getting resized or scrolled window.addEventListener("scroll", updatePosition, false); window.addEventListener("resize", updatePosition, false); function updatePosition() { // add your code to update the position when your browser // is resized or scrolled } */ p3xr.dom = domsrc/core/is-bot.js000066400000000000000000000015151517671130100143340ustar00rootroot00000000000000const pattern = new RegExp('spider|bot|yahoo|bing|google|yandex|lynx|curl|embedly|quora|outbrain|pinterest|vkShare|W3C_Validator|crawl|borg|slurp|archiver|netresearch|lycos|scooter|altavista|teoma|oegp|charlotte|http client|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|semanticdiscovery|snappy|speedy|voila|vortex|voyager|zao|zeal|dataparksearch|findlinks|browsermob|httpmonitor|bingpreview|pagepeeker|webthumb|url2png|zooshot|gomeza|google sketchup|read later|pingdom|facebook|rackspace|scan|link|ezine|preview|dig|tarantula|urllib|jakarta|wget|rget|monitor|libwww|moozilla|seer|spice|snoopy|feedfetcher|wordpress|java|netfront|archive|xenu|feed|appmanager|covario|perl|host|lwp|page speed|ptst|digext|nutch|sleuth|yottaamonitor|bubing|corifeus', 'i'); global.p3xr.isBot = () => { return pattern.test(navigator.userAgent); }; src/core/next-id.js000066400000000000000000000010611517671130100145030ustar00rootroot00000000000000let currentId = 0 let currentIdTime = Date.now() global.p3xr.nextId = () => { const now = Date.now(); if (currentIdTime !== now) { currentId = 0; currentIdTime = now } const comingId = ++currentId; const randomHex = global.p3xr.random().reverse().padStart(15, '0'); const timeHex = currentIdTime.toString(16).padStart(12, '0').reverse() const comingIdHex = comingId.toString(16).padStart(3, '0').reverse(); const newId = `P3Xid${timeHex}${comingIdHex}${randomHex}`; //console.log(newId) return newId } src/core/node-inview-recursive.js000066400000000000000000000017001517671130100173640ustar00rootroot00000000000000const recursive = (opts) => { const { node, status, nodeCallback } = opts node.$inview = status if (nodeCallback) { nodeCallback({ node: node, }) } for (let child of opts.node.children) { child.$inview = status if (nodeCallback) { nodeCallback({ node: child, }) } if (child.children.length > 0) { recursive({ node: child, status: opts.status, nodeCallback: nodeCallback, }) } } } module.exports.recursive = (opts) => { let { status, nodes, nodeCallback } = opts if (status === undefined) { status = false } if (!Array.isArray(nodes)) { nodes = [ nodes ] } for (let node of nodes) { recursive({ node: node, status: status, nodeCallback: nodeCallback, }) } } src/core/random.js000066400000000000000000000002211517671130100144100ustar00rootroot00000000000000global.p3xr.random = () => { return (Math.floor(Math.random() * (99999999999999999 - 10000000000000000)) + 10000000000000000).toString(16) } src/core/settings.js000066400000000000000000000067641517671130100150120ustar00rootroot00000000000000const cookieExpiry = new Date() cookieExpiry.setFullYear(cookieExpiry.getFullYear() + 5) const prettyBytes = require('pretty-bytes') p3xr.settings = { prettyBytes: (value) => { return prettyBytes(value, { locale: p3xr.settings.language.current }) }, getJSONEditorLanguage: () => { // en , zn let language switch(p3xr.settings.language.current) { case 'ru': language = 'ru' break; case 'zn': language = 'zh-CN' break; default: language = 'en' break; } return language }, getHumanizeDurationLanguage: () => { let language switch(p3xr.settings.language.current) { case 'zn': language = 'zh_CN' break; case 'ru': language = 'ru' break; default: language = 'en' break; } return language }, handleConnectionIsClosed: (error, $rootScope) => { if (error?.message === 'Connection is closed.') { $rootScope.$broadcast('p3xr-disconnect') return true } return false }, maxLightKeysCount: 110000, // maxLightKeysCount: 1, resizeMinWidth: 350, socket: { timeout: 300000, }, toast: { timeout: 5000, position: 'bottom right', }, debounce: 100, debounceSearch: 2000, cookieExpiry: cookieExpiry, connection: { cookieNameCurrentDatabase: 'p3xr-main-current-database', getCookieNameCurrentDatabase: (id) => { return p3xr.settings.connection.cookieNameCurrentDatabase + '-' + id } }, tree: { cookieName: 'p3xr-main-treecontrol-divider', defaultDivider: ':', }, redisTreeDivider: ':', animation: 0, animationSettings: { default: 0, cookieName: 'p3xr-animation-settings', }, jsonFormat: 4, googleAnalytics: 'G-8M2CK7993T', jsonFormatSettings: { default: 4, cookieName: 'p3xr-json-format', }, paging: { default: 250, cookieName: 'p3xr-main-treecontrol-page-size' }, keyPage: { default: 5, cookieName: 'p3xr-main-key-page-size', }, keyPageCount: 5, language: { momentDateMap: { en: 'en', zn: 'zh-cn', ru: 'ru', }, defaultLanguage: 'en', current: undefined, cookieName: 'p3xr-language', translation: {} }, pageCount: 50, maxValueDisplay: 1024, maxValueAsBuffer: 1000 * 256, maxValueDisplaySetting: { default: 1024, cookieName: 'p3xr-main-treecontrol-max-value-display' }, maxKeys: 1000, maxKeysSettings: { default: 1000, max: 100000, cookieName: 'p3xr-max-keys' }, keySortInfo: { default: true, cookieName: 'p3xr-main-treecontrol-key-sort', }, keysSort: true, searchClientSide: false, searchInfoClientSide: { default: false, cookieName: 'p3xr-main-treecontrol-search-client-mode' }, searchStartsWith: false, searchInfoStartsWith: { default: false, cookieName: 'p3xr-main-treecontrol-search-starts-with' }, connectInfo: { cookieName: 'p3xr-layout-connect', } } src/core/sort.js000066400000000000000000000014311517671130100141230ustar00rootroot00000000000000p3xr.sort = { naturalCompareDocument: () => { return (a, b) => { const regexTemplate = /(\d+)|(\D+)/g; const ax = [], bx = []; a.replace(regexTemplate, function (_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) }); b.replace(regexTemplate, function (_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) }); while (ax.length && bx.length) { const an = ax.shift(); const bn = bx.shift(); const nn = (parseFloat(an[0]) - parseFloat(bn[0])) || an[1].localeCompare(bn[1]); if (nn) { return nn; } } return ax.length - bx.length; } } } src/core/state.js000066400000000000000000000015561517671130100142640ustar00rootroot00000000000000p3xr.state = { treeDividers: [], donated: false, theme: undefined, connection: undefined, currentDatabase: undefined, redisChanged: false, databaseIndexes: [0], connections: [], redisConnections: {}, keys: [], cfg: undefined, version: undefined, keysInfo: undefined, failed: false, keysRaw: [], search: '', commands: [], reducedFunctions: false, dbsize: undefined, monitor: false, //infoObject: undefined, monitorPattern: '*', } Object.defineProperty(p3xr.state, 'themeLayout', { get: () => { return p3xr.state.theme + 'Layout' } }) Object.defineProperty(p3xr.state, 'themeCommon', { get: () => { return p3xr.state.theme + 'Common' } }) p3xr.connectionsReset = () => { p3xr.state.connections = { list: [] } } p3xr.connectionsReset() src/core/strings.js000066400000000000000000000001451517671130100146260ustar00rootroot00000000000000p3xr.translations = { en: require('../strings/en/strings') } p3xr.strings = p3xr.translations.en src/decorate/000077500000000000000000000000001517671130100134355ustar00rootroot00000000000000src/decorate/string.js000066400000000000000000000002071517671130100153000ustar00rootroot00000000000000if (!String.prototype.reverse) { String.prototype.reverse = function () { return this.split('').reverse().join('') } } src/editor.js000066400000000000000000000015061517671130100134750ustar00rootroot00000000000000//global.ace = require('ace-builds') //require('ace-builds/webpack-resolver') //ace.config.setModuleUrl('ace/mode/json_worker', require('file-loader?esModule=false!../node_modules/ace-builds/src-noconflict/worker-json.js')) //require('ace-builds/src-noconflict/mode-json') //require('ace-builds/src-noconflict/ext-searchbox') //require('ace-builds/src-noconflict/theme-twilight') //require('ace-builds/src-noconflict/theme-github') require('jsoneditor/dist/jsoneditor.css') global.JSONEditor = require('jsoneditor/dist/jsoneditor.js') ace.config.setModuleUrl('ace/theme/twilight', require('ace-builds/src-noconflict/theme-twilight.js')) //ace.config.setModuleUrl('ace/ext/prompt', require('ace-builds/src-noconflict/ext-prompt.js')) //ace.config.setModuleUrl('ace/theme/github', require('ace-builds/src-noconflict/theme-tomorrow.js')) src/index.html000066400000000000000000000112701517671130100136450ustar00rootroot00000000000000 P3X Redis UI
src/injector.scss000066400000000000000000000016471517671130100143710ustar00rootroot00000000000000//injector-sass-start @use "./angular/dialog/p3xr-dialog-connection.scss"; @use "./angular/dialog/p3xr-dialog-json-editor.scss"; @use "./angular/dialog/p3xr-dialog-json-view.scss"; @use "./angular/directive/p3xr-monitor.input.scss"; @use "./angular/layout/p3xr-layout.scss"; @use "./angular/pages/main/key/p3xr-main-key-list.scss"; @use "./angular/pages/main/key/p3xr-main-key-string.scss"; @use "./angular/pages/main/p3xr-main-key.scss"; @use "./angular/pages/main/p3xr-main-statistics.scss"; @use "./angular/pages/main/p3xr-main-treecontrol-controls.scss"; @use "./angular/pages/main/p3xr-main-treecontrol.scss"; @use "./angular/pages/p3xr-console.scss"; @use "./angular/pages/p3xr-main.scss"; @use "./angular/pages/p3xr-settings.scss"; @use "./angular/provider/p3xr-theme.scss"; @use "./angular/ui/p3xr-accordion.scss"; @use "./angular/ui/p3xr-input.scss"; @use "./jquery/overlay.scss"; @use "./scss/vars.scss"; //injector-sass-end src/jquery/000077500000000000000000000000001517671130100131665ustar00rootroot00000000000000src/jquery/overlay.js000066400000000000000000000026461517671130100152150ustar00rootroot00000000000000let counter = 0 let isShown = false p3xr.ui.overlay = new function () { const template = (options = {}) => { return `
${options.hasOwnProperty('message') ? "

" : ''} ${options.hasOwnProperty('message') ? options.message : ''}
` } this.show = (options = {}) => { this.hide() //console.warn('p3xr.ui.overlay show') $body.append(template(options)) isShown = true } this.hide = () => { //console.warn('p3xr.ui.overlay hide') isShown = false $body.find('#p3xr-overlay').remove() } } const disableEscapeKey = () => { // Use vanilla JS to capture the event in the capturing phase document.addEventListener('keydown', interceptEscapeKey, true); // true for capture phase }; const enableEscapeKey = () => { document.removeEventListener('keydown', interceptEscapeKey, true); }; const interceptEscapeKey = (event) => { //console.log('interceptEscapeKey', event, event.key, event.keyCode, event.which, event.code ) if (event.key === 'Escape' && isShown === true) { event.stopPropagation(); // Prevent further propagation in the capture phase event.preventDefault(); // Prevent the default escape action } }; disableEscapeKey();src/jquery/overlay.scss000066400000000000000000000010171517671130100155430ustar00rootroot00000000000000#p3xr-overlay { font-size: 125%; // Move this declaration above the nested rule position: fixed; left: 0; top: 0; width: 100vw; height: 100vh; text-align: center; /*Flexbox*/ display: flex; flex-direction: column; align-items: center; align-content: center; justify-content: center; background-color: rgba(0, 0, 0, 0.9); z-index: 99999; color: rgba(128, 128, 128, 0.5); i { font-size: 400% !important; } #p3xr-overlay-info { } } src/main-development.js000066400000000000000000000003741517671130100154550ustar00rootroot00000000000000global.p3xrDevMode = true console.log('-------------------------------------') console.log(' development mode ') console.log('-------------------------------------') if (module.hot) { module.hot.accept() } require('./main') src/main.js000066400000000000000000000015251517671130100131340ustar00rootroot00000000000000require('./scss/index.scss') // fontawesome //require('@fortawesome/fontawesome-free/js/all') require('./decorate/string') global.p3xr = global.p3xr || {} p3xr.theme = { dark: undefined, light: undefined, } p3xr.ui = { overlay: undefined, htmlEncode: global.htmlEncode } require('./core/settings') require('./core/strings') require('./core/random') require('./core/is-bot') require('./core/next-id') require('./core/api') require('./core/state') require('./core/dom') require('./core/sort') require('./core/clipboard') require('./core/clone') require('./jquery/overlay') p3xr.settings.language.translation['en'] = require('./strings/en/strings') p3xr.settings.language.translation['zn'] = require('./strings/zn/strings') p3xr.settings.language.translation['ru'] = require('./strings/ru/strings') require('./angular/boot'); src/public/000077500000000000000000000000001517671130100131255ustar00rootroot00000000000000src/public/images/000077500000000000000000000000001517671130100143725ustar00rootroot00000000000000src/public/images/256x256.png000066400000000000000000000303271517671130100160460ustar00rootroot00000000000000‰PNG  IHDR\r¨fbKGD ½§“ pHYs Χ ΧB(›xtIMEβ  ) Fmœ‰ IDATxΪνyœ]U•οΏϋœsoU₯R•š‡Ld¬$-±eAY±QP»AΓ φ{m·6Ÿξχžφ³QA…VhτΩΚ Π‚ΆaTB’J’Τœš“ͺΊχμ½ίηήJ%d¨$uοέηœύύ|όΘP€ΞΩgο΅Χ^{­ί‹Εb±X,‹Εb±X,‹Εb±X,‹Εb±X,‹Εb±X,‹Εb±X,‹Εb±X,‹Εb±X,‹Εb±X,‹Εb±X,…@Ψ!ˆ7|οβκτ¨Σ’Ξ4S ’΅οΰτωZ΅Vϊbγζζ”-k,!ζωE‹ΚœRο}Zr‚Ώp0}iΝ&ΝZˆη‘sΛΝkνˆZ`1œ[z€β#}6šS€δ$ύΡΫ4όF ­ώ§=ϋֈmk,&,ϊχ}ΌRςγ .ζδαWφ)Τϊέ)Ώ9aυκ΄ύ ΦXςιή/;r©λˆkΝeΐΒ>Κv‘υύΎ#~πώ—›_΅_ΖKŽψύqΗΥz:}Ή@_₯a™ΈZΓR$8ν•Wϊμ³ΐr˜ψσρΗOKΙ‘Λ€Oο‹Ψλ)O#τ).hω / Ϋ/n @μΡΰΌxά’Σ΅r>…ΰ"`J ^»x­οXώκΪ—ν,° vόqΩβ&_x— τ§ΙΟ՝©¬ΥšϋΌ"yχ‰zc»ΦD–O\P.G‹.p%°άŽΘn kΔ#ά}+―N€ΆCb @$\ό?.[Ί\ > ”ΪQ9 5⁄Ο=ο}ύυ-v8¬XΆl†Ζ+!Έ˜gG䐐 žuΧhEέ£§=ϋ¬o‡Δci^Ί49ΰr–vΔ /ΌΙώ΅η}ŒDE]Oό‚tOOœ†·U~μϋΞ]ον΅ΝvΆY`ΞnόΡ‹…RWjΝU@].—WVΖq wJ)=Ώ{†ΞG¦οΕ@©Ό½o²¦–dc#C―­)ΔpΧ‰¨»¦₯ΕcΆlΩ€‚πό’EeΞο΄Έτσω»―ψ4snόςΨί§:;ιzςq:~ΡmΫr³θλλ©>γL*ς”Ÿπ^ΦίπEzŸϋ}‘?C/πΉ}ωk―½fg₯59'¨ΌSW—S ς Ž}δqŠgΞάcoTτχιxψητ<ϋ4:}xEzE T~ΥgžEΩ²cAΣg΄­•—Ού0:^ΗX άUͺάϋ—­Y³ΓΞTk&ηŽ>ΊuΥ%ΐ΅ΐ1&½?0ΐφίόšφŸ=ΐ΍'Ύθ§Ο κΤΣή΅θΗσφΚ[hύαLύ\ΐO…RwžΌfέKvφZpHŒeθE8F= γpΜO~Jι’#ψ£;Φ­₯γα‡θϊε¨αwgΰϜIε_ž,ϊcΫ<•β₯³?–δZ­ΉOψ|yssΥ֐?uΤ¬΄«/‚ΏŽ0ωY+–Ώ%ίΉsΒ?/‡†θϊεt>ϊ0ZJͺ?x&Υό%σζOψΟθzβ΄|υ+a³ζ#ρΈς“^^χTœ“Œ¬Ψ Ώ\° ¨bjςt΅ηžOь‘Ÿ˜Φi͏ŠΌτ='¬ήΠm ΐ$`Bυ](?ώ*NZN’¦–DU‰ͺ*’5΅xU•8Ι’PΏ›₯ηιίυψcτύρΕΌκ@ΠΕΐΤγP€gŽ=Ά’ˆτ₯1΄VΞq§N%9fͺIΤԌύu²¦―²ŠdM ‰ͺjœβb£ίeη¦ΆύΰnΆϊWqŒ₯oh¬ΨCb ΛΔŒΕ”)»ΌˆΚ*’΅Α_{•UL{οI”Μ™“›]>•"έέEͺ³“TW'©.Rν€·w3ΪΎλՈν$Ž!ϊ†Ζ€9f¦rεUh>CΌυρsBρμ#XφΠ£8Ιƒk)θ ‹»«“Tw7©ΞΞΜίw‘κξ"έΥΙHkkά\ϋΙΩμ[ΠβyoΎS0{4ΌΜ‰x¦e³WάΐŒ«>;α]ύ₯œIz»νΡ‘P πp_Ύ’Œ j^ ,)τ¨Χ₯ό„χRuκ©L=z₯M‹ VD£₯dxσ&ΧΌJοsΏ£…P)3<§€$64ξφΟΫψ o}σΖΜς”ΦτHM―©.‘n’`o^Αό’‰πxΫ…Φχ ΧΉη€—^_“s`Z²Ž“L2νδεTvU§žflάΉ“ΎηΟφ§KίsΏGξ,lIyυgτo·ξv¦~ε2όΦ[…>Ϊ3 n·Ÿ,0ζ80/™dqI’/DaΓ j’ψΣQGΝ’žϊŒF\…RΩΙΪ:.ϋu\”5œI5;†θzό1ΪΈŸ‘-ομ9–|ηN*–ašώ?ΎΐΪΏωλžν5½RΣ§4ώ$dΝw₯Rl9ό–!υ z΄ΰ‡ Vν-ΙhΒoab²ŽW^ΞΜΟ}žϊK?ŽSξb-%]?Ζ–οέNͺ3κΤΕGΜaΩƒΰ$“¬uτ<ύT~²Z3˜ κ Mr2αd€,€ΩΙ‹‹“ΜH†&g-%΄ΎcD$ι΄W^ι›°ψΓ²e3ςZПκMy›κ3Οbξψ ‰κj’„ά1ΔΫ+o₯㑟εύwΟώΒuԞσQ^:χ¬Όι +MτKM’ˆ'ی§Βsh*NT”€Ψ1ί+ΠΠ-_Zώrσ}ϋ5ΟwΤ Bs½@_ŠI:zŽΓΧίΘτ+$ΚtκI6έό΅Ό βbͺ?ψ!ΊžψEnœ"ω=R1œ‡ΒΨ\€±±Ž( Ό‚ιIΟψμ6‘Ε·N~υυ›ήυœΟΏgΙIŽrΎ|ΐΔŸχ_£ώβK‰½Ώ{†υ_Ί>2%³ωΨν eΖ3ΝuYT’ ©(A±Α©ΗZλό…5|όρΣ¬―ΊSh± C«πjΟϋ³―ύ"q‘dΞ\΄T ¬ώshίA}R³ΝΧtI͈οΖN)ιυσgDG΅f[Κ§y8ET A™λη8BΜhκi₯Ÿζλ²Έ.οωΥoHΦΦ'Tj”Υ:ΏΏίξφ!ρφFΉλptI‹K’Ζ‚΄F:ΟΏtΆVϊY“?@Ω²γb·ψ!P|Bρ¬θ•š)Ι¦΄’Χ€Εo5 —c¦±°8a”Π§΄τΙ·γWV²Ύ>Ά¨¨±ΡψgΤΊ•’GAΎΈ“M+^R’€Ϊΐ"_kZSώ¨§…8GhσΏXΊ»+Ά“)Υe~Χj! ήu¨sƒŸ ξυΡρ²aHς £’”/₯TIQ²š^y™to/‰ΚΚXM(-%½Ο=šηΐ4G0Ν™Ϊ|±[m~”wϋ0νTšM)ɈΪιφΓρet:ΝΦ;Ύ»έΏυΎ’ήήΚgOA+X”p˜“p™ζˆ‚œEަxMΒε”².―.γ”²γgZ²vΔΟ.~ΌΆ΄€Β”Ίζ{νύŒ²c£ζμsb±ψϋϋOΡ0zB0UΐTΗΑΧΠ—IJ…Π+˜βΕAε!Uš·Σ’ώ½g< ¬υi*φ˜jz*£Φ΄|νP©uη_ιΕίϋάοΩψχ_F₯R‘z/O@+¨vέ1ΝΎ₯1ΩŒ—;’(AXτƒ€Φ΄ϊšΞ΄άηmŒXΩΤ€³/9#α艂wœυ^Μ7ά„;5ŔP©QΆήyΫ~xOl$ΆΣϊUPοŸΚAΠ°+bΣπΑμnΏ€$IYxdΓ@IW[Σ γ90f²Lus“n( ’uuΜΎv5ηž‡pœp―­ιyφiή^ykjC@ δΫ§*¨Μ·ΏΫΟIzˆπ”ύ’€^_њVŒLlμήm!¨χ 7Κ©%sζΠψΙOQ{ΞGqJΒΥ@H§Σlνϊγ±cέZ,χšνROt2–(uζ%XZ’€ΤuB7V]Ύ’#­ΦƒΪ»Θβ΅žΓτ„Kb„xeeTžvΥ§ŸΑ΄“—ΫPSKΙΐŸDΟΣO±ύ©ί†6ʟ/7­x_ΐf$,,N„n·Ξψ°έ—΄ϊ‡|ΝΊ%! 1αRγ9‘ΡRw§L‘β}ο§ς§QvΜ1Ϛ]ΠηI΅·3ψΪ«τ>χ{zlθrϋ͘πšΕA{ΫΣ)6Ž3Σ\‡E%I%( αΡ1₯5Ύ¦+-9Μ§‰€ρ³Ζshπ’NΈ¬₯7­‚©G¨u4%GA²‘ρ {δpwχ}R*πλ―1Τό:C―ΏF*Ζ™Œ…φ Άg<€0ΥλJΣα+Άϋj²nMϊʌ”Ls¦{N(ςφG²¦6ol Yί@’’α%‚~EE8EEΈ₯SŽƒ?8€N§‘Γ»ϊψ}½€ΊΊmke΄­•TW—m™g― O‚#{™ΙΕBDӐpHŠπΝU Κ`αχΙIŸW‡fΖSζ:Τ{°=Ύb†pŠ¦Ο dΞ\ŠηΞ₯δˆ9 ΎΌš'Ÿ(˜WΠ+5ZSξ*\‡)!”Ψξ+:r―†m² ΐa+JΕ T9‚:Ο‘Ζslkίˆα••Q4sΕ3g1eώ|JζΝ§xζ,JζΞΓ).ϋΉ‘­[yϋ–oμ9KA‰#˜β±NkM§―ιτ%ωȟ΄΅:ͺ4[R’m)IηPη9”8Φ'Υq¨Ά.³ΈgR2SζΝ£hΖ,ŠgΜ8pr˜Rlϊ§(xƒ°²SiΪ}E――ςͺ‘0ι›΅:}E§―(su —J{<έn~°lϋΡ½ Ό΄ΪπAžοϋ₯’ΓW HD!§ήϊ  Žϊ$Τz.užCΒZ‚άŸΝ]—’ΖΖ`χήs7Ÿ9sςΟή›7±υŽοځŸθω^kΆϋŠ6ΏπQy9§5΄¦%miI΅ §ΨγΑαΌςrŠfΜ|χn>o~ή₯h)iωκWŒιuh2#:(Ινφ¦θ<η5^§n_Ρν+¦:"Έ=π;7&΄›οZδ3sΆ›,[οό.Ck›ν‡2ΨΝ7ƌgHi†R’DZQν κ.Ι;&μζˎukΩvο=v•οΝΝzό`α+s‹ ~c—Φšv?Ht(s3^MŸΐτέό`P©-_ύ ΪχνjΗ¨tϊŠ.©Ίy, ΐxWi@j€€XHj3΅‘Θ)‚ͺΣΟΰˆλn,xMΒdρΞ·oc离βΗy΄iI"TB¨‡ ˜γuC΅ΤD"§ΐq˜φ'RΡΕTqfh5 _y™Χ?ϋιΨ§£΅Ž\6GΤ‚†ΙΪ:jΟύ( —]žχF©=Ο<Εϊ―‹μ’W@Ÿ ΞχC*²Η›n­υί\ΏqγΓ{₯YΉpα=ρ™(ΎuΤ‚†"‘ κΤΣσ4LχφςκΕη“ξι‰άάπ΅¦[κCQΣ ΈG(υ+ZZή₯K'n§bαΒo !κ(D1hX2g.υ—~œΊσ/ΐ2%'ΏcύMΧΣσΤo#5vf²υΆK=i½ ε7¬Ψ°αΥύ­‹1n[΄θ‘υ@€[π;‚zWPν9Έ8Έ₯S©ωπΩ4\v9S.œ΄?·σ±GΩtσW£qτΝΈωνΡvσ³Ό|εΊ ΘΖΈ·Ν[/’Ι[Πϊ{ϋχ‘ς 2™†Q*O.]r$ŸΌ‚š³ΞFx‡~'’κμδΥK>†?0nΧ Ϊϋ\S$Dg±ΦίxkΓ†•73±ψε>gύmMM!ΰkΐΉΔ€lΠ°Ϊ8π Υ5ԝw>υ—~œ’†Ζƒά.5λΎπ7τύαΏBϋώ&Φή犩Ž 1±λh«αy΄Έ3U9τσӞ}kδ @–o/Zτ>₯υώ2†ΐΛτ΄―KΈE!hθ8TΌ/iόΔ'™φή“&Τψ΅ύ§χσζΏ~=”n~%΄\ψ3.εϋ–ζοt+OzΉyν!€1CΠΤtΆ†›4œCΕ aρs¨;κ/ΌoΪ΄½οœ[·²ζ² C%ξ–ΪϋΙΐ*=‡Ζƒ+ΣΐΓ8όύς—š[Ϊ<όَΟη\5¬τΜ_Ρ-Ul2B‹Ηεx‘¨?(’ϊCgΡψWŸ’tΡβ]B)šϊͺЈ{ŽΥήΗΐΝwT{. ž θЏ¨)ເω—εΝΝ=4uάΡ' -―q!{h€΅:’ϊ*/ϊεFx Φ_t ΅ηžGΫύχρΞ·WΜa­½?Š2y“ά—σ‘Τ'―Yχ’Ψ‹― ώpά‹„ζ&ΰΔ‰Έ_yθ`bήΒ‰\Π°98ˆJ₯Œ=ίχψŠΆ΄b8g:nυΈZžΌΫŸύό{–œδ(gπ‡ς'HM—ΛΌΛ5 ‚†υ šΖXν}ž:εΤΓ*]Aƒηζ§η¦ΰ‘±Ξ Λ–ήŒΰ+pψžΖHζlΦ]΄Ι:T:AUβ4+y~Ψ fάόΎˆΤήοO@m¦›V>˜J͐Р^8vιO€Λ'έmΣ°]*Ϊc⢍?·ΥE(h˜O7Ώ_*Ϊ|ΝP ρŠΤeΚΨέόώA₯€xaΩ΄ΰ–|XτΞ©©ŒKWŸp™j½‚}οDΐφ΄ŒEΆžIΧΛRr§§_ΜKPΓ”yŒjθJKΊdτo4Π#5=§ΤΤ»Užcϋ$fHiθΘΜρΉΰ A­+¨K8‡s7i΄₯ύΎςΕσΗ.UNrώ5Πύμ½N„WΠγF(;²ΥxΎŠΌ7˜Ν!©u……g:³ψ·₯%ΐ 7 •(„+"€*WPεzμPANA Κ3‘ZΣα `Zζͺ§άΎ%0½EΦd3Υ Ž~U˜’H“ΦπfJΏ+Ύ’½­)Eyqaο²KAieΦ8†Ρˆ‚ <5ΘY/“₯@Α \’ςDΪ}ΕH t³ΝoMλcΡ/5›Suε kΝ¦”dA‘Wπ³©+υ^AŒQNΑ°†·R’-iI•kζ:םIά‰Ί1/ΑΩήDQΪ [R>}ϋπΊ<„֏Jζ%σ{ΉΏγAΉ+(w=fŽ©·¨Θ©³Ύϋx]™ξΙε ήs™²γΜ$ξ΄ϋκ]»MTέόΚάeλΦQ³ΥWt¦Υ~…Ζ Φ TΌ>’™±dΖXWG0+ι276ACqΩϊ₯?¦^Tγ9F§ϋ:’Ρ-η€›S•΄«3±DiEϋεΜ½=­Ζ›)I―TΜNΊF\Wμ6π1 Ž(ΝΫJ³ΥΧ™Ϋ3Ό΄] ?jvψ*YŸ užC­η’0Πϋ@GϊΰS¦χzdι“šώaŸΟaFΒΌŽcΠ0{{Πε+ͺΌΒW$¦4΄§%]7Β₯™¬ΞjCσ7Χ{ϋsC»|E―¨K84&\γ"Τq *‚ΰΪ8Γ47“3wψP‘Ϋ©†ŠΑŒjM[:˜‡σ΄”‰iE΅ηАp(6μ,ϊ ‘ΤtGό, Aυε€”9*¨ΟQ²‰τ€%RGZq'! Φs©σΜν,5Ωψ ›ƒ EK3 …€ GPαyζ‡Sˆ”šA©ι“*ςυ¦k;ŒI₯ΥdΟε~οP&›ΐRšQ+11Ώ=ŽAC­£Χ+%ΙTΧ‘T@‰#˜βбΧ.°JkFtpTš₯#Ÿ΄†,«u؞C±ΓΚ[Ψ‘‚μ’mι N`JΎσή,|ie††n©θŠI¦α T ξ7!P>Ξώ”―‰Όžήn>S{_λ9Fέrνξ}A‡/ιςs―§1)‰K£Z³%%ΩjΈf^B@cζw0†κEΩ]EΖθ}³dkοk –p+D€uR3΅ή‘.sυ ‡JG€ΙAC΄C¦aάƒ΄{« ‚μ…ˆUε,uyPiGεΈΘͺcdE‘Ψ=Σ°Λ—±¨V‹2.»²υŠ ­©kY&5©Ζ[r^»ΦК–΄₯e~a·ˆc¦a”ΘJ±™‹Ιxœ¦$Pε­xiΌ:N™#¨M8TΉffWΟ4μΙ΄šVΦ˜Š‰΅χ{ž{U ~4hΨ<*Hυbφx°E(ͺ3g΄€š+΅^Pˆ“ ΖIΣΠθσ½€*7ΘP-14EjθɈβŽκI΄|9­5ν™ @–o75-ΦπΟ.>ΠΟF° SJΣ!ƒ3l!τύ²wψφˆΔPΓW”“ΌZiΎ|ΚΖτmΒXIDAT«ΝΟLΨdyhι’ΟυIuσN₯gΒ %—1οAiržκΝj2₯Έ¦Θ±Ϊ{?ϊuB@{h’g~!Ύ΄ό₯ζ–ύ€?|"%G.nN€ ΞΉCυπqI`1=Σ0KΏ r ϊεδDΖ½¬ρ ΌŽd’ω]RG^νΨ‚7Ϋ=Μ$ͺ…ϊΔ)―¬ϋ₯ΨΛŸ’–#_Π°ΨλŽοgšrΆ§el”t…α’ηγwΒ~©θ•Š>©ι*1ιΚAΉ+˜ζ˜Y‘©’œ lB“^$₯>°ΫŸφΒ²#/ΥB|‹ &e³§ΪΣ’αe΄šήJjόχQA?Ώ*θώ“Φ™Y3' Ε"θ4Υu(6τ•tΖΝo‹‰Fc‹€4όFeŽ ¬h—:N§ύ>|AΐJΣ#%₯Ž EΠ°Œκ vΤAUW@΅ηΰ9‹)­y;3ή€πϊ€¦:OλYuœΟ‘Giš;bΰζνPš)ΙΦL£“[Sη‹!\#χΕΐ+,'i^ΘΌϊa ›Fόρ7vΪۚ–”»ωmάιd’η51SΗρ΅¦-­iO«Π”'OφΉ³_*Ϊ|ΝP tM k…ν-iŞϋ­—°1峨Θ+ˆuί‡―;#Μ0ƒ aVΣ°Dτ΅+πξS·“ΰ―ΓW‘―ΖΛv&6Ešn@iΆ€δ>ͺΐ©Y7β37ιRZ ‡v… ή \₯lΎ8dy kx+%Ω’–TΉζj ؞–΄Ζ ζS”ζbΘG”fk:ΘέcινΓ*0 —ι‰Β5ΰί‡ofφXFIΈiέΎ’ΜΤzw»=ΩĝŽU+ζΣ:jhOΛ ^g?ον隢¦%ύR1ΛU—±œ\zeϋ%—LNΟΆlΈη†‹Δ”βQ―Ώ7ΏΡ IσaˆΖlΤ^ άv(Ν#>ε`f’pΗ‚έ|>|qŽhx'#y^η9Τ~Xnv₯iΛLΎ(‡φLμLΌ3#Σ-υ!—χ[α: 5λ€O₯η0γjsAƒ†hΛHZU8‚FO‘\t¨»NΨ0±3ρ ΄fjo‡–ΈgΫ"υfΞ¦¦δ»Η2h¨5}RΣ'‘ΜUΤ{•¨Ρί™™|}.ό2²3±Φτ)Mλ$v—š°ΖΕψ|χ)Ž’Αn½γƒ†3”¦K*ΊΡΟ*”šA)3E$.υž“S·T}큷6K¨χ‚hΎ):Ω4ιˆšj±²©IΞ`Υz.υ ³Τr4Δ&h8ζ¦*=‡2GLNΠPk†2·½OΥ5Qvtœ¨iŽnSϊkέ¦upkО–Τd’LˆΔ1h( j—―pE ίUα JqPiΗΓJ3 4ƒR3 #ξIeΖΙ΄ŒΜ M:?G¬IΩΈ³™^Ύ’Μ 2*]3ϊςΕ2h˜iw΅]ξςJAIFήkόQΑך΄"ωΓZγΗΐaΚ6(mπ„15…J“žtΟ}PiGύ±Μ¨Χ1βΚd|Π°_Ζj &εΙ2³«Δε8΄/Jœ Oa΅cŽ›?Φ΄ΔW€ πyrvtΥAςV!ΣΜͺάVΈΞ˜zQ2 ㊩}!MiZ’σ؝ցv}·―(͜·ͺ ΉOc¦a\ΨU{o–›oZΣ’Όοw(Νζ”d«―¨sj=3$§γšiEŠ3I;&₯O›άθ΅ ·w)₯Ωͺ$­ι Ω’ΦsqΟβ4Œε↑iIA―οYΩ,Ÿ)ΛmJ]|\Λ“Γ„C ‘mZ υ@ˆz“Ώ³Si#λβw+OΞnlΠ°°Œέ0ΤM4ΙιYΣγΪέeλβ»|Eyζx`JNA‘Ψ=hΨεΛH§ΕšFΆφή”ω»²υΊ}Κ¦%&χ»«‹ί•οnƒ†q#[{ί`XOΖloΒPKέkέι…α9w₯›4œ t§%R3j―›δ˜‚²›WΑΪύ‚ΚΨφˆ4-ΡB<β…ιMz@CΒ₯>ΑXΠ0NP&‹μw5©('+qΦεGͺφ›%Ύu/¬O† aJkΊ}E‡―ρνρ`Ώ˜xαή„|δσ›7χ{@;δΆ5X.19h˜‚ι —Ζ6hΈŸσ}£AΧx θΛ\γE±w€f_ʏ]·iS €{vMM°< /7ͺ‘WΖ@"˜β`D+.APˆR“Ωα4DΎaκώ:D9Μ+ς¨ρ|£t&[oσh ¨›ŠζχΉgDˆKΎΌqcϋΨάόΞ₯SύtϊΐΡQ{Ϋ¬¬“IAΓ]žK6ΣP2[PœU96¨Gbφ§[ͺ(ηxmZ_·bγΖ'χΆ9qΫάΉυN2ωK­υ{’:¦ ΗК^€Fτφ Μ4z.Σ\³jο;|υ#ΩΰίΚS©o\υΦ[#ϋςNψζ1Η”&FFnpe”GΔ‚ZWP›p)6La{DH<§e$δ΅§:‚ sΌ/?/κŒ‹?ζ`χκtϊ―σ͎OwγΦ¦¦Ή°JΓ¬¨»€¦©ν:@ _Zi– ΧazΒ)x?‰]†ΥŒΪϋ<B럸ϋ―_x㍠ωφϊ…2q/7εQ7 A ZbX㍬«Ϊ‚γA™ι–cΐΒ7±φ>wƒ/vjΈ[ϊώΏ}iΣ¦-ϋέφΙ-K—V9ιτί X”Dέ˜4ά™iΒΡkXχΤdςŠ Xψ’]Ωz#ΡΟΘΤBά«η7¬[Χv¨ίο€άΤ4Γƒ©α* ”Pμκ]AMΒ5ͺ/_ZQλ_Tΐ3»π§β5…‘φ~iV ₯Ύ»’₯eΰpΏγ„Y΅`AΉvέ«Πϊ&`f +ΧΆ>αRbS 2Y†Rη5N`ZaVΆ('&Z ―ί-O₯ξΫWT?§ ΛΝK—&+||‚χL *Mg ΈΚ«vͺ ΈΓΧ™ i[Hƒ€‡ΞxJ(΅κ‹--O&7+ω°ΏδΚ¦¦S€œ3^05h8ͺ‘ΧWτJΕux…H(u¦9«Ÿ4"[/Σ"-CY{°ŸxP*υ―7Ά΄4ης(7)ά2ώΗu?'ΰj 2†ΐδ aZCŸ ΚVwͺΰ˜ π.Ŏ Μ”»‚2ΗΑ”WŠpQΞήΆϋNίKΓν7mΨНXΞ€²jΑ‚r-Δ§βZ`Q\ަ Η“Aq|ς›'‚™δΙdύޘI΅―AλΫ„Φ¬hiΝΧ/ΝιW_ΩΤtŠ€.³2ps…+5ž Φ5K¨2,ψ:ΨνcRB­€§suΎ/ΈΘrkSΣ<W ψk *.“ΩΤ ‘‰ŒhθLΛ8dλ h!~θΒm_\ΏώΝB>H^ηε½sζχ'“— Έ‰Vξ‹lΠ°.αΣ₯Ζ†”¦-ƒl=­7β8ίρ<οžk››‡Lx€‚ΝΖ•‹†RΧ ΔΗ0\œt2»Κu¨M8”Εψx Ψ•­ƒk<₯αΧ8ΞΚλήxγ? αζi²|gιιϋŸFλkγP€”%[ž\mPm|ΩΥ WG½`x@(΅rEKΛZ“7%#xάφ >’gp1Ι)πΤΊ΅ —’ˆΎqJC[Z²έWϋ½ŠŒ›…wωžχύ››{Βΰ•Ηm‹-Bλ«β”SΝΆ3MσpՁΠIg<ξο !VN_Ώώ‘K 3zΟωΧE‹ΚŠ΅ώπb4,P›‘ΞrCx<֚φ΄’[κ¨ηη:ŽσΝ/ΎρΖkaέxBΑΚΕ‹G©λ€‰8‚¬zQ]HŽ;€¦ΥEDΏ Έ+_Ωz֌#ŽACTΊ‚Ο₯Τ5ο“ *Mk:’η«5¬*)+ϋχΟ―^ŽΚά %q –:Aœ Κs ώΒR³-’ϊωγH xL*uλ --/Dqs =q “ΨΞkœ@kz2Ι;;£}‡ί‘α‡ Ύ}γ† Ϋ’μ]F†U ”kΗΉΈ82†ΐͺ½ά·FΡ°έWtϋ’T΄=ύB¬μρΌ‡nnnNΕαxIβ4,w•Ž r’:κϊZΣ'5έR1(#/£ύ++WlΨπ[bDδΟΝq –:‚JΟaŠ”8bBAj͐ HMΏqHΣνΧBόH€ΣίΊnσζwˆ!±IHkΠ0KBΐΗΑμ¦W ΅&M ͺ™ŽO»Βυρ½βΑΑοΎ΅u'1&–)·,X°Τuœk€+€2,q@ ψ…bΥuλΧ?c‡#Ζ ΛΈLΓkcμtˆ$ΐO΅·\Ώ~ύz;Φμ•8 #>±[βn9:zη o½ΥgGΔ€ ‘ jΈ­gΫ a-Κ±ΐ0n§jΑ‚sβ4 CΐR©UΉ”ΠΆ ¦άΎxq“―Τgβ¦iήBά–Ϊ{kΒ<˜κ§Σ—d.³#RX7Ώ―±ρΡ›Ÿ}Φ·#b @ήΙ ―>ΫΙ9£ΐƒΎ΅bΓ†WνpX`·Ν[ο$“Wj­8ŽȀΣά)”ϊΊ––.;ΦΙΝ§žκUmΫvžβΰt;Ά‡Ν‹ΐΚβ²²‡£R{o @\ŽK–,ΤR~Φ ό2ŽE9ΦDqPnŽ΅#²O†€lΆž5Ρυ ššNΡp€‹€€Ά"Δ·Υθθ]6[Ο€X04Œw¦α+n’Άž5–ƒbςδΖδ|΄PjՊ––Ην °ΐ’αΦ… u„ψp9P±ΧKkΈ!ΎaΟχΦXφÝσζMI$Dλλ€Ή!π3)ε?ίΈiS‹ύΊΦXβxΠΆhΡΉhύΒWˆ4$ΰNιΊίΊaέΊ6ϋ5­°·/^άδk}­Πϊ― ? j!ξMxήΧ―mnn·_ΞΛ$ς½ωσλžw•Φz0έ GλΎ«R©ΫμUž5–³jΑ‚"ε8— ­ΏŒGπQΪ…· ~;ξšΦXςޱrρβ‘Τu>œΗoω*p{o"q_gX`1ž[ζΟ_ΰΈξη|¨ΘΑ―θ~όψΊ ž·#n €Ε@ξœ>}Κhi釡η¦1θ@ˆ§PκI9<όθ[·ΫΆΐcpόρ‰ΤΠΠϋœ,C©cb{W src/scss/000077500000000000000000000000001517671130100126225ustar00rootroot00000000000000src/scss/index.scss000066400000000000000000000240321517671130100146270ustar00rootroot00000000000000@use 'vars' as v; @use '../injector'; #adsbygoogle-container { position: fixed; bottom: 55px; right: 10px; z-index: 3; } .md-button { border-radius: v.$border-radius; } md-toast { position: fixed !important; } .p3xr-connected-readonly-filler { height: 40px; } md-dialog.fullscreen-dialog { width: 75%; } @media (max-width:959px) { md-dialog.fullscreen-dialog { min-height: 100%; min-width: 100%; border-radius: 0; md-dialog-content { height: 100vh; md-content { height: 100%; } } } } button > md-icon { position: relative; top: -1px; } /* md-dialog md-dialog-actions { display: flex; flex-flow: row-reverse; justify-content: right; } md-dialog md-dialog-actions button { } */ .p3xr-animation { } .p3xr-theme-light { fieldset { border-color: rgba(0, 0, 0, 0.5); } } .p3xr-theme-dark { fieldset { border-color: rgba(255, 255, 255, 0.25); } ::selection { color: white; background: black; } ::-moz-selection { color: white; background: black; } /* .tree-branch-head { position: relative; top: 13px; } */ $json-status-bg-color: black; $json-status-color: white; .pico-content { background-color: grey !important; color: white !important; } .pico-modal-header { background-color: black !important; } .jsoneditor-modal a { color: black !important; } .jsoneditor-modal .jsoneditor-jmespath-label { color: black !important; } .jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-asc input.jsoneditor-button-asc, .jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-desc input.jsoneditor-button-desc { color: white !important; background-color: black !important; } .jsoneditor-modal table th, .jsoneditor-modal table td { color: white !important; } .pico-content textarea, .pico-content select, .pico-content input { color: white !important; background-color: rgba(0, 0, 0, 0.5) !important; } /* $json-menu-bg: #4b4b4b; $json-color: white; $json-editor-text-bg-color: #666666; $json-bg: #808080; $json-editable-bg: #808080; $json-editable-bg-focus: #b1b1b1; $json-button-focus: #868686; $jsoneditor-readonly: #acacac; $json-value-string: #00ff00; $json-value-type: #cccccc; $json-value-number: #cc8888; $json-value-boolean: #fff088; $json-value-null: #49a7fc; $json-value-invalid: white; */ div.jsoneditor-tree { background-color: black; } div.jsoneditor-value.jsoneditor-string.jsoneditor-color-value { color: white; } .jsoneditor-preview { color: $json-status-color !important; } .jsoneditor-statusbar { background-color: rgba($json-status-bg-color, 0.25) !important; color: $json-status-color !important; } div.jsoneditor, div.jsoneditor-menu { border-color: #4b4b4b } div.jsoneditor-menu { background-color: #4b4b4b } div.jsoneditor textarea.jsoneditor-text, div.jsoneditor-tree { color: #fff } div.jsoneditor-field, div.jsoneditor-value { color: #fff } table.jsoneditor-search div.jsoneditor-frame { background: grey } tr.jsoneditor-highlight, tr.jsoneditor-selected { background-color: grey } div.jsoneditor-field.jsoneditor-highlight, div.jsoneditor-field[contenteditable=true]:focus, div.jsoneditor-field[contenteditable=true]:hover, div.jsoneditor-value.jsoneditor-highlight, div.jsoneditor-value[contenteditable=true]:focus, div.jsoneditor-value[contenteditable=true]:hover { background-color: grey; border-color: grey } div.jsoneditor-field.highlight-active, div.jsoneditor-field.highlight-active:focus, div.jsoneditor-field.highlight-active:hover, div.jsoneditor-value.highlight-active, div.jsoneditor-value.highlight-active:focus, div.jsoneditor-value.highlight-active:hover { background-color: #b1b1b1; border-color: #b1b1b1 } div.jsoneditor-tree button:focus { background-color: #868686 } div.jsoneditor td.jsoneditor-separator, div.jsoneditor-readonly { color: #acacac } div.jsoneditor-value.jsoneditor-string { color: #0f8 } div.jsoneditor-value.jsoneditor-array, div.jsoneditor-value.jsoneditor-object { color: #bababa } div.jsoneditor-value.jsoneditor-number { color: #ff4040 } div.jsoneditor-value.jsoneditor-boolean { color: #ff8048 } div.jsoneditor-value.jsoneditor-null { color: #49a7fc } div.jsoneditor-value.jsoneditor-invalid { color: #fff } /* dark styling of the editor */ /* div.jsoneditor, div.jsoneditor-menu { border-color: $json-status-bg-color; } div.jsoneditor-menu { background-color: $json-status-bg-color; } div.jsoneditor-tree, div.jsoneditor textarea.jsoneditor-text { background-color: $json-editor-text-bg-color; color: $json-color; } div.jsoneditor-field, div.jsoneditor-value { color: $json-color; } table.jsoneditor-search div.jsoneditor-frame { background: $json-bg; } tr.jsoneditor-highlight, tr.jsoneditor-selected { background-color: $json-bg; } div.jsoneditor-field[contenteditable=true]:focus, div.jsoneditor-field[contenteditable=true]:hover, div.jsoneditor-value[contenteditable=true]:focus, div.jsoneditor-value[contenteditable=true]:hover, div.jsoneditor-field.jsoneditor-highlight, div.jsoneditor-value.jsoneditor-highlight { background-color: $json-editable-bg; border-color: $json-editable-bg; } div.jsoneditor-field.highlight-active, div.jsoneditor-field.highlight-active:focus, div.jsoneditor-field.highlight-active:hover, div.jsoneditor-value.highlight-active, div.jsoneditor-value.highlight-active:focus, div.jsoneditor-value.highlight-active:hover { background-color: $json-editable-bg-focus; border-color: $json-editable-bg-focus; } div.jsoneditor-tree button:focus { background-color: $json-button-focus; } // coloring of JSON in tree mode div.jsoneditor-readonly { color: $jsoneditor-readonly; } div.jsoneditor td.jsoneditor-separator { color: $jsoneditor-readonly; } div.jsoneditor-value.jsoneditor-string { color: $json-value-string; } div.jsoneditor-value.jsoneditor-object, div.jsoneditor-value.jsoneditor-array { color: $json-value-type; } div.jsoneditor-value.jsoneditor-number { color: $json-value-number; } div.jsoneditor-value.jsoneditor-boolean { color: $json-value-boolean; } div.jsoneditor-value.jsoneditor-null { color: #49a7fc; } div.jsoneditor-value.jsoneditor-invalid { color: $json-value-invalid; } */ } md-toolbar, .md-toolbar-tools { height: v.$toolbar-height !important; min-height: v.$toolbar-height !important; max-height: v.$toolbar-height !important; } body.p3xr-no-animation * { //transition: none; // weird fix transition: none !important; // md-backdrop.md-opaque.ng-enter fix md-backdrop.md-opaque.ng-enter { opacity: 0.48; } } #p3xr-redis-ui-bootstrap { height: 100vh; } .fa, .fas, .fab, far, .svg-inline--fa { transform: scale(1.5); margin-right: 5px !important; margin-left: 5px !important; } [ng-click] { cursor: pointer; } .md-button { min-width: auto; } .p3xr-md-input-container-no-bottom { margin-bottom: 0px; padding-bottom: 0px; } .p3xr-md-input-container-no-top { margin-top: 0px; padding-top: 0px; } .p3xr-md-input-container-bottom-info { opacity: 0.25; } .p3xr-typography-ellipsis { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .p3xr-theme-light { /* .p3xr-input { border-color: rgba(128, 128, 128, 0.5); } */ json-tree .key { color: black; font-weight: bold; } .p3xr-md-menu-item-selected { background-color: rgba(0, 0, 0, 0.1) !important; } } .p3xr-theme-dark { .p3xr-md-menu-item-selected { background-color: rgba(255, 255, 255, 0.1) !important; } json-tree .key { color: rgba(255, 255, 255, 0.6); font-weight: bold; } ::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */ color: rgba(255, 255, 255, 0.75); } /* .p3xr-input { background-color: gray; color: white; border-color: rgba(200, 200, 200, 0.5); } */ } .p3xr-pre { font-family: 'Roboto Mono' !important; //font-weight: 500; font-size: 16px; line-height: 18px; overflow: hidden !important; //white-space: pre; white-space: pre-wrap; //word-wrap: break-word !important; //overflow-wrap: break-word !important; // white-space: pre-wrap; word-spacing: 0px; //white-space: text-wrap; } .p3xr-not-selectable { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .p3x-margin-height { margin-bottom: v.$layout-padding; } input { font-family: 'Roboto' !important; // font-weight: 500; } textarea { font-family: 'Roboto Mono' !important; } treecontrol { font-family: 'Roboto Mono' !important; font-weight: 500 !important; } md-input-container.p3xr-md-input-container-no-bottom div.md-errors-spacer { min-height: 0px; } .p3xr-roboto-monospace * { font-family: 'Roboto Mono' !important; font-weight: 500 !important; } .p3xr-padding { padding: 8px; } .md-tooltip { background-color: black !important; color: white !important; } .md-raised:focus { outline: -webkit-focus-ring-color auto 1px; } src/scss/vars.scss000066400000000000000000000001011517671130100144620ustar00rootroot00000000000000$toolbar-height: 48px; $layout-padding: 5px; $border-radius: 4px;src/strings/000077500000000000000000000000001517671130100133405ustar00rootroot00000000000000src/strings/en/000077500000000000000000000000001517671130100137425ustar00rootroot00000000000000src/strings/en/strings.js000066400000000000000000000410011517671130100157650ustar00rootroot00000000000000const strings = { corifeusNetwork: 'Check out our new tool @ network.corifeus.com!', error: { cleared_license: "Cleared license", invalid_license: "Invalid license", server_error: "Server error, please try again", }, title: { corifeusNetwork: "Corifeus Network", donate: "Donate", jsonRecursive: "Expanding all leafs", name: "P3X Redis UI", nameDonated: "P3X Redis UI+", main: "You may choose a Redis connection to connect from the left bottom menu.", statistics: "Statistics", error: "Error", connectingRedis: "Connecting to Redis ...", socketioConnectError: "Socket.IO Error", db: "DB", server: "Server", clients: "Clients", memory: "Memory", persistence: "Persistence", stats: "Statistics", replication: "Replication", cpu: "CPU", cluster: "Cluster", }, confirm: { uploadBuffer: "Are you sure to upload this binary data?", uploadBufferDone: "The binary data is uploaded", uploadBufferDoneAndSave: "The binary data is uploaded and saved on the server", title: "Confirm", alert: "Alert", info: "Info", deleteListItem: "Are you sure to delete this list item?", deleteHashKey: "Are you sure to delete this hash key item?", deleteStreamTimestamp: "Are you sure to delete this stream timestamp?", deleteSetMember: "Are you sure to delete this set member?", deleteZSetMember: "Are you sure to delete this sorted set member?", deleteConnection: "Confirm", deleteConnectionText: "Are you sure to delete this Redis connection?", deleteNode: "Are you sure to delete this Redis node?", deleteAllKeys: (opts) => { return `Delete this tree and all it\'s keys (${opts.key})?`; }, socketioConnectError: "Socket.IO cannot connect to the server, you can reload and try resolve the connection error yourself, the client does not know how to solve it itself.", deleteKey: "Are you sure to delete this key?", rename: { title: "Are you sure to rename this key?", textContent: "If you click the rename button, it will rename this key forever.", placeholder: "The Redis key (required)", }, ttl: { title: "Are you sure to change this keys's TTL?", textContent: "If you click the change TTL button, it will rename this key's time to live, empty will persist this key keep forever.", placeholder: "The Redis key's TTL (integer or empty)", placeholderPlaceholder: "Empty means it persists forever, otherwise the used integer.", convertTextToTime: "Convert text to time", convertTextToTimePlaceholder: "Eg. 1d will be 86400", }, license: { title: "Enable donated license?", textContent: "If you want to use the donated functions, please contact alabard@gmail.com to request a license. The donation is $1/month.", placeholder: "License key", }, }, language: { // When you translate the english name, keep the Language in English // eg. InglΓ©s / English en: "English", zn: "δΈ­ζ–‡ / Chinese", ru: "Русский / Russian", }, intention: { copy: "Copy", downloadBuffer: "Download binary", setBuffer: "Upload binary", saveWithFormatJson: "Save with format", formatJson: "Format Json", pubsubMonitor: "PubSub Monitor", // When you translate the language, keep the Language in English // eg. Idioma / Language language: "Language", ok: "OK", addKey: "Add to this key", addKeyRoot: "Add a root key", reloadKey: "Reload key", reload: "Reload", close: "Close", commands: "Commands", view: "View", statistics: "Statistics", refresh: "Refresh", clear: "Clear", rename: "Rename", main: "Home", cancel: "Cancel", theme: "Theme", github: "GitHub", githubRepo: "Repository", githubRelease: "Releases", githubChangelog: "Change log", settings: "Settings", connect: "Connect", disconnect: "Disconnect", overview: "Overview", console: "Console", noConnections: "No connections, add a connection in the settings menu.", noConnectionsInSettings: "No connections, you may add a NEW CONNECTION above.", connectionAdd: "New connection", extend: "Extend", collapse: "Collapse", add: "Add", edit: "Edit", save: "Save", ttl: "Set TTL", license: "Set license", delete: "Delete", remove: "Remove", sure: "Sure", testConnection: "Test connection", getKey: "Loading Redis key and associated data ...", jsonViewShow: "Display JSON", jsonViewEditor: "Edit JSON", quickConsole: "Quick Console", }, label: { id: { nodeId: 'Node ID', id: "Connection ID", info: "If you do not wan't to change the properties of: sshPassword, sshPrivateKey, password, tlsCrt, tlsKey, tlsCa, please enter the ID of the connection in those propertes to keep the property values intact. If you want the same logic in the node password, then enter the node ID in the node password.", }, secureFeature: 'If you see a value that starts with a P3X an look like the same, it is a secure feature. To change the settings, just replace these settings with empty or something else and they will be saved. If you do not change the settings, the settings will be kept as they are on the server.', ssh: { on: 'SSH on', off: 'SSH off', sshHost: 'SSH Host', sshPort: 'SSH port', sshUsername: 'SSH username', sshPassword: 'SSH password', sshPrivateKey: 'SSH private key', }, isBuffer: (opts) => `[object ArrayBuffer] means that the value is binary data or the value is bigger than ${opts.maxValueAsBuffer}`, streamValue: `Stream field and value is a oneliner. Eg.: field1 value1 "field 2" "value 2"`, streamTimestampId: `'*' means auto generated or the specification as -`, unableToLoadKey: ({ key }) => { return `Unable to load this key: ${key}. Possible, the key was deleted. The exact error is in the console.`; }, bigJson: "This JSON object is over 10 kb, so make sure you know what you doing, because some functions can be slow rendering.", addNode: "Add node", validateJson: "Validate JSON", reducedFunction: `Reduced functionality`, tooManyKeys: (opts) => { return `For the full maximum functions allowed keys total is ${opts.maxLightKeysCount} count. This database has over the allowed keys in total ${opts.count}. The key sorting and the additional fancy tree information is disabled. The searching is happening only on the server instead the client search.`; }, redisCommandNotFound: "No Redis command match found ...", treeKeyStore: `The sorting (natural compare) is executed on the client aka the browser, which means it has a penalty for big large sets, like over 10k keys, it might add a little time to the page rendering. There is no key sorting in Redis, only like this.`, socketIoTimeout: (options) => { return `The Socket.IO timed out for this request (max ${ options.timeout / 1000 } seconds) ...`; }, resizerInfo: (options) => { return `Left or right panel minimum width is ${options.width}px`; }, jsonViewNotParsable: "This value is not JSON parsable ", ttlTitle: "Set the TTL in seconds", passwordSecure: "The password might will be empty, but still it will show characters, this is a security feature.", tlsWithoutCert: "Enable TLS without additional certificate", tlsRejectUnauthorized: "Reject unauthorized certificate", tlsSecure: "If you see a TLS configuration that starts with a P3X or all the TLS settings look like the same, it is a secure feature. To change the settings, just replace these settings with empty or something else and they will be saved. If you do not change the TLS settings, the settings will be kept as they are on the server.", treeSeparatorEmpty: "If the tree separator is empty, the tree wil have no nested nodes, just a pure list", treeSeparatorEmptyNote: "No nested nodes, just a pure list", welcomeConsole: "Welcome to the Redis Console", welcomeConsoleInfo: "Cursor UP or DOWN history is enabled", redisListIndexInfo: "Empty to append, -1 to prepend or save it to the position shown.", console: "Console", connectiondAdd: "Add connection", connectiondEdit: "Edit connection", connectiondView: "View connection", connections: "Connections", keysSort: { on: "Key sorting on", off: "Key sorting off", }, cluster: { on: "Cluster on", off: "Cluster off", }, sentinel: { on: "Sentinel on", off: "Sentinel off", name: "Sentinel name", }, readonly: { on: "Readonly on", off: "Readonly off", }, theme: { light: "Light", dark: "Dark enterprise", darkNeu: "Dark", darkoBluo: "Darko bluo", enterprise: "Enterprise", redis: "Redis", matrix: "Matrix", }, connected: (opts) => { return `Connected: ${opts.name}`; }, tree: "Tree", askAuth: "Ask for authorization", }, status: { dataCopied: "The data is in the clipboard", licenseSaved: "License saved", nodeRemoved: "Node removed", keyIsNotExisting: "This key could have been deleted or expired.", keyCount: (opts) => { if (opts.keyCount === 0) { return "No key"; } else if (opts.keyCount === 1) { return "1 key"; } else { return `${opts.keyCount} keys`; } }, treeExpandAll: "Expand all tree leafs, this has a cost, might take time ...", noRedisKeys: "There are no keys in this database.", redisConnected: "Redis connected successful", reloadingDataInfo: "Reloading Redis data info", added: "Added", saved: "Updated", cancelled: "Cancelled", deleted: "Deleted", savedRedis: "Redis data is saved", redisDisconnected: (opts) => { return `The current connection had an error: ${opts.error.message}`; }, dbChanged: (opts) => { return `The db index set to ${opts.db}. `; }, treeDeleted: (opts) => { return `The tree key was deleted (${opts.key}).`; }, deletedKey: (opts) => { return `The key was deleted (${opts.key}).`; }, renamedKey: "This key has been renamed", ttlChanged: "This key's TTL has been changed", notInteger: "This input is not an integer", persisted: "This key is persisted forever", set: "The key is set/added", }, code: { "delete-connection": "This connection was deleted, so you are disconnected to this Redis instance.", "save-connection": "This connection was changed, so you are disconnected to this Redis instance. You may re-connect.", "readonly-connections": "Connections add/save/delete are readonly only!", "readonly-connection-mode": "This connection is read only mode!", "list-out-of-bounds": "This list index is out of bounds", "donation-ware-feature": "This feature is present in the donation version.", "auto-connection-failed": "Possible, the connection was removed and the auto connection failed, because of this.", invalid_console_command: "This command is not working via the GUI.", }, form: { error: { required: "Required", port: "The port is between 1-65535", invalid: "The form is invalid", }, connection: { label: { name: "Name", host: "Hostname", port: "Port", password: "Password", username: "Username", }, }, treeSettings: { maxValueDisplay: "Max value display string length", maxValueDisplayInfo: "If max value display zero, it shows everything, if it is bigger than 0, it will truncate. If it is -1, it will not show the value without edit for strings, for others, it display everything.", maxKeys: "The max key count", maxKeysInfo: "So that the GUI does not crash, we limit the max key count.", keyCount: () => { return `Number of keys: ${p3xr.state.keysRaw.length}`; }, label: { animation: "Use animation", noAnimation: "No animation", jsonFormatTwoSpace: "Format JSON with 2 spaces", jsonFormatFourSpace: "Format JSON with 4 spaces", formName: "Redis settings", searchModeClient: "Client search mode", searchModeServer: "Server search mode", searchModeStartsWith: "Search with starts with mode", searchModeIncludes: "Search includes mode", }, field: { treeSeparator: "Tree separator", treeSeparatorSelector: "Tree separator selector", page: "Tree paging count", keyPageCount: "Key paging count", keysSort: "Sort the keys", searchMode: "Search mode", searchModeStartsWith: "Search starts with / includes", }, error: { keyPageCount: "The key page count must be an integer between 5 - 100", page: "The page count must be an integer between 10 - 1000", maxValueDisplay: "The maximum display value must be an integer between -1 and 32768", maxKeys: "The maximum key count value must be an integer between 100 and 100000", }, }, key: { label: { formName: { add: "Add new Redis key", edit: "Edit Redis key", append: "Add to existing Redis key", }, }, field: { streamTimestamp: "Timestamp", key: "Key", type: "Type", index: "Index", hashKey: "Hash key", score: "Score", value: "Value", }, error: { streamTimestamp: "The timestamp is required, either Redis format or as *", key: "The key is, at least, one character", hashKey: "The hash table key is at least one character", score: "The sorted set score is required", value: "The value is required", }, }, main: { label: { database: "DB", }, }, }, page: { overview: { noConnected: "There is no connection to Redis.", overviewClients: "List the connected by the count of clients", connectedCount: (opt) => { if (opt.length === 1) { return "1 client"; } return `${opt.length} clients`; }, }, key: { label: { key: "Key", encoding: "Encoding", length: "Size", ttl: "TTL", ttlTitle: "Time To Live", type: "Type", ttlNotExpire: "does not expire", lengthString: "bytes", lengthItem: "items", actions: "Actions", }, list: { table: { index: "Index", value: "Value", }, }, hash: { table: { hashkey: "Hashkey", value: "Value", }, }, set: { table: { value: "Member", }, }, zset: { table: { value: "Member", score: "Score", }, }, stream: { table: { timestamp: "Timestamp ID", field: "Field", value: "Value", }, }, }, treeControls: { settings: "Tree settings", expandAll: "Expand all", collapseAll: "Collapse all", search: { search: "Search in the keys", clear: "Clear current search to set empty", placeholderClient: "Search client side", placeholderServer: "Search server side", info: "The client side search means, that it matches the text in the search input. The server side search means, that is it like search in the keys patterns as *{search-text}*. For large search sets, it is better to use server side searching. For smaller search sets, it is better to use client side search mode." + ` If the keys count is over ${p3xr.settings.maxLightKeysCount}, you can only search on server side.`, largeSetInfo: "In a large set, client side searching is disabled. so right now only server side searching is possible.", infoDetails: "To find out how the search works, please check out the settings", }, pager: { next: "Next", prev: "Previous", first: "First", last: "Last", }, }, }, time: { years: "years", months: "months", days: "days", year: "year", month: "month", day: "day", }, redisTypes: { string: "String", list: "List", hash: "Hash table", set: "Set", zset: "Sorted set - zset", stream: "Stream", }, }; module.exports = strings; src/strings/ru/000077500000000000000000000000001517671130100137665ustar00rootroot00000000000000src/strings/ru/strings.js000066400000000000000000000606071517671130100160260ustar00rootroot00000000000000const strings = { corifeusNetwork: 'ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ наш Π½ΠΎΠ²Ρ‹ΠΉ инструмСнт @ network.corifeus.com!', error: { cleared_license: "ΠžΡ‡ΠΈΡ‰Π΅Π½Π½Π°Ρ лицСнзия", invalid_license: "НСвСрная лицСнзия", server_error: "БСрвСрная ошибка, поТалуйсто ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ снова", }, title: { corifeusNetwork: "ΠšΠΎΡ€ΠΈΡ„Π΅ΠΉΡ Π‘Π΅Ρ‚ΡŒ", donate: "Π”ΠΎΠ½Π°Ρ‚", jsonRecursive: "Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ всС Π»ΠΈΡΡ‚ΡŒΡ", name: "P3X Redis UI", nameDonated: "P3X Redis UI+", main: "Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Redis ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€ для соСдинСния ΠΈΠ· мСню снизу слСва.", statistics: "Бтатистика", error: "Ошибка", connectingRedis: "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ Redis ...", socketioConnectError: "Ошибка Socket.IO", db: "Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…", server: "Π‘Π΅Ρ€Π²Π΅Ρ€", clients: "ΠšΠ»ΠΈΠ΅Π½Ρ‚", memory: "ΠŸΠ°ΠΌΡΡ‚ΡŒ", persistence: "ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎΡΡ‚ΡŒ", stats: "Бтатистика", replication: "РСпликация", cpu: "ЦПУ", cluster: "ΠšΠ»Π°ΡΡ‚Π΅Ρ€", }, confirm: { uploadBuffer: "Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эти Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅?", uploadBufferDone: "Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ", uploadBufferDoneAndSave: "Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° сСрвСрС.", title: "ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ", alert: "Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅", info: "Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ", deleteListItem: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ этот список?", deleteHashKey: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ этот Ρ…ΡΡˆ?", deleteStreamTimestamp: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ эту Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°?", deleteSetMember: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ этого Ρ‡Π»Π΅Π½Π° Π½Π°Π±ΠΎΡ€Π°?", deleteZSetMember: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ этого Ρ‡Π»Π΅Π½Π° сортированного Π½Π°Π±ΠΎΡ€Π°?", deleteConnection: "ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ", deleteConnectionText: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ это ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Redis?", deleteNode: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ эту Π½ΠΎΠ΄Ρƒ Redis?", deleteAllKeys: (opts) => { return `Π£Π΄Π°Π»ΠΈΡ‚ΡŒ это Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈ всС Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ (${opts.key})?`; }, socketioConnectError: "Socket.IO Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ ΠΊ сСрвСру, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с соСдинСниСм ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ это.", deleteKey: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ этот ΠΊΠ»ΡŽΡ‡?", rename: { title: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠ»ΡŽΡ‡?", textContent: 'Если Π²Ρ‹ Π½Π°ΠΆΠΌΡ‘Ρ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ "ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚" Π²Ρ‹ навсСгда ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚Π΅ этот ΠΊΠ»ΡŽΡ‡.', placeholder: "ΠšΠ»ΡŽΡ‡ Redis (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)", }, ttl: { title: "Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ TTL этого ΠΊΠ»ΡŽΡ‡Π°?", textContent: 'Если Π²Ρ‹ Π½Π°ΠΆΠΌΡ‘Ρ‚Π΅ "Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ" Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ TTL этого ΠΊΠ»ΡŽΡ‡Π°, пустой TTL Ρ€Π°Π²Π΅Π½ Π²Π΅Ρ‡Π½ΠΎΠΌΡƒ.', placeholder: "TTL ΠΊΠ»ΡŽΡ‡Π° Redis (Ρ†Π΅Π»ΡŒΠ½Π°Ρ Ρ†ΠΈΡ„Ρ€Π° ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ)", placeholderPlaceholder: "ΠŸΡƒΡΡ‚ΠΎΡ‚Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ, для Π΄Ρ€ΡƒΠ³ΠΈΡ… случаСв ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ число.", convertTextToTime: "ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкст Π²ΠΎ врСмя", convertTextToTimePlaceholder: "НапримСр, 1d Ρ€Π°Π²Π΅Π½ 86400", }, license: { title: "Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ Π΄ΠΎΠ½Π°Ρ‚Π΅Ρ€Π°?", textContent: "Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π΄ΠΎΠ½Π°Ρ‚Π΅Ρ€ΠΎΠ², поТалуйсто запроситС Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ Ρƒ alabard@gmail.com . Π”ΠΎΠ½Π°Ρ‚ стоит $1/мСсяц.", placeholder: "ΠšΠ»ΡŽΡ‡ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ", }, }, language: { // When you translate the english name, keep the Language in English // eg. InglΓ©s / English en: "Английский / English", zn: "δΈ­ζ–‡ / Chinese", ru: "Русский / Russian", }, intention: { copy: "ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ", downloadBuffer: "Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»", setBuffer: "Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»", saveWithFormatJson: "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ", formatJson: "Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Json", pubsubMonitor: "ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ PubSub", // When you translate the language, keep the Language in English // eg. Idioma / Language language: "Π―Π·Ρ‹ΠΊ / Language", ok: "ОК", addKey: "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ этому ΠΊΠ»ΡŽΡ‡Ρƒ", addKeyRoot: "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ", reloadKey: "Кнопка ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ", reload: "ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ", close: "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ", commands: "ΠšΠΎΠΌΠ°Π½Π΄Ρ‹", view: "Π’ΠΈΠ΄", statistics: "Бтатистика", refresh: "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ", clear: "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ", rename: "ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ", main: "Π”ΠΎΠΌΠΎΠΉ", cancel: "ΠžΡ‚ΠΌΠ΅Π½Π°", theme: "Π’Π΅ΠΌΠ°", github: "GitHub", githubRepo: "Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ", githubRelease: "Π Π΅Π»ΠΈΠ·Ρ‹", githubChangelog: "ИзмСнСния", settings: "Настройки", connect: "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ", disconnect: "ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ", overview: "ΠžΠ±Π·ΠΎΡ€", console: "Консоль", noConnections: "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² мСню настроСк.", noConnectionsInSettings: "ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΠžΠ’ΠžΠ• ΠŸΠžΠ”ΠšΠ›ΠΠ§Π•ΠΠ˜Π• Π²Ρ‹ΡˆΠ΅.", connectionAdd: "НовоС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅", extend: "Π Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ", collapse: "Π‘Ρ…Π»ΠΎΠΏΠ½ΡƒΡ‚ΡŒ", add: "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ", edit: "Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ", save: "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ", ttl: "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ TTL", license: "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ", delete: "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ", remove: "Π£Π±Ρ€Π°Ρ‚ΡŒ", sure: "Π₯ΠΎΡ€ΠΎΡˆΠΎ", testConnection: "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° соСдинСния", getKey: "Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π° Redis ΠΈ асоциированных Π΄Π°Π½Π½Ρ‹Ρ… ...", jsonViewShow: "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ JSON", jsonViewEditor: "Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ JSON", quickConsole: "Быстрый", }, label: { id: { nodeId: 'Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΠ·Π»Π°', id: "Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ соСдинСния", info: "Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ свойства: sshPassword, sshPrivateKey, пароля, tlsCrt, tlsKey, tlsCa, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ соСдинСния Π² эти свойства, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния свойств Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΏΠ°Ρ€ΠΎΠ»Π΅ ΡƒΠ·Π»Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΠ·Π»Π° Π² ΠΏΠ°Ρ€ΠΎΠ»Π΅ ΡƒΠ·Π»Π°." }, secureFeature: 'Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ начинаСтся с P3X ΠΈ выглядит ΠΏΠΎΡ…ΠΎΠΆΠ΅, это функция бСзопасности. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ настройки, просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ эти настройки Π½Π° пустыС ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны. Если Π²Ρ‹ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ настройки, настройки останутся Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ Π½Π° сСрвСрС.', ssh: { on: 'SSH Π²ΠΊΠ»ΡŽΡ‡Π΅Π½', off: 'SSH Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½', sshHost: 'Π₯ост SSH', sshPort: 'ΠŸΠΎΡ€Ρ‚ SSH', sshUsername: 'Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ SSH', sshPassword: 'ΠŸΠ°Ρ€ΠΎΠ»ΡŒ SSH', sshPrivateKey: 'ΠŸΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ SSH', }, isBuffer: (opts) => `[object ArrayBuffer] ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСдставляСт собой Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ${opts.maxValueAsBuffer}`, streamValue: `ПолС ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° это однополосник. НапримСр: ΠΏΠΎΠ»Π΅1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 "ΠΏΠΎΠ»Π΅ 2" "Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2"`, streamTimestampId: `'*' ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ опрСдСляСтся ΠΊΠ°ΠΊ -`, unableToLoadKey: ({ key }) => { return `НС Π²Ρ‹ΡˆΠ»ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡: ${key}. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ½ Π±Ρ‹Π» ΡƒΠ΄Π°Π»Ρ‘Π½. Полная ошибка написана Π² консоли.`; }, bigJson: "Π­Ρ‚ΠΎΡ‚ JSON ΠΎΠ±ΡŒΠ΅ΠΊΡ‚ большС 10 kb, ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рСндСрятся ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.", addNode: "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ΄Ρƒ", validateJson: "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ JSON", reducedFunction: `УрСзанная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ`, tooManyKeys: (opts) => { return `Для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ максимума Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΊΠ»ΡŽΡ‡ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ количСствС ${opts.maxLightKeysCount} ΡˆΡ‚ΡƒΠΊ. Π­Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ большС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Ρ‡Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ, суммой ${opts.count}. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ информация Π΄Ρ€Π΅Π²ΠΎΠΌ для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. Поиск Π±ΡƒΠ΄Π΅Ρ‚ производится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° сСрвСрной сторонС.`; }, redisCommandNotFound: "Ни ΠΎΠ΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Redis Π½Π΅ совпадаСт с Π²Π²ΠΎΠ΄ΠΎΠΌ ...", treeKeyStore: `Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° (ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎΠ΅ сравнСниС) выполняСтся Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ (ΠΎΠ½ ΠΆΠ΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€), Ρ‡Ρ‚ΠΎ замСдляСт большиС сортировки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ большС Ρ‡Π΅ΠΌ 10k ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, это ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€ΡƒΠ·ΠΊΠ΅ страницы. Π’ самом Redis Π½Π΅Ρ‚Ρƒ сортировки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, это ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊ.`, socketIoTimeout: (options) => { return `Socket.IO Π½Π΅ успСл ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° запрос (максимум ${ options.timeout / 1000 } сСкунд) ...`; }, resizerInfo: (options) => { return `Минимальная ΡˆΠΈΡ€ΠΈΠ½Π° Π»Π΅Π²ΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ это ${options.width}px`; }, jsonViewNotParsable: "Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ JSON", ttlTitle: "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ TTL Π² сСкундах", passwordSecure: "ΠŸΠ°Ρ€ΠΎΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым, Π½ΠΎ ΠΎΠ½ всё Π΅Ρ‰Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ символы, это Ρ„ΠΈΡ‡Π° для бСзопасности.", tlsWithoutCert: "Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ TLS Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСртификата", tlsRejectUnauthorized: "Reject unauthorized certificate", tlsSecure: "Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ TLS ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ которая начинаСтся с P3X ΠΈΠ»ΠΈ всС настройки TLS выглядят ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, это Ρ„ΠΈΡ‡Π° для бСзопасности. Для изминСния настроСк Π½Π°Π΄ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эти настройки пустыми ΠΈΠ»ΠΈ Ρ‡Π΅ΠΌ Π»ΠΈΠ±ΠΎ Π΅Ρ‰Ρ‘, ΠΈ ΠΎΠ½ΠΈ сохранятся. Если Π²Ρ‹ Π΅ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ настройки TLS, настройки останутся Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π½Π° самом сСрвСрС.", treeSeparatorEmpty: "Если Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Π΅Ρ€Π΅Π²Π° пуст, Π² Π΄Π΅Ρ€Π΅Π²Π΅ вмСсто Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ лишь чистый список", treeSeparatorEmptyNote: "Никаких Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½ΠΎΠ΄, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чистый список", welcomeConsole: "Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² консоль Redis", welcomeConsoleInfo: "Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π’Π’Π•Π Π₯ ΠΈΠ»ΠΈ Π’ΠΠ˜Π— ΠΊΠ»Π»ΡŽΡ‡Π΅Π½Π°", redisListIndexInfo: "ΠŸΡƒΡΡ‚ΠΎΠ΅ для добавлСния, -1 Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΈΠ΄ ΠΈΠ»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.", console: "Консоль", connectiondAdd: "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ соСдинСниС", connectiondEdit: "Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ соСдинСниС", connectiondView: "ΠžΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ соСдинСниС", connections: "БоСдинСния", keysSort: { on: "Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°", off: "Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π°", }, cluster: { on: "ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π°", off: "ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π°", }, sentinel: { on: "Π‘Π΅Π½Ρ‚ΠΈΠ½Π΅Π» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½", off: "Π‘Π΅Π½Ρ‚ΠΈΠ½Π΅Π» Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½", name: "Имя Π΄ΠΎΠ·ΠΎΡ€Π½ΠΎΠ³ΠΎ", }, readonly: { on: 'Π Π΅ΠΆΠΈΠΌ "Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅"', off: 'Π Π΅ΠΆΠΈΠΌ "Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅"', }, theme: { light: "БвСтлая", dark: "Вёмная корпоративная", darkNeu: "Вёмная", darkoBluo: "Π’Ρ‘ΠΌΠ½ΠΎΠ΅ синСво", enterprise: "ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ", redis: "Redis", matrix: "ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°", }, connected: (opts) => { return `ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ: ${opts.name}`; }, tree: "Π”Π΅Ρ€Π΅Π²ΠΎ", askAuth: "Π—Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ", }, status: { dataCopied: "Π”Π°Π½Π½Ρ‹Π΅ скопированы Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°", licenseSaved: "ЛицСнзия сохранСна", nodeRemoved: "Нода ΡƒΠ΄Π°Π»Π΅Π½Π°", keyIsNotExisting: "Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ вСроятно Π±Ρ‹Π» ΡƒΠ΄Π°Π»Ρ‘Π½ ΠΈΠ»ΠΈ истёк.", keyCount: (opts) => { if (opts.keyCount === 0) { return "НСту ΠΊΠ»ΡŽΡ‡Π΅ΠΉ"; } else if (opts.keyCount === 1) { return "1 ΠΊΠ»ΡŽΡ‡"; } else { return `${opts.keyCount} ΠΊΠ»ΡŽΡ‡Π΅ΠΉ`; } }, treeExpandAll: "Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС Π»ΠΈΡΡ‚ΡŒΡ Π΄Π΅Ρ€Π΅Π²Π°, это ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†Π΅Π½Ρƒ, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ...", noRedisKeys: "НСту ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….", redisConnected: "Redis ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½", reloadingDataInfo: "ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… Redis", added: "Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ", saved: "ОбновлСно", cancelled: "ΠžΡ‚ΠΌΠ΅Π½Π΅Π½ΠΎ", deleted: "Π£Π΄Π°Π»Π΅Π½ΠΎ", savedRedis: "Π”Π°Π½Π½Ρ‹Π΅ Redis Π±Ρ‹Π»ΠΈ сохранСны", redisDisconnected: (opts) => { return `ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Π² Ρ‚Π΅ΠΏΠ΅Ρ€Π΅ΡˆΠ½Π΅ΠΌ соСдинСнии: ${opts.error.message}`; }, dbChanged: (opts) => { return `Π’Ρ‹Π±Ρ€Π°Π½ индСкс Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ${opts.db}. `; }, treeDeleted: (opts) => { return `ΠšΠ»ΡŽΡ‡ Π΄Π΅Ρ€Π΅Π²Π° Π±Ρ‹Π» ΡƒΠ΄Π°Π»Ρ‘Π½ (${opts.key}).`; }, deletedKey: (opts) => { return `ΠšΠ»ΡŽΡ‡ Π±Ρ‹Π» ΡƒΠ΄Π°Π»Ρ‘Π½ (${opts.key}).`; }, renamedKey: "Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½", ttlChanged: "TTL этого ΠΊΠ»ΡŽΡ‡Π° Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½", notInteger: "Π­Ρ‚ΠΎΡ‚ Π²Π²ΠΎΠ΄ Π½Π΅ для Ρ†Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ†ΠΈΡ„Ρ€Ρ‹", persisted: "Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π½Π΅ исчСзнСт сам", set: "Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½/Π΄ΠΎΠ±Π°Π²Π»Π΅Π½", }, code: { "delete-connection": "Π­Ρ‚ΠΎ соСдинСниС Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ ΠΈ ΠΏΠΎ этому Π²Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΎΡ‚ этой инстанции Redis.", "save-connection": "Π­Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΈ ΠΏΠΎ этому Π²Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΎΡ‚ этой инстанции Redis. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ.", "readonly-connections": 'Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅/сохранСниС/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ соСдинСний Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ "Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅"!', "readonly-connection-mode": 'Π­Ρ‚ΠΎ соСдинСниС Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ "Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅"!', "list-out-of-bounds": "ИндСкс этого списка Π²Ρ‹ΡˆΠ΅Π» Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹", "donation-ware-feature": "Π­Ρ‚Π° функция доступна Π² донатСрской вСрсии.", "auto-connection-failed": "ВСроятно, соСдинСниС Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ ΠΈ Π°Π²Ρ‚ΠΎ-соСдинСниС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅.", invalid_console_command: "Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· GUI.", }, form: { error: { required: "ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ", port: "ΠŸΠΎΡ€Ρ‚ Π² Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… 1-65535", invalid: "Π€ΠΎΡ€ΠΌΠ° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Π½Π΅Π²Π΅Ρ€Π½ΠΎ", }, connection: { label: { name: "НазваниС", host: "Имя хоста", port: "ΠŸΠΎΡ€Ρ‚", password: "ΠŸΠ°Ρ€ΠΎΠ»ΡŒ", username: "Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ", }, }, treeSettings: { maxValueDisplay: "Π”Π»ΠΈΠ½Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ строки", maxValueDisplayInfo: "Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½Ρ‹ ΠΏΠΎΠΊΠ°Π·Π° Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ всё, Ссли ΠΆΠ΅ ΠΎΠ½ΠΎ большС - Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ€Π΅Π·Π°Π½. Если ΠΎΠ½ Ρ€Π°Π²Π΅Π½ минус ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ скрыт Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° рСдактирования для строк, для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΆΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ всё.", maxKeys: "ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ символов", maxKeysInfo: "ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Ρ‡Ρ‚ΠΎ Π±Ρ‹ GUI Π½Π΅ ΠΏΠ°Π΄Π°Π».", keyCount: () => { return `ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ: ${p3xr.state.keysRaw.length}`; }, label: { animation: "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ", noAnimation: "Π’Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ", jsonFormatTwoSpace: "Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ JSON двумя ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ", jsonFormatFourSpace: "Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ JSON Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ", formName: "Настройки Redis", searchModeClient: "ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ поиска", searchModeServer: "Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ поиска", searchModeStartsWith: "Поиск Π½Π°Ρ‡Π°Π»Π°", searchModeIncludes: "Поиск содСрТимого", }, field: { treeSeparator: "Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Π΅Ρ€Π΅Π²Π°", treeSeparatorSelector: "Π˜Π·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒ раздСлитСля Π΄Π΅Ρ€Π΅Π²Π°", page: "Π‘Ρ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊ количСства страниц", keyPageCount: "Π‘Ρ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊ количСства ΠΊΠ»ΡŽΡ‡Π΅ΠΉ", keysSort: "Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ", searchMode: "Π Π΅ΠΆΠΈΠΌ поиска", searchModeStartsWith: "Поиск начинаСтся с / содСрТит", }, error: { keyPageCount: "ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠΊΠ°Π·Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π½Π° страницС Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом Π² Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… 5 - 100", page: "ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠΊΠ°Π·Π° страниц Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом Π² Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… 10 - 1000", maxValueDisplay: "МаксимальноС количСство ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом ΠΌΠ΅ΠΆΠ΄Ρƒ -1 ΠΈ 32768", maxKeys: "МаксимальноС количСство ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом ΠΌΠ΅ΠΆΠ΄Ρƒ 100 ΠΈ 100000", }, }, key: { label: { formName: { add: "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Redis", edit: "Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Redis", append: "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Redis", }, }, field: { streamTimestamp: "ВрСмСнная ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°", key: "ΠšΠ»ΡŽΡ‡", type: "Π’ΠΈΠΏ", index: "ИндСкс", hashKey: "Π₯эш", score: "ΠžΡ‡ΠΊΠΈ", value: "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅", }, error: { streamTimestamp: "ВрСмСнная ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°, Π»ΠΈΠ±ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Redis Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ *", key: "ΠšΠ»ΡŽΡ‡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρƒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа", hashKey: "Π‘Ρ‚ΠΎΠ» Ρ…ΡΡˆΠ΅ΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρƒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа", score: "ΠžΡ‡ΠΊΠΈ сортировки Π½Π°Π±ΠΎΡ€Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹", value: "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ", }, }, main: { label: { database: "Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…", }, }, }, page: { overview: { noConnected: "НСту ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Redis.", overviewClients: "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ количСству ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²", connectedCount: (opt) => { if (opt.length === 1) { return "1 ΠΊΠ»ΠΈΠ΅Π½Ρ‚"; } return `${opt.length} ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²`; }, }, key: { label: { key: "ΠšΠ»ΡŽΡ‡", encoding: "ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°", length: "Π Π°Π·ΠΌΠ΅Ρ€", ttl: "TTL", ttlTitle: "ВрСмя На Π–ΠΈΠ·Π½ΡŒ (TTL)", type: "Π’ΠΈΠΏ", ttlNotExpire: "Π½Π΅ истСкаСт", lengthString: "Π±Π°ΠΉΡ‚Ρ‹", lengthItem: "ΠΎΠ±ΡŒΠ΅ΠΊΡ‚Ρ‹", actions: "ДСйствия", }, list: { table: { index: "ИндСкс", value: "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅", }, }, hash: { table: { hashkey: "Π₯эш", value: "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅", }, }, set: { table: { value: "Π§Π»Π΅Π½", }, }, zset: { table: { value: "Π§Π»Π΅Π½", score: "ΠžΡ‡ΠΊΠΈ", }, }, stream: { table: { timestamp: "Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ", field: "ПолС", value: "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅", }, }, }, treeControls: { settings: "Настройки Π΄Π΅Ρ€Π΅Π²Π°", expandAll: "Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС", collapseAll: "Π‘Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС", search: { search: "Поиск ΠΊΠ»ΡŽΡ‡Π°", clear: "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€Π΅ΡˆΠ½ΠΈΠΉ поиск", placeholderClient: "Π˜ΡΠΊΠ°Ρ‚ΡŒ Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅", placeholderServer: "Π˜ΡΠΊΠ°Ρ‚ΡŒ Π½Π° сСрвСрС", largeSetInfo: "In a large set, client side searching is disabled. so right now only server side searching is possible.", info: "Поиск Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ совпаданиС с содСрТимым поля поиска. Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹ΠΉ поиск ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ поиск ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ *{искомый-тСкст}*. Для поиска Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрвСрный поиск. Для ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… поисковых Π½Π°Π±ΠΎΡ€ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ поиск ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ." + ` Если количСство ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ${p3xr.settings.maxLightKeysCount}, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСрвСрным поиском.`, infoDetails: "Π§Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ поиск Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ настройки", }, pager: { next: "Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ", prev: "ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ", first: "ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ", last: "ПослСдний", }, }, }, time: { years: "Π³ΠΎΠ΄Π°", months: "мСсяца", days: "Π΄Π½ΠΈ", year: "Π³ΠΎΠ΄", month: "мСсяц", day: "дСнь", }, redisTypes: { string: "Π‘Ρ‚Ρ€ΠΎΠΊΠ°", list: "Бписок", hash: "Π‘Ρ‚ΠΎΠ» Ρ…ΡΡˆΠ΅ΠΉ", set: "Набор", zset: "Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ - zset", stream: "ΠŸΠΎΡ‚ΠΎΠΊ", }, }; module.exports = strings; src/strings/zn/000077500000000000000000000000001517671130100137675ustar00rootroot00000000000000src/strings/zn/strings.js000066400000000000000000000367421517671130100160320ustar00rootroot00000000000000const strings = { corifeusNetwork: 'ηœ‹ηœ‹ζˆ‘δ»¬ηš„ζ–°ε·₯ε…· @ network.corifeus.com!', error: { cleared_license: "清陀θΈε―证", invalid_license: "ζ— ζ•ˆηš„θΈε―证", server_error: "ζœεŠ‘ε™¨ι”™θ――οΌŒθ―·ι‡θ―•", }, title: { corifeusNetwork: "Corifeus Network", donate: "捐衠", jsonRecursive: "ε±•εΌ€ζ‰€ζœ‰εΆε­", name: "P3X Redis UI", nameDonated: "P3X Redis UI+", main: "您可δ»₯δ»Žε·¦δΈ‹ζ–Ήθœε•δΈ­ι€‰ζ‹©θ¦θΏžζŽ₯ηš„RedisθΏ›θ‘ŒθΏžζŽ₯θΏι—", statistics: "Statistics", error: "ι”™θ――", connectingRedis: "连ζŽ₯到Redis ...", socketioConnectError: "Socket.IO ι”™θ――", db: "DB", server: "服劑端", clients: "ε’户端", memory: "ε†…ε­˜", persistence: "ζŒδΉ…ζ€§", stats: "统θ‘", replication: "同ζ­₯倍刢", cpu: "CPU", cluster: "集羀", }, confirm: { uploadBuffer: "您η‘εšδΈŠδΌ ζ­€δΊŒθΏ›εˆΆζ•°ζε—οΌŸ", uploadBufferDone: "δΊŒθΏ›εˆΆζ•°ζε·²δΈŠδΌ ", uploadBufferDoneAndSave: "δΊŒθΏ›εˆΆζ•°ζδΈŠδΌ εΉΆδΏε­˜εœ¨ζœεŠ‘ε™¨δΈŠ", title: "η‘θ€", alert: "θ­¦ε‘Š", info: "俑息", deleteListItem: "您η‘εšθ¦εˆ ι™€θ―₯εˆ—θ‘¨ι‘Ήε—οΌŸ", deleteHashKey: "您η‘εšθ¦εˆ ι™€θ―₯ε“ˆεΈŒι”ι‘Ήε—οΌŸ", deleteStreamTimestamp: "您η‘εšθ¦εˆ ι™€ζ­€ζ΅ζ—Άι—΄ζˆ³ε—οΌŸ", deleteSetMember: "您η‘εšθ¦εˆ ι™€θ―₯ι›†εˆζˆε‘˜οΌŸ", deleteZSetMember: "您η‘εšθ¦εˆ ι™€θ―₯ζœ‰εΊι›†εˆζˆε‘˜οΌŸ", deleteConnection: "η‘θ€", deleteConnectionText: "您η‘εšθ¦εˆ ι™€ζ­€Redis连ζŽ₯ε—οΌŸ", deleteNode: "您η‘εšθ¦εˆ ι™€ζ­€RedisθŠ‚η‚Ήε—οΌŸ", deleteAllKeys: (opts) => { return `εˆ ι™€ζ­€ζ ‘εŠε…Άζ‰€ζœ‰ι” (${opts.key})?`; }, socketioConnectError: "Socket.IO ζ— ζ³•θΏžζŽ₯到θ―₯ζœεŠ‘οΌŒθ―·ι‡ζ–°εŠ θ½½εΉΆε°θ―•θ§£ε†³ζ­€ι”™θ――οΌŒε’ζˆ·η«―ζ— ζ³•θ§£ε†³ζ­€ι”™θ――", deleteKey: "您η‘εšθ¦εˆ ι™€ζ­€ι”ε—οΌŸ", rename: { title: "您η‘εšθ¦ι‡ε‘½εζ­€ι”ε—οΌŸ", textContent: "ε¦‚ζžœζ‚¨η‚Ήε‡»ι‡ε‘½εζŒ‰ι’οΌŒεƒε°†ζ°ΈδΉ…重命名歀ι”。", placeholder: "Redisι”οΌˆεΏ…ι‘»ε­˜εœ¨οΌ‰", }, ttl: { title: "您要更改歀ι”ηš„TTLε—οΌŸ", textContent: "ε¦‚ζžœζ‚¨η‚Ήε‡»ζ›΄ζ”ΉTTLζŒ‰ι’οΌŒε°†ζ›΄ζ”Ήζ­€ι”ηš„η”Ÿε­˜ζ—Άι—΄οΌŒε°†ε…ΆθΎη½δΈΊη©Ίθ‘¨η€Ίζ°ΈδΉ…ζœ‰ζ•ˆγ€‚", placeholder: "Redisι”ηš„TTLοΌˆζ•΄ζ•°ζˆ–η©ΊοΌ‰", placeholderPlaceholder: "η©Ίθ‘¨η€Ίζ°ΈδΉ…ε­˜εœ¨οΌŒε¦εˆ™δ½Ώη”¨ζ‰€ζδΎ›ηš„ζ•΄ζ•°γ€‚", convertTextToTime: "ε°†ζ–‡ζœ¬θ½¬ζ’δΈΊζ—Άι—΄", convertTextToTimePlaceholder: "δΎ‹ε¦‚οΌŒ1d 葨瀺 86400", }, license: { title: "启用捐衠θΈε―证?", textContent: "ε¦‚ζžœθ¦δ½Ώη”¨ζθ΅ η‰ˆζœ¬ηš„εŠŸθƒ½οΌŒθ―·θ”η³»alabard@gmail.comη”³θ―·θΈε―证。 ζθ΅ ι‡‘ι’δΈΊζ―ζœˆ1ηΎŽε…ƒγ€‚", placeholder: "ζ³¨ε†Œη ", }, }, language: { en: "θ‹±θ―­ / English", zn: "δΈ­ζ–‡ / Chinese", ru: "Русский / Russian", }, intention: { copy: "倍刢", downloadBuffer: "δΈ‹θΌ‰δΊŒι€²δ½ζ–‡δ»Ά", setBuffer: "δΈŠε‚³δΊŒι€²δ½ζ–‡δ»Ά", saveWithFormatJson: "保存格式", formatJson: "ζ ΌεΌεŒ–Json", pubsubMonitor: "PubSub监视器", language: "语言 / Language", ok: "η‘εš", addKey: "加ε…₯ζ­€ι”", addKeyRoot: "加ε…₯δΈ€δΈͺζ Ήι”", reloadKey: "重载ι”", reload: "重载", close: "ε…³ι—­", commands: "命什", view: "视图", statistics: "统θ‘", refresh: "εˆ·ζ–°", clear: "清陀", rename: "重命名", main: "δΈ»ι‘΅", cancel: "ε–ζΆˆ", theme: "主钘", github: "GitHub", githubRepo: "δ»“εΊ“", githubRelease: "发布", githubChangelog: "ζ›΄ζ–°ζ—₯εΏ—", settings: "θΎη½", connect: "连ζŽ₯", disconnect: "ζ–­εΌ€", overview: "ζ¦‚θ§ˆ", console: "控刢台", noConnections: "ζ²‘ζœ‰δ»»δ½•θΏžζŽ₯,请在θΎη½θœε•δΈ­ζ·»εŠ δΈ€δΈͺ连ζŽ₯。", noConnectionsInSettings: "ζ²‘ζœ‰θΏžζŽ₯οΌŒζ‚¨ε―δ»₯εœ¨δΈŠι’ζ·»εŠ δΈ€δΈͺζ–°ηš„θΏžζŽ₯。", connectionAdd: "ζ–°θΏžζŽ₯", extend: "拓展", collapse: "折叠", add: "添加", edit: "ηΌ–θΎ‘", save: "保存", ttl: "θΎη½ TTL", license: "θΎεšη‰Œη…§", delete: "εˆ ι™€", remove: "εˆ ι™€", sure: "η‘εš", testConnection: "ζ΅‹θ―•θΏžζŽ₯", getKey: "加载Redisι”εŠη›Έε…³ζ•°ζ...", jsonViewShow: "显瀺 JSON ζ ‘", jsonViewEditor: "ηΌ–θΎ‘JSON", quickConsole: "εΏ«ηš„", }, label: { id: { nodeId: 'θŠ‚η‚Ήε·', id: "连ζŽ₯ID", info: "ε¦‚ζžœζ‚¨δΈζƒ³ζ›΄ζ”Ήδ»₯δΈ‹ε±žζ€§οΌšsshPassword、sshPrivateKey、password、tlsCrt、tlsKey、tlsCaοΌŒθ―·εœ¨θΏ™δΊ›ε±žζ€§δΈ­θΎ“ε…₯连ζŽ₯ ID δ»₯δΏζŒε±žζ€§ε€ΌδΈε˜γ€‚ ε¦‚ζžœζ‚¨εΈŒζœ›θŠ‚η‚Ήε―†η ε…·ζœ‰η›ΈεŒηš„ι€»θΎ‘οΌŒεˆ™εœ¨θŠ‚η‚Ήε―†η δΈ­θΎ“ε…₯θŠ‚η‚Ή ID。" }, secureFeature: 'ε¦‚ζžœζ‚¨ηœ‹εˆ°δ»₯ P3X εΌ€ε€΄ηš„ε€ΌεΉΆδΈ”ηœ‹θ΅·ζ₯η›ΈδΌΌοΌŒεˆ™θΏ™ζ˜―δΈ€ι‘Ήε‰ε…¨εŠŸθƒ½γ€‚ 要更改θΎη½οΌŒεͺιœ€ε°†θΏ™δΊ›θΎη½ζ›Ώζ’δΈΊη©Ίζˆ–ε…Άδ»–ε†…εΉε³ε―保存εƒδ»¬γ€‚ ε¦‚ζžœζ‚¨δΈζ›΄ζ”ΉθΎη½οΌŒθΏ™δΊ›θΎη½ε°†δΏη•™εœ¨ζœεŠ‘ε™¨δΈŠηš„εŽŸζ ·γ€‚', ssh: { on: 'SSH 开启', off: 'SSH ε…³ι—­', sshHost: 'SSH 主机', sshPort: 'SSH端口', sshUsername: 'SSH η”¨ζˆ·ε', sshPassword: 'SSH密码', sshPrivateKey: 'SSH 私ι’₯', }, isBuffer: (opts) => `[object ArrayBuffer] θ‘¨η€Ίθ©²ε€Όζ˜―δΊŒι€²δ½η·©θ‘ε€ζˆ–θ©²ε€Όε€§ζ–Ό ${opts.maxValueAsBuffer}`, streamValue: `桁字ζ΅ε’Œε€Όζ˜―ε”―δΈ€ηš„γ€‚ δΎ‹ε¦‚οΌšfield1 value1 "field 2" "value 2"`, streamTimestampId: `'*'葨瀺θ‡ͺεŠ¨η”Ÿζˆζˆ–ζŒ‡εšδΈΊ-`, unableToLoadKey: ({ key }) => { return `ζ— ζ³•εŠ θ½½ζ­€ε―†ι’₯:: ${key}γ€‚ε―θƒ½οΌŒε―†ι’₯θ’«εˆ ι™€δΊ†γ€‚η‘εˆ‡ηš„ι”™θ――εœ¨ζŽ§εˆΆε°δΈ­γ€‚`; }, bigJson: "ζ­€JSON对豑袅过10 kbοΌŒε› ζ­€θ―·η‘保您ηŸ₯道θ‡ͺε·±εœ¨εšδ»€δΉˆοΌŒε› δΈΊζŸδΊ›εŠŸθƒ½ε―θƒ½δΌšηΌ“ζ…’ε‘ˆηŽ°γ€‚", addNode: "ζ·»εŠ θŠ‚η‚Ή", validateJson: "ιͺŒθ―JSON", reducedFunction: `εŠŸθƒ½ι™εˆΆ`, tooManyKeys: (opts) => { return `ε―ΉδΊŽζœ€ε€§ε‡½ζ•°ε…θΈηš„ι”δΈͺζ•°δΈΊ ${opts.maxLightKeysCount}. θ―₯ζ•°ζεΊ“允θΈε…±θΆ…θΏ‡ηš„ι”ζ€»ζ•°δΈΊ ${opts.count}.但ι”ηš„ζŽ’εΊεŠθŒƒεΌζ ‘η­‰η›Έε…³δΏ‘ζ―δΌšθ’«η¦η”¨γ€‚ζœη΄’δ»…εœ¨ζœεŠ‘ε™¨δΈŠθΏ›θ‘ŒοΌŒθ€ŒδΈζ˜―ε’ζˆ·η«―ζœη΄’γ€‚`; }, redisCommandNotFound: "ζ‰ΎδΈεˆ°εŒΉι…ηš„Redis命什...", treeKeyStore: `θ―₯ζŽ’εΊ(θ‡ͺη„ΆζŽ’εΊ)运葌在ε’ζˆ·η«―ηš„ζ΅θ§ˆε™¨δΈŠ, ζ„ε‘³η€ι’ˆε―Ήε€§εž‹ι›†εˆ(例如袅过1WδΈͺι”),ζΈ²ζŸ“ηš„ζ—Άι•ΏεΌ€ι”€ιœ€θ¦ε’žεŠ .RedisδΈ­ζ²‘ζœ‰ι”ζŽ’εΊ, 就像这样。`, socketIoTimeout: (options) => { return `Socket.IO 请求袅既,θ―·ζ±‚ζ—Άζœ€ι•Ώ(ζœ€ε€§ ${ options.timeout / 1000 }η§’) ...`; }, resizerInfo: (options) => { return `青板(ε·¦/右)ηš„ζœ€ε°ε½εΊ¦ζ˜― ${options.width}像素`; }, jsonViewNotParsable: "θ―₯ε€ΌJSONζ— ζ³•θ§£ζž", ttlTitle: "θΎη½TTLζ—Άι—΄(η§’)", passwordSecure: "ε―†η ε―θƒ½δΈΊη©ΊοΌŒδ½†δ»δΌšζ˜Ύη€Ίε­—η¬¦οΌŒθΏ™ζ˜―δΈ€ι‘Ήε‰ε…¨εŠŸθƒ½γ€‚", treeSeparatorEmpty: "ε¦‚ζžœζ ‘εˆ†ιš”η¬¦δΈΊη©ΊοΌŒεˆ™ζ ‘ε°†ζ²‘ζœ‰ε΅Œε₯—θŠ‚η‚ΉοΌŒεͺζœ‰ηΊ―εˆ—θ‘¨", tlsWithoutCert: "ζ— ιœ€ι’ε€–θ―δΉ¦ε³ε―ε―η”¨ TLS", tlsRejectUnauthorized: "拒绝ζœͺη»ζŽˆζƒηš„θ―δΉ¦", tlsSecure: "ε¦‚ζžœζ‚¨ηœ‹εˆ°δ»₯ P3X εΌ€ε€΄ηš„ TLS 配η½ζˆ–ζ‰€ζœ‰ TLS θΎη½ηœ‹θ΅·ζ₯ιƒ½η›ΈεŒοΌŒεˆ™θΏ™ζ˜―δΈ€ι‘Ήε‰ε…¨εŠŸθƒ½γ€‚ 要更改θΎη½οΌŒεͺιœ€ε°†θΏ™δΊ›θΎη½ζ›Ώζ’δΈΊη©Ίζˆ–ε…Άδ»–ε†…εΉε³ε―δΏε­˜γ€‚ ε¦‚ζžœζ‚¨δΈζ›΄ζ”Ή TLS θΎη½οΌŒθΏ™δΊ›θΎη½ε°†δΏζŒεœ¨ζœεŠ‘ε™¨δΈŠηš„εŽŸζ ·γ€‚", treeSeparatorEmptyNote: "ζ²‘ζœ‰ε΅Œε₯—θŠ‚η‚ΉοΌŒεͺζ˜―δΈ€δΈͺηΊ―εˆ—θ‘¨", welcomeConsole: "欒迎ζ₯到Redis控刢台", welcomeConsoleInfo: "δΈŠδΈ‹ζ–Ήε‘ι”ι€‰ζ‹©εŽ†ε²θ°ε½•εŠŸθƒ½ε·²ε―用", redisListIndexInfo: "η©Ίε€ΌθΏ½εŠ , -1 εˆ°ε‰η½ζˆ–δΏε­˜εˆ°ε…‰ζ ‡δΉ‹ε€„", console: "控刢台", connectiondAdd: "添加连ζŽ₯", connectiondEdit: "ηΌ–θΎ‘θΏžζŽ₯", connectiondView: "ζŸ₯ηœ‹θΏžζŽ₯", connections: "连ζŽ₯", keysSort: { on: "开启ι”ζŽ’εΊ", off: "ε…³ι—­ι”ζŽ’εΊ", }, cluster: { on: "羀集", off: "集羀关闭", }, sentinel: { on: "ε“¨ε…΅ι–‹ε•Ÿ", off: "ε“¨ε…΅ι—œι–‰", name: '哨兡名称', }, readonly: { on: "εͺθ―»", off: "εͺθ―»ε…³ι—­", }, theme: { light: "桅棕", dark: "ι»‘ζš—δΌδΈš", darkNeu: "ζš—θ‰²", darkoBluo: "蓝色", enterprise: "企业风", redis: "Redis风格", matrix: "矩阡", }, connected: (opts) => { return `已连ζŽ₯: ${opts.name}`; }, tree: "ζ ‘", askAuth: "θ―·ζ±‚ζŽˆζƒ", }, status: { dataCopied: "ζ•°ζεœ¨ε‰ͺ贴板中", licenseSaved: "θΈε―证已保存", nodeRemoved: "θŠ‚η‚Ήε·²εˆ ι™€", keyIsNotExisting: "ζ­€ι”ε―θƒ½ε·²θ’«εˆ ι™€ζˆ–θΏ‡ζœŸγ€‚", keyCount: (opts) => { if (opts.keyCount === 0) { return "ζ²‘ζœ‰δ»»δ½•ι”"; } else if (opts.keyCount === 1) { return "1 δΈͺι”"; } else { return `${opts.keyCount} ι”`; } }, treeExpandAll: "ε±•εΌ€ζ‰€ε―θƒ½ηš„εŽŸε› ζ˜―οΌŒθΏžζŽ₯ε·²εˆ ι™€οΌŒθ‡ͺ动连ζŽ₯ε€±θ΄₯ζœ‰ζ ‘,θ―₯ζ“δ½œηš„δ»£δ»·ε°±ζ˜―ζœ‰η‚Ήθ΄Ήζ—Ά...", noRedisKeys: "ζ­€ζ•°ζεΊ“δΈ­ζ²‘ζœ‰δ»»δ½•ι”。", redisConnected: "Redis 连ζŽ₯成功", reloadingDataInfo: "ι‡ζ–°εŠ θ½½Redisζ•°ζδΏ‘息", added: "已添加", saved: "ε·²ζ›΄ζ–°", cancelled: "ε·²ε–ζΆˆ", deleted: "ε·²εˆ ι™€", savedRedis: "Redisζ•°ζε·²δΏε­˜", redisDisconnected: (opts) => { return `θ―₯连ζŽ₯ζœ‰δΈ€δΈͺι”™θ――: ${opts.error.message}`; }, dbChanged: (opts) => { return `dbη΄’εΌ•θΎη½δΈΊ ${opts.db}. `; }, treeDeleted: (opts) => { return `θ―₯ζ ‘ε·²εˆ ι™€ (${opts.key}).`; }, deletedKey: (opts) => { return `θ―₯ι”ε·²εˆ ι™€ (${opts.key}).`; }, renamedKey: "θ―₯ι”已重命名", ttlChanged: "θ―₯ι”TTLε·²θ’«ζ›΄ζ”Ή", notInteger: "θΎ“ε…₯ε€ΌδΈζ˜―δΈ€δΈͺζ•΄ζ•°", persisted: "ζ°ΈδΉ…ι”", set: "ι”ε·²θΎη½/添加", }, code: { "delete-connection": "歀连ζŽ₯ε·²εˆ ι™€οΌŒε› ζ­€ζ‚¨δΈŽζ­€RedisεžδΎ‹ζ–­εΌ€θΏžζŽ₯。", "save-connection": "歀连ζŽ₯ε·²ζ›΄ζ”ΉοΌŒε› ζ­€ζ‚¨δΈŽζ­€RedisεžδΎ‹ζ–­εΌ€θΏžζŽ₯。 你可δ»₯ι‡ζ–°θΏžζŽ₯。", "readonly-connections": "连ζŽ₯(添加/保存/εˆ ι™€)εͺ是εͺ读!", "readonly-connection-mode": "歀连ζŽ₯δΈΊεͺ读樑式!", "list-out-of-bounds": "ζ­€εˆ—θ‘¨η΄’εΌ•θΆ…ε‡ΊθŒƒε›΄", "donation-ware-feature": "ζθ΅ η‰ˆζœ¬δΈ­ζδΎ›δΊ†ζ­€εŠŸθƒ½γ€‚", "auto-connection-failed": "ε› ζ­€οΌŒε―θƒ½ε―Όθ‡΄θΏžζŽ₯θ’«εˆ ι™€εΉΆδΈ”θ‡ͺ动连ζŽ₯ε€±θ΄₯。", invalid_console_command: "ζ­€ε‘½δ»€ζ— ζ³•ι€šθΏ‡ GUI θΏθ‘Œγ€‚", }, form: { error: { required: "εΏ…ε‘«", port: "η«―ε£ε·θŒƒε›΄ζ˜― 1-65535", invalid: "ε€Όζ— ζ•ˆ,请重新输ε…₯", }, connection: { label: { name: "连ζŽ₯名字", host: "主机名", port: "端口", password: "密码", username: "η”¨ζˆ·ε", }, }, treeSettings: { maxValueDisplay: "ζœ€ε€§ε€Όζ˜Ύη€Ίε­—η¬¦δΈ²ι•ΏεΊ¦", maxValueDisplayInfo: "ε¦‚ζžœζœ€ε€§ε€Όζ˜Ύη€ΊδΈΊι›ΆοΌŒεˆ™ζ˜Ύη€Ίζ‰€ζœ‰ε†…εΉοΌŒε¦‚ζžœε€§δΊŽ0οΌŒεˆ™ε°†ζˆͺ断。 ε¦‚ζžœεƒζ˜―-1,εƒε°†δΈζ˜Ύη€Ίζ²‘ζœ‰ηΌ–θΎ‘ε­—η¬¦δΈ²ηš„ε€ΌοΌŒε―ΉδΊŽε…Άδ»–δΊΊοΌŒεƒζ˜Ύη€Ίζ‰€ζœ‰ε†…εΉγ€‚", maxKeys: "ζœ€ε€§ε―†ι’₯ζ•°", maxKeysInfo: "为了避免GUIε΄©ζΊƒοΌŒζˆ‘δ»¬ι™εˆΆδΊ†ζœ€ε€§ε―†ι’₯数。", keyCount: () => { return `ι”ζ•°: ${p3xr.state.keysRaw.length}`; }, label: { animation: "δ½Ώη”¨εŠ¨η”»", noAnimation: "ζ²‘ζœ‰εŠ¨η”»", jsonFormatTwoSpace: "用2δΈͺη©Ίζ Όζ ΌεΌεŒ–JSON", jsonFormatFourSpace: "用4δΈͺη©Ίζ Όζ ΌεΌεŒ–JSON", formName: "RedisθΎη½", searchModeClient: "ε’户端搜紒樑式", searchModeServer: "服劑端搜紒樑式", searchModeStartsWith: "δ»₯樑式启动搜紒", searchModeIncludes: "ζœη΄’εŒ…ζ‹¬ζ¨‘εΌ", }, field: { treeSeparator: "ζ ‘εˆ†ιš”η¬¦", treeSeparatorSelector: "ζ ‘εˆ†ιš”η¬¦ι€‰ζ‹©ε™¨", page: "ζ ‘εˆ†ι‘΅ζ•°", keyPageCount: "ζŒ‰ι”εˆ†ι‘΅ζ•°", keysSort: "ε―Ήι”θΏ›θ‘ŒζŽ’εΊ", searchMode: "搜紒樑式", searchModeStartsWith: "搜紒δ»₯ / 开倴", }, error: { keyPageCount: "ε―†ι’₯ι‘΅ζ•°εΏ…ι‘»δΈΊ5到100δΉ‹ι—΄ηš„ζ•΄ζ•°", page: "ι‘΅ζ•°εΏ…ι‘»ζ˜―10 - 500δΉ‹ι—΄ηš„ζ•΄ζ•°", maxValueDisplay: "ζœ€ε€§ζ˜Ύη€Ίε€ΌεΏ…ι‘»ζ˜―δ»‹δΊŽ-1ε’Œ32768δΉ‹ι—΄ηš„ζ•΄ζ•°", maxKeys: "ζœ€ε€§ε―†ι’₯θ‘ζ•°ε€ΌεΏ…ι‘»ζ˜―100到100000δΉ‹ι—΄ηš„ζ•΄ζ•°", }, }, key: { label: { formName: { add: "ζ·»εŠ ζ–°ηš„Redisι”", edit: "ηΌ–θΎ‘ Redis key", append: "ζ·»εŠ εˆ°ηŽ°ζœ‰ηš„Redisι”", }, }, field: { streamTimestamp: "ζ—Άι—΄ζˆ³θ°", key: "ι”", type: "η±»εž‹", index: "η΄’εΌ•", hashKey: "ε“ˆεΈŒι”", score: "εˆ†ζ•°", value: "ε€Ό", }, error: { streamTimestamp: "ζ—Άι—΄ζˆ³ζ˜―εΏ…ιœ€ηš„οΌŒε―δ»₯是Redis格式,也可δ»₯*", key: "ι”θ‡³ε°‘ε­˜εœ¨δΈ€δΈͺ字符", hashKey: "ε“ˆεΈŒθ‘¨ι”θ‡³ε°‘ζ˜―δΈ€δΈͺ字符", score: "ζŽ’εΊηš„ι›†εˆεˆ†ζ•°ζ˜―εΏ…ιœ€ηš„", value: "θ―₯ε€Όζ˜―εΏ…ε‘«ηš„", }, }, main: { label: { database: "DB", }, }, }, page: { overview: { noConnected: "ζ²‘ζœ‰δ»»δ½•θΏžζŽ₯到Redis", overviewClients: "ζŒ‰ε’户端连ζŽ₯θ‘ζ•°ε±•η€Ίζ‰€ζœ‰θΏžζŽ₯", connectedCount: (opt) => { if (opt.length === 1) { return "1 ε’户端"; } return `${opt.length} ε’户端`; }, }, key: { label: { key: "ι”", encoding: "编码", length: "倧小", ttl: "TTL", ttlTitle: "η”Ÿε­˜ζ—Άι—΄", type: "η±»εž‹", ttlNotExpire: "δΈδΌšθΏ‡ζœŸ", lengthString: "位元硄", lengthItem: "ι‘Ήζ•°", actions: "ζ“δ½œ", }, list: { table: { index: "η΄’εΌ•", value: "ε€Ό", }, }, hash: { table: { hashkey: "ε“ˆεΈŒ", value: "ε€Ό", }, }, set: { table: { value: "ζˆε‘˜", }, }, zset: { table: { value: "ζˆε‘˜", score: "εˆ†ζ•°", }, }, stream: { table: { timestamp: "ζ—Άι—΄ζˆ³ID", field: "ι’†εŸŸ", value: "ε€Ό", }, }, }, treeControls: { settings: "ζ ‘θΎη½", expandAll: "ε±•εΌ€ζ‰€ζœ‰", collapseAll: "ζŠ˜ε ζ‰€ζœ‰", search: { search: "在ι”δΈ­ζœη΄’", clear: "ζΈ…η©Ίε½“ε‰ζœη΄’η»“ζžœ", placeholderClient: "ε’户端搜紒", placeholderServer: "服劑端搜紒", info: `ε’ζˆ·η«―ζœη΄’ζ˜―εŒΉι…θΎ“ε…₯ηš„ζ–‡ζœ¬,ζœεŠ‘η«―ζœη΄’εˆ™ι΅εΎͺ*{search-text}*樑式搜紒.ε―ΉδΊŽε€§ι‡ζ•°ζηš„ζœη΄’ζœ€ε₯½εœ¨ζœεŠ‘η«―θΏ›θ‘Œζœη΄’,θ€ŒθΎƒε°ζ•°ζι‡ε―δ»₯考虑ε’ζˆ·η«―ζœη΄’γ€‚ε¦‚ζžœι”ζ•°θΆ…θΏ‡ ${p3xr.settings.maxLightKeysCount}δΈͺηš„εˆ™εͺθƒ½εœ¨ζœεŠ‘η«―ζœη΄’`, largeSetInfo: "εœ¨ε€§εž‹ι›†εˆδΈ­οΌŒη¦η”¨ε’ζˆ·η«―ζœη΄’γ€‚ 所δ»₯现在εͺθƒ½θΏ›θ‘ŒζœεŠ‘ε™¨η«―ζœη΄’γ€‚", infoDetails: "θ¦δΊ†θ§£ζœη΄’ηš„ε·₯δ½œεŽŸη†οΌŒθ―·ζŸ₯ηœ‹θΎη½", }, pager: { next: "δΈ‹δΈ€ι‘΅", prev: "δΈŠδΈ€ι‘΅", first: "ι¦–ι‘΅", last: "末鑡", }, }, }, time: { years: "εΉ΄δ»½", months: "δΈͺ月", days: "倩", year: "εΉ΄", month: "月", day: "倩", }, redisTypes: { string: "字符串", list: "εˆ—θ‘¨", hash: "ε“ˆεΈŒθ‘¨", set: "ι›†εˆ", zset: "ζœ‰εΊι›†εˆ - zset", stream: "桁", }, }; module.exports = strings; src/vendor.js000066400000000000000000000022241517671130100135020ustar00rootroot00000000000000require('./vendor.scss') // jquery global.$ = require('jquery/dist/jquery.slim') global.jQuery = global.$ jQuery.event.special.touchstart = { setup: function( _, ns, handle ){ if ( ns.includes("noPreventDefault") ) { this.addEventListener("touchstart", handle, { passive: false }); } else { this.addEventListener("touchstart", handle, { passive: true }); } } }; // moment global.moment = require('moment') require('moment/locale/zh-cn') require('moment/locale/ru') global.$window = $(window); $(() => { global.$body = $('body'); }) global.htmlEncode = require('js-htmlencode').htmlEncode // socket global.io = require('socket.io-client/dist/socket.io.js') // angular global.angular = require('angular'); require('angular-aria'); require('angular-sanitize') require('angular-messages'); require('angular-animate'); require('angular-cookies'); require('angular-inview') require('@uirouter/angularjs') require('angular-material'); require('angular-tree-control') //require('angular-tree-control/context-menu') // angular context menu fix angular.module("contextMenu", []); require('angular-json-tree') src/vendor.scss000066400000000000000000000013661517671130100140470ustar00rootroot00000000000000@import '~material-design-icons-iconfont/dist/material-design-icons.css'; @import '~angular-material/angular-material.css'; @import '~angular-tree-control/css/tree-control.css'; @import '~angular-json-tree/dist/angular-json-tree.css'; @import '~@fortawesome/fontawesome-free/css/all.css'; @import '~@fontsource/roboto/300.css'; @import '~@fontsource/roboto/400.css'; @import '~@fontsource/roboto/400-italic.css'; @import '~@fontsource/roboto/500.css'; @import '~@fontsource/roboto/700.css'; @import '~@fontsource/roboto-mono/300.css'; @import '~@fontsource/roboto-mono/400.css'; @import '~@fontsource/roboto-mono/400-italic.css'; @import '~@fontsource/roboto-mono/500.css'; @import '~@fontsource/roboto-mono/700.css'; @import "~angular/angular-csp.css"; yarn.lock000066400000000000000000012122701517671130100127100ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: "@babel/helper-validator-identifier" "^7.25.9" js-tokens "^4.0.0" picocolors "^1.0.0" "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": version "7.26.3" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz" integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== "@babel/core@^7.26.0": version "7.26.0" resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz" integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.26.0" "@babel/generator" "^7.26.0" "@babel/helper-compilation-targets" "^7.25.9" "@babel/helper-module-transforms" "^7.26.0" "@babel/helpers" "^7.26.0" "@babel/parser" "^7.26.0" "@babel/template" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/types" "^7.26.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" "@babel/generator@^7.26.0", "@babel/generator@^7.26.3": version "7.26.3" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz" integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== dependencies: "@babel/parser" "^7.26.3" "@babel/types" "^7.26.3" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" "@babel/helper-annotate-as-pure@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz" integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== dependencies: "@babel/types" "^7.25.9" "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz" integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== dependencies: "@babel/compat-data" "^7.25.9" "@babel/helper-validator-option" "^7.25.9" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz" integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" "@babel/helper-member-expression-to-functions" "^7.25.9" "@babel/helper-optimise-call-expression" "^7.25.9" "@babel/helper-replace-supers" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/traverse" "^7.25.9" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": version "7.26.3" resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz" integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" regexpu-core "^6.2.0" semver "^6.3.1" "@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": version "0.6.3" resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz" integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" "@babel/helper-member-expression-to-functions@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz" integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== dependencies: "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" "@babel/helper-module-imports@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz" integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== dependencies: "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" "@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": version "7.26.0" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz" integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== dependencies: "@babel/helper-module-imports" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/helper-optimise-call-expression@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz" integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== dependencies: "@babel/types" "^7.25.9" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz" integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== "@babel/helper-remap-async-to-generator@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz" integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" "@babel/helper-wrap-function" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/helper-replace-supers@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz" integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== dependencies: "@babel/helper-member-expression-to-functions" "^7.25.9" "@babel/helper-optimise-call-expression" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz" integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== dependencies: "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" "@babel/helper-string-parser@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz" integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== "@babel/helper-validator-identifier@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== "@babel/helper-validator-option@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz" integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== "@babel/helper-wrap-function@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz" integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== dependencies: "@babel/template" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" "@babel/helpers@^7.26.0": version "7.26.0" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz" integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== dependencies: "@babel/template" "^7.25.9" "@babel/types" "^7.26.0" "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": version "7.26.3" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz" integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== dependencies: "@babel/types" "^7.26.3" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz" integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz" integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz" integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz" integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-transform-optional-chaining" "^7.25.9" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz" integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-import-assertions@^7.26.0": version "7.26.0" resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz" integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-import-attributes@^7.26.0": version "7.26.0" resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz" integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-arrow-functions@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz" integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-async-generator-functions@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz" integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-remap-async-to-generator" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/plugin-transform-async-to-generator@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz" integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: "@babel/helper-module-imports" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-remap-async-to-generator" "^7.25.9" "@babel/plugin-transform-block-scoped-functions@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz" integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-block-scoping@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz" integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-class-properties@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz" integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== dependencies: "@babel/helper-create-class-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-class-static-block@^7.26.0": version "7.26.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz" integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-classes@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz" integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" "@babel/helper-compilation-targets" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-replace-supers" "^7.25.9" "@babel/traverse" "^7.25.9" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz" integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/template" "^7.25.9" "@babel/plugin-transform-destructuring@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz" integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-dotall-regex@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz" integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-duplicate-keys@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz" integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz" integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-dynamic-import@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz" integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-exponentiation-operator@^7.25.9": version "7.26.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz" integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-export-namespace-from@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz" integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-for-of@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz" integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-transform-function-name@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz" integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: "@babel/helper-compilation-targets" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/plugin-transform-json-strings@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz" integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-literals@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz" integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-logical-assignment-operators@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz" integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-member-expression-literals@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz" integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-modules-amd@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz" integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: "@babel/helper-module-transforms" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-modules-commonjs@^7.25.9": version "7.26.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz" integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: "@babel/helper-module-transforms" "^7.26.0" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-modules-systemjs@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz" integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: "@babel/helper-module-transforms" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" "@babel/traverse" "^7.25.9" "@babel/plugin-transform-modules-umd@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz" integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: "@babel/helper-module-transforms" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz" integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-new-target@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz" integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz" integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-numeric-separator@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz" integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-object-rest-spread@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz" integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== dependencies: "@babel/helper-compilation-targets" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-parameters" "^7.25.9" "@babel/plugin-transform-object-super@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz" integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-replace-supers" "^7.25.9" "@babel/plugin-transform-optional-catch-binding@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz" integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-optional-chaining@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz" integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-transform-parameters@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz" integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-private-methods@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz" integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: "@babel/helper-create-class-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-private-property-in-object@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz" integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" "@babel/helper-create-class-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-property-literals@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz" integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-regenerator@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz" integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== dependencies: "@babel/helper-plugin-utils" "^7.25.9" regenerator-transform "^0.15.2" "@babel/plugin-transform-regexp-modifiers@^7.26.0": version "7.26.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz" integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-reserved-words@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz" integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-shorthand-properties@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz" integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-spread@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz" integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-transform-sticky-regex@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz" integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-template-literals@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz" integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-typeof-symbol@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz" integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-unicode-escapes@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz" integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-unicode-property-regex@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz" integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-unicode-regex@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz" integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-unicode-sets-regex@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz" integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/preset-env@^7.26.0": version "7.26.0" resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz" integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== dependencies: "@babel/compat-data" "^7.26.0" "@babel/helper-compilation-targets" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-validator-option" "^7.25.9" "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-import-assertions" "^7.26.0" "@babel/plugin-syntax-import-attributes" "^7.26.0" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.25.9" "@babel/plugin-transform-async-generator-functions" "^7.25.9" "@babel/plugin-transform-async-to-generator" "^7.25.9" "@babel/plugin-transform-block-scoped-functions" "^7.25.9" "@babel/plugin-transform-block-scoping" "^7.25.9" "@babel/plugin-transform-class-properties" "^7.25.9" "@babel/plugin-transform-class-static-block" "^7.26.0" "@babel/plugin-transform-classes" "^7.25.9" "@babel/plugin-transform-computed-properties" "^7.25.9" "@babel/plugin-transform-destructuring" "^7.25.9" "@babel/plugin-transform-dotall-regex" "^7.25.9" "@babel/plugin-transform-duplicate-keys" "^7.25.9" "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" "@babel/plugin-transform-dynamic-import" "^7.25.9" "@babel/plugin-transform-exponentiation-operator" "^7.25.9" "@babel/plugin-transform-export-namespace-from" "^7.25.9" "@babel/plugin-transform-for-of" "^7.25.9" "@babel/plugin-transform-function-name" "^7.25.9" "@babel/plugin-transform-json-strings" "^7.25.9" "@babel/plugin-transform-literals" "^7.25.9" "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" "@babel/plugin-transform-member-expression-literals" "^7.25.9" "@babel/plugin-transform-modules-amd" "^7.25.9" "@babel/plugin-transform-modules-commonjs" "^7.25.9" "@babel/plugin-transform-modules-systemjs" "^7.25.9" "@babel/plugin-transform-modules-umd" "^7.25.9" "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" "@babel/plugin-transform-new-target" "^7.25.9" "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" "@babel/plugin-transform-numeric-separator" "^7.25.9" "@babel/plugin-transform-object-rest-spread" "^7.25.9" "@babel/plugin-transform-object-super" "^7.25.9" "@babel/plugin-transform-optional-catch-binding" "^7.25.9" "@babel/plugin-transform-optional-chaining" "^7.25.9" "@babel/plugin-transform-parameters" "^7.25.9" "@babel/plugin-transform-private-methods" "^7.25.9" "@babel/plugin-transform-private-property-in-object" "^7.25.9" "@babel/plugin-transform-property-literals" "^7.25.9" "@babel/plugin-transform-regenerator" "^7.25.9" "@babel/plugin-transform-regexp-modifiers" "^7.26.0" "@babel/plugin-transform-reserved-words" "^7.25.9" "@babel/plugin-transform-shorthand-properties" "^7.25.9" "@babel/plugin-transform-spread" "^7.25.9" "@babel/plugin-transform-sticky-regex" "^7.25.9" "@babel/plugin-transform-template-literals" "^7.25.9" "@babel/plugin-transform-typeof-symbol" "^7.25.9" "@babel/plugin-transform-unicode-escapes" "^7.25.9" "@babel/plugin-transform-unicode-property-regex" "^7.25.9" "@babel/plugin-transform-unicode-regex" "^7.25.9" "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.6" babel-plugin-polyfill-regenerator "^0.6.1" core-js-compat "^3.38.1" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/types" "^7.4.4" esutils "^2.0.2" "@babel/runtime@^7.8.4": version "7.26.0" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== dependencies: regenerator-runtime "^0.14.0" "@babel/template@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz" integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== dependencies: "@babel/code-frame" "^7.25.9" "@babel/parser" "^7.25.9" "@babel/types" "^7.25.9" "@babel/traverse@^7.25.9": version "7.26.4" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz" integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== dependencies: "@babel/code-frame" "^7.26.2" "@babel/generator" "^7.26.3" "@babel/parser" "^7.26.3" "@babel/template" "^7.25.9" "@babel/types" "^7.26.3" debug "^4.3.1" globals "^11.1.0" "@babel/types@^7.2.0", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.4.4": version "7.26.3" resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz" integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== dependencies: "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" "@discoveryjs/json-ext@0.5.7": version "0.5.7" resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@discoveryjs/json-ext@^0.6.1": version "0.6.3" resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz" integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== "@fontsource/roboto-mono@^5.1.1": version "5.1.1" resolved "https://registry.yarnpkg.com/@fontsource/roboto-mono/-/roboto-mono-5.1.1.tgz#ef2437d6073b2e78f9189052979e2fdf70ec6949" integrity sha512-3Uwg4ZsoYlqzpGgPQn5bpBjCBX7HISbEmbycmrdyzK/dcMChlsmf0VGBjSs2AZV+UK7kLCUFYnCakXYz6VTIUA== "@fontsource/roboto@^5.1.1": version "5.1.1" resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-5.1.1.tgz#64b3f819baf8d3bcfb48c0437ddc7e4118a6ab14" integrity sha512-XwVVXtERDQIM7HPUIbyDe0FP4SRovpjF7zMI8M7pbqFp3ahLJsJTd18h+E6pkar6UbV3btbwkKjYARr5M+SQow== "@fortawesome/fontawesome-free@^6.7.2": version "6.7.2" resolved "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz" integrity sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA== "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" string-width-cjs "npm:string-width@^4.2.0" strip-ansi "^7.0.1" strip-ansi-cjs "npm:strip-ansi@^6.0.1" wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" "@isaacs/fs-minipass@^4.0.0": version "4.0.1" resolved "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz" integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== dependencies: minipass "^7.0.4" "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" "@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.5": version "0.3.8" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz" integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": version "0.3.6" resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz" integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.5.0" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@jsonjoy.com/base64@^1.1.1": version "1.1.2" resolved "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz" integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== "@jsonjoy.com/json-pack@^1.0.3": version "1.1.1" resolved "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz" integrity sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw== dependencies: "@jsonjoy.com/base64" "^1.1.1" "@jsonjoy.com/util" "^1.1.2" hyperdyperid "^1.2.0" thingies "^1.20.0" "@jsonjoy.com/util@^1.1.2", "@jsonjoy.com/util@^1.3.0": version "1.5.0" resolved "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz" integrity sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA== "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" "@npmcli/agent@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz" integrity sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q== dependencies: agent-base "^7.1.0" http-proxy-agent "^7.0.0" https-proxy-agent "^7.0.1" lru-cache "^10.0.1" socks-proxy-agent "^8.0.3" "@npmcli/arborist@^9.0.0": version "9.0.0" resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-9.0.0.tgz#cad6961fa58362c558ec82910fd2bab3c477c802" integrity sha512-ZFsI/VJ7wJ2rTksLNJ9xqr75Ste/wiKvW+7w12ZGbcT67xWii97yS+aDlh3edNhqlqoXvdzYG4hTNui81VxJCA== dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/fs" "^4.0.0" "@npmcli/installed-package-contents" "^3.0.0" "@npmcli/map-workspaces" "^4.0.1" "@npmcli/metavuln-calculator" "^9.0.0" "@npmcli/name-from-folder" "^3.0.0" "@npmcli/node-gyp" "^4.0.0" "@npmcli/package-json" "^6.0.1" "@npmcli/query" "^4.0.0" "@npmcli/redact" "^3.0.0" "@npmcli/run-script" "^9.0.1" bin-links "^5.0.0" cacache "^19.0.1" common-ancestor-path "^1.0.1" hosted-git-info "^8.0.0" json-stringify-nice "^1.1.4" lru-cache "^10.2.2" minimatch "^9.0.4" nopt "^8.0.0" npm-install-checks "^7.1.0" npm-package-arg "^12.0.0" npm-pick-manifest "^10.0.0" npm-registry-fetch "^18.0.1" pacote "^21.0.0" parse-conflict-json "^4.0.0" proc-log "^5.0.0" proggy "^3.0.0" promise-all-reject-late "^1.0.0" promise-call-limit "^3.0.1" read-package-json-fast "^4.0.0" semver "^7.3.7" ssri "^12.0.0" treeverse "^3.0.0" walk-up-path "^4.0.0" "@npmcli/config@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-10.0.0.tgz#41aff849fe643f57be6b7f5a62fec17464f79865" integrity sha512-SXnVmSOQKfxouhrTV2sA2s6KV9v+nfLuddljCl5CtNS89AkVk5Bqkz8wqoqIzR6KjAGjiP1zXDZokqHR5kPYoQ== dependencies: "@npmcli/map-workspaces" "^4.0.1" "@npmcli/package-json" "^6.0.1" ci-info "^4.0.0" ini "^5.0.0" nopt "^8.0.0" proc-log "^5.0.0" semver "^7.3.5" walk-up-path "^4.0.0" "@npmcli/fs@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz" integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q== dependencies: semver "^7.3.5" "@npmcli/git@^6.0.0", "@npmcli/git@^6.0.1": version "6.0.1" resolved "https://registry.npmjs.org/@npmcli/git/-/git-6.0.1.tgz" integrity sha512-BBWMMxeQzalmKadyimwb2/VVQyJB01PH0HhVSNLHNBDZN/M/h/02P6f8fxedIiFhpMj11SO9Ep5tKTBE7zL2nw== dependencies: "@npmcli/promise-spawn" "^8.0.0" ini "^5.0.0" lru-cache "^10.0.1" npm-pick-manifest "^10.0.0" proc-log "^5.0.0" promise-inflight "^1.0.1" promise-retry "^2.0.1" semver "^7.3.5" which "^5.0.0" "@npmcli/installed-package-contents@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz" integrity sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q== dependencies: npm-bundled "^4.0.0" npm-normalize-package-bin "^4.0.0" "@npmcli/map-workspaces@^4.0.1", "@npmcli/map-workspaces@^4.0.2": version "4.0.2" resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz" integrity sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q== dependencies: "@npmcli/name-from-folder" "^3.0.0" "@npmcli/package-json" "^6.0.0" glob "^10.2.2" minimatch "^9.0.0" "@npmcli/metavuln-calculator@^9.0.0": version "9.0.0" resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.0.tgz#7e54d7c9f33999fde0ad2998904e0edd1627e26d" integrity sha512-znLKqdy1ZEGNK3VB9j/RzGyb/P0BJb3fGpvEbHIAyBAXsps2l1ce8SVHfsGAFLl9s8072PxafqTn7RC8wSnQPg== dependencies: cacache "^19.0.0" json-parse-even-better-errors "^4.0.0" pacote "^21.0.0" proc-log "^5.0.0" semver "^7.3.5" "@npmcli/name-from-folder@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz" integrity sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA== "@npmcli/node-gyp@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz" integrity sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA== "@npmcli/package-json@^6.0.0", "@npmcli/package-json@^6.0.1", "@npmcli/package-json@^6.1.0": version "6.1.0" resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.1.0.tgz" integrity sha512-t6G+6ZInT4X+tqj2i+wlLIeCKnKOTuz9/VFYDtj+TGTur5q7sp/OYrQA19LdBbWfXDOi0Y4jtedV6xtB8zQ9ug== dependencies: "@npmcli/git" "^6.0.0" glob "^10.2.2" hosted-git-info "^8.0.0" json-parse-even-better-errors "^4.0.0" normalize-package-data "^7.0.0" proc-log "^5.0.0" semver "^7.5.3" "@npmcli/promise-spawn@^8.0.0", "@npmcli/promise-spawn@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz" integrity sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ== dependencies: which "^5.0.0" "@npmcli/query@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@npmcli/query/-/query-4.0.0.tgz" integrity sha512-3pPbese0fbCiFJ/7/X1GBgxAKYFE8sxBddA7GtuRmOgNseH4YbGsXJ807Ig3AEwNITjDUISHglvy89cyDJnAwA== dependencies: postcss-selector-parser "^6.1.2" "@npmcli/redact@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@npmcli/redact/-/redact-3.0.0.tgz" integrity sha512-/1uFzjVcfzqrgCeGW7+SZ4hv0qLWmKXVzFahZGJ6QuJBj6Myt9s17+JL86i76NV9YSnJRcGXJYQbAU0rn1YTCQ== "@npmcli/run-script@^9.0.0", "@npmcli/run-script@^9.0.1": version "9.0.2" resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.0.2.tgz" integrity sha512-cJXiUlycdizQwvqE1iaAb4VRUM3RX09/8q46zjvy+ct9GhfZRWd7jXYVc1tn/CfRlGPVkX/u4sstRlepsm7hfw== dependencies: "@npmcli/node-gyp" "^4.0.0" "@npmcli/package-json" "^6.0.0" "@npmcli/promise-spawn" "^8.0.0" node-gyp "^11.0.0" proc-log "^5.0.0" which "^5.0.0" "@parcel/watcher-android-arm64@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz#e32d3dda6647791ee930556aee206fcd5ea0fb7a" integrity sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ== "@parcel/watcher-darwin-arm64@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz#0d9e680b7e9ec1c8f54944f1b945aa8755afb12f" integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== "@parcel/watcher-darwin-x64@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz#f9f1d5ce9d5878d344f14ef1856b7a830c59d1bb" integrity sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA== "@parcel/watcher-freebsd-x64@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz#2b77f0c82d19e84ff4c21de6da7f7d096b1a7e82" integrity sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw== "@parcel/watcher-linux-arm-glibc@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz#92ed322c56dbafa3d2545dcf2803334aee131e42" integrity sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA== "@parcel/watcher-linux-arm-musl@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz#cd48e9bfde0cdbbd2ecd9accfc52967e22f849a4" integrity sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA== "@parcel/watcher-linux-arm64-glibc@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz#7b81f6d5a442bb89fbabaf6c13573e94a46feb03" integrity sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA== "@parcel/watcher-linux-arm64-musl@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz#dcb8ff01077cdf59a18d9e0a4dff7a0cfe5fd732" integrity sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q== "@parcel/watcher-linux-x64-glibc@2.5.0": version "2.5.0" resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz" integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== "@parcel/watcher-linux-x64-musl@2.5.0": version "2.5.0" resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz" integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== "@parcel/watcher-win32-arm64@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz#87cdb16e0783e770197e52fb1dc027bb0c847154" integrity sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig== "@parcel/watcher-win32-ia32@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz#778c39b56da33e045ba21c678c31a9f9d7c6b220" integrity sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA== "@parcel/watcher-win32-x64@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz#33873876d0bbc588aacce38e90d1d7480ce81cb7" integrity sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw== "@parcel/watcher@^2.4.1": version "2.5.0" resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz" integrity sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ== dependencies: detect-libc "^1.0.3" is-glob "^4.0.3" micromatch "^4.0.5" node-addon-api "^7.0.0" optionalDependencies: "@parcel/watcher-android-arm64" "2.5.0" "@parcel/watcher-darwin-arm64" "2.5.0" "@parcel/watcher-darwin-x64" "2.5.0" "@parcel/watcher-freebsd-x64" "2.5.0" "@parcel/watcher-linux-arm-glibc" "2.5.0" "@parcel/watcher-linux-arm-musl" "2.5.0" "@parcel/watcher-linux-arm64-glibc" "2.5.0" "@parcel/watcher-linux-arm64-musl" "2.5.0" "@parcel/watcher-linux-x64-glibc" "2.5.0" "@parcel/watcher-linux-x64-musl" "2.5.0" "@parcel/watcher-win32-arm64" "2.5.0" "@parcel/watcher-win32-ia32" "2.5.0" "@parcel/watcher-win32-x64" "2.5.0" "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@polka/url@^1.0.0-next.24": version "1.0.0-next.28" resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz" integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== "@sigstore/bundle@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.0.0.tgz" integrity sha512-XDUYX56iMPAn/cdgh/DTJxz5RWmqKV4pwvUAEKEWJl+HzKdCd/24wUa9JYNMlDSCb7SUHAdtksxYX779Nne/Zg== dependencies: "@sigstore/protobuf-specs" "^0.3.2" "@sigstore/core@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz" integrity sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg== "@sigstore/protobuf-specs@^0.3.2": version "0.3.2" resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz" integrity sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw== "@sigstore/sign@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@sigstore/sign/-/sign-3.0.0.tgz" integrity sha512-UjhDMQOkyDoktpXoc5YPJpJK6IooF2gayAr5LvXI4EL7O0vd58okgfRcxuaH+YTdhvb5aa1Q9f+WJ0c2sVuYIw== dependencies: "@sigstore/bundle" "^3.0.0" "@sigstore/core" "^2.0.0" "@sigstore/protobuf-specs" "^0.3.2" make-fetch-happen "^14.0.1" proc-log "^5.0.0" promise-retry "^2.0.1" "@sigstore/tuf@^3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.0.0.tgz" integrity sha512-9Xxy/8U5OFJu7s+OsHzI96IX/OzjF/zj0BSSaWhgJgTqtlBhQIV2xdrQI5qxLD7+CWWDepadnXAxzaZ3u9cvRw== dependencies: "@sigstore/protobuf-specs" "^0.3.2" tuf-js "^3.0.1" "@sigstore/verify@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@sigstore/verify/-/verify-2.0.0.tgz" integrity sha512-Ggtq2GsJuxFNUvQzLoXqRwS4ceRfLAJnrIHUDrzAD0GgnOhwujJkKkxM/s5Bako07c3WtAs/sZo5PJq7VHjeDg== dependencies: "@sigstore/bundle" "^3.0.0" "@sigstore/core" "^2.0.0" "@sigstore/protobuf-specs" "^0.3.2" "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== "@sindresorhus/merge-streams@^2.1.0": version "2.3.0" resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz" integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== "@socket.io/component-emitter@~3.1.0": version "3.1.2" resolved "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz" integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== "@sphinxxxx/color-conversion@^2.2.2": version "2.2.2" resolved "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz" integrity sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw== "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@tufjs/canonical-json@2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz" integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== "@tufjs/models@3.0.1": version "3.0.1" resolved "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz" integrity sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA== dependencies: "@tufjs/canonical-json" "2.0.0" minimatch "^9.0.5" "@types/body-parser@*": version "1.19.5" resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" "@types/node" "*" "@types/bonjour@^3.5.13": version "3.5.13" resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz" integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" "@types/connect-history-api-fallback@^1.5.4": version "1.5.4" resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz" integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" "@types/connect@*": version "3.4.38" resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/eslint-scope@^3.7.7": version "3.7.7" resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": version "9.6.1" resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz" integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*", "@types/estree@^1.0.6": version "1.0.6" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz" integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": version "5.0.2" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz" integrity sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/send" "*" "@types/express-serve-static-core@^4.17.33": version "4.19.6" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz" integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/send" "*" "@types/express@*": version "5.0.0" resolved "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz" integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^5.0.0" "@types/qs" "*" "@types/serve-static" "*" "@types/express@^4.17.21": version "4.17.21" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" "@types/glob@^7.1.1": version "7.2.0" resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/html-minifier-terser@^6.0.0": version "6.1.0" resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-errors@*": version "2.0.4" resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/http-proxy@^1.17.8": version "1.17.15" resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz" integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.6" resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": version "3.0.3" resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.4" resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/mime@^1": version "1.3.5" resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/minimatch@*": version "5.1.2" resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/node-forge@^1.3.0": version "1.3.11" resolved "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz" integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== dependencies: "@types/node" "*" "@types/node@*": version "22.10.2" resolved "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz" integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ== dependencies: undici-types "~6.20.0" "@types/qs@*": version "6.9.17" resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz" integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== "@types/range-parser@*": version "1.2.7" resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/retry@0.12.2": version "0.12.2" resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz" integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== "@types/send@*": version "0.17.4" resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-index@^1.9.4": version "1.9.4" resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz" integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.15.5": version "1.15.7" resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz" integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" "@types/node" "*" "@types/send" "*" "@types/sockjs@^0.3.36": version "0.3.36" resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz" integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" "@types/ws@^8.5.10": version "8.5.13" resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz" integrity sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA== dependencies: "@types/node" "*" "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": version "17.0.33" resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz" integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": version "2.10.3" resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz" integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== dependencies: "@types/node" "*" "@uirouter/angularjs@^1.1.1": version "1.1.1" resolved "https://registry.npmjs.org/@uirouter/angularjs/-/angularjs-1.1.1.tgz" integrity sha512-Ucsf8BFeyB8xykaxzEOec6amp+x83HxuDgU79xLi5A9029RpW+Zh9jhFTwLQq+9zm/KTkxisjDWJFuypQUTCYQ== "@uirouter/core@^6.1.1": version "6.1.1" resolved "https://registry.npmjs.org/@uirouter/core/-/core-6.1.1.tgz" integrity sha512-vA+OolBOe0R8dbFk5mgaj30LzYzOoGhMJzj356KVQcx+wKdZHUs0dnMPuuHbKe/CEbErTgFA3MfRAW96qVc2hA== "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz" integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: "@webassemblyjs/helper-numbers" "1.13.2" "@webassemblyjs/helper-wasm-bytecode" "1.13.2" "@webassemblyjs/floating-point-hex-parser@1.13.2": version "1.13.2" resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz" integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== "@webassemblyjs/helper-api-error@1.13.2": version "1.13.2" resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz" integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== "@webassemblyjs/helper-buffer@1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz" integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== "@webassemblyjs/helper-numbers@1.13.2": version "1.13.2" resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz" integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.13.2" "@webassemblyjs/helper-api-error" "1.13.2" "@xtuc/long" "4.2.2" "@webassemblyjs/helper-wasm-bytecode@1.13.2": version "1.13.2" resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz" integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== "@webassemblyjs/helper-wasm-section@1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz" integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: "@webassemblyjs/ast" "1.14.1" "@webassemblyjs/helper-buffer" "1.14.1" "@webassemblyjs/helper-wasm-bytecode" "1.13.2" "@webassemblyjs/wasm-gen" "1.14.1" "@webassemblyjs/ieee754@1.13.2": version "1.13.2" resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz" integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.13.2": version "1.13.2" resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz" integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.13.2": version "1.13.2" resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz" integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== "@webassemblyjs/wasm-edit@^1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz" integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== dependencies: "@webassemblyjs/ast" "1.14.1" "@webassemblyjs/helper-buffer" "1.14.1" "@webassemblyjs/helper-wasm-bytecode" "1.13.2" "@webassemblyjs/helper-wasm-section" "1.14.1" "@webassemblyjs/wasm-gen" "1.14.1" "@webassemblyjs/wasm-opt" "1.14.1" "@webassemblyjs/wasm-parser" "1.14.1" "@webassemblyjs/wast-printer" "1.14.1" "@webassemblyjs/wasm-gen@1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz" integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== dependencies: "@webassemblyjs/ast" "1.14.1" "@webassemblyjs/helper-wasm-bytecode" "1.13.2" "@webassemblyjs/ieee754" "1.13.2" "@webassemblyjs/leb128" "1.13.2" "@webassemblyjs/utf8" "1.13.2" "@webassemblyjs/wasm-opt@1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz" integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: "@webassemblyjs/ast" "1.14.1" "@webassemblyjs/helper-buffer" "1.14.1" "@webassemblyjs/wasm-gen" "1.14.1" "@webassemblyjs/wasm-parser" "1.14.1" "@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz" integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: "@webassemblyjs/ast" "1.14.1" "@webassemblyjs/helper-api-error" "1.13.2" "@webassemblyjs/helper-wasm-bytecode" "1.13.2" "@webassemblyjs/ieee754" "1.13.2" "@webassemblyjs/leb128" "1.13.2" "@webassemblyjs/utf8" "1.13.2" "@webassemblyjs/wast-printer@1.14.1": version "1.14.1" resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz" integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== dependencies: "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" "@webpack-cli/configtest@^3.0.1": version "3.0.1" resolved "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz" integrity sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA== "@webpack-cli/info@^3.0.1": version "3.0.1" resolved "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz" integrity sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ== "@webpack-cli/serve@^3.0.1": version "3.0.1" resolved "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz" integrity sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg== "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== abbrev@1: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abbrev@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== abbrev@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz" integrity sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA== accepts@~1.3.4, accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" negotiator "0.6.3" ace-builds@^1.36.2: version "1.37.1" resolved "https://registry.npmjs.org/ace-builds/-/ace-builds-1.37.1.tgz" integrity sha512-6/jxFucA1z1C3hgLlVkTE5/znZ+iYvD301vfwtybiMc3k76IDykliCD0xh/eYZMJUfsJtaOQHZ2AJO5ey0PHWw== acorn-walk@^8.0.0: version "8.3.4" resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== dependencies: acorn "^8.11.0" acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.2: version "8.14.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.3" resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz" integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" ajv@^6.12.5, ajv@^6.12.6: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" angular-animate@^1.8.3: version "1.8.3" resolved "https://registry.npmjs.org/angular-animate/-/angular-animate-1.8.3.tgz" integrity sha512-/LtTKvy5sD6MZbV0v+nHgOIpnFF0mrUp+j5WIxVprVhcrJriYpuCZf4S7Owj1o76De/J0eRzANUozNJ6hVepnQ== angular-aria@^1.8.3: version "1.8.3" resolved "https://registry.npmjs.org/angular-aria/-/angular-aria-1.8.3.tgz" integrity sha512-qTXclmTW/KGw5JNKKQPcCKKq6hCBZ39jYINmLgMsjUHBAoxULaMRRTaRj/L2VTOjKvK5f9enkx+EUqRqzXDSFQ== angular-cookies@^1.8.3: version "1.8.3" resolved "https://registry.npmjs.org/angular-cookies/-/angular-cookies-1.8.3.tgz" integrity sha512-uRd+zWgqiVnly7+YFRosM8E9tUQeY82dAZdtvonh/CeD/sf5SKN/BNIlMlHxZtoAk72ahTIjqUQGfeHdYcSsRQ== angular-inview@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/angular-inview/-/angular-inview-3.1.0.tgz" integrity sha512-J839sctiOgSYkYVh+ZmpkslOFMF9eb632jGRe3z70qkSOV5sAOuw3HkcFA8aZdZfpX841GZRQB1Nhjmh4fyspg== angular-json-tree@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/angular-json-tree/-/angular-json-tree-1.1.0.tgz" integrity sha512-HVLyrVkEoYVykcIgzMCdhtK2H8Y4jgNujGNqRXNG4x032tp2ZWp34j/hu/E7h6a7X+ODrSTAfRTbkF4f/JX/Fg== angular-material@=1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/angular-material/-/angular-material-1.2.5.tgz" integrity sha512-bTTDV0vszpfms1tAMzhLntxBiNMCk/I3Mx/vhbtfhijJILODjpDBfWah0nvWrniFIcxMLcsb1tcPri13hZEaew== angular-messages@^1.8.3: version "1.8.3" resolved "https://registry.npmjs.org/angular-messages/-/angular-messages-1.8.3.tgz" integrity sha512-f/ywtg32lqzX8FnXkBJOyn13lbCbo333/xy/5TTFcsH/gZdXoiuERj+dLTOs8xHCkOeFQhFx0VD0DgtMgSag7A== angular-sanitize@^1.8.3: version "1.8.3" resolved "https://registry.npmjs.org/angular-sanitize/-/angular-sanitize-1.8.3.tgz" integrity sha512-2rxdqzlUVafUeWOwvY/FtyWk1pFTyCtzreeiTytG9m4smpuAEKaIJAjYeVwWsoV+nlTOcgpwV4W1OCmR+BQbUg== "angular-tree-control@git+https://github.com/wix/angular-tree-control.git": version "0.2.30" resolved "git+ssh://git@github.com/wix/angular-tree-control.git#f115d0e4b51a94db2e7c0af60cd47d8dea4cf525" angular@^1.8.3: version "1.8.3" resolved "https://registry.npmjs.org/angular/-/angular-1.8.3.tgz" integrity sha512-5qjkWIQQVsHj4Sb5TcEs4WZWpFeVFHXwxEBHUhrny41D8UrBAd6T/6nPPAsLngJCReIOqi95W3mxdveveutpZw== ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== any-promise@^1.0.0: version "1.3.0" resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" aproba@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== archive-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== dependencies: file-type "^4.2.0" archy@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== argparse@^1.0.7: version "1.0.10" resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-each@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz" integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-slice@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== array-union@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== async@^2.6.0: version "2.6.4" resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" async@^3.2.3, async@~3.2.0: version "3.2.6" resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== axios@^0.21.1: version "0.21.4" resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" babel-loader@^9.2.1: version "9.2.1" resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz" integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== dependencies: find-cache-dir "^4.0.0" schema-utils "^4.0.0" babel-plugin-angularjs-annotate@^0.10.0: version "0.10.0" resolved "https://registry.npmjs.org/babel-plugin-angularjs-annotate/-/babel-plugin-angularjs-annotate-0.10.0.tgz" integrity sha512-NPE7FOAxcLPCUR/kNkrhHIjoScR3RyIlRH3yRn79j8EZWtpILVnCOdA9yKfsOmRh6BHnLHKl8ZAThc+YDd/QwQ== dependencies: "@babel/code-frame" "^7.0.0" "@babel/types" "^7.2.0" simple-is "~0.2.0" babel-plugin-polyfill-corejs2@^0.4.10: version "0.4.12" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz" integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== dependencies: "@babel/compat-data" "^7.22.6" "@babel/helper-define-polyfill-provider" "^0.6.3" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.6: version "0.10.6" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz" integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: "@babel/helper-define-polyfill-provider" "^0.6.2" core-js-compat "^3.38.0" babel-plugin-polyfill-regenerator@^0.6.1: version "0.6.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz" integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== dependencies: "@babel/helper-define-polyfill-provider" "^0.6.3" balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== batch@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== big.js@^5.2.2: version "5.2.2" resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== bin-links@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/bin-links/-/bin-links-5.0.0.tgz" integrity sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA== dependencies: cmd-shim "^7.0.0" npm-normalize-package-bin "^4.0.0" proc-log "^5.0.0" read-cmd-shim "^5.0.0" write-file-atomic "^6.0.0" binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== binary-extensions@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-3.0.0.tgz#14ce687f80e3ebab2a2fb78bb8611584c29f12c3" integrity sha512-X0RfwMgXPEesg6PCXzytQZt9Unh9gtc4SfeTNJvKifUL//Oegcc/Yf31z6hThNZ8dnD3Ir3wkHVN0eWrTvP5ww== bl@^1.0.0: version "1.2.3" resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" safe-buffer "^5.1.1" body-parser@1.20.3: version "1.20.3" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" qs "6.13.0" raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" body@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/body/-/body-5.1.0.tgz" integrity sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ== dependencies: continuable-cache "^0.3.1" error "^7.0.0" raw-body "~1.1.0" safe-json-parse "~1.0.1" bonjour-service@^1.2.1: version "1.3.0" resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz" integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== dependencies: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" boolbase@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== bower-config@^1.3.0: version "1.4.3" resolved "https://registry.npmjs.org/bower-config/-/bower-config-1.4.3.tgz" integrity sha512-MVyyUk3d1S7d2cl6YISViwJBc2VXCkxF5AUFykvN0PQj5FsUiMNSgAYTso18oRFfyZ6XEtjrgg9MAaufHbOwNw== dependencies: graceful-fs "^4.1.3" minimist "^0.2.1" mout "^1.0.0" osenv "^0.1.3" untildify "^2.1.0" wordwrap "^0.0.3" brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserslist@^4.0.0, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.2: version "4.24.3" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz" integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== dependencies: caniuse-lite "^1.0.30001688" electron-to-chromium "^1.5.73" node-releases "^2.0.19" update-browserslist-db "^1.1.1" buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== buffer-alloc@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== dependencies: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.2.1: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" ieee754 "^1.1.13" bundle-name@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz" integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== dependencies: run-applescript "^7.0.0" bytes@1: version "1.0.0" resolved "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz" integrity sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ== bytes@3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cacache@^19.0.0, cacache@^19.0.1: version "19.0.1" resolved "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz" integrity sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ== dependencies: "@npmcli/fs" "^4.0.0" fs-minipass "^3.0.0" glob "^10.2.2" lru-cache "^10.0.1" minipass "^7.0.3" minipass-collect "^2.0.1" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" p-map "^7.0.2" ssri "^12.0.0" tar "^7.4.3" unique-filename "^4.0.0" cacheable-request@^2.1.1: version "2.1.4" resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ== dependencies: clone-response "1.0.2" get-stream "3.0.0" http-cache-semantics "3.8.1" keyv "3.0.0" lowercase-keys "1.0.0" normalize-url "2.0.1" responselike "1.0.2" call-bind-apply-helpers@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz" integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== dependencies: es-errors "^1.3.0" function-bind "^1.1.2" call-bound@^1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz" integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== dependencies: call-bind-apply-helpers "^1.0.1" get-intrinsic "^1.2.6" camel-case@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz" integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== dependencies: no-case "^2.2.0" upper-case "^1.1.1" camel-case@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" tslib "^2.0.3" camelcase@^6.0.0: version "6.3.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== dependencies: browserslist "^4.0.0" caniuse-lite "^1.0.0" lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001688: version "1.0.30001690" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz" integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== chalk@^1.0.0, chalk@^1.1.1: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" has-ansi "^2.0.0" strip-ansi "^3.0.0" supports-color "^2.0.0" chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2, chalk@~4.1.0: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" chalk@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== chokidar@^3.5.3, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" readdirp "~3.6.0" optionalDependencies: fsevents "~2.3.2" chokidar@^4.0.0: version "4.0.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: readdirp "^4.0.1" chownr@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chownr@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz" integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== chrome-trace-event@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^3.2.0: version "3.9.0" resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== ci-info@^4.0.0, ci-info@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz" integrity sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A== cidr-regex@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/cidr-regex/-/cidr-regex-4.1.1.tgz" integrity sha512-ekKcVp+iRB9zlKFXyx7io7nINgb0oRjgRdXNEodp1OuxRui8FXr/CA40Tz1voWUp9DPPrMyQKy01vJhDo4N1lw== dependencies: ip-regex "^5.0.0" clean-css@^4.2.1: version "4.2.4" resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz" integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== dependencies: source-map "~0.6.0" clean-css@^5.2.2, clean-css@~5.3.2: version "5.3.3" resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz" integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== dependencies: source-map "~0.6.0" clean-webpack-plugin@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz" integrity sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w== dependencies: del "^4.1.1" cli-columns@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz" integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== dependencies: string-width "^4.2.3" strip-ansi "^6.0.1" cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^7.0.0" cliui@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.1" wrap-ansi "^7.0.0" clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" kind-of "^6.0.2" shallow-clone "^3.0.0" clone-response@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== dependencies: mimic-response "^1.0.0" cmd-shim@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-7.0.0.tgz" integrity sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw== color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.3: version "2.9.3" resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colorette@^2.0.10, colorette@^2.0.14: version "2.0.20" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== colors@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== commander@^10.0.0: version "10.0.1" resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^12.1.0: version "12.1.0" resolved "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz" integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== commander@^2.19.0, commander@^2.20.0, commander@^2.8.1: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== commander@^8.3.0: version "8.3.0" resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== common-ancestor-path@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== compressible@~2.0.18: version "2.0.18" resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.5" resolved "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz" integrity sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q== dependencies: bytes "3.1.2" compressible "~2.0.18" debug "2.6.9" negotiator "~0.6.4" on-headers "~1.0.2" safe-buffer "5.2.1" vary "~1.1.2" concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concurrently@^9.1.2: version "9.1.2" resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.2.tgz#22d9109296961eaee773e12bfb1ce9a66bc9836c" integrity sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ== dependencies: chalk "^4.1.2" lodash "^4.17.21" rxjs "^7.8.1" shell-quote "^1.8.1" supports-color "^8.1.1" tree-kill "^1.2.2" yargs "^17.7.2" connect-history-api-fallback@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== content-disposition@0.5.4, content-disposition@^0.5.2: version "0.5.4" resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== continuable-cache@^0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz" integrity sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA== convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.7.1: version "0.7.1" resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== copy-webpack-plugin@^12.0.2: version "12.0.2" resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz" integrity sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA== dependencies: fast-glob "^3.3.2" glob-parent "^6.0.1" globby "^14.0.0" normalize-path "^3.0.0" schema-utils "^4.2.0" serialize-javascript "^6.0.2" core-js-compat@^3.38.0, core-js-compat@^3.38.1: version "3.39.0" resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz" integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== dependencies: browserslist "^4.24.2" core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== corifeus-builder@^2025.4.123: version "2025.4.123" resolved "https://registry.yarnpkg.com/corifeus-builder/-/corifeus-builder-2025.4.123.tgz#e7c855fdff577198f78d372583af47420116a9e3" integrity sha512-fQq1aEFvHvJaAEP0vT6vQNemPcB/L+JaSE4rX3M0REsTJrlaEMZQVo2SM66G8xBFxK2E39ahmHmA5YWDq71ztw== dependencies: corifeus-utils "^2025.4.117" download "^8.0.0" extract-zip "^2.0.1" fs-extra "^11.3.0" github-api "^3.4.0" glob "^8.0.3" glob-promise "^6.0.7" grunt "^1.6.1" grunt-contrib-clean "^2.0.1" grunt-contrib-copy "^1.0.0" grunt-contrib-htmlmin "^3.1.0" grunt-contrib-watch "^1.1.0" jit-grunt "^0.10.0" lodash "^4.17.21" mkdirp "^3.0.1" mocha "^11.0.1" mz "^2.7.0" npm "^11.0.0" npm-check-updates "^17.1.13" should "^13.2.3" time-grunt "^2.0.0" yaml "^2.7.0" corifeus-utils@^2025.4.117: version "2025.4.117" resolved "https://registry.yarnpkg.com/corifeus-utils/-/corifeus-utils-2025.4.117.tgz#363f46911a4472a401e9b9b1be2b558cfbebebd9" integrity sha512-GrZrHQprSxr0//Psq/3HsF5bdoWZ2gqjFFBugKvxe9rhbC+3jyL4k4tQcKDZDxGBahSJT+1egNckG52c85Wk1w== dependencies: fs-extra "^11.3.0" ms "^2.1.3" mz "^2.7.0" timestring "^7.0.0" uuid "^11.0.5" cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.6" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" css-declaration-sorter@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz" integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== css-loader@^7.1.2: version "7.1.2" resolved "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz" integrity sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA== dependencies: icss-utils "^5.1.0" postcss "^8.4.33" postcss-modules-extract-imports "^3.1.0" postcss-modules-local-by-default "^4.0.5" postcss-modules-scope "^3.2.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" semver "^7.5.4" css-minimizer-webpack-plugin@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.0.tgz" integrity sha512-niy66jxsQHqO+EYbhPuIhqRQ1mNcNVUHrMnkzzir9kFOERJUaQDDRhh7dKDz33kBpkWMF9M8Vx0QlDbc5AHOsw== dependencies: "@jridgewell/trace-mapping" "^0.3.25" cssnano "^7.0.1" jest-worker "^29.7.0" postcss "^8.4.38" schema-utils "^4.2.0" serialize-javascript "^6.0.2" css-select@^4.1.3: version "4.3.0" resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" css-what "^6.0.1" domhandler "^4.3.1" domutils "^2.8.0" nth-check "^2.0.1" css-select@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== dependencies: boolbase "^1.0.0" css-what "^6.1.0" domhandler "^5.0.2" domutils "^3.0.1" nth-check "^2.0.1" css-tree@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz" integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== dependencies: mdn-data "2.0.30" source-map-js "^1.0.1" css-tree@~2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz" integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== dependencies: mdn-data "2.0.28" source-map-js "^1.0.1" css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssesc@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssnano-preset-default@^7.0.6: version "7.0.6" resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz" integrity sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ== dependencies: browserslist "^4.23.3" css-declaration-sorter "^7.2.0" cssnano-utils "^5.0.0" postcss-calc "^10.0.2" postcss-colormin "^7.0.2" postcss-convert-values "^7.0.4" postcss-discard-comments "^7.0.3" postcss-discard-duplicates "^7.0.1" postcss-discard-empty "^7.0.0" postcss-discard-overridden "^7.0.0" postcss-merge-longhand "^7.0.4" postcss-merge-rules "^7.0.4" postcss-minify-font-values "^7.0.0" postcss-minify-gradients "^7.0.0" postcss-minify-params "^7.0.2" postcss-minify-selectors "^7.0.4" postcss-normalize-charset "^7.0.0" postcss-normalize-display-values "^7.0.0" postcss-normalize-positions "^7.0.0" postcss-normalize-repeat-style "^7.0.0" postcss-normalize-string "^7.0.0" postcss-normalize-timing-functions "^7.0.0" postcss-normalize-unicode "^7.0.2" postcss-normalize-url "^7.0.0" postcss-normalize-whitespace "^7.0.0" postcss-ordered-values "^7.0.1" postcss-reduce-initial "^7.0.2" postcss-reduce-transforms "^7.0.0" postcss-svgo "^7.0.1" postcss-unique-selectors "^7.0.3" cssnano-utils@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz" integrity sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ== cssnano@^7.0.1: version "7.0.6" resolved "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz" integrity sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw== dependencies: cssnano-preset-default "^7.0.6" lilconfig "^3.1.2" csso@^5.0.5: version "5.0.5" resolved "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz" integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== dependencies: css-tree "~2.2.0" date-time@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/date-time/-/date-time-1.1.0.tgz" integrity sha512-RrxZQ06cdKe7YQ5oqIxs3GMc7W3vXscy7Ds+aZIqmxA59QnVtTiCseA4jbzVUub9xCbo9GuYVZo0OrZLYXnnmw== dependencies: time-zone "^0.1.0" dateformat@~4.6.2: version "4.6.3" resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== debounce@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6: version "4.4.0" resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: ms "^2.1.3" debug@^3.1.0: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@~4.3.1, debug@~4.3.2: version "4.3.7" resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" decamelize@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decode-uri-component@^0.2.0: version "0.2.2" resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== dependencies: file-type "^5.2.0" is-stream "^1.1.0" tar-stream "^1.5.2" decompress-tarbz2@^4.0.0: version "4.1.1" resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== dependencies: decompress-tar "^4.1.0" file-type "^6.1.0" is-stream "^1.1.0" seek-bzip "^1.0.5" unbzip2-stream "^1.0.9" decompress-targz@^4.0.0: version "4.1.1" resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== dependencies: decompress-tar "^4.1.1" file-type "^5.2.0" is-stream "^1.1.0" decompress-unzip@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== dependencies: file-type "^3.8.0" get-stream "^2.2.0" pify "^2.3.0" yauzl "^2.4.2" decompress@^4.2.1: version "4.2.1" resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== dependencies: decompress-tar "^4.0.0" decompress-tarbz2 "^4.0.0" decompress-targz "^4.0.0" decompress-unzip "^4.0.1" graceful-fs "^4.1.10" make-dir "^1.0.0" pify "^2.3.0" strip-dirs "^2.0.0" default-browser-id@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz" integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== default-browser@^5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz" integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== dependencies: bundle-name "^4.1.0" default-browser-id "^5.0.0" define-lazy-prop@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== del@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz" integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== dependencies: "@types/glob" "^7.1.1" globby "^6.1.0" is-path-cwd "^2.0.0" is-path-in-cwd "^2.0.0" p-map "^2.0.0" pify "^4.0.1" rimraf "^2.6.3" depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-file@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== detect-node@^2.0.4: version "2.1.0" resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== diff@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz" integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== diff@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== dns-packet@^5.2.2: version "5.6.1" resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" domhandler "^4.2.0" entities "^2.0.0" dom-serializer@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== dependencies: domelementtype "^2.3.0" domhandler "^5.0.2" entities "^4.2.0" domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" domelementtype "^2.2.0" domhandler "^4.2.0" domutils@^3.0.1: version "3.2.1" resolved "https://registry.npmjs.org/domutils/-/domutils-3.2.1.tgz" integrity sha512-xWXmuRnN9OMP6ptPd2+H0cCbcYBULa5YDTbMm/2lvkWvNA3O4wcW+GvzooqBuNM8yy6pl3VIAeJTUUWUbfI5Fw== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" domhandler "^5.0.3" dot-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" tslib "^2.0.3" download@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/download/-/download-8.0.0.tgz" integrity sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA== dependencies: archive-type "^4.0.0" content-disposition "^0.5.2" decompress "^4.2.1" ext-name "^5.0.0" file-type "^11.1.0" filenamify "^3.0.0" get-stream "^4.1.0" got "^8.3.1" make-dir "^2.1.0" p-event "^2.1.0" pify "^4.0.1" dunder-proto@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" es-errors "^1.3.0" gopd "^1.2.0" duplexer3@^0.1.4: version "0.1.5" resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== duplexer@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ee-first@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.5.73: version "1.5.76" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz" integrity sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encodeurl@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" engine.io-client@~6.6.1: version "6.6.2" resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz" integrity sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" engine.io-parser "~5.2.1" ws "~8.17.1" xmlhttprequest-ssl "~2.1.1" engine.io-parser@~5.2.1: version "5.2.3" resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz" integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== enhanced-resolve@^5.17.1: version "5.18.0" resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz" integrity sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" entities@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== env-paths@^2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.14.0: version "7.14.0" resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz" integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== err-code@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error@^7.0.0: version "7.2.1" resolved "https://registry.npmjs.org/error/-/error-7.2.1.tgz" integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== dependencies: string-template "~0.2.1" es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^1.2.1: version "1.5.4" resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz" integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== es-object-atoms@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz" integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== dependencies: es-errors "^1.3.0" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" esprima@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: version "5.3.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter2@~0.4.13: version "0.4.14" resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz" integrity sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ== eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.2.0: version "3.3.0" resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== exit@~0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" exponential-backoff@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== express@^4.21.2: version "4.21.2" resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" array-flatten "1.1.1" body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.7.1" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" finalhandler "1.3.1" fresh "0.5.2" http-errors "2.0.0" merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" path-to-regexp "0.1.12" proxy-addr "~2.0.7" qs "6.13.0" range-parser "~1.2.1" safe-buffer "5.2.1" send "0.19.0" serve-static "1.16.2" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" ext-list@^2.0.0: version "2.2.2" resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== dependencies: mime-db "^1.28.0" ext-name@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== dependencies: ext-list "^2.0.0" sort-keys-length "^1.0.0" extend@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: debug "^4.1.1" get-stream "^5.1.0" yauzl "^2.10.0" optionalDependencies: "@types/yauzl" "^2.9.1" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" micromatch "^4.0.4" fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-uri@^3.0.1: version "3.0.3" resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz" integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: version "1.0.16" resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: version "1.18.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz" integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== dependencies: reusify "^1.0.4" faye-websocket@^0.11.3: version "0.11.4" resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" faye-websocket@~0.10.0: version "0.10.0" resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz" integrity sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ== dependencies: websocket-driver ">=0.5.1" fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" figures@^1.0.0: version "1.7.0" resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" integrity sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ== dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" file-sync-cmp@^0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz" integrity sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA== file-type@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz" integrity sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g== file-type@^3.8.0: version "3.9.0" resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== file-type@^4.2.0: version "4.4.0" resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== file-type@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== file-type@^6.1.0: version "6.2.0" resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== filename-reserved-regex@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== filenamify@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz" integrity sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g== dependencies: filename-reserved-regex "^2.0.0" strip-outer "^1.0.0" trim-repeated "^1.0.0" fill-range@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" finalhandler@1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" encodeurl "~2.0.0" escape-html "~1.0.3" on-finished "2.4.1" parseurl "~1.3.3" statuses "2.0.1" unpipe "~1.0.0" find-cache-dir@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz" integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== dependencies: common-path-prefix "^3.0.0" pkg-dir "^7.0.0" find-up@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" find-up@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" find-up@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== dependencies: locate-path "^7.1.0" path-exists "^5.0.0" findup-sync@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz" integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== dependencies: detect-file "^1.0.0" is-glob "^4.0.0" micromatch "^4.0.2" resolve-dir "^1.0.1" findup-sync@~5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz" integrity sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ== dependencies: detect-file "^1.0.0" is-glob "^4.0.3" micromatch "^4.0.4" resolve-dir "^1.0.1" fined@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz" integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== dependencies: expand-tilde "^2.0.2" is-plain-object "^2.0.3" object.defaults "^1.1.0" object.pick "^1.2.0" parse-filepath "^1.0.1" flagged-respawn@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== flat@^5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== follow-redirects@^1.0.0, follow-redirects@^1.14.0: version "1.15.9" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== for-in@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== for-own@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg== dependencies: for-in "^1.0.1" foreground-child@^3.1.0: version "3.3.0" resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz" integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" forwarded@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== from2@^2.1.1: version "2.3.0" resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@^11.3.0: version "11.3.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-minipass@^3.0.0, fs-minipass@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz" integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== dependencies: minipass "^7.0.3" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gaze@^1.1.0: version "1.1.3" resolved "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz" integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== dependencies: globule "^1.0.0" gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz" integrity sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA== dependencies: call-bind-apply-helpers "^1.0.1" dunder-proto "^1.0.0" es-define-property "^1.0.1" es-errors "^1.3.0" es-object-atoms "^1.0.0" function-bind "^1.1.2" gopd "^1.2.0" has-symbols "^1.1.0" hasown "^2.0.2" math-intrinsics "^1.0.0" get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== get-stream@^2.2.0: version "2.3.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== dependencies: object-assign "^4.0.1" pinkie-promise "^2.0.0" get-stream@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" getobject@~1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz" integrity sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg== github-api@^3.4.0: version "3.4.0" resolved "https://registry.npmjs.org/github-api/-/github-api-3.4.0.tgz" integrity sha512-2yYqYS6Uy4br1nw0D3VrlYWxtGTkUhIZrumBrcBwKdBOzMT8roAe8IvI6kjIOkxqxapKR5GkEsHtz3Du/voOpA== dependencies: axios "^0.21.1" debug "^2.2.0" js-base64 "^2.1.9" utf8 "^2.1.1" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.1: version "6.0.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob-promise@^6.0.7: version "6.0.7" resolved "https://registry.npmjs.org/glob-promise/-/glob-promise-6.0.7.tgz" integrity sha512-DEAe6br1w8ZF+y6KM2pzgdfhpreladtNvyNNVgSkxxkFWzXTJFXxQrJQQbAnc7kL0EUd7w5cR8u4K0P4+/q+Gw== glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^10.2.2, glob@^10.3.10, glob@^10.3.7, glob@^10.4.5: version "10.4.5" resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" minimatch "^9.0.4" minipass "^7.1.2" package-json-from-dist "^1.0.0" path-scurry "^1.11.1" glob@^7.0.3, glob@^7.1.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" glob@^8.0.3: version "8.1.0" resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^5.0.1" once "^1.3.0" glob@~7.1.1, glob@~7.1.6: version "7.1.7" resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" global-modules@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" is-windows "^1.0.1" resolve-dir "^1.0.0" global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" ini "^1.3.4" is-windows "^1.0.1" which "^1.2.14" globals@^11.1.0: version "11.12.0" resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^14.0.0: version "14.0.2" resolved "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz" integrity sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw== dependencies: "@sindresorhus/merge-streams" "^2.1.0" fast-glob "^3.3.2" ignore "^5.2.4" path-type "^5.0.0" slash "^5.1.0" unicorn-magic "^0.1.0" globby@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== dependencies: array-union "^1.0.1" glob "^7.0.3" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" globule@^1.0.0: version "1.3.4" resolved "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz" integrity sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg== dependencies: glob "~7.1.1" lodash "^4.17.21" minimatch "~3.0.2" gopd@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== got@^8.3.1: version "8.3.2" resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz" integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== dependencies: "@sindresorhus/is" "^0.7.0" cacheable-request "^2.1.1" decompress-response "^3.3.0" duplexer3 "^0.1.4" get-stream "^3.0.0" into-stream "^3.1.0" is-retry-allowed "^1.1.0" isurl "^1.0.0-alpha5" lowercase-keys "^1.0.0" mimic-response "^1.0.0" p-cancelable "^0.4.0" p-timeout "^2.0.1" pify "^3.0.0" safe-buffer "^5.1.1" timed-out "^4.0.1" url-parse-lax "^3.0.0" url-to-options "^1.0.1" graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== grunt-cli@~1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz" integrity sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ== dependencies: grunt-known-options "~2.0.0" interpret "~1.1.0" liftup "~3.0.1" nopt "~4.0.1" v8flags "~3.2.0" grunt-contrib-clean@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.1.tgz" integrity sha512-uRvnXfhiZt8akb/ZRDHJpQQtkkVkqc/opWO4Po/9ehC2hPxgptB9S6JHDC/Nxswo4CJSM0iFPT/Iym3cEMWzKA== dependencies: async "^3.2.3" rimraf "^2.6.2" grunt-contrib-copy@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz" integrity sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA== dependencies: chalk "^1.1.1" file-sync-cmp "^0.1.0" grunt-contrib-htmlmin@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/grunt-contrib-htmlmin/-/grunt-contrib-htmlmin-3.1.0.tgz" integrity sha512-Khaa+0MUuqqNroDIe9tsjZkioZnW2Y+iTGbonBkLWaG7+SkSFExfb4jLt7M6rxKV3RSqlS7NtVvu4SVIPkmKXg== dependencies: chalk "^2.4.2" html-minifier "^4.0.0" pretty-bytes "^5.1.0" grunt-contrib-watch@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz" integrity sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg== dependencies: async "^2.6.0" gaze "^1.1.0" lodash "^4.17.10" tiny-lr "^1.1.1" grunt-injector@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/grunt-injector/-/grunt-injector-1.1.0.tgz" integrity sha512-JPeoaPGKjBpCrDaJAJqafrVoOstQhKdXDDIyjuwXySNVlTyTTr58ruxEK6pOo9algjTR0q0pO7j633B8krhGlg== dependencies: lodash "~4.15.0" wiredep "~4.0.0" grunt-known-options@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz" integrity sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA== grunt-legacy-log-utils@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz" integrity sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw== dependencies: chalk "~4.1.0" lodash "~4.17.19" grunt-legacy-log@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz" integrity sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA== dependencies: colors "~1.1.2" grunt-legacy-log-utils "~2.1.0" hooker "~0.2.3" lodash "~4.17.19" grunt-legacy-util@~2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz" integrity sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w== dependencies: async "~3.2.0" exit "~0.1.2" getobject "~1.0.0" hooker "~0.2.3" lodash "~4.17.21" underscore.string "~3.3.5" which "~2.0.2" grunt@^1.6.1: version "1.6.1" resolved "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz" integrity sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA== dependencies: dateformat "~4.6.2" eventemitter2 "~0.4.13" exit "~0.1.2" findup-sync "~5.0.0" glob "~7.1.6" grunt-cli "~1.4.3" grunt-known-options "~2.0.0" grunt-legacy-log "~3.0.0" grunt-legacy-util "~2.0.1" iconv-lite "~0.6.3" js-yaml "~3.14.0" minimatch "~3.0.4" nopt "~3.0.6" gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== dependencies: duplexer "^0.1.2" handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: has-symbol-support-x "^1.4.1" hasown@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" he@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" hooker@^0.2.3, hooker@~0.2.3: version "0.2.3" resolved "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz" integrity sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA== hosted-git-info@^8.0.0, hosted-git-info@^8.0.2: version "8.0.2" resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz" integrity sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg== dependencies: lru-cache "^10.0.1" hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" obuf "^1.0.0" readable-stream "^2.0.1" wbuf "^1.1.0" html-escaper@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-loader@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/html-loader/-/html-loader-5.1.0.tgz" integrity sha512-Jb3xwDbsm0W3qlXrCZwcYqYGnYz55hb6aoKQTlzyZPXsPpi6tHXzAfqalecglMQgNvtEfxrCQPaKT90Irt5XDA== dependencies: html-minifier-terser "^7.2.0" parse5 "^7.1.2" html-minifier-terser@^6.0.2: version "6.1.0" resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== dependencies: camel-case "^4.1.2" clean-css "^5.2.2" commander "^8.3.0" he "^1.2.0" param-case "^3.0.4" relateurl "^0.2.7" terser "^5.10.0" html-minifier-terser@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz" integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== dependencies: camel-case "^4.1.2" clean-css "~5.3.2" commander "^10.0.0" entities "^4.4.0" param-case "^3.0.4" relateurl "^0.2.7" terser "^5.15.1" html-minifier@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz" integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== dependencies: camel-case "^3.0.0" clean-css "^4.2.1" commander "^2.19.0" he "^1.2.0" param-case "^2.1.1" relateurl "^0.2.7" uglify-js "^3.5.1" html-webpack-plugin@^5.6.3: version "5.6.3" resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz" integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" lodash "^4.17.21" pretty-error "^4.0.0" tapable "^2.0.0" htmlparser2@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" domhandler "^4.0.0" domutils "^2.5.2" entities "^2.0.0" http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" inherits "2.0.4" setprototypeof "1.2.0" statuses "2.0.1" toidentifier "1.0.1" http-errors@~1.6.2: version "1.6.3" resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" inherits "2.0.3" setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-agent@^7.0.0: version "7.0.2" resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz" integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: agent-base "^7.1.0" debug "^4.3.4" http-proxy-middleware@^2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz" integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA== dependencies: "@types/http-proxy" "^1.17.8" http-proxy "^1.18.1" is-glob "^4.0.1" is-plain-obj "^3.0.0" micromatch "^4.0.2" http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" https-proxy-agent@^7.0.1: version "7.0.6" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz" integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: agent-base "^7.1.2" debug "4" humanize-duration@^3.32.1: version "3.32.1" resolved "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.32.1.tgz" integrity sha512-inh5wue5XdfObhu/IGEMiA1nUXigSGcaKNemcbLRKa7jXYGDZXr3LoT9pTIzq2hPEbld7w/qv9h+ikWGz8fL1g== hyperdyperid@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz" integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2, iconv-lite@^0.6.3, iconv-lite@~0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ieee754@^1.1.13: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-walk@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz" integrity sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ== dependencies: minimatch "^9.0.0" ignore@^5.2.4: version "5.3.2" resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immutable@^5.0.2: version "5.0.3" resolved "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz" integrity sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw== import-local@^3.0.2: version "3.2.0" resolved "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz" integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@^1.3.4: version "1.3.8" resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== ini@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz" integrity sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw== init-package-json@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-8.0.0.tgz#feaa2e5e949c68bec3bcfb25c1b7075ffe6fc88b" integrity sha512-zKgxfaGt6Zzi8VBSInOK0CYDigA9gzDCWPnSzGIoUlTU/5w7qIyi+6MyJYX96mMlxDGrIR85FhQszVyodYfB9g== dependencies: "@npmcli/package-json" "^6.1.0" npm-package-arg "^12.0.0" promzard "^2.0.0" read "^4.0.0" semver "^7.3.5" validate-npm-package-license "^3.0.4" validate-npm-package-name "^6.0.0" interpret@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== interpret@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz" integrity sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA== into-stream@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ== dependencies: from2 "^2.1.1" p-is-promise "^1.1.0" ip-address@^9.0.5: version "9.0.5" resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz" integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== dependencies: jsbn "1.1.0" sprintf-js "^1.1.3" ip-regex@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz" integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.1.0: version "2.2.0" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz" integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== dependencies: is-relative "^1.0.0" is-windows "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-cidr@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/is-cidr/-/is-cidr-5.1.0.tgz" integrity sha512-OkVS+Ht2ssF27d48gZdB+ho1yND1VbkJRKKS6Pc1/Cw7uqkd9IOJg8/bTwBDQL6tfBhSdguPRnlGiE8pU/X5NQ== dependencies: cidr-regex "^4.1.1" is-core-module@^2.16.0: version "2.16.1" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" is-docker@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finite@^1.0.1: version "1.1.0" resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz" integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-inside-container@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== dependencies: is-docker "^3.0.0" is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== is-network-error@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz" integrity sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g== is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-object@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz" integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== is-path-in-cwd@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz" integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== dependencies: is-path-inside "^2.1.0" is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz" integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== dependencies: path-is-inside "^1.0.2" is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-relative@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== dependencies: is-unc-path "^1.0.0" is-retry-allowed@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-unc-path@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== dependencies: unc-path-regex "^0.1.2" is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-windows@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz" integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== dependencies: is-inside-container "^1.0.0" isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isexe@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== dependencies: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" jackspeak@^3.1.2: version "3.4.3" resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" javascript-natural-sort@^0.7.1: version "0.7.1" resolved "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz" integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== jest-util@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jest-worker@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" jit-grunt@^0.10.0: version "0.10.0" resolved "https://registry.npmjs.org/jit-grunt/-/jit-grunt-0.10.0.tgz" integrity sha512-eT/f4c9wgZ3buXB7X1JY1w6uNtAV0bhrbOGf/mFmBb0CDNLUETJ/VRoydayWOI54tOoam0cz9RooVCn3QY1WoA== jmespath@^0.16.0: version "0.16.0" resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz" integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== jquery@^3.7.1: version "3.7.1" resolved "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz" integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== js-base64@^2.1.9: version "2.6.4" resolved "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== js-htmlencode@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/js-htmlencode/-/js-htmlencode-0.3.0.tgz" integrity sha512-HedYg9SJsimM4aca37Lj0Ct0eZ1WT8CCxlgMPfUV7mCc6g3UfEUHy2b9qfzuC0uwk4gjVEJKrkWbPSdnUJBFTQ== js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" js-yaml@~3.14.0: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" jsbn@1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz" integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== jsesc@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== jsesc@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz" integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-parse-even-better-errors@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz" integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-source-map@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz" integrity sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg== json-stringify-nice@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsoneditor@^10.1.2: version "10.1.2" resolved "https://registry.npmjs.org/jsoneditor/-/jsoneditor-10.1.2.tgz" integrity sha512-6yUC6cEPrPGS3wNEuzJUbCE1sziwIITs2vRko0L2LnhKokJtPZErHKU2nOYp6K4N8FxFXXXe1zy9lxh/tGzHwg== dependencies: ace-builds "^1.36.2" ajv "^6.12.6" javascript-natural-sort "^0.7.1" jmespath "^0.16.0" json-source-map "^0.6.1" jsonrepair "^3.8.1" picomodal "^3.0.0" vanilla-picker "^2.12.3" jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== jsonrepair@^3.8.1: version "3.11.2" resolved "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.11.2.tgz" integrity sha512-ejydGcTq0qKk1r0NUBwjtvswbPFhs19+QEfwSeGwB8KJZ59W7/AOFmQh04c68mkJ+2hGk+OkOmkr2bKG4tGlLQ== just-diff-apply@^5.2.0: version "5.5.0" resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz" integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== just-diff@^6.0.0: version "6.0.2" resolved "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz" integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== keyv@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== dependencies: json-buffer "3.0.0" kind-of@^6.0.2: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== launch-editor@^2.6.1: version "2.9.1" resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz" integrity sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w== dependencies: picocolors "^1.0.0" shell-quote "^1.8.1" libnpmaccess@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-10.0.0.tgz#a5279a683af982fa971599d37ed471e59339bd01" integrity sha512-Nz9Lolajvh6nPA5ixdKNfN2BJS0N7LvqTXPqy3+F37i3T4mcped24JCjwnp5KCPCB0ewX3ccopwUnhaTS1/yXg== dependencies: npm-package-arg "^12.0.0" npm-registry-fetch "^18.0.1" libnpmdiff@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-8.0.0.tgz#940f3a3d70207a90b5eab290f6b3e0ab428a027e" integrity sha512-Ul1oGHnlQ9+bpNdaKDXZEqolJxg81xp2KG5QgVZThSS/ypLFpkcQjHeOHR99ZdxK483s1z2vdiCUMghpDo+0pg== dependencies: "@npmcli/arborist" "^9.0.0" "@npmcli/installed-package-contents" "^3.0.0" binary-extensions "^3.0.0" diff "^7.0.0" minimatch "^9.0.4" npm-package-arg "^12.0.0" pacote "^21.0.0" tar "^6.2.1" libnpmexec@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-10.0.0.tgz#16aff2dc73309b7a39232fd583400e6efe0a705a" integrity sha512-kB1d44LhwvUT/0Ln+rwM8Yw2QmHZ2wSCJaqXnw5K17Iuzqy+TKSlNJNWUlLSTAD/WSGLT6lruZO09H+uRLAAdw== dependencies: "@npmcli/arborist" "^9.0.0" "@npmcli/run-script" "^9.0.1" ci-info "^4.0.0" npm-package-arg "^12.0.0" pacote "^21.0.0" proc-log "^5.0.0" read "^4.0.0" read-package-json-fast "^4.0.0" semver "^7.3.7" walk-up-path "^4.0.0" libnpmfund@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-7.0.0.tgz#9295682784fef9adcfb315a1ebafc1e0e236477d" integrity sha512-uiL9lsC2/E0JX/+gKfwlsGj2W5Cd0MHss5w0yZ7gSIyYn+KhytOBdD/1GB6Kwg5V7LAm07XEEbnWYwzUBS0Tjw== dependencies: "@npmcli/arborist" "^9.0.0" libnpmorg@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-8.0.0.tgz#e133658149f7e70f5536511a8501ad9348559c2e" integrity sha512-VO/mxds3Qu67S7/3TsFbykN+7kzpes14P/RiO3ECtLtUYQdlE5ddXGArRgU2tP4hUHZRvyBhc4sSiAXEzTA4eQ== dependencies: aproba "^2.0.0" npm-registry-fetch "^18.0.1" libnpmpack@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-9.0.0.tgz#3841750d69037f80ffa69829857871f3588a04c7" integrity sha512-6UBeHebxorKuFZq6qQDV1PIjfZo6OvyzXMfI2UsRtrhlFDsOQsg9H2mZQwPryQXTOO/ifHxnjpmZmJdVn5INTg== dependencies: "@npmcli/arborist" "^9.0.0" "@npmcli/run-script" "^9.0.1" npm-package-arg "^12.0.0" pacote "^21.0.0" libnpmpublish@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-11.0.0.tgz#7b1bd0d4e2b388add88e53cc8d689307adbad355" integrity sha512-c+cBWLWXafHzmSEQwRVKjHP6KkWntvqvAAT83agwmWrOwRpEXWDtiIlkopwzPcLRau6BcS6BwOttTlAWboH3BQ== dependencies: ci-info "^4.0.0" normalize-package-data "^7.0.0" npm-package-arg "^12.0.0" npm-registry-fetch "^18.0.1" proc-log "^5.0.0" semver "^7.3.7" sigstore "^3.0.0" ssri "^12.0.0" libnpmsearch@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-9.0.0.tgz#dfe2e86ef28a24d8687f79480a045f002b38542d" integrity sha512-uMUbX5ynU/imuXlijCPathemyi1EZVtka9PEbaIqghdrjdHmMJITbyTsmSB+muzBWm1NUUFwRRKdpwktEmvipg== dependencies: npm-registry-fetch "^18.0.1" libnpmteam@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-8.0.0.tgz#d537352ce727aa57fb1acef318d69571b011d04c" integrity sha512-GfbxITlY4rVe3PKUU6wBjfNNc4Xho9Jv03N0sdzqho9H+9hynFjiwJpfWGwfVBdtimH+kPQW58qRUMott/Bkyg== dependencies: aproba "^2.0.0" npm-registry-fetch "^18.0.1" libnpmversion@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-8.0.0.tgz#68998a1eb2c9c068e721e9221073d78edb4efc73" integrity sha512-nqHD/YQtC/xLRquvFj2W2hvTNAIWSssJdz5ULCV0jAGBxjlQaPS9s8FNIiJ3w+iina+pCJo5AmlBjA7oWew0JQ== dependencies: "@npmcli/git" "^6.0.1" "@npmcli/run-script" "^9.0.1" json-parse-even-better-errors "^4.0.0" proc-log "^5.0.0" semver "^7.3.7" liftup@~3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz" integrity sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw== dependencies: extend "^3.0.2" findup-sync "^4.0.0" fined "^1.2.0" flagged-respawn "^1.0.1" is-plain-object "^2.0.4" object.map "^1.0.1" rechoir "^0.7.0" resolve "^1.19.0" lilconfig@^3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== livereload-js@^2.3.0: version "2.4.0" resolved "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz" integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^2.1.2" locate-path@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" locate-path@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: p-locate "^6.0.0" lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.6.1, lodash@~4.17.19, lodash@~4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lodash@~4.15.0: version "4.15.0" resolved "https://registry.npmjs.org/lodash/-/lodash-4.15.0.tgz" integrity sha512-/XM2P+O3xDTOR/CrI4ZqqzgC3tFOLfn2sUIIKN9CYI3YmZnZ9QcElpYh0MHiHXMNJLWwbVxkCaO6zFGS97Xj0g== log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" lower-case@^1.1.1: version "1.1.4" resolved "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== lower-case@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lowercase-keys@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: version "10.4.3" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" make-dir@^1.0.0: version "1.3.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" make-dir@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" semver "^5.6.0" make-fetch-happen@^14.0.0, make-fetch-happen@^14.0.1, make-fetch-happen@^14.0.3: version "14.0.3" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz" integrity sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ== dependencies: "@npmcli/agent" "^3.0.0" cacache "^19.0.1" http-cache-semantics "^4.1.1" minipass "^7.0.2" minipass-fetch "^4.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" negotiator "^1.0.0" proc-log "^5.0.0" promise-retry "^2.0.1" ssri "^12.0.0" make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== dependencies: kind-of "^6.0.2" map-cache@^0.2.0: version "0.2.2" resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== material-design-icons-iconfont@^6.7.0: version "6.7.0" resolved "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-6.7.0.tgz" integrity sha512-lSj71DgVv20kO0kGbs42icDzbRot61gEDBLQACzkUuznRQBUYmbxzEkGU6dNBb5fRWHMaScYlAXX96HQ4/cJWA== math-intrinsics@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mdn-data@2.0.28: version "2.0.28" resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz" integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== mdn-data@2.0.30: version "2.0.30" resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== media-typer@0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^4.6.0: version "4.15.1" resolved "https://registry.npmjs.org/memfs/-/memfs-4.15.1.tgz" integrity sha512-ufCzgFwiVnR6R9cCYuvwznJdhdYXEvFl0hpnM4cCtVaVkHuqBR+6fo2sqt1SSMdp+uiHw9GyPZr3OMM5tqjSmQ== dependencies: "@jsonjoy.com/json-pack" "^1.0.3" "@jsonjoy.com/util" "^1.3.0" tree-dump "^1.0.1" tslib "^2.0.0" merge-descriptors@1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.8" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: version "1.53.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mini-css-extract-plugin@^2.9.2: version "2.9.2" resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz" integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimatch@^9.0.0, minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimatch@~3.0.2, minimatch@~3.0.4: version "3.0.8" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz" integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== dependencies: brace-expansion "^1.1.7" minimist@^0.2.1: version "0.2.4" resolved "https://registry.npmjs.org/minimist/-/minimist-0.2.4.tgz" integrity sha512-Pkrrm8NjyQ8yVt8Am9M+yUt74zE3iokhzbG1bFVNjLB92vwM71hf40RkEsryg98BujhVOncKm/C1xROxZ030LQ== minimist@^1.1.0: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz" integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== dependencies: minipass "^7.0.3" minipass-fetch@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.0.tgz" integrity sha512-2v6aXUXwLP1Epd/gc32HAMIWoczx+fZwEPRHm/VwtrJzRGwR1qGZXEYV3Zp8ZjjbwaZhMrM6uHV4KVkk+XCc2w== dependencies: minipass "^7.0.3" minipass-sized "^1.0.3" minizlib "^3.0.1" optionalDependencies: encoding "^0.1.13" minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" minipass@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.1, minipass@^7.1.2: version "7.1.2" resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== minizlib@^2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" yallist "^4.0.0" minizlib@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz" integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg== dependencies: minipass "^7.0.4" rimraf "^5.0.5" mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mkdirp@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz" integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== mobile-detect@^1.4.5: version "1.4.5" resolved "https://registry.npmjs.org/mobile-detect/-/mobile-detect-1.4.5.tgz" integrity sha512-yc0LhH6tItlvfLBugVUEtgawwFU2sIe+cSdmRJJCTMZ5GEJyLxNyC/NIOAOGk67Fa8GNpOttO3Xz/1bHpXFD/g== mocha@^11.0.1: version "11.0.1" resolved "https://registry.npmjs.org/mocha/-/mocha-11.0.1.tgz" integrity sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A== dependencies: ansi-colors "^4.1.3" browser-stdout "^1.3.1" chokidar "^3.5.3" debug "^4.3.5" diff "^5.2.0" escape-string-regexp "^4.0.0" find-up "^5.0.0" glob "^10.4.5" he "^1.2.0" js-yaml "^4.1.0" log-symbols "^4.1.0" minimatch "^5.1.6" ms "^2.1.3" serialize-javascript "^6.0.2" strip-json-comments "^3.1.1" supports-color "^8.1.1" workerpool "^6.5.1" yargs "^16.2.0" yargs-parser "^20.2.9" yargs-unparser "^2.0.0" moment@^2.30.1: version "2.30.1" resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== mout@^1.0.0: version "1.2.4" resolved "https://registry.npmjs.org/mout/-/mout-1.2.4.tgz" integrity sha512-mZb9uOruMWgn/fw28DG4/yE3Kehfk1zKCLhuDU2O3vlKdnBBr4XaOCqVTflJ5aODavGUPqFHZgrFX3NJVuxGhQ== mrmime@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz" integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.3, ms@^2.1.1, ms@^2.1.2, ms@^2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: dns-packet "^5.2.2" thunky "^1.0.2" mute-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== mz@^2.7.0: version "2.7.0" resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" object-assign "^4.0.1" thenify-all "^1.0.0" nanoid@^3.3.7: version "3.3.8" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz" integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== negotiator@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== negotiator@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== negotiator@~0.6.4: version "0.6.4" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz" integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== neo-async@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== no-case@^2.2.0: version "2.3.2" resolved "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz" integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== dependencies: lower-case "^1.1.1" no-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" tslib "^2.0.3" node-addon-api@^7.0.0: version "7.1.1" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz" integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== node-forge@^1: version "1.3.1" resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-gyp@^11.0.0: version "11.0.0" resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-11.0.0.tgz" integrity sha512-zQS+9MTTeCMgY0F3cWPyJyRFAkVltQ1uXm+xXu/ES6KFgC6Czo1Seb9vQW2wNxSX2OrDTiqL0ojtkFxBQ0ypIw== dependencies: env-paths "^2.2.0" exponential-backoff "^3.1.1" glob "^10.3.10" graceful-fs "^4.2.6" make-fetch-happen "^14.0.3" nopt "^8.0.0" proc-log "^5.0.0" semver "^7.3.5" tar "^7.4.3" which "^5.0.0" node-releases@^2.0.19: version "2.0.19" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== nopt@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/nopt/-/nopt-8.0.0.tgz" integrity sha512-1L/fTJ4UmV/lUxT2Uf006pfZKTvAgCF+chz+0OgBHO8u2Z67pE7AaAUUj7CJy0lXqHmymUvGFt6NE9R3HER0yw== dependencies: abbrev "^2.0.0" nopt@~3.0.6: version "3.0.6" resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== dependencies: abbrev "1" nopt@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz" integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== dependencies: abbrev "1" osenv "^0.1.4" normalize-package-data@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.0.tgz" integrity sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA== dependencies: hosted-git-info "^8.0.0" semver "^7.3.5" validate-npm-package-license "^3.0.4" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== dependencies: prepend-http "^2.0.0" query-string "^5.0.1" sort-keys "^2.0.0" npm-audit-report@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-6.0.0.tgz" integrity sha512-Ag6Y1irw/+CdSLqEEAn69T8JBgBThj5mw0vuFIKeP7hATYuQuS5jkMjK6xmVB8pr7U4g5Audbun0lHhBDMIBRA== npm-bundled@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz" integrity sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA== dependencies: npm-normalize-package-bin "^4.0.0" npm-check-updates@^17.1.13: version "17.1.13" resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-17.1.13.tgz#93e1c5fa5b8e11bca0bd143650b14ffcf9fc6b5a" integrity sha512-m9Woo2J5XVab0VcQpYvrQ0hx3ySI1mGbiHR595mc6Lr1/FIaTWvv+oU+T1WKSfXRiluKC/V5P6Bdk5agaYpqqg== npm-install-checks@^7.1.0, npm-install-checks@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz" integrity sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg== dependencies: semver "^7.1.1" npm-normalize-package-bin@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz" integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== npm-package-arg@^12.0.0, npm-package-arg@^12.0.1: version "12.0.1" resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.1.tgz" integrity sha512-aDxjFfPV3Liw0WOBWlyZLMBqtbgbg03rmGvHDJa2Ttv7tIz+1oB5qWec4psCDFZcZi9b5XdGkPdQiJxOPzvQRQ== dependencies: hosted-git-info "^8.0.0" proc-log "^5.0.0" semver "^7.3.5" validate-npm-package-name "^6.0.0" npm-packlist@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.0.tgz#35634f0a90f84a811ebdf565eb78d2b36252888c" integrity sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg== dependencies: ignore-walk "^7.0.0" npm-pick-manifest@^10.0.0: version "10.0.0" resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz" integrity sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ== dependencies: npm-install-checks "^7.1.0" npm-normalize-package-bin "^4.0.0" npm-package-arg "^12.0.0" semver "^7.3.5" npm-profile@^11.0.1: version "11.0.1" resolved "https://registry.npmjs.org/npm-profile/-/npm-profile-11.0.1.tgz" integrity sha512-HP5Cw9WHwFS9vb4fxVlkNAQBUhVL5BmW6rAR+/JWkpwqcFJid7TihKUdYDWqHl0NDfLd0mpucheGySqo8ysyfw== dependencies: npm-registry-fetch "^18.0.0" proc-log "^5.0.0" npm-registry-fetch@^18.0.0, npm-registry-fetch@^18.0.1, npm-registry-fetch@^18.0.2: version "18.0.2" resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz" integrity sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ== dependencies: "@npmcli/redact" "^3.0.0" jsonparse "^1.3.1" make-fetch-happen "^14.0.0" minipass "^7.0.2" minipass-fetch "^4.0.0" minizlib "^3.0.1" npm-package-arg "^12.0.0" proc-log "^5.0.0" npm-user-validate@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-3.0.0.tgz" integrity sha512-9xi0RdSmJ4mPYTC393VJPz1Sp8LyCx9cUnm/L9Qcb3cFO8gjT4mN20P9FAsea8qDHdQ7LtcN8VLh2UT47SdKCw== npm@^11.0.0: version "11.0.0" resolved "https://registry.npmjs.org/npm/-/npm-11.0.0.tgz" integrity sha512-Ed/ylWXSKXx058WUqXYlgb3pafCqXL5vWzZEvwCKFsBl7OYQlNn/u4ESW+ON+OG6Q+uCRLPTDGHreX6aJEDj7A== dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/arborist" "^9.0.0" "@npmcli/config" "^10.0.0" "@npmcli/fs" "^4.0.0" "@npmcli/map-workspaces" "^4.0.2" "@npmcli/package-json" "^6.1.0" "@npmcli/promise-spawn" "^8.0.2" "@npmcli/redact" "^3.0.0" "@npmcli/run-script" "^9.0.1" "@sigstore/tuf" "^3.0.0" abbrev "^3.0.0" archy "~1.0.0" cacache "^19.0.1" chalk "^5.3.0" ci-info "^4.1.0" cli-columns "^4.0.0" fastest-levenshtein "^1.0.16" fs-minipass "^3.0.3" glob "^10.4.5" graceful-fs "^4.2.11" hosted-git-info "^8.0.2" ini "^5.0.0" init-package-json "^8.0.0" is-cidr "^5.1.0" json-parse-even-better-errors "^4.0.0" libnpmaccess "^10.0.0" libnpmdiff "^8.0.0" libnpmexec "^10.0.0" libnpmfund "^7.0.0" libnpmorg "^8.0.0" libnpmpack "^9.0.0" libnpmpublish "^11.0.0" libnpmsearch "^9.0.0" libnpmteam "^8.0.0" libnpmversion "^8.0.0" make-fetch-happen "^14.0.3" minimatch "^9.0.5" minipass "^7.1.1" minipass-pipeline "^1.2.4" ms "^2.1.2" node-gyp "^11.0.0" nopt "^8.0.0" normalize-package-data "^7.0.0" npm-audit-report "^6.0.0" npm-install-checks "^7.1.1" npm-package-arg "^12.0.1" npm-pick-manifest "^10.0.0" npm-profile "^11.0.1" npm-registry-fetch "^18.0.2" npm-user-validate "^3.0.0" p-map "^7.0.3" pacote "^21.0.0" parse-conflict-json "^4.0.0" proc-log "^5.0.0" qrcode-terminal "^0.12.0" read "^4.0.0" semver "^7.6.3" spdx-expression-parse "^4.0.0" ssri "^12.0.0" supports-color "^9.4.0" tar "^6.2.1" text-table "~0.2.0" tiny-relative-date "^1.3.0" treeverse "^3.0.0" validate-npm-package-name "^6.0.0" which "^5.0.0" nth-check@^2.0.1: version "2.1.1" resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.3: version "1.13.3" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz" integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz" integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA== dependencies: array-each "^1.0.1" array-slice "^1.0.0" for-own "^1.0.0" isobject "^3.0.0" object.map@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz" integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w== dependencies: for-own "^1.0.0" make-iterator "^1.0.0" object.pick@^1.2.0: version "1.3.0" resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== on-finished@2.4.1, on-finished@^2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" open@^10.0.3: version "10.1.0" resolved "https://registry.npmjs.org/open/-/open-10.1.0.tgz" integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== dependencies: default-browser "^5.2.1" define-lazy-prop "^3.0.0" is-inside-container "^1.0.0" is-wsl "^3.1.0" opener@^1.5.2: version "1.5.2" resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== osenv@^0.1.3, osenv@^0.1.4: version "0.1.5" resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" p-cancelable@^0.4.0: version "0.4.1" resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== p-event@^2.1.0: version "2.3.1" resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz" integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== dependencies: p-timeout "^2.0.1" p-finally@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-is-promise@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-limit@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: yocto-queue "^1.0.0" p-locate@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-locate@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: p-limit "^4.0.0" p-map@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-map@^7.0.2, p-map@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz" integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== p-retry@^6.2.0: version "6.2.1" resolved "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz" integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== dependencies: "@types/retry" "0.12.2" is-network-error "^1.0.0" retry "^0.13.1" p-timeout@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz" integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== dependencies: p-finally "^1.0.0" p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== package-json-from-dist@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== pacote@^21.0.0: version "21.0.0" resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.0.0.tgz#5fe3878a9f808ca5c455c4c1d8ca46eb13351f7b" integrity sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA== dependencies: "@npmcli/git" "^6.0.0" "@npmcli/installed-package-contents" "^3.0.0" "@npmcli/package-json" "^6.0.0" "@npmcli/promise-spawn" "^8.0.0" "@npmcli/run-script" "^9.0.0" cacache "^19.0.0" fs-minipass "^3.0.0" minipass "^7.0.2" npm-package-arg "^12.0.0" npm-packlist "^10.0.0" npm-pick-manifest "^10.0.0" npm-registry-fetch "^18.0.0" proc-log "^5.0.0" promise-retry "^2.0.1" sigstore "^3.0.0" ssri "^12.0.0" tar "^6.1.11" param-case@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== dependencies: no-case "^2.2.0" param-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" tslib "^2.0.3" parse-conflict-json@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz" integrity sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ== dependencies: json-parse-even-better-errors "^4.0.0" just-diff "^6.0.0" just-diff-apply "^5.2.0" parse-filepath@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== dependencies: is-absolute "^1.0.0" map-cache "^0.2.0" path-root "^0.1.1" parse-ms@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz" integrity sha512-LpH1Cf5EYuVjkBvCDBYvkUPh+iv2bk3FHflxHkpCYT0/FZ1d3N3uJaLiHr4yGuMcFUhv6eAivitTvWZI4B/chg== parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parse5@^7.1.2: version "7.2.1" resolved "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz" integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== dependencies: entities "^4.5.0" parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" tslib "^2.0.3" path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-exists@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== path-root@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== dependencies: path-root-regex "^0.1.0" path-scurry@^1.11.1: version "1.11.1" resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@0.1.12: version "0.1.12" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== path-type@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz" integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== pend@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== picomodal@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/picomodal/-/picomodal-3.0.0.tgz" integrity sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw== pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" pkg-dir@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz" integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== dependencies: find-up "^6.3.0" plur@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz" integrity sha512-qSnKBSZeDY8ApxwhfVIwKwF36KVJqb1/9nzYYq3j3vdwocULCXT8f8fQGkiw1Nk9BGfxiDagEe/pwakA+bOBqw== postcss-calc@^10.0.2: version "10.0.2" resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz" integrity sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg== dependencies: postcss-selector-parser "^6.1.2" postcss-value-parser "^4.2.0" postcss-colormin@^7.0.2: version "7.0.2" resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz" integrity sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA== dependencies: browserslist "^4.23.3" caniuse-api "^3.0.0" colord "^2.9.3" postcss-value-parser "^4.2.0" postcss-convert-values@^7.0.4: version "7.0.4" resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz" integrity sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q== dependencies: browserslist "^4.23.3" postcss-value-parser "^4.2.0" postcss-discard-comments@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz" integrity sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA== dependencies: postcss-selector-parser "^6.1.2" postcss-discard-duplicates@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz" integrity sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ== postcss-discard-empty@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz" integrity sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA== postcss-discard-overridden@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz" integrity sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w== postcss-merge-longhand@^7.0.4: version "7.0.4" resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz" integrity sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A== dependencies: postcss-value-parser "^4.2.0" stylehacks "^7.0.4" postcss-merge-rules@^7.0.4: version "7.0.4" resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz" integrity sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg== dependencies: browserslist "^4.23.3" caniuse-api "^3.0.0" cssnano-utils "^5.0.0" postcss-selector-parser "^6.1.2" postcss-minify-font-values@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz" integrity sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog== dependencies: postcss-value-parser "^4.2.0" postcss-minify-gradients@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz" integrity sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg== dependencies: colord "^2.9.3" cssnano-utils "^5.0.0" postcss-value-parser "^4.2.0" postcss-minify-params@^7.0.2: version "7.0.2" resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz" integrity sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ== dependencies: browserslist "^4.23.3" cssnano-utils "^5.0.0" postcss-value-parser "^4.2.0" postcss-minify-selectors@^7.0.4: version "7.0.4" resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz" integrity sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA== dependencies: cssesc "^3.0.0" postcss-selector-parser "^6.1.2" postcss-modules-extract-imports@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz" integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== postcss-modules-local-by-default@^4.0.5: version "4.2.0" resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz" integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^7.0.0" postcss-value-parser "^4.1.0" postcss-modules-scope@^3.2.0: version "3.2.1" resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz" integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== dependencies: postcss-selector-parser "^7.0.0" postcss-modules-values@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: icss-utils "^5.0.0" postcss-normalize-charset@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz" integrity sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ== postcss-normalize-display-values@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz" integrity sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-positions@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz" integrity sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-repeat-style@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz" integrity sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-string@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz" integrity sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-timing-functions@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz" integrity sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-unicode@^7.0.2: version "7.0.2" resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz" integrity sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg== dependencies: browserslist "^4.23.3" postcss-value-parser "^4.2.0" postcss-normalize-url@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz" integrity sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-whitespace@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz" integrity sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ== dependencies: postcss-value-parser "^4.2.0" postcss-ordered-values@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz" integrity sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw== dependencies: cssnano-utils "^5.0.0" postcss-value-parser "^4.2.0" postcss-reduce-initial@^7.0.2: version "7.0.2" resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz" integrity sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA== dependencies: browserslist "^4.23.3" caniuse-api "^3.0.0" postcss-reduce-transforms@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz" integrity sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew== dependencies: postcss-value-parser "^4.2.0" postcss-selector-parser@^6.1.2: version "6.1.2" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" postcss-selector-parser@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz" integrity sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" postcss-svgo@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz" integrity sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA== dependencies: postcss-value-parser "^4.2.0" svgo "^3.3.2" postcss-unique-selectors@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz" integrity sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g== dependencies: postcss-selector-parser "^6.1.2" postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.4.33, postcss@^8.4.38: version "8.4.49" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz" integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== dependencies: nanoid "^3.3.7" picocolors "^1.1.1" source-map-js "^1.2.1" prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== pretty-bytes@^5.1.0, pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== dependencies: lodash "^4.17.20" renderkid "^3.0.0" pretty-ms@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-2.1.0.tgz" integrity sha512-H2enpsxzDhuzRl3zeSQpQMirn8dB0Z/gxW96j06tMfTviUWvX14gjKb7qd1gtkUyYhDPuoNe00K5PqNvy2oQNg== dependencies: is-finite "^1.0.1" parse-ms "^1.0.0" plur "^1.0.0" proc-log@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz" integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== proggy@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/proggy/-/proggy-3.0.0.tgz" integrity sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q== promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== promise-call-limit@^3.0.1: version "3.0.2" resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz" integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" retry "^0.12.0" promzard@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/promzard/-/promzard-2.0.0.tgz" integrity sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg== dependencies: read "^4.0.0" propprop@^0.3.0: version "0.3.1" resolved "https://registry.npmjs.org/propprop/-/propprop-0.3.1.tgz" integrity sha512-EbFINeqVaaw4MKPC9978G5aZhP0Jv49kAQHGlIBd6SKEPBBuf+l4W/zCiL6SCVuxxrOkSdZSB70YXW1xKCSD4Q== proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" ipaddr.js "1.9.1" pump@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz" integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" punycode@^2.1.0: version "2.3.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== qrcode-terminal@^0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== qs@6.13.0: version "6.13.0" resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" qs@^6.4.0: version "6.13.1" resolved "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz" integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg== dependencies: side-channel "^1.0.6" query-string@^5.0.1: version "5.1.1" resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== dependencies: decode-uri-component "^0.2.0" object-assign "^4.1.0" strict-uri-encode "^1.0.0" queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2: version "2.5.2" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" raw-body@~1.1.0: version "1.1.7" resolved "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz" integrity sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg== dependencies: bytes "1" string_decoder "0.10" raw-loader@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz" integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" read-cmd-shim@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz" integrity sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw== read-package-json-fast@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz" integrity sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg== dependencies: json-parse-even-better-errors "^4.0.0" npm-normalize-package-bin "^4.0.0" read@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/read/-/read-4.0.0.tgz" integrity sha512-nbYGT3cec3J5NPUeJia7l72I3oIzMIB6yeNyDqi8CVHr3WftwjrCUqR0j13daoHEMVaZ/rxCpmHKrbods3hI2g== dependencies: mute-stream "^2.0.0" readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~2.0.0" safe-buffer "~5.1.1" string_decoder "~1.1.1" util-deprecate "~1.0.1" readable-stream@^3.0.6: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" readdirp@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz" integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" rechoir@^0.7.0: version "0.7.1" resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz" integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== dependencies: resolve "^1.9.0" rechoir@^0.8.0: version "0.8.0" resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz" integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: resolve "^1.20.0" regenerate-unicode-properties@^10.2.0: version "10.2.0" resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz" integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" regexpu-core@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz" integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: regenerate "^1.4.2" regenerate-unicode-properties "^10.2.0" regjsgen "^0.8.0" regjsparser "^0.12.0" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" regjsgen@^0.8.0: version "0.8.0" resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== regjsparser@^0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz" integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: jsesc "~3.0.2" relateurl@^0.2.7: version "0.2.7" resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== renderkid@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== dependencies: css-select "^4.1.3" dom-converter "^0.2.0" htmlparser2 "^6.1.0" lodash "^4.17.21" strip-ansi "^6.0.1" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.9.0: version "1.22.10" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" responselike@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== dependencies: lowercase-keys "^1.0.0" retry@^0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== retry@^0.13.1: version "0.13.1" resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rimraf@^5.0.5: version "5.0.10" resolved "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz" integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== dependencies: glob "^10.3.7" run-applescript@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz" integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^7.8.1: version "7.8.1" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-json-parse@~1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz" integrity sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass-loader@^16.0.4: version "16.0.4" resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.4.tgz" integrity sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg== dependencies: neo-async "^2.6.2" sass@^1.83.4: version "1.83.4" resolved "https://registry.yarnpkg.com/sass/-/sass-1.83.4.tgz#5ccf60f43eb61eeec300b780b8dcb85f16eec6d1" integrity sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA== dependencies: chokidar "^4.0.0" immutable "^5.0.2" source-map-js ">=0.6.2 <2.0.0" optionalDependencies: "@parcel/watcher" "^2.4.1" schema-utils@^3.0.0, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz" integrity sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" ajv-formats "^2.1.1" ajv-keywords "^5.1.0" seek-bzip@^1.0.5: version "1.0.6" resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz" integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== dependencies: commander "^2.8.1" select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz" integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: "@types/node-forge" "^1.3.0" node-forge "^1" semver@^5.6.0: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3: version "7.6.3" resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== send@0.19.0: version "0.19.0" resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" destroy "1.2.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" http-errors "2.0.0" mime "1.6.0" ms "2.1.3" on-finished "2.4.1" range-parser "~1.2.1" statuses "2.0.1" serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" batch "0.6.1" debug "2.6.9" escape-html "~1.0.3" http-errors "~1.6.2" mime-types "~2.1.17" parseurl "~1.3.2" serve-static@1.16.2: version "1.16.2" resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" send "0.19.0" setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.8.1: version "1.8.2" resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz" integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== should-equal@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz" integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== dependencies: should-type "^1.4.0" should-format@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz" integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== dependencies: should-type "^1.3.0" should-type-adaptors "^1.0.1" should-type-adaptors@^1.0.1: version "1.1.0" resolved "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz" integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== dependencies: should-type "^1.3.0" should-util "^1.0.0" should-type@^1.3.0, should-type@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz" integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== should-util@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz" integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== should@^13.2.3: version "13.2.3" resolved "https://registry.npmjs.org/should/-/should-13.2.3.tgz" integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== dependencies: should-equal "^2.0.0" should-format "^3.0.3" should-type "^1.4.0" should-type-adaptors "^1.0.1" should-util "^1.0.0" side-channel-list@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: es-errors "^1.3.0" object-inspect "^1.13.3" side-channel-map@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: call-bound "^1.0.2" es-errors "^1.3.0" get-intrinsic "^1.2.5" object-inspect "^1.13.3" side-channel-weakmap@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: call-bound "^1.0.2" es-errors "^1.3.0" get-intrinsic "^1.2.5" object-inspect "^1.13.3" side-channel-map "^1.0.1" side-channel@^1.0.6: version "1.1.0" resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: es-errors "^1.3.0" object-inspect "^1.13.3" side-channel-list "^1.0.0" side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== sigstore@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/sigstore/-/sigstore-3.0.0.tgz" integrity sha512-PHMifhh3EN4loMcHCz6l3v/luzgT3za+9f8subGgeMNjbJjzH4Ij/YoX3Gvu+kaouJRIlVdTHHCREADYf+ZteA== dependencies: "@sigstore/bundle" "^3.0.0" "@sigstore/core" "^2.0.0" "@sigstore/protobuf-specs" "^0.3.2" "@sigstore/sign" "^3.0.0" "@sigstore/tuf" "^3.0.0" "@sigstore/verify" "^2.0.0" simple-is@~0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz" integrity sha512-GJXhv3r5vdj5tGWO+rcrWgjU2azLB+fb7Ehh3SmZpXE0o4KrrFLti0w4mdDCbR29X/z0Ls20ApjZitlpAXhAeg== sirv@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz" integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: "@polka/url" "^1.0.0-next.24" mrmime "^2.0.0" totalist "^3.0.0" slash@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz" integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socket.io-client@^4.8.1: version "4.8.1" resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz" integrity sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.2" engine.io-client "~6.6.1" socket.io-parser "~4.2.4" socket.io-parser@~4.2.4: version "4.2.4" resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz" integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" sockjs@^0.3.24: version "0.3.24" resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" uuid "^8.3.2" websocket-driver "^0.7.4" socks-proxy-agent@^8.0.3: version "8.0.5" resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz" integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== dependencies: agent-base "^7.1.2" debug "^4.3.4" socks "^2.8.3" socks@^2.8.3: version "2.8.3" resolved "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz" integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== dependencies: ip-address "^9.0.5" smart-buffer "^4.2.0" sort-keys-length@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== dependencies: sort-keys "^1.0.0" sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== dependencies: is-plain-obj "^1.0.0" sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== dependencies: is-plain-obj "^1.0.0" "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-loader@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz" integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== dependencies: iconv-lite "^0.6.3" source-map-js "^1.0.2" source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map@^0.6.0, source-map@~0.6.0: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.5.0" resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-expression-parse@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz" integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: version "3.0.20" resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz" integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: debug "^4.1.0" detect-node "^2.0.4" hpack.js "^2.1.6" obuf "^1.1.2" readable-stream "^3.0.6" wbuf "^1.7.3" spdy@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" http-deceiver "^1.2.7" select-hose "^2.0.0" spdy-transport "^3.0.0" sprintf-js@^1.1.1, sprintf-js@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssri@^12.0.0: version "12.0.0" resolved "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz" integrity sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ== dependencies: minipass "^7.0.3" statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== string-template@~0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz" integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw== "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" strip-ansi "^7.0.1" string_decoder@0.10: version "0.10.31" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-dirs@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== dependencies: is-natural-number "^4.0.1" strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-outer@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: escape-string-regexp "^1.0.2" style-loader@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz" integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== stylehacks@^7.0.4: version "7.0.4" resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz" integrity sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww== dependencies: browserslist "^4.23.3" postcss-selector-parser "^6.1.2" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-color@^9.4.0: version "9.4.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svgo@^3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz" integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== dependencies: "@trysound/sax" "0.2.0" commander "^7.2.0" css-select "^5.1.0" css-tree "^2.3.1" css-what "^6.1.0" csso "^5.0.5" picocolors "^1.0.0" tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar-stream@^1.5.2: version "1.6.2" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== dependencies: bl "^1.0.0" buffer-alloc "^1.2.0" end-of-stream "^1.0.0" fs-constants "^1.0.0" readable-stream "^2.3.0" to-buffer "^1.1.1" xtend "^4.0.0" tar@^6.1.11, tar@^6.2.1: version "6.2.1" resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" tar@^7.4.3: version "7.4.3" resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== dependencies: "@isaacs/fs-minipass" "^4.0.0" chownr "^3.0.0" minipass "^7.1.2" minizlib "^3.0.1" mkdirp "^3.0.1" yallist "^5.0.0" terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.11: version "5.3.11" resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz" integrity sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" schema-utils "^4.3.0" serialize-javascript "^6.0.2" terser "^5.31.1" terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: version "5.37.0" resolved "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz" integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.1" resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== dependencies: any-promise "^1.0.0" thingies@^1.20.0: version "1.21.0" resolved "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz" integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== through2@^2.0.1: version "2.0.5" resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" through@^2.3.8: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== thunky@^1.0.2: version "1.1.0" resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== time-grunt@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/time-grunt/-/time-grunt-2.0.0.tgz" integrity sha512-iQD2AeDYCAJrsPC/eUsfYZD9UT7TuBOmUIgFV5zeTQgRk6yLJKoc3aYR0gusJ0m+bG13B6qrDZ0SwPLe0/htHw== dependencies: chalk "^1.0.0" date-time "^1.1.0" figures "^1.0.0" hooker "^0.2.3" number-is-nan "^1.0.0" pretty-ms "^2.1.0" text-table "^0.2.0" time-zone@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/time-zone/-/time-zone-0.1.0.tgz" integrity sha512-S5CjtVIkeBTnlsaZP3gjsTb78ClBe74sEcgEoBwAVUKnTRDAGqUtLLIZHMsIyqOWjt9DGQpLMMoD8ZKIfP2ddQ== timed-out@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== timestring@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/timestring/-/timestring-7.0.0.tgz" integrity sha512-U7ttxEdKWqHYJ96OGoJJR5gU8Nwkl3tlY0n7Jr4vcpLD2RkVZLE1Ph9k8ZRrZ7LYX9QCtd3M9OUaR9P8Z37QNg== tiny-lr@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz" integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== dependencies: body "^5.1.0" debug "^3.1.0" faye-websocket "~0.10.0" livereload-js "^2.3.0" object-assign "^4.1.0" qs "^6.4.0" tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== to-buffer@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== totalist@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== tree-dump@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz" integrity sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ== tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== treeverse@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz" integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== dependencies: escape-string-regexp "^1.0.2" tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: version "2.8.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tuf-js@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz" integrity sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA== dependencies: "@tufjs/models" "3.0.1" debug "^4.3.6" make-fetch-happen "^14.0.1" type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" mime-types "~2.1.24" uglify-js@^3.5.1: version "3.19.3" resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== unbzip2-stream@^1.0.9: version "1.4.3" resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== dependencies: buffer "^5.2.1" through "^2.3.8" unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== underscore.string@~3.3.5: version "3.3.6" resolved "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz" integrity sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ== dependencies: sprintf-js "^1.1.1" util-deprecate "^1.0.2" undici-types@~6.20.0: version "6.20.0" resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz" integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz" integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" unicode-match-property-value-ecmascript@^2.1.0: version "2.2.0" resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz" integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unicorn-magic@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== unique-filename@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz" integrity sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ== dependencies: unique-slug "^5.0.0" unique-slug@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz" integrity sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg== dependencies: imurmurhash "^0.1.4" universalify@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== untildify@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz" integrity sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig== dependencies: os-homedir "^1.0.0" update-browserslist-db@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz" integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== dependencies: escalade "^3.2.0" picocolors "^1.1.0" upper-case@^1.1.1: version "1.1.3" resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz" integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== dependencies: prepend-http "^2.0.0" url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz" integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== utf8@^2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz" integrity sha512-QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utila@~0.4: version "0.4.0" resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^11.0.5: version "11.0.5" resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.5.tgz#07b46bdfa6310c92c3fb3953a8720f170427fc62" integrity sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA== uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8flags@~3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== dependencies: homedir-polyfill "^1.0.1" validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" validate-npm-package-name@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz" integrity sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg== vanilla-picker@^2.12.3: version "2.12.3" resolved "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.3.tgz" integrity sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ== dependencies: "@sphinxxxx/color-conversion" "^2.2.2" vary@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== walk-up-path@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-4.0.0.tgz#590666dcf8146e2d72318164f1f2ac6ef51d4198" integrity sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A== watchpack@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz" integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" webpack-bundle-analyzer@^4.10.2: version "4.10.2" resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz" integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== dependencies: "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" commander "^7.2.0" debounce "^1.2.1" escape-string-regexp "^4.0.0" gzip-size "^6.0.0" html-escaper "^2.0.2" opener "^1.5.2" picocolors "^1.0.0" sirv "^2.0.3" ws "^7.3.1" webpack-cli@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz" integrity sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw== dependencies: "@discoveryjs/json-ext" "^0.6.1" "@webpack-cli/configtest" "^3.0.1" "@webpack-cli/info" "^3.0.1" "@webpack-cli/serve" "^3.0.1" colorette "^2.0.14" commander "^12.1.0" cross-spawn "^7.0.3" envinfo "^7.14.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" interpret "^3.1.1" rechoir "^0.8.0" webpack-merge "^6.0.1" webpack-dev-middleware@^7.4.2: version "7.4.2" resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz" integrity sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA== dependencies: colorette "^2.0.10" memfs "^4.6.0" mime-types "^2.1.31" on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" webpack-dev-server@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz" integrity sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA== dependencies: "@types/bonjour" "^3.5.13" "@types/connect-history-api-fallback" "^1.5.4" "@types/express" "^4.17.21" "@types/serve-index" "^1.9.4" "@types/serve-static" "^1.15.5" "@types/sockjs" "^0.3.36" "@types/ws" "^8.5.10" ansi-html-community "^0.0.8" bonjour-service "^1.2.1" chokidar "^3.6.0" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" express "^4.21.2" graceful-fs "^4.2.6" http-proxy-middleware "^2.0.7" ipaddr.js "^2.1.0" launch-editor "^2.6.1" open "^10.0.3" p-retry "^6.2.0" schema-utils "^4.2.0" selfsigned "^2.4.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" webpack-dev-middleware "^7.4.2" ws "^8.18.0" webpack-merge@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz" integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== dependencies: clone-deep "^4.0.1" flat "^5.0.2" wildcard "^2.0.1" webpack-remove-debug@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/webpack-remove-debug/-/webpack-remove-debug-0.1.0.tgz" integrity sha512-6RWybQwb/kuuaY99GUxCuHkG/DufaiUEClypvyOS+8y7QwDi8iB2DyUQiMMa0VwsFiBIWQ8FKOi1uFi44KnbcA== webpack-sources@^3.2.3: version "3.2.3" resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.97.1: version "5.97.1" resolved "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz" integrity sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.6" "@webassemblyjs/ast" "^1.14.1" "@webassemblyjs/wasm-edit" "^1.14.1" "@webassemblyjs/wasm-parser" "^1.14.1" acorn "^8.14.0" browserslist "^4.24.0" chrome-trace-event "^1.0.2" enhanced-resolve "^5.17.1" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" schema-utils "^3.2.0" tapable "^2.1.1" terser-webpack-plugin "^5.3.10" watchpack "^2.4.1" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: version "0.1.4" resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== which@^1.2.14: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@~2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" which@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/which/-/which-5.0.0.tgz" integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== dependencies: isexe "^3.1.1" wildcard@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== wiredep-cli@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/wiredep-cli/-/wiredep-cli-0.1.0.tgz" integrity sha512-Gayaqg8UXk5qPH0MuVP35m7h9GvvCE8XJd1AeXOFgjHxxowhjyfeKSd4BNBsbPAy5kRQ1c5A4tJKcNV8LiE6jw== dependencies: chalk "^1.1.1" minimist "^1.1.0" wiredep "*" wiredep@*, wiredep@~4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/wiredep/-/wiredep-4.0.0.tgz" integrity sha512-w4QDvO5bgcpOBHFBCEH4oKKcMBTeG2pMEzkLSAhjKZ0X6+yb1dAS3vUEtjjz6Rg1M3ox3PG6BSCFZJEQh+TF8w== dependencies: bower-config "^1.3.0" glob "^7.0.3" lodash "^4.6.1" propprop "^0.3.0" through2 "^2.0.1" wiredep-cli "^0.1.0" wordwrap@^0.0.3: version "0.0.3" resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" integrity sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw== workerpool@^6.5.1: version "6.5.1" resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" string-width "^5.0.1" strip-ansi "^7.0.1" wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz" integrity sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ== dependencies: imurmurhash "^0.1.4" signal-exit "^4.0.1" ws@^7.3.1: version "7.5.10" resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.18.0: version "8.18.0" resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== ws@~8.17.1: version "8.17.1" resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== xmlhttprequest-ssl@~2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz" integrity sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ== xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yallist@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz" integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== yaml@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" decamelize "^4.0.0" flat "^5.0.2" is-plain-obj "^2.1.0" yargs@^16.2.0: version "16.2.0" resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.0" y18n "^5.0.5" yargs-parser "^20.2.2" yargs@^17.7.2: version "17.7.2" resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.3" y18n "^5.0.5" yargs-parser "^21.1.1" yauzl@^2.10.0, yauzl@^2.4.2: version "2.10.0" resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yocto-queue@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==