diff --git a/.env b/.env new file mode 100644 index 0000000..5957d3a --- /dev/null +++ b/.env @@ -0,0 +1,44 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=******************************** +###< symfony/framework-bundle ### + +###> symfony/webapp-meta ### +MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 +###< symfony/webapp-meta ### + +###> doctrine/doctrine-bundle ### +# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml +# +# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" +# DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7&charset=utf8mb4" +# DATABASE_URL="postgresql://symfony:ChangeMe@127.0.0.1:5432/app?serverVersion=13&charset=utf8" +DATABASE_URL="mysql://username:password@127.0.0.1:3306/database?serverVersion=8.0&charset=utf8mb4" +###< doctrine/doctrine-bundle ### + +###> symfony/messenger ### +# Choose one of the transports below +# MESSENGER_TRANSPORT_DSN=doctrine://default +# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages +# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages +###< symfony/messenger ### + +###> symfony/mailer ### +# MAILER_DSN=smtp://localhost +###< symfony/mailer ### diff --git a/.gitignore b/.gitignore index 13ff59d..b096c46 100644 --- a/.gitignore +++ b/.gitignore @@ -1,54 +1,26 @@ -# ---> Symfony -# Cache and logs (Symfony2) -/app/cache/* -/app/logs/* -!app/cache/.gitkeep -!app/logs/.gitkeep -# Email spool folder -/app/spool/* - -# Cache, session files and logs (Symfony3) -/var/cache/* -/var/logs/* -/var/sessions/* -!var/cache/.gitkeep -!var/logs/.gitkeep -!var/sessions/.gitkeep - -# Logs (Symfony4) -/var/log/* -!var/log/.gitkeep - -# Parameters -/app/config/parameters.yml -/app/config/parameters.ini - -# Managed by Composer -/app/bootstrap.php.cache -/var/bootstrap.php.cache -/bin/* -!bin/console -!bin/symfony_requirements +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ /vendor/ +###< symfony/framework-bundle ### -# Assets and user uploads -/web/bundles/ -/web/uploads/ - -# PHPUnit -/app/phpunit.xml -/phpunit.xml - -# Build data -/build/ - -# Composer PHAR -/composer.phar - -# Backup entities generated with doctrine:generate:entities command -**/Entity/*~ - -# Embedded web-server pid file -/.web-server-pid +###> symfony/webpack-encore-bundle ### +/node_modules/ +/public/build/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### +/_sql/ +/.yarn/ +/assets/static/ +/public/.well-known/ +/public/android/ +/public/upload/ +/public/yandex_678f0b750d297325.html +/public/BingSiteAuth.xml diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/assets/app.js b/assets/app.js new file mode 100644 index 0000000..65c87a7 --- /dev/null +++ b/assets/app.js @@ -0,0 +1,2889 @@ +// noinspection JSUnresolvedFunction +const imagesContext = require.context("./static", true, /\.(png|jpg|jpeg|gif|ico|svg|webp)$/); +imagesContext.keys().forEach(imagesContext); + +/* --- CSS --- */ +require("./css/font.scss"); +require("./css/normalize.scss"); +require("./css/layout.scss"); +require("./css/style.scss"); + +/* --- IMPORTS ---*/ +// start the Stimulus application +// import './bootstrap'; +import {STATIC_ENV} from "./js/statics"; +import {IDB_stores} from "./js/idb_stores"; +import {Profile, Region, Filter, Node} from "./js/Classes/Worldmap" + +/* --- VARS --- */ +const CLASS_formXml = "sp_form__xhr"; +const CLASS_formOnClick = "sp_form__onclick" +const CLASS_formOnChange = "sp_form__onchange" + +const CLASS_inputTypePassword = "sp_input__password"; +// const CLASS_inputTypeCheckbox = "sp_radio__type-checkbox"; +// const CLASS_inputTypeRadio = "sp_radio__type-radio"; + +const CLASS_radioContainer = "sp_radio__container"; +const CLASS_radioInputWrapper = "sp_radio__input-wrapper"; +const CLASS_radioChecked = "sp_radio__checked"; + + + let IDB_database = null; +const IDB_databaseName = "genshin-world"; +const IDB_databaseVersion = 7; + let IDB_hadMigration = false; + +const EVENT_submit = new Event("submit", { + bubbles: true, + cancelable: true +}); +const EVENT_change = new Event("change", { + bubbles: true, + cancelable: true +}); +const EVENT_click = new Event("click", { + bubbles: true, + cancelable: true +}); +const EVENT_keyup = new Event("keyup", { + bubbles: true, + cancelable: true +}); + +let GLOBAL_isTouchDevice; +let GLOBAL_pinchDistance = 0; + + let HANDLE_preventClickTimeout = null; + let GLOBAL_isMouseDown = false; +const GLOBAL_mouseDownCoordinate = {x: 0, y: 0} + let GLOBAL_preventClick = false; + +const GLOBAL_nodeBackup = { + grid: null, + node: null +}; + + /** @type {Profile|null} */ + let GLOBAL_worldmapProfile = null + /** @type {Region|null} */ + let GLOBAL_region = null; + let GLOBAL_worldmapMaxZoomLevel=28; + let GLOBAL_worldmapFilter_isInitialized = false; + + +// +function log() { + if(STATIC_ENV === "dev") { + for(const argument of arguments) { + console.log(argument); + } + } +} + +/** + * @return {Promise} + */ +function dom_isLoaded() { + return new Promise(async function(domLoaded) { + const imgList = /** @type {HTMLImageElement[]} */document.querySelectorAll("img[data-src]"); + const imgToLoad = imgList.length; + let imgLoaded = 0; + + if(imgList.length === 0) { + domLoaded(true); + } else { + for(const _htmlImageElement of imgList) { + const origin = _htmlImageElement.src; + + new Promise(function(isImgLoaded) { + _htmlImageElement.onload = function() { + imgLoaded++ + isImgLoaded(true); + + if(imgLoaded === imgToLoad) { + domLoaded(true); + } + }; + _htmlImageElement.onerror = function() { + _htmlImageElement.src = origin; + + imgLoaded++ + isImgLoaded(false); + + if(imgLoaded === imgToLoad) { + domLoaded(true); + } + }; + + _htmlImageElement.src = _htmlImageElement.dataset.src; + _htmlImageElement.removeAttribute("data-src"); + }); + } + } + }); +} + +/** + * @param {HTMLElement} htmlElement + */ +function getOffsetFromParent(htmlElement) { + const computerStyle = window.getComputedStyle(htmlElement); + const cssMatrix = new WebKitCSSMatrix(computerStyle.transform); + + return { + x: htmlElement.offsetLeft + cssMatrix.m41, + y: htmlElement.offsetTop + cssMatrix.m42 + }; +} + +/** + * @param {HTMLElement} htmlElement + * @param {HTMLElement|null} parentElement + * @return {{x: number, y: number}} + */ +function getOffsetFrom(htmlElement, parentElement = null) { + const htmlElementOffset = { + x: 0, + y: 0 + }; + + do { + const elementOffset = getOffsetFromParent(htmlElement); + + htmlElementOffset.x += elementOffset.x; + htmlElementOffset.y += elementOffset.y; + + htmlElement = htmlElement.parentElement; + } while(parentElement ? htmlElement !== parentElement : htmlElement); + + return htmlElementOffset; +} + +/** + * @param {HTMLElement} htmlElement + */ +function getOffsetFromDocument(htmlElement) { + return getOffsetFrom(htmlElement); +} + +/** + * @param {string} str + * @return {DocumentFragment} + */ +function strToHtml(str) { + return document.createRange().createContextualFragment(str); +} + +function isJson(str) { + try { + JSON.parse(str); + } catch(e) { + return false; + } + + return true; +} + +function removeDiacritics(str) { + const defaultDiacriticsRemovalMap = [ + { + "base": "A", + "letters": /[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g + }, + { + "base": "AA", + "letters": /[\uA732]/g + }, + { + "base": "AE", + "letters": /[\u00C6\u01FC\u01E2]/g + }, + { + "base": "AO", + "letters": /[\uA734]/g + }, + { + "base": "AU", + "letters": /[\uA736]/g + }, + { + "base": "AV", + "letters": /[\uA738\uA73A]/g + }, + { + "base": "AY", + "letters": /[\uA73C]/g + }, + { + "base": "B", + "letters": /[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g + }, + { + "base": "C", + "letters": /[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g + }, + { + "base": "D", + "letters": /[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g + }, + { + "base": "DZ", + "letters": /[\u01F1\u01C4]/g + }, + { + "base": "Dz", + "letters": /[\u01F2\u01C5]/g + }, + { + "base": "E", + "letters": /[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g + }, + { + "base": "F", + "letters": /[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g + }, + { + "base": "G", + "letters": /[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g + }, + { + "base": "H", + "letters": /[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g + }, + { + "base": "I", + "letters": /[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g + }, + { + "base": "J", + "letters": /[\u004A\u24BF\uFF2A\u0134\u0248]/g + }, + { + "base": "K", + "letters": /[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g + }, + { + "base": "L", + "letters": /[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g + }, + { + "base": "LJ", + "letters": /[\u01C7]/g + }, + { + "base": "Lj", + "letters": /[\u01C8]/g + }, + { + "base": "M", + "letters": /[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g + }, + { + "base": "N", + "letters": /[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g + }, + { + "base": "NJ", + "letters": /[\u01CA]/g + }, + { + "base": "Nj", + "letters": /[\u01CB]/g + }, + { + "base": "O", + "letters": /[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g + }, + { + "base": "OI", + "letters": /[\u01A2]/g + }, + { + "base": "OO", + "letters": /[\uA74E]/g + }, + { + "base": "OU", + "letters": /[\u0222]/g + }, + { + "base": "P", + "letters": /[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g + }, + { + "base": "Q", + "letters": /[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g + }, + { + "base": "R", + "letters": /[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g + }, + { + "base": "S", + "letters": /[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g + }, + { + "base": "T", + "letters": /[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g + }, + { + "base": "TZ", + "letters": /[\uA728]/g + }, + { + "base": "U", + "letters": /[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g + }, + { + "base": "V", + "letters": /[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g + }, + { + "base": "VY", + "letters": /[\uA760]/g + }, + { + "base": "W", + "letters": /[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g + }, + { + "base": "X", + "letters": /[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g + }, + { + "base": "Y", + "letters": /[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g + }, + { + "base": "Z", + "letters": /[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g + }, + { + "base": "a", + "letters": /[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g + }, + { + "base": "aa", + "letters": /[\uA733]/g + }, + { + "base": "ae", + "letters": /[\u00E6\u01FD\u01E3]/g + }, + { + "base": "ao", + "letters": /[\uA735]/g + }, + { + "base": "au", + "letters": /[\uA737]/g + }, + { + "base": "av", + "letters": /[\uA739\uA73B]/g + }, + { + "base": "ay", + "letters": /[\uA73D]/g + }, + { + "base": "b", + "letters": /[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g + }, + { + "base": "c", + "letters": /[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g + }, + { + "base": "d", + "letters": /[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g + }, + { + "base": "dz", + "letters": /[\u01F3\u01C6]/g + }, + { + "base": "e", + "letters": /[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g + }, + { + "base": "f", + "letters": /[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g + }, + { + "base": "g", + "letters": /[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g + }, + { + "base": "h", + "letters": /[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g + }, + { + "base": "hv", + "letters": /[\u0195]/g + }, + { + "base": "i", + "letters": /[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g + }, + { + "base": "j", + "letters": /[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g + }, + { + "base": "k", + "letters": /[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g + }, + { + "base": "l", + "letters": /[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g + }, + { + "base": "lj", + "letters": /[\u01C9]/g + }, + { + "base": "m", + "letters": /[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g + }, + { + "base": "n", + "letters": /[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g + }, + { + "base": "nj", + "letters": /[\u01CC]/g + }, + { + "base": "o", + "letters": /[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g + }, + { + "base": "oi", + "letters": /[\u01A3]/g + }, + { + "base": "ou", + "letters": /[\u0223]/g + }, + { + "base": "oo", + "letters": /[\uA74F]/g + }, + { + "base": "p", + "letters": /[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g + }, + { + "base": "q", + "letters": /[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g + }, + { + "base": "r", + "letters": /[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g + }, + { + "base": "s", + "letters": /[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g + }, + { + "base": "t", + "letters": /[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g + }, + { + "base": "tz", + "letters": /[\uA729]/g + }, + { + "base": "u", + "letters": /[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g + }, + { + "base": "v", + "letters": /[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g + }, + { + "base": "vy", + "letters": /[\uA761]/g + }, + { + "base": "w", + "letters": /[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g + }, + { + "base": "x", + "letters": /[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g + }, + { + "base": "y", + "letters": /[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g + }, + { + "base": "z", + "letters": /[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g + } + ]; + + for(const map of /** @type {Object[]} */defaultDiacriticsRemovalMap) { + str = str.replace(map.letters, map.base); + } + + return str; +} + +/** + * @this {HTMLSelectElement} + */ +function clearFocus() { + document.activeElement.blur(); +} + +// function isFileImage(file) { +// return file && file['type'].split('/')[0] === 'image'; +// } + +function readImage() { + /** @type {HTMLInputElement|null} */ + const htmlInputElement=this; + + if(htmlInputElement.files[0] && htmlInputElement.files[0]['type'].split('/')[0] === 'image') { + /** @type {HTMLImageElement|null} */ + const htmlImgElement=htmlInputElement.getAttribute('data-file-preview-target') ? document.getElementById(htmlInputElement.getAttribute('data-file-preview-target')) : null; + + if(htmlImgElement && htmlInputElement.files && htmlInputElement.files[0]) { + const reader = new FileReader(); + + reader.onload = function(progressEvent) { + htmlImgElement.src=/** @type {string} */progressEvent.target.result; + }; + + reader.readAsDataURL(htmlInputElement.files[0]); + } + } +} + +function readPath() { + /** @type {HTMLInputElement|null} */ + const htmlInputElement=this; + /** @type {HTMLInputElement|null} */ + const htmlPathElement=htmlInputElement.parentElement?.querySelector("input[name='file-path']"); + + if(htmlPathElement && htmlInputElement.files && htmlInputElement.files[0]) { + const startIndex = (htmlInputElement.value.indexOf('\\') >= 0 ? htmlInputElement.value.lastIndexOf('\\') : htmlInputElement.value.lastIndexOf('/')); + let filename = htmlInputElement.value.substring(startIndex); + + if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) { + htmlPathElement.value = filename.substring(1); + } + } +} + +// + +// +function form_init(container = null) { + return new Promise(function(resolve) { + const htmlSourceElement = container ? container : document; + + for(const htmlInputElement of /** @type {HTMLInputElement[]} */htmlSourceElement.querySelectorAll("input[type='file']")) { + htmlInputElement.addEventListener("change", clearFocus); + htmlInputElement.addEventListener("change", readPath); + htmlInputElement.addEventListener("change", readImage); + } + + for(const htmlSelectElement of /** @type {HTMLSelectElement[]} */htmlSourceElement.querySelectorAll("select")) { + htmlSelectElement.addEventListener("change", clearFocus); + } + + for(const htmlFormElement of /** @type {HTMLFormElement[]} */htmlSourceElement.querySelectorAll("form")) { + htmlFormElement.addEventListener("submit", form_checkValidity); + + if(htmlFormElement.classList.contains(CLASS_formOnClick)) { + htmlFormElement.addEventListener("click", form_dispatchSubmitEvent); + } + + if(htmlFormElement.classList.contains(CLASS_formOnChange)) { + htmlFormElement.addEventListener("change", form_dispatchSubmitEvent); + } + + // if(htmlFormElement.classList.contains("form_xml__onkeyup")) { + // htmlFormElement.addEventListener("keydown", form_preventManualSubmit); + // htmlFormElement.addEventListener("keyup", form_dispatchSubmitEvent); + // } + } + + resolve(); + }); +} + +// /** +// * @param {KeyboardEvent} keyboardEvent +// * @this {HTMLFormElement} +// */ +// function form_preventManualSubmit(keyboardEvent) { +// if(keyboardEvent.key === "Enter") { +// keyboardEvent.preventDefault(); +// return false; +// } +// } + +/** + * @this {HTMLFormElement} + */ +function form_dispatchSubmitEvent(event) { + if(this instanceof HTMLFormElement) { + this.dispatchEvent(EVENT_submit); + } else if(arguments.length > 0 && (arguments[0] instanceof HTMLFormElement)) { + arguments[0].dispatchEvent(EVENT_submit); + } +} + +/** + * @param htmlFormElement + * @return {Promise} + */ +function form_trimInputs(htmlFormElement) { + return new Promise(function(resolve) { + for(const htmlInputElement of /** @type {HTMLInputElement[]|HTMLTextAreaElement[]} */htmlFormElement.querySelectorAll("input[type='text'], input[type='number'], textarea")) { + if(!htmlInputElement.classList.contains(CLASS_inputTypePassword)) { + htmlInputElement.value = htmlInputElement.value.trim(); + } + } + + resolve(true); + }); +} + +function form_resetCustomValidity() { + this.setCustomValidity(""); +} + +/** + * @param {Event} submitEvent + * @this {HTMLFormElement} + */ +async function form_checkValidity(submitEvent) { + submitEvent.preventDefault(); + + clearFocus(); + form_setUploadScreen(this); + + await form_trimInputs(this); + + if(this.checkValidity()) { + for(/** @type {HTMLInputElement} */const _htmlInputElement of this.querySelectorAll(".sp_input__format-screenshot")) { + if(await node_formatScreenshot(_htmlInputElement) === false) { + _htmlInputElement.setCustomValidity("Could not format file"); + _htmlInputElement.addEventListener("change", form_resetCustomValidity); + + form_setUploadScreen(); + this.reportValidity(); + + return; + } + } + + if(this.classList.contains(CLASS_formXml)) { + form_ajaxRequest(this); + } else { + this.submit(); + } + } else { + form_setUploadScreen(); + this.reportValidity(); + } +} + +function form_setUploadScreen(htmlFormElement) { + if(htmlFormElement instanceof HTMLFormElement) { + htmlFormElement.classList.add("sp_form__uploading"); + } else { + document.querySelector("form.sp_form__uploading")?.classList.remove("sp_form__uploading"); + } +} + +/** + * @param {HTMLFormElement} htmlFormElement + */ +function form_ajaxRequest(htmlFormElement) { + const request = new XMLHttpRequest(); + + request.responseType = "json"; + request.onload = form_ajaxResponse; + + request.open(htmlFormElement.method, htmlFormElement.action); + request.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + request.send(new FormData(htmlFormElement)); +} + +/** + * @this {XMLHttpRequest} + */ +async function form_ajaxResponse() { + const { + /** @type {JSON} */response, + /** @type {number} */status + } = this; + + form_setUploadScreen(); + + if(status === 200) { + if(response instanceof Object) { + if("::function" in response) { + for(const fn of /** @type {Object[]} */response["::function"]) { + const { + /** @type {string} */name, + /** @type {*} */params + } = fn; + + switch(name) { + case "messageInfo": messageInfo(params); break; + case "redirect": window.location.href = params["url"]; break; + case "modal_load": await modal_load(params); break; + case "modal_unload": modal_unload(params); break; + case "node_loadForm": await node_loadForm(params); break; + case "node_validateForm": await node_validateForm(params); break; + case "node_removeElement": await node_removeElement(params); break; + case "paq_event": if(STATIC_ENV === "prod") { paq_event(params); } break; + } + } + } + } + } else { + // messageInfo({ + // status: "error", + // message: "Ajax request error" + // }); + } +} + +/** + * @param {HTMLElement|null} container + * @return {Promise} + */ +function radio_initListeners(container = null) { + return new Promise(function(resolve) { + const nodeList = container ? container.querySelectorAll(`.${CLASS_radioContainer}`) : document.querySelectorAll(`.${CLASS_radioContainer}`); + + for(const radioContainer of /** @type {HTMLElement[]} */ nodeList) { + for(const htmlInputElement of /** @type {HTMLInputElement[]} */ radioContainer.querySelectorAll(`.${CLASS_radioInputWrapper} input`)) { + const inputType = htmlInputElement.type; + + htmlInputElement.closest(`.${CLASS_radioInputWrapper}`)?.classList.add(`sp_radio__type-${inputType}`); + } + + radioContainer.addEventListener("change", radio_changeListener); + radioContainer.dispatchEvent(EVENT_change); + } + + resolve(true); + }); +} + +/** + * @this {HTMLElement} + */ +function radio_changeListener() { + for(const htmlLabelElement of /** @type {HTMLLabelElement[]} */this.querySelectorAll("label")) { + if(htmlLabelElement.querySelector("input").checked === true) { + htmlLabelElement.classList.add(CLASS_radioChecked); + } else { + htmlLabelElement.classList.remove(CLASS_radioChecked); + } + } +} + +// + +// +/** + * @param {string} databaseName + * @param {number} databaseVersion + * @returns {Promise} + */ +function idb_openDatabase(databaseName, databaseVersion) { + return new Promise(function(resolve) { + if("indexedDB" in window) { + const idbOpenDBRequest = window.indexedDB.open(databaseName, databaseVersion); + + idbOpenDBRequest.onerror = function() { + console.error(new Error("Failed to open database")); + + resolve(null); + }; + + idbOpenDBRequest.onupgradeneeded = async function(versionChangeEvent) { + loader_show("Updating data", "Do not refresh the page !"); + + IDB_database = versionChangeEvent.target.result; + const transaction = versionChangeEvent.target.transaction; + const idbStores = IDB_database.objectStoreNames; + + for(/** @type {Store} */const store of Object.values(IDB_stores)) { + await idb_createStore(IDB_database, store); + } + + if([1, 2, 3, 4, 5, 6].includes(versionChangeEvent.oldVersion)) { + IDB_hadMigration = true; + } + + if([1, 2, 3, 4].includes(versionChangeEvent.oldVersion)) { + window.indexedDB.deleteDatabase(databaseName); + } + + if(versionChangeEvent.oldVersion === 5) { + if(idbStores.contains(IDB_stores.ProfileStore.storeName) && idbStores.contains(IDB_stores.NodeStore.storeName)) { + const nodeStore = transaction.objectStore(IDB_stores.NodeStore.storeName); + const idbDataRequest = nodeStore.getAll(); + + idbDataRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbDataRequest.error.name}`); + }; + + idbDataRequest.onsuccess = async function(event) { + const nodeStoreData = event.target.result; + const idbClearRequest = await nodeStore.clear(); + + idbClearRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbClearRequest.error.name}`); + }; + + idbClearRequest.onsuccess = async function() { + const profileStore = transaction.objectStore(IDB_stores.ProfileStore.storeName); + const idbDataRequest = profileStore.getAll(); + + idbDataRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbDataRequest.error.name}`); + }; + + idbDataRequest.onsuccess = async function(event) { + const profileStoreData = event.target.result; + const idbClearRequest = await profileStore.clear(); + + idbClearRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbClearRequest.error.name}`); + }; + + idbClearRequest.onsuccess = async function() { + for(const _profile of profileStoreData) { + const profile = new Profile(); + profile.hydrate(_profile); + + if(!profile.server || !["cn", "eu", "na"].includes(profile.server)) { + profile.server = "eu"; + } + + profile.slug = removeDiacritics(`${profile.name}-${profile.server}`).replace(/(\W|_)+/g, "-").toLowerCase(); + + await profileStore.put(profile.dehydrate()); + + for(const _node of nodeStoreData) { + if(_profile["slug"] === _node["profile"]) { + _node["profile"] = profile.slug; + + await nodeStore.put(_node); + } + } + } + }; + }; + }; + }; + } + } + + if([5, 6].includes(versionChangeEvent.oldVersion)) { + if(idbStores.contains(IDB_stores.ProfileStore.storeName) && idbStores.contains(IDB_stores.NodeStore.storeName)) { + const nodeStore = transaction.objectStore(IDB_stores.NodeStore.storeName); + const idbDataRequest = nodeStore.getAll(); + + idbDataRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbDataRequest.error.name}`); + }; + + idbDataRequest.onsuccess = async function(event) { + const nodeStoreData = event.target.result; + const idbClearRequest = await nodeStore.clear(); + + idbClearRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbClearRequest.error.name}`); + }; + + idbClearRequest.onsuccess = async function() { + const profileStore = transaction.objectStore(IDB_stores.ProfileStore.storeName); + const idbDataRequest = profileStore.getAll(); + + idbDataRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbDataRequest.error.name}`); + }; + + idbDataRequest.onsuccess = async function(event) { + const profileStoreData = await event.target.result; + const idbClearRequest = await profileStore.clear(); + + idbClearRequest.onerror = function() { + throw new Error(`[IDB GET ERROR]: ${idbClearRequest.error.name}`); + }; + + idbClearRequest.onsuccess = async function() { + for(const _profile of profileStoreData) { + const profile = new Profile(); + profile.hydrate(_profile); + + switch(profile.slug) { + case "default-eu": + profile.slug = "profile-a"; + profile.name = "Profile A"; + profile.server = "eu"; + profile.isActive = true; + break; + case "default-na": + profile.slug = "profile-b"; + profile.name = "Profile B"; + profile.server = "na"; + profile.isActive = false; + break; + case "default-cn": + profile.slug = "profile-c"; + profile.name = "Profile C"; + profile.server = "cn"; + profile.isActive = false; + break; + } + + await profileStore.put(profile.dehydrate()); + + for(const _node of nodeStoreData) { + if(_profile["slug"] === _node["profile"]) { + _node["profile"] = profile.slug; + + await nodeStore.put(_node); + } + } + } + }; + }; + }; + }; + } + } + + if(versionChangeEvent.oldVersion !== 0) { + setTimeout(function() { + window.location.reload(); + }, 5000); + } + }; + + idbOpenDBRequest.onsuccess = async function(event) { + resolve(event.target.result); + }; + } else { + resolve(null); + } + }); +} + +/** + * @param {IDBDatabase} database + * @param {Store} store + * @returns {Promise} + */ +function idb_createStore(database, store) { + return new Promise(async function(resolve) { + const idbStores = database.objectStoreNames; + + if(!idbStores.contains(store.storeName)) { + const _store = await database.createObjectStore(store.storeName, { + keyPath: store.keyPath, + autoIncrement: store.autoIncrement + }); + + if(store.indexes.length) { + for(const _index of /** @type Index[] */ store.indexes) { + _store.createIndex(_index.name, _index.keyPath, _index.options); + } + } + } + + resolve(true); + }); +} + +/** + * @param {Store} store + * @returns {Promise} + */ +function idb_deleteStore(store) { + return new Promise(function(resolve) { + if(IDB_database) { + const stores = IDB_database.objectStoreNames; + + if(stores.contains(store.storeName)) { + IDB_database.deleteObjectStore(store.storeName); + } + } + + resolve(true); + }); +} + +/** + * @param {string} type + * @param {Store} store + * @param {string|array|null} keyPath + * @param {Object|null} index + * @param {Object|null} data + * @returns {Promise} + */ +function idb_openTransaction(type, store, {keyPath = null, index = null, data = null}) { + return new Promise(async function(resolve) { + if(IDB_database) { + const types = ["get", "getAll", "put", "delete"]; + + if(types.includes(type)) { + let result = null; + + switch(type) { + case "get": + case "getAll": + result = await idb_getTransaction(store, {keyPath: keyPath, index: index}, type === "getAll"); + break; + case "put": + result = await idb_putTransaction(store, data); + break; + case "delete": + result = await idb_deleteTransaction(store, keyPath); + break; + } + + if(result instanceof Error) { + console.error(result); + + resolve(null); + } else { + resolve(result); + } + } else { + console.error(new Error(`"[IDB GENERAL ERROR] Unknow transaction type"`)); + + resolve(null); + } + } else { + console.error(new Error("[IDB GENERAL ERROR] IndexedDB not available")); + + resolve(null); + } + }); +} + +/** + * @param {Store} store + * @param {string|array|null} keyPath + * @param {Array|null} index + * @param {boolean} getAll + * @returns {Promise<*>} + */ +function idb_getTransaction(store, {keyPath = null, index = null}, getAll = false) { + return new Promise(function(resolve) { + if(IDB_database) { + const stores = IDB_database.objectStoreNames; + + if(stores.contains(store.storeName)) { + let idbRequest = null; + const objectStore = IDB_database.transaction(store.storeName).objectStore(store.storeName); + + if(getAll) { + if(index !== null && Array.isArray(index)) { + idbRequest = objectStore.index(index[0]) + .getAll(index[1]); + } else { + idbRequest = objectStore.getAll(); + } + } else { + if(keyPath !== null) { + idbRequest = objectStore.get(keyPath); + } else if(index !== null && typeof index === "object") { + idbRequest = objectStore.index(index[0]) + .get(index[1]); + } + } + + if(idbRequest) { + idbRequest.onerror = function() { + let error = "Unknow error"; + + switch(idbRequest.error.name) { + case "ConstraintError": + error = "id already exists"; + break; + } + + resolve(new Error(`[IDB GET ERROR]: ${error}`)); + }; + + idbRequest.onsuccess = function() { + resolve(idbRequest.result ? idbRequest.result : null); + }; + } else { + resolve(new Error(`[IDB GET ERROR]: Request is null`)); + } + } else { + resolve(new Error("[IDB GET ERROR] Store not found")); + } + } else { + resolve(new Error("[IDB GENERAL ERROR] IndexedDB not available")); + } + }); +} + +/** + * @param {Store} store + * @param {Object} data + * @return {Promise} + */ +function idb_putTransaction(store, data) { + return new Promise(function(resolve) { + if(IDB_database) { + const stores = IDB_database.objectStoreNames; + + if(stores.contains(store.storeName)) { + const idbRequest = IDB_database.transaction(store.storeName, "readwrite").objectStore(store.storeName).put(data.__type === "class" ? data.dehydrate() : data); + + idbRequest.onerror = function() { + return resolve(new Error(`[IDB PUT ERROR]: ${idbRequest.error.name}`)); + }; + + idbRequest.onsuccess = async function() { + resolve(await idb_getTransaction(store, {keyPath: idbRequest.result})); + }; + } else { + resolve(new Error("[IDB PUT ERROR] Store not found")); + } + } else { + resolve(new Error("[IDB GENERAL ERROR] IndexedDB not available")); + } + }); +} + +/** + * @param {Store} store + * @param {string|array} keyPath + * @return {Promise} + */ +function idb_deleteTransaction(store, keyPath) { + return new Promise(function(resolve) { + if(IDB_database) { + const stores = IDB_database.objectStoreNames; + + if(stores.contains(store.storeName)) { + const idbRequest = IDB_database.transaction(store.storeName, "readwrite").objectStore(store.storeName).delete(keyPath); + + idbRequest.onerror = function() { + return resolve(new Error(`[IDB DELETE ERROR]: ${idbRequest.error.name}`)); + }; + + idbRequest.onsuccess = async function() { + resolve(idbRequest.result); + }; + } else { + resolve(new Error("[IDB DELETE ERROR] Store not found")); + } + } else { + resolve(new Error("[IDB GENERAL ERROR] IndexedDB not available")); + } + }); +} +// + +// +function touchDeviceInit() { + return new Promise(function(resolve) { + GLOBAL_isTouchDevice = !!document.querySelector("#page-container.sp_app__is-touch-device"); + + if(GLOBAL_isTouchDevice) { + document.querySelector("#nav-menu-btn")?.addEventListener("click", nav_switchState); + } + + resolve(true); + }); +} + +function nav_switchState() { + if(this.classList.contains("sp_nav__nav-open")) { + this.classList.remove("sp_nav__nav-open"); + document.querySelector("#header-container .sp_header__nav")?.classList.remove("sp_nav__nav-open"); + } else { + this.classList.add("sp_nav__nav-open"); + document.querySelector("#header-container .sp_header__nav")?.classList.add("sp_nav__nav-open"); + } +} + +function messageInfo({type, message, length}) { + const toastContainer = document.getElementById("toasts-container"); + + if(toastContainer) { + toastContainer.innerHTML = "" + + if(!["info", "success", "error"].includes(type)) { + type = "info"; + } + + const toast = document.createElement("div"); + toast.classList.add("sp_toast", `sp_toast__${type}`); + toast.innerText = message; + + toastContainer.appendChild(toast); + toast.classList.add("sp_toast__active"); + + // const toastze = function(type = "success", message) { + // const toastElement = document.createElement("div"); + // toastElement.classList.add("toast", `toast--${type}`); + // const toastWrap = document.createElement("div"); + // toastWrap.classList.add("toast__wrap"); + // toastWrap.innerHTML = message; + // + // toastElement.appendChild(toastWrap); + // toastsContainer.appendChild(toastElement); + // + // const tl = gsap.timeline(); + // + // tl.to(toastElement, { + // autoAlpha: 1, + // y: 0, + // ease: "power4.out", + // duration: .4 + // }); + // + // tl.to(toastElement, { + // height: 0, + // marginBottom: 0, + // autoAlpha: 0, + // duration: .5, + // delay: 2, + // ease: "power4.out", + // onComplete: ()=>{ + // toastElement.parentElement.removeChild(toastElement); + // } + // }); + // }; + } +} + +function contentFilter_init() { + return new Promise(function(resolve) { + for(const htmlSelectElement of /** @type {HTMLSelectElement[]} */document.querySelectorAll("[id$='content-filter']")) { + htmlSelectElement.addEventListener("change", contentFilter_set); + htmlSelectElement.dispatchEvent(EVENT_change); + } + + resolve(); + }); +} + +/** + * @this {HTMLSelectElement} + */ +function contentFilter_set() { + for(const htmlElement of /** @type {HTMLElement[]} */document.querySelectorAll(`[data-content-for='${this.id}']`)) { + if(isJson(htmlElement.dataset.filterValues)) { + htmlElement.hidden = !JSON.parse(htmlElement.dataset.filterValues).includes(this.value); + } else { + htmlElement.hidden = htmlElement.dataset.filterValues !== this.value; + } + } +} + +function loader_show(message, warnMessage) { + const loader = document.getElementById("blob-loader"); + + if(loader) { + /** @type {HTMLElement} */ + const textElement = loader.querySelector(".sp_loader__text"); + + if(textElement) { + textElement.innerText = message; + + if(typeof warnMessage !== "undefined") { + const warnElement = document.createElement("div"); + warnElement.classList.add("sp_loader__warn-text"); + + warnElement.innerText = warnMessage; + + textElement.append(warnElement); + } + } + + loader.removeAttribute("hidden"); + } +} + +function loader_hide() { + const loader = document.getElementById("blob-loader"); + + if(loader) { + loader.setAttribute("hidden", ""); + } +} + +function panelSwitch_init() { + return new Promise(function(resolve) { + for(const htmlElement of /** @type {HTMLElement[]} */document.querySelectorAll(".sp_panel__switch")) { + htmlElement.addEventListener("click", panelSwitch__handleState); + + if(!GLOBAL_isTouchDevice) { + htmlElement.parentElement.classList.add("sp_panel__open"); + } + } + + resolve(true); + }); +} + +function panelSwitch__handleState() { + const panel=this.parentElement; + + if(panel.classList.contains("sp_panel__open")) { + panel.classList.remove("sp_panel__open"); + } else { + panel.classList.add("sp_panel__open"); + } +} + +function slider__init() { + return new Promise(function(resolve) { + for(const htmlElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_panel__content-switch")) { + htmlElement.addEventListener("click", slider_switchSlide); + } + + resolve(true); + }); +} + +/** + * @this {HTMLElement} + */ +function slider_switchSlide() { + if(!this.classList.contains("sp_panel__switch-active") && typeof this.dataset.target !== "undefined") { + const slide = document.getElementById(this.dataset.target); + const slider = slide.parentElement.classList.contains("sp_slider") ? slide.parentElement : null; + const switchContainer = this.parentElement?.classList.contains("sp_panel__content-switch-container") ? this.parentElement : null; + + if(slide && slider && switchContainer) { + for(const htmlElement of /** @type {HTMLElement[]} */ switchContainer.querySelectorAll(".sp_panel__content-switch")) { + htmlElement.classList.remove("sp_panel__switch-active"); + } + + this.classList.add("sp_panel__switch-active"); + + for(const htmlElement of /** @type {HTMLElement[]} */ slider.querySelectorAll(".sp_slider__slide")) { + htmlElement.classList.remove("sp_slider__slide-open"); + } + + slide.classList.add("sp_slider__slide-open"); + } + } +} + +/** + * @returns {Promise} + */ +function slug_init() { + return new Promise(function(resolve) { + for(const htmlInputElement of /** @type {HTMLInputElement[]} */document.querySelectorAll("input[data-slug-target]")) { + htmlInputElement.addEventListener("keyup", slug_generate); + } + + resolve(); + }); +} + +/** + * @this {HTMLInputElement} + */ +function slug_generate() { + const target = this.getAttribute("data-slug-target"); + + if(target) { + /** @type {HTMLInputElement} */ + const htmlInputElement = document.querySelector(`input[data-slug-source='${target}']`); + + if(htmlInputElement) { + htmlInputElement.value = removeDiacritics(this.value).replace(/(\W|_)+/g, "-").toLowerCase(); + } + } +} +// + +// +/** + * @param {MouseEvent} mouseEvent + */ +function mouseEvent_preventClick(mouseEvent) { + if(GLOBAL_preventClick) { + mouseEvent.preventDefault(); + + HANDLE_preventClickTimeout = setTimeout(function() { + GLOBAL_preventClick = false; + + clearTimeout(HANDLE_preventClickTimeout); + HANDLE_preventClickTimeout = null; + }, 100); + } +} + +/** + * @param {MouseEvent|TouchEvent} mouseEvent + * @this {HTMLElement} + */ +async function mouseEvent_setMouseDown(mouseEvent) { + mouseEvent.stopPropagation(); + + let {pageX, pageY, type} = mouseEvent; + + if(GLOBAL_isTouchDevice) { + pageX = mouseEvent.changedTouches[0].clientX; + pageY = mouseEvent.changedTouches[0].clientY; + } + + GLOBAL_isMouseDown = type === (GLOBAL_isTouchDevice ? "touchstart" : "mousedown"); + + if(GLOBAL_isMouseDown) { + const elementOffset = getOffsetFromDocument(this); + + GLOBAL_mouseDownCoordinate.x = pageX - elementOffset.x; + GLOBAL_mouseDownCoordinate.y = pageY - elementOffset.y; + + if(this.id === "worldmap-container") { + GLOBAL_region.scrollLeft = this.scrollLeft; + GLOBAL_region.scrollTop = this.scrollTop; + } + } else { + if(this.id === "worldmap-container") { + GLOBAL_region.scrollLeft = ((this.scrollLeft + (this.clientWidth / 2)) * 100 / this.scrollWidth).toFixed(4); + GLOBAL_region.scrollTop = ((this.scrollTop + (this.clientHeight / 2)) * 100 / this.scrollHeight).toFixed(4); + + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } + } +} + +/** + * @param {MouseEvent} mouseEvent + */ +function mouseEvent_stopPropagation(mouseEvent) { + mouseEvent.stopPropagation(); +} + +/** + * @param {MouseEvent|TouchEvent} mouseEvent + * @this {HTMLElement} + */ +function grid_setScroll(mouseEvent) { + if(GLOBAL_isMouseDown) { + mouseEvent.preventDefault(); + + if(GLOBAL_isTouchDevice && mouseEvent.touches.length > 1) { + return; + } + + if(HANDLE_preventClickTimeout) { + clearTimeout(HANDLE_preventClickTimeout); + HANDLE_preventClickTimeout=null; + } + GLOBAL_preventClick=true; + + const worldmap = this; + let {pageX, pageY}=mouseEvent; + const worldmapOffset=getOffsetFromDocument(worldmap); + + if(GLOBAL_isTouchDevice) { + pageX = mouseEvent.changedTouches[0].clientX; + pageY = mouseEvent.changedTouches[0].clientY; + } + + const slideX=pageX - worldmapOffset.x - GLOBAL_mouseDownCoordinate.x; + const slideY=pageY - worldmapOffset.y - GLOBAL_mouseDownCoordinate.y; + + worldmap.scrollLeft=Math.min(Math.max(GLOBAL_region.scrollLeft - slideX, 0), worldmap.scrollWidth - worldmap.clientWidth); + worldmap.scrollTop=Math.min(Math.max(GLOBAL_region.scrollTop - slideY, 0), worldmap.scrollHeight - worldmap.clientHeight); + } +} + +/** + * @return {Promise} + */ +function grid_initZoomController() { + return new Promise(function(resolve) { + /** @type {HTMLInputElement} */ + const htmlRangeElement = document.querySelector("#grid-zoom-controller"); + + if(htmlRangeElement) { + htmlRangeElement.max = GLOBAL_worldmapMaxZoomLevel.toString(); + htmlRangeElement.value = GLOBAL_region.zoomLevel.toString(); + + htmlRangeElement.addEventListener("change", grid_wheelSetZoom); + } + + resolve(true); + }); +} + +/** + * @param {WheelEvent} wheelEvent + * @this {HTMLElement} + */ +async function grid_wheelSetZoom(wheelEvent) { + if(wheelEvent instanceof WheelEvent) { + wheelEvent.preventDefault(); + } + + const worldmap = this.id === "worldmap-container" ? this : document.querySelector("#worldmap-container"); + /** @type {HTMLInputElement} */ + const htmlRangeElement = this.id === "grid-zoom-controller" ? this : document.querySelector("#grid-zoom-controller"); + + if(worldmap && htmlRangeElement) { + node_removeTooltip(); + + const zoomLevel = Number(Number(document.documentElement.style.getPropertyValue("--grid__zoom")).toFixed(0)); + GLOBAL_region.scrollLeft = ((worldmap.scrollLeft + (worldmap.clientWidth / 2)) * 100 / worldmap.scrollWidth).toFixed(4) + GLOBAL_region.scrollTop = ((worldmap.scrollTop + (worldmap.clientHeight / 2)) * 100 / worldmap.scrollHeight).toFixed(4) + + if(wheelEvent instanceof WheelEvent) { + GLOBAL_region.zoomLevel = wheelEvent.deltaY < 0 ? (zoomLevel + 2) : (zoomLevel - 2); + htmlRangeElement.value = GLOBAL_region.zoomLevel.toString(); + } else { + GLOBAL_region.zoomLevel = Number(htmlRangeElement.value); + } + + GLOBAL_region.zoomLevel = Math.min(Math.max(GLOBAL_region.zoomLevel, 0), GLOBAL_worldmapMaxZoomLevel); + + document.documentElement.style.setProperty("--grid__zoom", GLOBAL_region.zoomLevel.toString()); + + worldmap.scrollLeft = Math.min(Math.max(Math.round((worldmap.scrollWidth * GLOBAL_region.scrollLeft / 100) - (worldmap.clientWidth / 2)), 0), worldmap.scrollWidth - worldmap.clientWidth); + worldmap.scrollTop = Math.min(Math.max(Math.round((worldmap.scrollHeight * GLOBAL_region.scrollTop / 100) - (worldmap.clientHeight / 2)), 0), worldmap.scrollHeight - worldmap.clientHeight); + + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } +} + +/** + * @param {TouchEvent} touchEvent + * @this {HTMLElement} + */ +async function grid_resetPinchDistance(touchEvent) { + if(touchEvent.touches.length === 1) { + GLOBAL_pinchDistance = undefined; + } +} + +/** + * @param {TouchEvent} touchEvent + * @this {HTMLElement} + */ +function grid_pinchSetZoon(touchEvent) { + if(touchEvent.touches.length === 2) { + touchEvent.preventDefault(); + + /** @type {HTMLInputElement} */ + const zoomControllerElement = document.querySelector("#grid-zoom-controller"); + + if(zoomControllerElement) { + const pinchDistance = Math.hypot( + touchEvent.touches[0].pageX - touchEvent.touches[1].pageX, + touchEvent.touches[0].pageY - touchEvent.touches[1].pageY).toFixed(0); + + if(typeof GLOBAL_pinchDistance === "undefined") { + GLOBAL_pinchDistance = pinchDistance; + } + + if(pinchDistance > (GLOBAL_pinchDistance + 60)) { + GLOBAL_pinchDistance+=60; + + if(zoomControllerElement.value < GLOBAL_worldmapMaxZoomLevel) { + zoomControllerElement.value = Math.min(Math.max((Number(zoomControllerElement.value) + Number(zoomControllerElement.step)), 0), GLOBAL_worldmapMaxZoomLevel) + .toFixed(0) + .toString(); + zoomControllerElement.dispatchEvent(EVENT_change); + } + } else if(pinchDistance < (GLOBAL_pinchDistance - 30)) { + GLOBAL_pinchDistance-=30; + + if(zoomControllerElement.value > 0) { + zoomControllerElement.value = Math.min(Math.max((Number(zoomControllerElement.value) - Number(zoomControllerElement.step)), 0), GLOBAL_worldmapMaxZoomLevel) + .toFixed(0) + .toString(); + zoomControllerElement.dispatchEvent(EVENT_change); + } + } + } + } +} + +function grid_setWidth() { + return new Promise(function(resolve) { + const worldmapElement = document.querySelector(".sp_grid__container"); + + if(worldmapElement?.dataset.regionWidth) { + document.documentElement.style.setProperty("--grid__width", worldmapElement.dataset.regionWidth); + } + + if(worldmapElement?.dataset.regionHeight) { + document.documentElement.style.setProperty("--grid__height", worldmapElement.dataset.regionHeight); + } + + resolve(true); + }); +} + +async function modal_load({htmlString}) { + const modalContainer = document.getElementById("modal-container"); + const modalSubContainer = modalContainer?.querySelector(".sp_modal__container"); + + if(modalSubContainer) { + modalSubContainer.innerHTML = ""; + modalSubContainer.append(strToHtml(htmlString)); + + await form_init(modalContainer); + + modalContainer.querySelector(".sp_modal__background")?.addEventListener("click", modal_unload); + + for(const htmlButtonElement of /** @type {HTMLInputElement[]} */ modalContainer.querySelectorAll(".sp_modal .sp_form-row__button button[type='button']")) { + htmlButtonElement.addEventListener("click", modal_unload); + } + + modalContainer.classList.add("sp_modal__open"); + } +} + +/** + * @param {MouseEvent} mouseEvent + */ +function modal_unload(mouseEvent) { + if(mouseEvent instanceof PointerEvent) { + mouseEvent.stopPropagation(); + } + + const modalContainer = document.getElementById("modal-container"); + const modalSubContainer = modalContainer?.querySelector(".sp_modal__container"); + + if(modalSubContainer) { + modalContainer.classList.remove("sp_modal__open"); + + setTimeout(function() { + modalSubContainer.innerHTML = ""; + }, 300); + } +} + +/** + * @return {Promise} + */ +function node_setIndexesAndCoordinaites() { + return new Promise(async function(resolve) { + const nodesIndexes = {} + + await node_setCollected(); + + for(const filterInputElement of /** @type {HTMLInputElement[]} */ document.querySelectorAll("#worldmap-filters .sp_worldmap__filter")) { + if(filterInputElement.dataset.index) { + nodesIndexes[filterInputElement.value] = filterInputElement.dataset.index; + } + } + + // for(const nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_grid__column .sp_node__item")) { + for(const nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_grid__cell .sp_node__item")) { + if(typeof nodeElement.dataset.filter !== "undefined" && nodeElement.dataset.filter in nodesIndexes) { + nodeElement.style.zIndex = nodesIndexes[nodeElement.dataset.filter]; + } + + if(typeof nodeElement.dataset.coordinate !== "undefined" && isJson(nodeElement.dataset.coordinate)) { + const {x, y} = JSON.parse(nodeElement.dataset.coordinate); + + if(x && y) { + Object.assign(nodeElement.style, { + left: `${x}%`, + top: `${y}%` + }); + + nodeElement.removeAttribute("hidden"); + } + } + + nodeElement.addEventListener("click", node_loadTooltip); + } + + + + resolve(true); + }); +} + +/** @this {HTMLButtonElement} */ +async function node_getAnchorPoint() { + const buttonElement = this; + const worldmapElement = document.getElementById("worldmap-container"); + const nodeElement = buttonElement.dataset.nodeId ? worldmapElement.querySelector(`#${buttonElement.dataset.nodeId}`) : null; + if(nodeElement) { + let nodeOffset = getOffsetFrom(nodeElement, worldmapElement); + + nodeOffset.x = Number((nodeOffset.x * 100 / worldmapElement.scrollWidth).toFixed(4)); + nodeOffset.y = Number((nodeOffset.y * 100 / worldmapElement.scrollHeight).toFixed(4)); + + await navigator.clipboard.writeText(JSON.stringify(nodeOffset)); + alert("Data copier to clipboard"); + } +} + +/** + * @return {Promise} + */ +function node_setCollected() { + return new Promise(async function(resolve) { + const idb_nodes = await idb_openTransaction("getAll", IDB_stores.NodeStore, {index: ["region", GLOBAL_region.slug]}); + + if(idb_nodes && Array.isArray(idb_nodes)) { + for(const _node of idb_nodes) { + if(_node['profile'] === GLOBAL_worldmapProfile.slug && _node["isHidden"]) { + document.getElementById(_node["domId"])?.classList.add("sp_node__collected"); + } + } + } + + resolve(true); + }); +} + +/** + * @return {Promise} + */ +function node_resetCollected() { + return new Promise(function(resolve) { + // for(const nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_grid__column .sp_node__item")) { + for(const nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_grid__cell .sp_node__item")) { + nodeElement.classList.remove("sp_node__collected"); + } + + resolve(true); + }); +} + +/** + * @this {HTMLLabelElement} + * @param {MouseEvent} mouseEvent + */ +async function node_loadTooltip(mouseEvent) { + if(!GLOBAL_preventClick) { + mouseEvent?.stopPropagation(); + + // this.getBoundingClientRect() + const nodeElement = this; + /** @type {HTMLElement|null} */ + const gridContainer = nodeElement.closest(".sp_grid__container"); + const tooltip = /** @type {HTMLElement|null} */ document.getElementById("template_tooltip")?.content.firstElementChild?.cloneNode(true); + + const title = nodeElement.dataset.filter + ? document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${nodeElement.dataset.filter}']`) + ?.parentElement + ?.querySelector(".sp_radio__input-label") + ?.innerText + : null; + + if(gridContainer && tooltip && title) { + node_removeTooltip(); + + if(document.querySelector("#page-container")?.dataset.device !== "mobile") { + const _tooltipPos = getOffsetFrom(nodeElement, gridContainer); + _tooltipPos.x += (nodeElement.clientWidth / 2); + + Object.assign(tooltip.style, { + left: `${_tooltipPos.x}px`, + top: `${_tooltipPos.y}px` + }); + } + + /** @type {HTMLElement|null} */ + const _tooltipNodeDisplayButton = tooltip.querySelector(".sp_node__set-display"); + + if(_tooltipNodeDisplayButton) { + if(Number(nodeElement.dataset.canBeHidden) === 1) { + _tooltipNodeDisplayButton.dataset.nodeId = nodeElement.id; + _tooltipNodeDisplayButton.addEventListener("click", node_setDisplay); + + if(nodeElement.classList.contains("sp_node__collected")) { + _tooltipNodeDisplayButton.dataset.isHidden = "1"; + } + } else { + _tooltipNodeDisplayButton.remove(); + } + } + + if(typeof nodeElement.dataset.editUrl !== "undefined") { + const _tooltipForm = /** @type {HTMLFormElement|null} */tooltip.querySelector(".sp_node__edit-form"); + + if(_tooltipForm) { + _tooltipForm.action = nodeElement.dataset.editUrl; + } + } + + if(typeof nodeElement.dataset.deleteUrl !== "undefined") { + const _tooltipDeleteForm = /** @type {HTMLFormElement|null} */tooltip.querySelector(".sp_node_delete-form"); + + if(_tooltipDeleteForm) { + _tooltipDeleteForm.action = nodeElement.dataset.deleteUrl; + } + } + + const anchorElement = tooltip.querySelector(".sp_node__calc-anchor"); + if(anchorElement) { + anchorElement.dataset.nodeId = nodeElement.id; + anchorElement.addEventListener("click", node_getAnchorPoint); + } + + const _tooltipTitle = tooltip.querySelector(".sp_tooltip__header span:nth-child(1)"); + + if(_tooltipTitle) { + _tooltipTitle.innerText = title; + } + + const _tooltipTitleExtra = tooltip.querySelector(".sp_tooltip__header span:nth-child(2)"); + + if(_tooltipTitleExtra) { + _tooltipTitleExtra.innerText = `#${nodeElement.id.substring(5)}`; + } + + if(typeof nodeElement.dataset.description !== "undefined" && nodeElement.dataset.description.length > 0) { + /** @type {HTMLElement} */ + const _tooltipDescription = tooltip.querySelector(".sp_tooltip__body"); + + if(_tooltipDescription) { + _tooltipDescription.innerText = nodeElement.dataset.description; + } + } + + if(typeof nodeElement.dataset.screenshots !== "undefined" && isJson(nodeElement.dataset.screenshots)) { + /** @type {HTMLElement} */ + const tooltipFooter = tooltip.querySelector(".sp_tooltip__footer"); + const screenshotContainer = tooltipFooter?.querySelector(".sp_tooltip__screenshot-container"); + + if(tooltipFooter && screenshotContainer) { + const sources = JSON.parse(nodeElement.dataset.screenshots); + + if(sources.length) { + for(const _source of sources) { + const htmlImageElement = /** @var {HTMLImageElement} */ document.createElement("img"); + htmlImageElement.src = _source; + + const htmlLinkElement = /** @var {HTMLLinkElement} */ document.createElement("a"); + htmlLinkElement.href = _source.replace("/thumbnail", ""); + htmlLinkElement.target = "_blank"; + htmlLinkElement.classList.add("sp_screenshot__container") + htmlLinkElement.append(htmlImageElement); + + screenshotContainer.append(htmlLinkElement); + } + + tooltipFooter.hidden = false; + } + } + } + + if(document.querySelector("#page-container")?.dataset.device === "mobile") { + const nodeOffset = getOffsetFrom(nodeElement, gridContainer); + + gridContainer.scrollLeft = Math.min(Math.max(nodeOffset.x + (nodeElement.clientWidth / 2) - (gridContainer.clientWidth / 2), 0), gridContainer.scrollWidth); + gridContainer.scrollTop = Math.min(Math.max(nodeOffset.y + (nodeElement.clientHeight * 2) - (gridContainer.clientHeight / 2), 0), gridContainer.scrollHeight); + + GLOBAL_region.scrollLeft = ((gridContainer.scrollLeft + (gridContainer.clientWidth / 2)) * 100 / gridContainer.scrollWidth).toFixed(4); + GLOBAL_region.scrollTop = ((gridContainer.scrollTop + (gridContainer.clientHeight / 2)) * 100 / gridContainer.scrollHeight).toFixed(4); + + log([GLOBAL_region.scrollLeft, GLOBAL_region.scrollTop]) + + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } + + nodeElement.classList.add("sp_node__highlight"); + gridContainer.append(tooltip); + + await form_init(tooltip); + tooltip.addEventListener(GLOBAL_isTouchDevice ? "touchstart" : "mousedown", mouseEvent_stopPropagation); + tooltip.addEventListener("click", mouseEvent_stopPropagation); + tooltip.addEventListener(GLOBAL_isTouchDevice ? "touchend" : "mouseup", mouseEvent_stopPropagation); + tooltip.addEventListener("wheel", mouseEvent_stopPropagation); + tooltip.removeAttribute("hidden"); + } + } +} + +function node_removeTooltip() { + if(!GLOBAL_preventClick) { + for(const _tooltip of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_tooltip__wrapper")) { + _tooltip.remove(); + } + + for(const _nodeElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_node__highlight")) { + _nodeElement.classList.remove("sp_node__highlight"); + } + } +} + +/** + * @param {MouseEvent} mouseEvent + * @this {HTMLButtonElement} + */ +async function node_setDisplay(mouseEvent) { + let category = null; + /** @type {HTMLLabelElement} */ + const nodeElement = document.getElementById(this.dataset.nodeId); + + if(nodeElement) { + if(typeof nodeElement.dataset.filter !== "undefined") { + category = document.querySelector(`input.sp_worldmap__filter[value='${nodeElement.dataset.filter}']`) + ?.closest(".sp_panel__section") + ?.querySelector(".sp_panel__section-title h2") + ?.dataset.sectionTitle; + } + + if(nodeElement.classList.contains("sp_node__collected")) { + nodeElement.classList.remove("sp_node__collected"); + + await idb_openTransaction("delete", IDB_stores.NodeStore, { + keyPath: [GLOBAL_worldmapProfile.slug, nodeElement.id] + }); + + if(STATIC_ENV === "prod" && category) { + paq_event({ + type: "trackEvent", + name: "Map: Users node tracking", + value: `${category.innerText} node uncollected` + }); + } + } else { + nodeElement.classList.add("sp_node__collected"); + + await idb_openTransaction("put", IDB_stores.NodeStore, { + data: new Node(GLOBAL_worldmapProfile.slug, nodeElement.id, GLOBAL_region.slug, true) + }); + + if(STATIC_ENV === "prod" && category) { + paq_event({ + type: "trackEvent", + name: "Map: Users node tracking", + value: `${category} node collected` + }); + } + } + + /** @type {HTMLElement} */ + const tooltipActionElement = document.querySelector("#worldmap-container .sp_tooltip__wrapper .sp_tooltip__action.sp_node__set-display"); + + if(tooltipActionElement) { + tooltipActionElement.dataset.isHidden = Number(nodeElement.classList.contains("sp_node__collected")).toString(); + } + + const filterInputElement = document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${nodeElement.dataset.filter}']`); + + if(filterInputElement) { + worldmapFilter_updateCounter(filterInputElement); + } + + primogem_updateCounter(); + } +} + +/** + * @this {HTMLElement} + */ +function node_queryNewForm() { + if(!GLOBAL_preventClick) { + const gridId = this.id.replace("grid-", ""); + const htmlButtonElement = /** @type {HTMLButtonElement} */document.querySelector("#worldmap-filters .sp_worldmark__init-new-node.sp_button__active"); + + if(gridId && typeof parseInt(gridId) == "number" && parseInt(gridId) > 0 + && htmlButtonElement && typeof htmlButtonElement.dataset.uri !== "undefined") { + + const htmlFormElement = document.createElement("form"); + htmlFormElement.action = encodeURI(decodeURI(htmlButtonElement.dataset.uri).replace("%gridId%", gridId)); + htmlFormElement.method = "post"; + + form_ajaxRequest(htmlFormElement); + } + } +} + +async function node_loadForm({gridId, coordinate, htmlString, nodeId}) { + const worldmap = document.getElementById("worldmap-container"); + const gridElement = document.getElementById(`grid-${gridId}`); + const panelElement = document.getElementById("main-right-container"); + + if(worldmap && gridElement && panelElement) { + node_removeTooltip(); + + panelElement.innerHTML = ""; + panelElement.append(strToHtml(htmlString)); + panelElement.querySelector("#node-form .sp_form-row__button .sp_button[data-type='cancel']") + ?.addEventListener("click", worldmap_disableEditionMode); + + await radio_initListeners(panelElement); + await form_init(panelElement); + + const trackerElement = document.getElementById("node-form-coordinate-tracker"); + + if(trackerElement) { + if(nodeId) { + const nodeElement = document.querySelector(`#node-${nodeId}`); + + if(nodeElement) { + await worldmap_enableEditionMode(false); + + GLOBAL_nodeBackup.grid = gridElement; + GLOBAL_nodeBackup.node = nodeElement.cloneNode(true); + + nodeElement.remove(); + } + } else { + // for(const gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__column")) { + for(const gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__cell")) { + gridElement.removeEventListener("click", node_queryNewForm); + } + } + + worldmap.classList.add("sp_worldmap_locked"); + gridElement.classList.add("sp_grid__active"); + + gridElement.querySelector(".sp_grid__node-container")?.append(trackerElement); + + if(GLOBAL_nodeBackup.node) { + Object.assign(trackerElement.style, { + left: GLOBAL_nodeBackup.node.style.left, + top: GLOBAL_nodeBackup.node.style.top + }); + } else { + Object.assign(trackerElement.style, { + left: `${coordinate.x}%`, + top: `${coordinate.y}%` + }); + } + + await node_initTracker(); + + trackerElement.removeAttribute("hidden"); + + panelElement.classList.add("sp_panel__open") + } else { + await worldmap_disableEditionMode(); + + messageInfo({ + type: "error", + message: "Could not find form tracker" + }); + } + } +} + +async function node_validateForm({gridId, htmlString}) { + const gridElement = document.getElementById(`grid-${gridId}`); + const nodeElement = strToHtml(htmlString).firstElementChild; + + document.getElementById("node-form-coordinate-tracker")?.remove(); + gridElement.querySelector(".sp_grid__node-container")?.append(nodeElement); + + GLOBAL_nodeBackup.grid = null; + GLOBAL_nodeBackup.node = null; + + await node_setIndexesAndCoordinaites(); + + if(nodeElement.dataset.filter) { + const filterInputElement = document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${nodeElement.dataset.filter}']`); + + if(filterInputElement) { + filterInputElement.dispatchEvent(EVENT_change); + worldmapFilter_updateCounter(filterInputElement); + } + } + + await worldmap_disableEditionMode(); + primogem_updateCounter(); +} + +async function node_unloadForm() { + const panelElement=document.getElementById("main-right-container"); + // const gridElement = document.querySelector(".sp_grid__column.sp_grid__active"); + const gridElement = document.querySelector(".sp_grid__cell.sp_grid__active"); + const trackerElement = document.getElementById("node-form-coordinate-tracker"); + + if(panelElement) { + if(panelElement.classList.contains("sp_panel__open")) { + panelElement.classList.remove("sp_panel__open"); + } + + panelElement.innerHTML = ""; + } + + window.removeEventListener("keyup", node_moveTracker); + gridElement?.removeEventListener("click", node_moveTracker); + trackerElement?.remove(); + + if(GLOBAL_nodeBackup.grid && GLOBAL_nodeBackup.node) { + GLOBAL_nodeBackup.node.hidden = true; + GLOBAL_nodeBackup.grid + .querySelector(".sp_grid__node-container") + ?.append(GLOBAL_nodeBackup.node); + + if(GLOBAL_nodeBackup.node.dataset.filter) { + document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${GLOBAL_nodeBackup.node.dataset.filter}']`) + ?.dispatchEvent(EVENT_change); + } + + GLOBAL_nodeBackup.grid = null; + GLOBAL_nodeBackup.node = null; + + await node_setIndexesAndCoordinaites(); + } +} + +function node_removeElement({gridId, nodeId}) { + const nodeElement = document.querySelector(`#grid-${gridId} #node-${nodeId}`); + + if(nodeElement) { + let filterInputElement = null; + + if(nodeElement.dataset.filter) { + filterInputElement = document.querySelector(`#worldmap-filters .sp_worldmap__filter[value='${nodeElement.dataset.filter}']`); + } + + document.querySelector(`#grid-${gridId} #node-${nodeId}`)?.remove(); + + if(filterInputElement) { + worldmapFilter_updateCounter(filterInputElement); + } + } + + node_removeTooltip(); +} + +function node_initTracker() { + return new Promise(function(resolve) { + const nodeElement = document.getElementById("node-form-coordinate-tracker"); + // const gridElement = document.querySelector(".sp_grid__column.sp_grid__active"); + const gridElement = document.querySelector(".sp_grid__cell.sp_grid__active"); + + if(nodeElement) { + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchstart" : "mousedown", mouseEvent_setMouseDown); + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchend" : "mouseup", mouseEvent_setMouseDown); + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchleave" : "mouseleave", mouseEvent_setMouseDown); + + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchmove" : "mousemove", node_moveTracker); + window.addEventListener("keyup", node_moveTracker); + + nodeElement.addEventListener(GLOBAL_isTouchDevice ? "touchmove" : "mousemove", mouseEvent_stopPropagation); + nodeElement.addEventListener("click", mouseEvent_stopPropagation); + + if(gridElement) { + gridElement.addEventListener("click", node_moveTracker); + } + } + + resolve(true); + }); +} + +/** + * @param {MouseEvent|TouchEvent|KeyboardEvent} event + * @this {HTMLElement} + */ +function node_moveTracker(event) { + event.preventDefault(); + const nodeElement = document.getElementById("node-form-coordinate-tracker"); + + if(nodeElement) { + const newCoordinate = {x: 0, y: 0}; + + if(event.type === "keyup") { + const offsetFromParent = getOffsetFromParent(nodeElement); + offsetFromParent.x += (nodeElement.clientWidth / 2); + offsetFromParent.y += (nodeElement.clientHeight / 2); + + switch(event.key) { + case "ArrowRight" : + offsetFromParent.x += 1; + break; + case "ArrowLeft" : + offsetFromParent.x -= 1; + break; + case "ArrowDown" : + offsetFromParent.y += 1; + break; + case "ArrowUp" : + offsetFromParent.y -= 1; + break; + } + + newCoordinate.x = Math.min(Math.max((offsetFromParent.x * 100 / nodeElement.parentElement.clientWidth), 0), 100).toFixed(4); + newCoordinate.y = Math.min(Math.max((offsetFromParent.y * 100 / nodeElement.parentElement.clientHeight), 0), 100).toFixed(4); + + node_assignTrackerCoordinates(nodeElement, newCoordinate); + } else if(event.type === "click" && !GLOBAL_preventClick) { + newCoordinate.x = (event.offsetX * 100 / nodeElement.parentElement.clientWidth).toFixed(4); + newCoordinate.y = (event.offsetY * 100 / nodeElement.parentElement.clientHeight).toFixed(4); + + node_assignTrackerCoordinates(nodeElement, newCoordinate); + } else if(event.type === (GLOBAL_isTouchDevice ? "touchmove" : "mousemove") && GLOBAL_isMouseDown) { + if(HANDLE_preventClickTimeout) { + clearTimeout(HANDLE_preventClickTimeout); + HANDLE_preventClickTimeout = null; + } + GLOBAL_preventClick = true; + + const offsetFromDocument = getOffsetFromDocument(nodeElement); + + const moveX = (GLOBAL_isTouchDevice ? event.changedTouches[0].clientX : event.pageX) - offsetFromDocument.x - GLOBAL_mouseDownCoordinate.x; + const moveY = (GLOBAL_isTouchDevice ? event.changedTouches[0].clientY : event.pageY) - offsetFromDocument.y - GLOBAL_mouseDownCoordinate.y; + + newCoordinate.x = Math.min(Math.max((nodeElement.offsetLeft + moveX) * 100 / nodeElement.parentElement.clientWidth, 0), 100).toFixed(4); + newCoordinate.y = Math.min(Math.max((nodeElement.offsetTop + moveY) * 100 / nodeElement.parentElement.clientHeight, 0), 100).toFixed(4); + + node_assignTrackerCoordinates(nodeElement, newCoordinate); + } + } +} + +/** + * @param {HTMLElement} nodeElement + * @param {{x: number, y: number}} coordinates + */ +function node_assignTrackerCoordinates(nodeElement, coordinates) { + const inputPosX = document.getElementById("node_coordX"); + const inputPosY = document.getElementById("node_coordY"); + const inputCoordinate = document.getElementById("node_coordinate"); + + if(inputPosX && inputPosY && inputCoordinate) { + Object.assign(nodeElement.style, { + left: `${coordinates.x}%`, + top: `${coordinates.y}%` + }); + + inputPosX.value = coordinates.x; + inputPosY.value = coordinates.y; + inputCoordinate.value = JSON.stringify(coordinates); + } +} + +/** + * @param {HTMLInputElement} htmlInputElement + * @return {Promise} + */ +function node_formatScreenshot(htmlInputElement) { + return new Promise(function(resolve) { + if(htmlInputElement.files[0]) { + if(htmlInputElement.files[0]['type'].split('/')[0] === 'image') { + let fileName = htmlInputElement?.parentNode?.querySelector("input[name='file-path']")?.value; + + if(fileName) { + /** @type {HTMLCanvasElement} */ + const canvas = document.getElementById("transform-canvas"); + + if(canvas && canvas.getContext) { + const canvasContext = canvas.getContext("2d"); + const reader = new FileReader(); + const img = new Image(); + + canvasContext.clearRect(0, 0, canvasContext.canvas.width, canvasContext.canvas.height); + canvasContext.beginPath(); + canvasContext.closePath(); + + reader.onload = async function(progressEvent){ + img.src = /** @type {string} */ progressEvent.target.result; + } + + img.onload = function() { + let canvasSX = 0; + let canvasSY = 0; + let canvasSW = img.naturalWidth; + let canvasSH = img.naturalHeight; + + if(canvasSH > canvasSW) { + resolve(false); + } else { + canvasSX = (canvasSW - (canvasSH * 16 / 9)) / 2; + canvasSW = canvasSH * 16 / 9; + } + + canvasContext.drawImage(img, canvasSX, canvasSY, canvasSW, canvasSH, 0, 0, canvas.width, canvas.height); + + const fileData = atob(canvas.toDataURL("image/jpeg", 1).split(",")[1]); + let fileLength = fileData.length; + + const bitArray = new Uint8Array(fileLength); + while(fileLength--) { + bitArray[fileLength] = fileData.charCodeAt(fileLength); + } + + const fileList = new DataTransfer(); + fileList.items.add(new File([bitArray], `edit_${fileName.replace(/\.png$|\.jpg$/g,'.jpeg')}`, {type: "image/jpeg"})); + + htmlInputElement.files = fileList.files; + htmlInputElement.dispatchEvent(EVENT_change); + + resolve(true); + } + + reader.readAsDataURL(htmlInputElement.files[0]); + } else { + resolve(false); + } + } else { + resolve(false) + } + } else { + resolve(false); + } + } else { + resolve(null); + } + }); +} + +function worldmap_init() { + return new Promise(async function(resolve) { + await grid_setWidth(); + + const worldmap = document.getElementById("worldmap-container"); + + if(worldmap) { + IDB_database = await idb_openDatabase(IDB_databaseName, IDB_databaseVersion); + await worldmapProfiles_init(); + + if(GLOBAL_worldmapProfile) { + GLOBAL_region = new Region(worldmap.getAttribute("data-region-id"), worldmap.getAttribute("data-region-name")); + + /** @type {Object} */ + const _region = await idb_openTransaction("get", IDB_stores.RegionStore, { + keyPath: GLOBAL_region.slug + }); + + if(_region) { + GLOBAL_region.hydrate(_region); + } else { + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } + + let anchor = worldmap.dataset.anchor; + if(typeof anchor !== "undefined" && isJson(anchor)) { + anchor = JSON.parse(anchor); + + GLOBAL_region.zoomLevel = 8; + GLOBAL_region.scrollLeft = anchor.x; + GLOBAL_region.scrollTop = anchor.y; + + await idb_openTransaction("put", IDB_stores.RegionStore, { + data: GLOBAL_region + }); + } + + document.documentElement?.style.setProperty("--grid__zoom", GLOBAL_region.zoomLevel.toString()); + await grid_initZoomController() + + worldmap.scrollLeft = Math.min(Math.max(Math.round((worldmap.scrollWidth * GLOBAL_region.scrollLeft / 100) - (worldmap.clientWidth / 2)), 0), worldmap.scrollWidth - worldmap.clientWidth); + worldmap.scrollTop = Math.min(Math.max(Math.round((worldmap.scrollHeight * GLOBAL_region.scrollTop / 100) - (worldmap.clientHeight / 2)), 0), worldmap.scrollHeight - worldmap.clientHeight); + + worldmap.addEventListener(GLOBAL_isTouchDevice ? "touchstart" : "mousedown", mouseEvent_setMouseDown); + worldmap.addEventListener(GLOBAL_isTouchDevice ? "touchend" : "mouseup", mouseEvent_setMouseDown); + worldmap.addEventListener(GLOBAL_isTouchDevice ? "touchleave" : "mouseleave", mouseEvent_setMouseDown); + if(GLOBAL_isTouchDevice) { + worldmap.addEventListener("touchend", grid_resetPinchDistance); + worldmap.addEventListener("touchmove", grid_pinchSetZoon); + } else { + worldmap.addEventListener("wheel", grid_wheelSetZoom); + } + worldmap.addEventListener(GLOBAL_isTouchDevice ? "touchmove" : "mousemove", grid_setScroll); + worldmap.addEventListener("click", mouseEvent_preventClick); + worldmap.addEventListener("click", node_removeTooltip); + + await node_setIndexesAndCoordinaites(); + await worldmapFilter_Init(); + } else { + loader_show("", "Could not load a profile, please refresh the page"); + IDB_hadMigration = true; + } + } + + primogem_updateCounter(); + + resolve(); + }); +} + +/** + * @this {HTMLButtonElement} + */ +async function worldmap_handleEditionMode() { + const htmlButtonElement=this; + + if(htmlButtonElement.classList.contains("sp_button__active")) { + await worldmap_disableEditionMode(); + } else { + await worldmap_disableEditionMode(); + await worldmap_enableEditionMode(); + + htmlButtonElement.classList.add("sp_button__active"); + } +} + +async function worldmap_enableEditionMode(setEventListener=true) { + return new Promise(function(resolve) { + const worldmap = document.getElementById("worldmap-container"); + + if(worldmap) { + if(setEventListener) { + // for(const gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__column")) { + for(const gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__cell")) { + gridElement.addEventListener("click", node_queryNewForm); + } + } + + worldmap.classList.add("sp_worldmap__edit"); + } + + resolve(true); + }); +} + +function worldmap_disableEditionMode() { + return new Promise(async function(resolve) { + await node_unloadForm(); + + for(const _htmlButtonElement of /** @type {HTMLButtonElement[]} */ document.querySelectorAll(".sp_worldmark__init-new-node")) { + _htmlButtonElement.classList.remove("sp_button__active"); + } + + const worldmap = document.getElementById("worldmap-container"); + + if(worldmap) { + // for(const _gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__column")) { + for(const _gridElement of /** @type {HTMLElement[]} */ worldmap.querySelectorAll(".sp_grid__cell")) { + _gridElement.classList.remove("sp_grid__active"); + _gridElement.removeEventListener("click", node_queryNewForm); + } + + worldmap.classList.remove("sp_worldmap__edit", "sp_worldmap_locked"); + } + + resolve(true); + }); +} + +function worldmapFilter_Init() { + return new Promise(async function(resolve) { + const filters = {}; + + for(const htmlSpanElement of /** @type {HTMLSpanElement[]} */ document.querySelectorAll("#worldmap-filters .sp_panel__section-title h2 span")) { + const section = htmlSpanElement.closest(".sp_panel__section"); + const category = section?.querySelector(".sp_panel__section-title h2"); + + if(category?.dataset.sectionTitle) { + const localKey = removeDiacritics(`${category.dataset.sectionTitle}`).replace(/(\W|_)+/g, "").toLowerCase(); + + if(window.localStorage.getItem(`map.genshin.filter.section.${localKey}.state`) === "closed") { + section.classList.add("sp_panel__section-closed"); + } + } + + htmlSpanElement.addEventListener("click", worldmapFilter_sectionCollapse); + } + + for(const htmlButtonElement of /** @type {HTMLButtonElement[]} */ document.querySelectorAll("#worldmap-filters .sp_section-filter__switch")) { + htmlButtonElement.addEventListener("click", worldmapFilter_switchDisplayAll); + } + + const _filters = await idb_openTransaction("getAll", IDB_stores.FilterStore, { + index: ["region", GLOBAL_region.slug] + }); + + if(_filters && Array.isArray(_filters)) { + for(const _filter of _filters) { + filters[_filter["slug"]] = _filter; + } + } + + for(const filterInputElement of /** @type {HTMLInputElement[]} */ document.querySelectorAll("#worldmap-filters .sp_worldmap__filter")) { + filterInputElement.checked = filterInputElement.value in filters ? Boolean(filters[filterInputElement.value]["isActive"]) : false; + + worldmapFilter_updateCounter(filterInputElement); + + filterInputElement.addEventListener("change", worldmapFilter_switchDisplay); + filterInputElement.dispatchEvent(EVENT_change); + } + + for(const htmlElement of /** @type {HTMLElement[]} */ document.querySelectorAll(".sp_worldmark__init-new-node")) { + htmlElement.addEventListener("click", worldmap_handleEditionMode); + } + + GLOBAL_worldmapFilter_isInitialized = true; + + resolve(true); + }); +} + +/** @this {HTMLElement} */ +function worldmapFilter_sectionCollapse() { + const section = this.closest(".sp_filter__section"); + + if(section) { + const sectionTitle = section.querySelector("h2")?.dataset.sectionTitle; + let localKey = null + + if(sectionTitle) { + localKey = removeDiacritics(`${sectionTitle}`).replace(/(\W|_)+/g, "").toLowerCase(); + } + + if(section.classList.contains("sp_panel__section-closed")) { + if(localKey) { + window.localStorage.setItem(`map.genshin.filter.section.${localKey}.state`, "open"); + } + + section.classList.remove("sp_panel__section-closed"); + } else { + if(localKey) { + window.localStorage.setItem(`map.genshin.filter.section.${localKey}.state`, "closed"); + } + + section.classList.add("sp_panel__section-closed"); + } + } +} + +function worldmapFilter_updateCounter(filterInputElement) { + const counterElement = filterInputElement.parentElement?.querySelector(".nodes_count"); + + if(counterElement) { + let counter; + + let total = 0; + let hidden = 0; + + const nodesList = document.querySelectorAll(`#worldmap-container .sp_node__item[data-filter='${filterInputElement.value}']`); + + for(const _node of /** @type {HTMLElement[]} */nodesList) { + if(typeof _node.dataset.quantity !== "undefined") { + total += Number(_node.dataset.quantity); + + if(_node.classList.contains("sp_node__collected")) { + hidden += Number(_node.dataset.quantity); + } + } + } + + if(Number(filterInputElement.dataset.canBeHidden) !== 1) { + hidden = total; + } + + counter = `${hidden}/${total}` + + counterElement.innerText = counter; + } +} + +/** + * @this {HTMLInputElement} + */ +async function worldmapFilter_switchDisplay() { + const filterInputElement = this; + + for(const nodeElement of /** @type {HTMLLabelElement[]} */ document.querySelectorAll(`.sp_node__item[data-filter='${filterInputElement.value}']`)) { + if(filterInputElement.checked) { + nodeElement.classList.remove("sp_node__hidden"); + } else { + nodeElement.classList.add("sp_node__hidden"); + } + } + + if(GLOBAL_worldmapFilter_isInitialized) { + await worldmapFilter_saveDisplay(); + } +} + +/** + * @this {HTMLButtonElement} + */ +async function worldmapFilter_switchDisplayAll() { + const htmlButtonElement = this; + + for(const filterInputElement of /** @type {HTMLInputElement[]} */ htmlButtonElement.closest(".sp_filter__section") + .querySelectorAll(".sp_worldmap-filter__section .sp_worldmap__filter")) { + if(htmlButtonElement.value === "show_all") { + filterInputElement.checked = true; + } else if(htmlButtonElement.value === "hide_all") { + filterInputElement.checked = false; + } + + filterInputElement.dispatchEvent(EVENT_change); + } +} + +async function worldmapFilter_saveDisplay() { + node_removeTooltip(); + + if(IDB_database) { + for(const filterInputElement of /** @type {HTMLInputElement[]} */ document.querySelectorAll("#worldmap-filters .sp_worldmap__filter")) { + await idb_openTransaction("put", IDB_stores.FilterStore, { + data: new Filter(GLOBAL_region.slug, filterInputElement.value, filterInputElement.checked) + }); + } + } +} + +function worldmapProfiles_init() { + return new Promise(async function(resolve) { + if(IDB_database) { + const profiles = IDB_database + ? await idb_openTransaction("getAll", IDB_stores.ProfileStore, {}) + : []; + //ToDo check is empty array pass condition + if(profiles) { + const profilesContainer = document.getElementById("profiles__profiles-container"); + const serverContainer = document.getElementById("profiles__servers-container"); + + if(!profiles.length) { + const profile = new Profile("profile-a", "Profile A"); + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: profile + }); + + profiles.push(profile.dehydrate()); + } + + if(profilesContainer && serverContainer) { + for(const _profile of /** @type {Object[]} */ profiles) { + const profile = new Profile(); + profile.hydrate(_profile); + + if(!["cn", "eu", "na"].includes(profile.server)) { + profile.server = "eu"; + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: profile + }); + } + + /** @type {HTMLInputElement|null} */ + let profileInputElement = profilesContainer.querySelector(`.sp_radio__input-wrapper input[name='_profile'][value='${profile.slug}']`); + + if(profileInputElement) { + const profileLabelElement = profileInputElement.parentElement.querySelector(".sp_radio__input-label"); + + if(profileLabelElement) { + profileLabelElement.innerText = profile.name; + } + + if(profile.isActive) { + profileInputElement.checked = true; + profileInputElement.dispatchEvent(EVENT_change); + + /** @type {HTMLInputElement|null} */ + const serverInputElement = serverContainer.querySelector(`.sp_radio__input-wrapper input[value='${profile.server}']`); + + if(serverInputElement) { + serverInputElement.checked = true; + serverInputElement.dispatchEvent(EVENT_change); + + GLOBAL_worldmapProfile = profile; + } + } + } + } + + profilesContainer.addEventListener("change", worldmapProfiles_switchProfile); + serverContainer.addEventListener("change", worldmapProfiles_switchServer); + } + } + } else { + GLOBAL_worldmapProfile = new Profile("anonymous", "Anonymous"); + } + + resolve(true); + }); +} + +async function worldmapProfiles_switchProfile() { + const profileInputElement = /** @type {HTMLInputElement} */ document.querySelector("#profiles__profiles-container input[name='_profile']:checked"); + + if(GLOBAL_worldmapProfile instanceof Profile && profileInputElement) { + loader_show("Loading profile", "DO NOT refresh the page !"); + + const profile = new Profile(); + const _profile = /** @type {{ slug: string, name: string, server: string, isActive: boolean }|null} */ + await idb_openTransaction("get", IDB_stores.ProfileStore, { + keyPath: removeDiacritics(profileInputElement.value).replace(/(\W|_)+/g, "-").toLowerCase() + }); + + if(!_profile) { + profile.slug = removeDiacritics(profileInputElement.value).replace(/(\W|_)+/g, "-").toLowerCase(); + profile.name = profileInputElement.parentElement.querySelector(".sp_radio__input-label")?.innerText; + } else { + profile.hydrate(_profile); + profile.isActive = true; + } + GLOBAL_worldmapProfile.isActive = false; + + const serverContainer = document.getElementById("profiles__servers-container"); + const serverInputElement = /** @type{HTMLInputElement} */ serverContainer?.querySelector(`.sp_radio__input-wrapper input[value='${profile.server}']`); + + if(serverInputElement) { + serverContainer.removeEventListener("change", worldmapProfiles_switchServer); + + serverInputElement.checked = true + serverInputElement.dispatchEvent(EVENT_change); + + serverContainer.addEventListener("change", worldmapProfiles_switchServer); + } + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: GLOBAL_worldmapProfile + }); + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: profile + }); + + GLOBAL_worldmapProfile = profile; + + await node_resetCollected(); + await node_setCollected(); + primogem_updateCounter(); + + for(const filterInputElement of /** @type {HTMLInputElement[]} */ document.querySelectorAll("#worldmap-filters .sp_worldmap__filter")) { + worldmapFilter_updateCounter(filterInputElement); + } + + loader_hide(); + } +} + +async function worldmapProfiles_switchServer() { + const serverContainer = document.getElementById("profiles__servers-container"); + const serverInputElement = /** @type{HTMLInputElement} */ serverContainer?.querySelector(`.sp_radio__input-wrapper input:checked`); + + if(serverInputElement) { + GLOBAL_worldmapProfile.server = removeDiacritics(serverInputElement.value).replace(/(\W|_)+/g, "-").toLowerCase(); + + await idb_openTransaction("put", IDB_stores.ProfileStore, { + data: GLOBAL_worldmapProfile + }); + } +} + +function primogem_updateCounter() { + const primogemContainer = document.getElementById("primogem-counter-container"); + const counterContainer = primogemContainer?.querySelector("#primogem-counter"); + + if(counterContainer) { + let counter = 0; + const nodeElement = document.querySelectorAll(".sp_node__item:not(.sp_node__collected)[data-primogem]:not([data-primogem='0'])"); + + for(const _node of nodeElement) { + if(!isNaN(Number(_node.dataset.primogem))) { + counter += Number(_node.dataset.primogem); + } + } + + counterContainer.innerText = counter.toString(); + + if(counter === 0) { + primogemContainer.classList.add("sp_primogem__complete"); + } else { + primogemContainer.classList.remove("sp_primogem__complete"); + } + } +} +// + +// +function worldmarkForm_init() { + return new Promise(function(resolve) { + document.getElementById("worldmark_item")?.addEventListener("change", worldmarkForm_prefillInputs); + document.getElementById("worldmark_monster")?.addEventListener("change", worldmarkForm_prefillInputs); + + document.getElementById("worldmark__content-filter")?.addEventListener("change", worldmarkForm_resetForm); + + resolve(); + }); +} + +function worldmarkForm_prefillInputs() { + /** @type {HTMLInputElement} */ + const nameInput = document.getElementById("worldmark_name"); + /** @type {HTMLSelectElement} */ + const itemSelect = document.getElementById("worldmark_item"); + /** @type {HTMLSelectElement} */ + const monsterSelect = document.getElementById("worldmark_monster") + + if(nameInput) { + if(itemSelect && itemSelect.selectedIndex !== 0) { + nameInput.value = itemSelect.options[itemSelect.selectedIndex].innerText + } + + if(monsterSelect && monsterSelect.selectedIndex !== 0) { + nameInput.value = monsterSelect.options[monsterSelect.selectedIndex].innerText + } + + nameInput.dispatchEvent(EVENT_keyup); + } +} + +function worldmarkForm_resetForm() { + document.getElementById("form__worldmark")?.reset(); +} +// + +/** + * @param {string} type + * @param {string} name + * @param {string} value + * @param {string|null} extra + */ +function paq_event({type, name, value, extra = null}) { + window._paq.push([type, name, value, extra]); +} + +window.addEventListener("DOMContentLoaded", async function() { + loader_show("Loading data, please wait"); + + await touchDeviceInit(); + await radio_initListeners(); + await form_init(); + await slug_init(); + + //BO + await contentFilter_init(); + await worldmarkForm_init(); + + //FO + await panelSwitch_init(); + await slider__init(); + await worldmap_init(); + + await dom_isLoaded(); + + if(!IDB_hadMigration) { + loader_hide(); + } + + // log(IDB_database); +}); + +// common-chest - 2 +// exquisite-chest - 5 +// challenge - 5 ? +// precious-chest - 10 +// shrine - 40 \ No newline at end of file diff --git a/assets/css/_vars.scss b/assets/css/_vars.scss new file mode 100644 index 0000000..5a00ae2 --- /dev/null +++ b/assets/css/_vars.scss @@ -0,0 +1,27 @@ +$cl_black: rgb(0, 0, 0); +$cl_gray: rgb(128, 128, 128); +$cl_white: rgb(255, 255, 255); + +$cl_anemo: rgb(39, 161, 146); +$cl_pyro: rgb(190, 40, 40); +$cl_hydro: rgb(34, 143, 186); +$cl_electro: rgb(109, 81, 184); +$cl_cryo: rgb(128, 172, 211); +$cl_dendro: rgb(83, 153, 100); +$cl_geo: rgb(214, 153, 64); + +$cl_common: rgb(55, 180, 140); +$cl_rare: rgb(80, 130, 205); +$cl_epic: rgb(160, 65, 225); +$cl_legendary: rgb(215, 125, 55); +$cl_challenge: rgb(190, 40, 40); +$cl_seelie: rgb(25, 225, 215); + +$cl_sand: rgb(120, 106, 80); +$cl_sea: rgb(27, 40, 59); + +$cl_ui_dark: rgb(74, 83, 102); +$cl_ui_darker: rgb(40, 46, 61); +$cl_ui_shell: rgb(183, 186, 194); +$cl_ui_light: rgb(236, 229, 216); +$cl_ui_hover: rgb(217, 167, 98); \ No newline at end of file diff --git a/assets/css/font.scss b/assets/css/font.scss new file mode 100644 index 0000000..309667e --- /dev/null +++ b/assets/css/font.scss @@ -0,0 +1,31 @@ +@font-face { + font-family: 'ptsans_regular'; + src: url('../font/ptsans-regular.woff2') format('woff2'), + url('../font/ptsans-regular.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'ptsans_bold'; + src: url('../font/ptsans-bold.woff2') format('woff2'), + url('../font/ptsans-bold.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'ptsans_italic'; + src: url('../font/ptsans-italic.woff2') format('woff2'), + url('../font/ptsans-italic.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'ptsans_bold_italic'; + src: url('../font/ptsans-bolditalic.woff2') format('woff2'), + url('../font/ptsans-bolditalic.woff') format('woff'); + font-weight: normal; + font-style: normal; +} \ No newline at end of file diff --git a/assets/css/layout.scss b/assets/css/layout.scss new file mode 100644 index 0000000..4ac7bf4 --- /dev/null +++ b/assets/css/layout.scss @@ -0,0 +1,53 @@ +body { + overflow: hidden; +} + +#page-container { + display: flex; + flex-direction: column; + height: 100vh; + overflow: hidden; + width: 100vw; +} + +#header-container, #footer-container { + display: flex; + flex-direction: row; + flex-shrink: 0; + flex-wrap: nowrap; + overflow: hidden; + padding: 0 20px; + z-index: 2; +} + +#header-container { + max-height: 64px; +} + +#main-container { + display: flex; + flex-direction: row; + flex-grow: 1; + flex-wrap: nowrap; + overflow: hidden; + z-index: 1; +} + +#main-left-container, #main-center-container, #main-right-container { + display: flex; + flex-direction: column; + overflow: hidden; +} + +#main-left-container, #main-right-container { + flex-shrink: 0; +} + +#main-center-container { + flex-grow: 1; + max-width: 100%; +} + +#footer-container { + max-height: 32px; +} \ No newline at end of file diff --git a/assets/css/normalize.scss b/assets/css/normalize.scss new file mode 100644 index 0000000..2be717b --- /dev/null +++ b/assets/css/normalize.scss @@ -0,0 +1,198 @@ +html { + box-sizing: border-box; + font-size: 16px; + height: 100vh; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + width: 100vw; +} + +* { + box-sizing: border-box; + position: relative; + &:before, &:after { + box-sizing: border-box; + } + //&:focus { + // outline: none; + //} +} + +body { + height: 100vh; + margin: 0; + width: 100vw; +} + +main { + display: block; +} + +a { + background-color: transparent; + color: inherit; + text-decoration: none; + &:visited, &:hover, &:active, &:focus { + color: inherit; + } +} + +abbr[title] { + border-bottom: none; + text-decoration: underline dotted; +} + +b, strong { + font-weight: bolder; +} + +button, input, optgroup, select, textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; +} + +button, input { + overflow: visible; +} + +button, select { + text-transform: none; +} + +details { + display: block; +} + +div, textarea, table, td, th, code, pre, samp { + word-wrap: break-word; + hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; +} + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +img { + border-style: none; + max-width: 100%; + height: auto; +} + +a, button, input, select, textarea { + &:focus { + outline: none; + } +} + +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +pre, code, kbd, samp { + font-family: monospace, monospace; + font-size: 1em; + white-space: pre-wrap; +} + +progress { + vertical-align: baseline; +} + +small { + font-size: 80%; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +summary { + display: list-item; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +textarea { + overflow: auto; +} + +template { + display: none; +} + +button, [type="button"], [type="reset"], [type="submit"] { + -webkit-appearance: button; + &:hover { + cursor: pointer; + } + &::-moz-focus-inner, &::-moz-focus-inner, &::-moz-focus-inner, &::-moz-focus-inner { + border-style: none; + padding: 0; + } + &:-moz-focusring, &:-moz-focusring, &:-moz-focusring, &:-moz-focusring { + outline: 1px dotted ButtonText; + } +} + +[type="checkbox"], [type="radio"] { + padding: 0; +} + +[type="number"] { + //-moz-appearance: textfield; + &::-webkit-inner-spin-button, &::-webkit-outer-spin-button { + height: auto; + //-webkit-appearance: none; + } +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; + &::-webkit-search-decoration { + -webkit-appearance: none; + } +} + +[hidden] { + display: none !important; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} \ No newline at end of file diff --git a/assets/css/style.scss b/assets/css/style.scss new file mode 100644 index 0000000..446a8b7 --- /dev/null +++ b/assets/css/style.scss @@ -0,0 +1,2455 @@ +@use "sass:color"; +@use "sass:math"; +@use "sass:string"; +@import "vars"; + +:root { + --icon__default-height: 48px; + + --grid__height: 5; + --grid__width: 5; + --grid__zoom: 1; + + --loader__icon-size: 48px; + --loader__line-color: #{$cl_geo}; + --loader__ground-line-size: 8px; + --loader__slime__size: 300px; + --loader__slime__outline-width: 10px; + --loader__slime__offset: 10px; + + --pannel__width: 400px; +} + +body { + font-family: ptsans_regular, sans-serif; +} + +#transform-canvas { + left: 50%; + opacity: 0; + position: fixed; + top: 50%; + transform: translate(-50%, -50%); + z-index: -100; +} + +#page-background { + background: url('./../img/background.jpg') no-repeat center; + background-size: cover; + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: -1; +} + +#page-container { + form { + &.sp_form__uploading { + filter: blur(4px); + &:after { + bottom: 0; + content: ''; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 10; + } + } + } + + /* *** CLASS GENERIC *** */ + .sp_flex__filler { + flex-grow: 1; + } + .sp_invert { + filter: invert(0.5); + } + .sp_grayscale { + filter: grayscale(1); + } + .sp_icon__container { + display: flex; + flex-direction: column; + overflow: hidden; + user-select: none; + img { + margin: auto; + height: var(--icon__default-height); + width: auto; + } + } + .sp_button { + background-color: $cl_ui_dark; + border: 2px solid $cl_white; + border-radius: 6px; + display: flex; + height: 36px; + overflow: hidden; + padding: 0; + width: 140px; + span { + color: $cl_white; + display: block; + margin: auto; + padding: 0 6px; + user-select: none; + } + &.sp_button__active { + background-color: $cl_geo; + } + &:hover { + background-color: $cl_ui_hover; + &[data-type='cancel'] { + background-color: $cl_pyro; + } + &[data-type='validate'] { + background-color: $cl_dendro; + } + } + } + + /* *** FORM COMPONENTS *** */ + [class*='sp_form-row'] { + margin-bottom: 6px; + max-width: 400px; + overflow: hidden; + } + .sp_form-row__file, .sp_form-row__text, .sp_form-row__select { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + height: 36px; + } + .sp_form-row__file, .sp_form-row__text, .sp_form-row__select, .sp_form-row__textarea { + background-color: $cl_white; + //border: 1px solid $cl_ui_dark; + border-radius: 6px; + > label { + background-color: $cl_ui_dark; + border: 2px solid $cl_white; + border-radius: inherit; + color: $cl_white; + flex-shrink: 0; + line-height: 30px; + min-width: 90px; + max-width: 70%; + overflow: hidden; + padding: 0 6px; + text-overflow: ellipsis; + user-select: none; + white-space: nowrap; + transition: max-width ease-in 250ms; + } + &:hover, &:focus-within { + label { + background-color: $cl_ui_hover; + } + } + } + .sp_form-row__file, .sp_form-row__text, .sp_form-row__select, .sp_form-row__textarea { + input[type='text'], select, textarea { + border: 2px solid $cl_white; + flex-shrink: 1; + font-size: 16px; + padding: 0 2px; + width: 100%; + } + input[type='text'], select { + line-height: 30px; + } + } + .sp_form-row__text, .sp_form-row__select { + &:focus-within { + label { + max-width: 90px; + transition: max-width ease-out 250ms; + } + } + } + .sp_form-row__button { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-column-gap: 6px; + height: 36px; + .sp_button { + width: auto; + } + } + .sp_form-row__file { + input { + &[type='file'] { + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 2; + &:hover { + cursor: pointer; + } + } + } + .sp_input__file-preview { + background-color: $cl_ui_dark; + border: 2px solid $cl_white; + border-radius: 6px; + flex-shrink: 0; + padding: 1px; + width: 36px; + img { + height: 100%; + width: auto; + } + } + } + + // + //.sp_form-row__radio { + // display: flex; + // flex-direction: column; + // &.sp_form-row__radio-wrapper { + // border-left: 4px solid $cl_ui_dark; + // border-right: 4px solid $cl_ui_dark; + // border-radius: 6px; + // padding: 0 4px; + // } + // //background-color: $cl_white; + // //border: 1px solid $cl_ui_dark; + // //border-radius: 6px; + // > label { + // background-color: $cl_ui_dark; + // border: 2px solid $cl_white; + // border-radius: 6px; + // color: $cl_white; + // flex-shrink: 0; + // line-height: 30px; + // margin-bottom: 2px; + // max-width: none; + // overflow: hidden; + // padding: 0 6px; + // text-overflow: ellipsis; + // user-select: none; + // white-space: nowrap; + // width: 100%; + // } + // .sp_radio__container { + // > label { + // display: flex; + // flex-direction: row; + // overflow: hidden; + // } + // $boxDim: 16px; + // .sp_checkbox__text, .sp_radio__text { + // background-color: $cl_white; + // border-radius: 4px; + // line-height: 20px; + // .sp_radio__label { + // background-color: rgba($cl_pyro, 0.6); + // border: 2px solid $cl_white; + // border-radius: inherit; + // color: $cl_white; + // overflow: hidden; + // padding: 0 6px 0 (8px + $boxDim); + // text-overflow: ellipsis; + // width: 100%; + // white-space: nowrap; + // &:before { + // background-color: transparent; + // border: 1px solid $cl_white; + // content: ''; + // height: $boxDim; + // left: 2px; + // position: absolute; + // top: 50%; + // transform: translateY(-50%); + // width: $boxDim; + // } + // } + // &.sp_radio__checked { + // .sp_radio__label { + // background-color: $cl_dendro; + // &:before { + // background-color: $cl_white; + // } + // } + // } + // } + // .sp_checkbox__text { + // .sp_radio__label { + // &:before { + // border-radius: 2px; + // } + // } + // } + // .sp_radio__text { + // .sp_radio__label { + // &:before { + // //border-radius: math.div($boxDim, 2); + // border-radius: math.div($boxDim, 2); + // } + // } + // } + // .sp_radio__enhanced { + // //&.sp_invert { + // // filter: invert(0.5); + // //} + // //&.sp_grayscale { + // // filter: grayscale(1); + // //} + // //&.sp_radio__checked { + // // &.sp_invert { + // // filter: invert(0); + // // } + // // &.sp_grayscale { + // // filter: grayscale(0); + // // } + // //} + // &:hover, *:hover { + // cursor: pointer; + // } + // } + // + // &.sp_radio__layout-inline { + // display: flex; + // flex-direction: row; + // flex-wrap: wrap; + // > label { + // margin: 0 6px 6px 0; + // &:last-child { + // margin-right: 0; + // } + // } + // } + // &.sp_radio__layout-grid-b { + // display: grid; + // grid-template-columns: repeat(2, 1fr); + // grid-gap: 4px; + // } + // &.sp_radio__layout-grid-c { + // display: grid; + // grid-template-columns: repeat(2, 1fr 24px); + // grid-gap: 4px; + // } + // + // &.sp_radio__invert { + // .sp_radio__enhanced { + // filter: invert(0.5); + // &.sp_radio__checked { + // filter: invert(0); + // } + // } + // } + // &.sp_radio__grayscale { + // .sp_radio__enhanced { + // filter: grayscale(1); + // &.sp_radio__checked { + // filter: grayscale(0); + // } + // } + // } + // + // input { + // display: none; + // } + // } + // &:hover { + // > label { + // background-color: $cl_ui_hover; + // } + // } + //} + // + .sp_form-row__radio { + display: flex; + flex-direction: column; + .sp_radio__main-label { + background-color: $cl_ui_dark; + border: 2px solid $cl_white; + border-radius: 6px; + color: $cl_white; + flex-shrink: 0; + line-height: 30px; + margin-bottom: 4px; + max-width: none; + overflow: hidden; + padding: 0 6px; + text-overflow: ellipsis; + user-select: none; + white-space: nowrap; + width: 100%; + } + .sp_radio__input-wrapper { + background-color: $cl_white; + border-radius: 4px; + cursor: pointer; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + overflow: hidden; + .sp_radio__input-icon, .sp_radio__input-mark { + position: absolute; + left: 2px; + top: 50%; + transform: translateY(-50%); + } + .sp_radio__input-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + input { + &[type="checkbox"], + &[type="radio"] { + display: none; + } + } + &:not(.sp_radio__checked) { + .sp_radio__input-label { + color: $cl_ui_shell; + } + } + } + + &.sp_radio__layout-inline { + .sp_radio__container { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + .sp_radio__wrapper { + margin: 0 6px 6px 0; + &:last-child { + margin-right: 0; + } + } + } + + &[class*="sp_radio__layout-grid"] { + .sp_radio__container { + display: grid; + grid-gap: 4px; + } + } + &.sp_radio__layout-grid-a { + .sp_radio__container { + grid-template-columns: 1fr; + } + } + &.sp_radio__layout-grid-b { + .sp_radio__container { + grid-template-columns: repeat(2, 1fr); + } + } + &.sp_radio__layout-grid-c { + .sp_radio__container { + grid-template-columns: repeat(2, 1fr 24px); + } + } + + &.sp_radio__style-text { + .sp_radio__input-wrapper { + height: 24px; + padding: 0 4px 0 26px; + .sp_radio__input-mark { + background-color: #ff8888; + box-shadow: + inset 1px 1px 0 rgba($cl_ui_dark, 0.5), + inset 0 0 1px rgba($cl_ui_dark, 0.5); + display: flex; + height: 20px; + width: 20px; + &:before { + content: ""; + } + } + .sp_radio__input-label { + line-height: 24px; + } + &.sp_radio__type-checkbox, &.sp_radio__type-radio { + .sp_radio__input-icon { + display: none; + } + } + &.sp_radio__type-checkbox { + .sp_radio__input-mark { + border-radius: 4px; + &:before, + &:after { + background-color: $cl_white; + box-shadow: none; + height: 14px; + margin: auto; + width: 2px; + transform: rotate(45deg); + } + &:after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(-45deg); + } + } + } + &.sp_radio__type-radio { + .sp_radio__input-mark { + border-radius: 50%; + &:before { + background-color: transparent; + border: 1px solid $cl_white; + box-shadow: none; + border-radius: 50%; + height: 12px; + margin: auto; + width: 12px; + } + } + } + &.sp_radio__checked { + color: $cl_ui_dark; + .sp_radio__input-mark { + background-color: $cl_dendro; + &:before { + box-shadow: 1px 1px 0 rgba($cl_ui_dark, 0.5); + } + } + &.sp_radio__type-checkbox { + .sp_radio__input-mark { + &:before { + background-color: transparent; + border-bottom: 3px solid $cl_white; + border-right: 3px solid $cl_white; + height: 12px; + margin: auto; + transform: rotate(45deg); + width: 6px; + } + &:after { + content: none; + } + } + } + &.sp_radio__type-radio { + .sp_radio__input-mark { + &:before { + background-color: $cl_white; + border: none; + } + } + } + } + } + } + + &.sp_radio__style-icon, &.sp_radio__style-button { + .sp_radio__input-wrapper { + line-height: unset; + &.sp_radio__type-checkbox, &.sp_radio__type-radio { + .sp_radio__input-mark { + display: none; + } + &:not(.sp_radio__checked) { + .sp_radio__input-icon { + filter: grayscale(1); + } + } + } + } + } + &.sp_radio__style-icon { + .sp_radio__input-wrapper { + height: 34px; + padding: 0 4px 0 36px; + .sp_radio__input-icon { + display: block; + height: 34px; + width: 34px; + > * { + display: block; + width: 34px; + } + } + .sp_radio__input-label { + line-height: 34px; + } + } + } + &.sp_radio__style-button { + .sp_radio__input-wrapper { + height: 48px; + margin-right: 6px; + padding: 0 0 0 48px; + .sp_radio__input-icon { + display: block; + height: 48px; + width: 48px; + > * { + display: block; + width: 48px; + } + } + .sp_radio__input-label { + display: none; + } + } + } + } + .sp_form-row__textarea { + display: flex; + flex-direction: column; + label { + max-width: 100%; + width: 100%; + } + textarea { + resize: none; + min-height: 120px; + } + } + .sp_form-row_inline-container { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-column-gap: 6px; + > [class*='sp_form-row'] { + margin: 0; + } + } + + /* *** CLASS TEMPLATES *** */ + .sp_menu-btn { + cursor: pointer; + display: flex; + flex-shrink: 0; + height: 64px; + padding: 10px; + width: 64px; + .sp_menu-btn__bars { + background-color: white; + height: 6px; + margin: auto; + overflow: visible; + width: 44px; + //transition: background-color 250ms ease-out; + transform: rotate(0deg); + transition: transform 250ms ease-in; + &:before, &:after { + background-color: white; + content: ""; + height: 6px; + left: 50%; + position: absolute; + transform: translate(-50%, -50%); + width: 44px; + transition: transform 250ms ease-in, top 250ms ease-in; + } + &:before { + top: calc(50% - 12px); + } + &:after { + top: calc(50% + 12px); + } + } + &.sp_nav__nav-open { + .sp_menu-btn__bars { + transform: rotate(45deg); + transition: transform 250ms ease-in; + &:before, &:after { + transition: transform 250ms ease-in, top 250ms ease-in; + } + &:before { + top: 50%; + transform: translate(-50%, -50%) rotate(-90deg); + } + &:after { + top: 50%; + transform: translate(-50%, -50%) rotate(-90deg); + } + } + } + } + .ul_nav__wrapper { + overflow: visible; + ul, li { + list-style: none; + margin: 0; + padding: 0; + } + .ul_nav { + display: flex; + flex-direction: row; + height: 64px; + margin: 0 auto; + overflow: visible; + padding: 0 80px; + .ul_nav__head, .ul_nav__tail, .ul_nav__item { + flex-shrink: 0; + height: 64px; + > *:not(.ul_nav__sub-nav) { + height: 64px; + } + } + .ul_nav__head, .ul_nav__tail { + background-color: $cl_geo; + position: absolute; + width: 64px; + z-index: 1; + > * { + width: 64px; + } + } + .ul_nav__head { + left: 0; + } + .ul_nav__tail { + right: 0; + } + .ul_nav__item { + color: $cl_ui_light; + display: flex; + flex-direction: column; + overflow: hidden; + width: 120px; + > a { + background-color: $cl_ui_darker; + display: flex; + flex-shrink: 0; + height: 64px; + overflow: hidden; + padding: 0 12px; + width: inherit; + z-index: 2; + .ul_nav__underline { + background-color: rgba($cl_ui_light, 0.2); + bottom: 0; + height: 2px; + left: 6px; + position: absolute; + right: 6px; + z-index: 2; + } + .ul_nav__item-title { + margin: auto; + font-weight: normal; + font-size: 16px; + line-height: 18px; + } + &.ul_nav__link-active { + color: $cl_geo; + font-family: ptsans_bold, sans-serif; + .ul_nav__underline { + background-color: $cl_geo; + } + } + &:hover { + background-color: $cl_ui_dark; + } + &:not(.ul_nav__link-active) { + &:hover { + color: $cl_ui_hover; + .ul_nav__underline { + background-color: $cl_ui_hover; + } + } + } + } + } + > .ul_nav__item { + overflow: visible; + z-index: 2; + &:nth-child(2), &:nth-last-child(2) { + > a { + overflow: visible; + &:after { + content: ''; + display: block; + position: absolute; + top: 0; + } + } + } + &:nth-child(2) { + > a { + &:after { + border-top: 64px solid $cl_geo; + border-right: 16px solid $cl_ui_darker; + left: -16px; + } + &:hover { + &:after { + border-right: 16px solid $cl_ui_dark; + } + } + } + } + &:nth-last-child(2) { + > a { + &:after { + border-bottom: 64px solid $cl_geo; + border-left: 16px solid $cl_ui_darker; + right: -16px; + } + &:hover { + &:after { + border-left: 16px solid $cl_ui_dark; + } + } + } + } + &:hover { + height: auto; + .ul_nav__sub-nav { + max-height: 256px; + transition: max-height ease-in 350ms; + } + } + } + } + .ul_nav__sub-nav { + box-shadow: 0 0 10px -4px $cl_ui_light; + display: flex; + flex-direction: column; + flex-shrink: 0; + max-height: 0; + overflow: hidden; + transition: max-height ease-out 250ms; + z-index: 1; + .ul_nav__item { + a { + &.ul_nav__link-active { + color: $cl_dendro; + font-family: ptsans_regular, sans-serif; + .ul_nav__underline { + background-color: $cl_dendro; + } + } + } + } + } + } + .sp_nav { + display: flex; + flex-direction: row; + .sp_nav__wrapper, .sp_nav__item { + display: flex; + flex-direction: column; + flex-shrink: 0; + height: 64px; + overflow: hidden; + width: 140px; + } + .sp_nav__wrapper { + height: 128px; + } + .sp_nav__item { + color: $cl_ui_light; + padding: 0 12px; + .sp_nav__indicator, .sp_nav__underline, .sp_nav__cursor { + z-index: 2; + } + .sp_nav__indicator, .sp_nav__underline { + background-color: $cl_ui_light; + opacity: 0.2; + position: absolute; + } + .sp_nav__indicator, .sp_nav__cursor { + display: none; + } + .sp_nav__underline { + bottom: 0; + height: 2px; + left: 4px; + right: 4px; + } + .sp_nav__title { + margin: auto; + z-index: 1; + } + &.sp_nav__active { + //background-color: $cl_ui_light; + color: $cl_geo; + font-family: ptsans_bold, sans-serif; + .sp_nav__indicator, .sp_nav__underline { + background-color: $cl_geo; + opacity: 1; + } + } + &:not(.sp_nav__active):hover { + //.sp_nav__indicator, .sp_nav__underline { + color: $cl_ui_hover; + .sp_nav__indicator, .sp_nav__underline { + background-color: $cl_geo; + opacity: 0.8; + } + } + } + &.sp_nav__vertical { + flex-direction: column; + .sp_nav__item { + background-color: rgba($cl_ui_dark, 0.8); + margin-bottom: 6px; + padding-left: 16px; + width: 160px; + .sp_nav__indicator { + display: block; + height: 100%; + left: 0; + top: 0; + width: 6px; + } + .sp_nav__cursor { + display: none; + background-color: transparent; + border: 12px solid transparent; + border-left-color: $cl_dendro; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + } + .sp_nav__underline { + left: 10px; + } + .sp_nav__title { + margin: auto 0; + } + &.sp_nav__sub-item { + height: 48px; + margin-left: auto; + width: 140px; + } + &.sp_nav__active { + background-color: $cl_ui_light; + color: $cl_ui_dark; + .sp_nav__indicator, .sp_nav__underline { + background-color: $cl_dendro; + } + .sp_nav__cursor { + display: block; + } + } + } + } + } + // + //.sp_grid__container { + // display: flex; + // flex-direction: column; + // flex-wrap: nowrap; + // .sp_grid__row { + // display: flex; + // flex-direction: row; + // flex-shrink: 0; + // } + // .sp_grid__column { + // //padding-top: calc(100% / var(--grid__width) * var(--grid__zoom)); + // user-select: none; + // flex-shrink: 0; + // height: calc(512px + (64px * var(--grid__zoom))); + // width: calc(512px + (64px * var(--grid__zoom))); + // //width: calc(100% / var(--grid__width) * var(--grid__zoom)); + // .sp_grid__map, .sp_grid__node-container, .sp_grid__map-form { + // height: 100%; + // left: 0; + // position: absolute; + // top: 0; + // width: 100%; + // } + // .sp_grid__map { + // z-index: 1; + // } + // .sp_grid__node-container { + // z-index: 3; + // .sp_node__item { + // position: absolute; + // z-index: 1; + // &.sp_node__collected:not(.sp_node__deleted) { + // opacity: 0.3; + // } + // &.sp_node__hidden { + // display: none; + // } + // &.sp_node__deleted { + // &:before, &:after { + // border-top: 4px solid $cl_pyro; + // content: ''; + // height: 0; + // left: 50%; + // position: absolute; + // top: 50%; + // width: 40px; + // z-index: 3; + // } + // &:before { + // transform: translate(-50%, -50%) rotate(-45deg); + // } + // &:after { + // transform: translate(-50%, -50%) rotate(45deg); + // } + // } + // } + // } + // .sp_grid__map-form { + // z-index: 4; + // input[type='file'] { + // height: 100%; + // left: 0; + // opacity: 0; + // position: absolute; + // top: 0; + // width: 100%; + // } + // &:hover { + // background-color: rgba($cl_ui_dark, 0.2); + // } + // } + // &:before { + // bottom: 0; + // content: ''; + // left: 0; + // position: absolute; + // right: 0; + // top: 0; + // z-index: 2; + // } + // } + //} + // + .sp_grid__container { + display: grid; + grid-template-rows: repeat(var(--grid__height), calc(256px + (64px * var(--grid__zoom)))); + grid-template-columns: repeat(var(--grid__width), calc(256px + (64px * var(--grid__zoom)))); + .sp_grid__cell { + user-select: none; + //flex-shrink: 0; + //height: calc(512px + (64px * var(--grid__zoom))); + //width: calc(512px + (64px * var(--grid__zoom))); + .sp_grid__map, .sp_grid__node-container, .sp_grid__map-form { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + } + .sp_grid__map { + z-index: 1; + } + .sp_grid__node-container { + z-index: 3; + .sp_node__item { + position: absolute; + z-index: 1; + &.sp_node__collected:not(.sp_node__deleted) { + opacity: 0.3; + } + &.sp_node__hidden { + display: none; + } + &.sp_node__deleted { + &:before, &:after { + border-top: 4px solid $cl_pyro; + content: ''; + height: 0; + left: 50%; + position: absolute; + top: 50%; + width: 40px; + z-index: 3; + } + &:before { + transform: translate(-50%, -50%) rotate(-45deg); + } + &:after { + transform: translate(-50%, -50%) rotate(45deg); + } + } + } + } + .sp_grid__map-form { + z-index: 4; + input[type='file'] { + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; + } + &:hover { + background-color: rgba($cl_ui_dark, 0.2); + } + } + &:before { + bottom: 0; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 2; + } + } + } + .sp_dashboard__container { + background-color: $cl_ui_light; + display: flex; + flex-direction: column; + overflow-x: hidden; + overflow-y: auto; + padding: 8px 12px; + width: 100%; + } + .sp_node__item { + $outer_dim: 34px; + height: $outer_dim; + width: $outer_dim; + .sp_node__background { + $inner_dim: 70.6%; + border: 2px solid white; + background-color: $cl_ui_dark; + border-radius: 4px; + height: $inner_dim; + left: 50%; + overflow: hidden; + position: absolute; + top: 50%; + transform: translate(-50%, -50%) rotate(45deg); + width: $inner_dim; + z-index: 2; + img { + //height: auto; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%) rotate(-45deg); + width: 32px; + z-index: 1; + } + &:before { + border-radius: 4px; + content: ''; + display: block; + height: 100%; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + width: 100%; + z-index: 3; + } + } + .sp_node__quantity { + background-color: $cl_ui_dark; + border: 1px solid $cl_white; + border-radius: 4px; + height: 14px; + left: -2px; + position: absolute; + top: 10px; + transform: rotate(45deg); + width: 14px; + z-index: 2; + > span { + //color: $cl_geo; + color: $cl_white; + font-size: 10px; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(-45deg); + } + } + .sp_node__guidelines { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 1; + &:before, &:after { + border: 1px solid $cl_legendary; + content: ''; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + } + &:before { + height: 4096px; + } + &:after { + width: 4096px; + } + } + &.sp_node__highlight { + .sp_node__background { + border: 2px solid rgb(0, 255, 255); + } + } + } + .sp_modal, .sp_tooltip { + background-color: $cl_ui_light; + border: 2px solid $cl_white; + border-radius: 6px; + display: flex; + flex-direction: column; + overflow: hidden; + padding: 6px; + width: 100%; + .sp_modal__body, .sp_tooltip__body { + flex-grow: 1; + flex-shrink: 1; + line-height: 20px; + margin-bottom: 6px; + overflow-x: hidden; + overflow-y: auto; + padding: 0 6px; + } + } + .sp_tooltip__wrapper { + display: flex; + flex-direction: column; + max-height: 250px; + overflow: visible; + position: absolute; + transform: translate(-50%, -100%); + width: 400px; + z-index: 10; + .sp_tooltip__action-left-wrapper, .sp_tooltip__action-right-wrapper { + display: flex; + flex-direction: row; + position: absolute; + top: 0; + transform: translateY(calc(-100% - 2px)); + z-index: 3; + > *:not(:last-child) { + margin-right: 2px; + } + .sp_button { + width: 100px; + &.sp_icon__container { + width: 36px; + img { + height: 24px; + } + } + } + .sp_node__set-display { + margin-left: auto; + &[data-is-hidden="0"] { + > span:nth-child(even) { + display: none + } + } + &[data-is-hidden="1"] { + > span:nth-child(odd) { + display: none + } + } + } + } + .sp_tooltip__action-left-wrapper { + left: 0; + } + .sp_tooltip__action-right-wrapper { + right: 0; + } + .sp_tooltip { + margin-bottom: 20px; + z-index: 1; + .sp_tooltip__header, .sp_tooltip__footer { + display: flex; + flex-shrink: 0; + } + .sp_tooltip__header { + flex-direction: row; + margin: 0; + line-height: 28px; + > span { + &:nth-child(1) { + margin-right: auto; + } + &:nth-child(2) { + font-size: 12px; + line-height: 16px; + margin-bottom: auto; + } + } + } + .sp_tooltip__footer { + flex-direction: column; + button { + background-color: transparent; + border: none; + height: 32px; + padding: 0; + width: 32px; + img { + height: 32px; + //noinspection CssInvalidFunction + transform: rotateY(0deg); + } + &:not(:last-child) { + margin-right: 6px; + } + &:hover { + img { + //noinspection CssInvalidFunction + transform: rotateY(360deg); + transition: all 0.6s ease; + } + } + } + > :not(.sp_tooltip__screenshot-container) { + font-family: ptsans_italic, sans-serif; + font-size: 14px; + margin-bottom: 2px; + } + > .sp_tooltip__screenshot-container { + display: grid; + grid-template-columns: repeat(5, 1fr); + .sp_screenshot__container { + cursor: pointer; + margin-right: 6px; + z-index: 1; + img { + border: 2px solid $cl_white; + border-radius: 6px; + } + &:hover { + z-index: 2; + img { + animation: 300ms linear infinite screenshot__rock; + } + } + } + } + } + &:before { + background: no-repeat center; + background-size: 70%; + content: ""; + filter: blur(4px); + height: 100%; + left: 0; + opacity: 0.3; + position: absolute; + top: 0; + width: 100%; + } + } + .sp_tooltip__cursor { + bottom: 2px; + height: 20px; + left: 50%; + overflow: hidden; + position: absolute; + transform: translateX(-50%); + width: 40px; + z-index: 2; + &:before { + background-color: $cl_ui_light; + border: 2px solid white; + border-radius: 6px; + bottom: 8px; + content: ""; + height: 40px; + left: 50%; + position: absolute; + transform: translateX(-50%) rotate(45deg); + width: 40px; + } + } + } + + /* *** ID COMMONS *** */ + #header-container, #footer-container { + color: $cl_white; + //background-color: rgba($cl_ui_dark, 0.5); + background-color: $cl_ui_darker; + } + #header-container { + overflow: visible; + .sp_header__nav, .sp_header__extra { + display: flex; + flex-direction: row; + flex-shrink: 0; + flex-wrap: nowrap; + max-height: inherit; + overflow: visible; + } + .sp_header__nav { + max-width: 1000px; + margin: 0 auto; + width: 100%; + } + .sp_header__extra { + position: absolute; + right: 20px; + .sp_icon__container { + height: 64px; + &:not(:last-child) { + margin-right: 20px; + } + } + } + .sp_header__page-icon { + } + .sp_header__title { + line-height: 64px;; + } + .sp_nav { + .sp_nav__item:not(:first-child) { + background-color: $cl_ui_darker; + } + } + } + #toasts-container { + position: absolute; + top: 10px; + right: 10px; + display: flex; + flex-direction: column; + align-items: flex-end; + z-index: 999; + .sp_toast { + background: $cl_ui_dark; + color: $cl_white; + margin-bottom: 6px; + opacity: 0; + padding: 8px 12px; + position: relative; + transform: translateY(100px); + &__success { + background: $cl_common; + } + &__error { + background: $cl_challenge; + } + &__active { + opacity: 1; + transform: translateY(0); + transition: all 250ms ease-out; + } + } + } + #modal-container { + display: none; + bottom: 0; + left: 0; + opacity: 0; + position: absolute; + right: 0; + top: 0; + z-index: 10; + transition: opacity ease-out 150ms; + .sp_modal__background { + background-color: rgba($cl_ui_dark, 0.6); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; + } + .sp_modal__container, .sp_modal { + left: 50%; + position: absolute; + transform: translate(-50%, -50%); + } + .sp_modal__container { + top: 50%; + width: 400px; + z-index: 2; + } + .sp_modal { + top: 200%; + transition: top ease-out 150ms; + &.sp_modal__warn { + background-color: $cl_ui_dark; + .sp_modal__body { + color: $cl_white; + font-family: ptsans_bold, sans-serif; + } + } + } + &.sp_modal__open { + display: block; + opacity: 1; + transition: opacity ease-in 250ms; + .sp_modal { + top: 50%; + transition: top ease-in 250ms; + } + } + } + #blob-loader { + background-color: $cl_sea; + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + user-select: none; + z-index: 100; + .sp_loader__wrapper, + .sp_slime__wrapper, + .sp_slime__outline_ends, .sp_slime__outline_end, + .sp_slime__eyes, .sp_slime__eye, + .sp_ground_line__wrapper, + .sp_ground_line__ends, .sp_ground_line__end, + .sp_element__wrapper, + .sp_elements, .sp_element, .sp_element__icon { + position: absolute; + } + + .sp_loader__wrapper, .sp_slime__wrapper, .sp_ground_line__wrapper, .sp_element__wrapper { + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } + + .sp_slime__outline_ends, .sp_ground_line__ends { + height: inherit; + left: 0; + right: 0; + top: 0; + } + + .sp_slime__outline_end, .sp_ground_line__end, .sp_slime__eye { + background-color: var(--loader__line-color); + border-radius: 50%; + height: inherit; + top: 50%; + transform: translateY(-50%); + &:first-child { + left: 0; + } + &:last-child { + right: 0; + } + } + + .sp_element__wrapper, .sp_elements, .sp_element { + height: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 20px); + width: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 20px); + } + + .sp_elements, .sp_element, .sp_element__icon { + left: 50%; + top: 0; + transform: translateX(-50%); + } + + .sp_loader__wrapper { + height: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 100px); + width: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 100px); + } + + .sp_slime__wrapper { + height: var(--loader__slime__size); + transform: translate(-50%, calc(-50% - (var(--loader__slime__offset) + var(--loader__ground-line-size) / 2))); + width: var(--loader__slime__size); + .sp_slime__outline { + border: var(--loader__slime__outline-width) solid var(--loader__line-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-radius: 50%; + height: inherit; + transform: rotate(45deg); + width: inherit; + } + .sp_slime__outline_ends { + .sp_slime__outline_end { + height: var(--loader__slime__outline-width); + width: var(--loader__slime__outline-width); + } + } + .sp_slime__eyes { + animation: 5s linear infinite slime_eyes__move; + height: calc(var(--loader__slime__outline-width) * 2); + left: 30%; + top: 20%; + transform: translateX(-50%); + width: 50px; + .sp_slime__eye { + animation: 5s linear infinite slime_eyes__blink; + width: var(--loader__slime__outline-width); + } + } + } + + .sp_ground_line__wrapper { + height: var(--loader__ground-line-size); + padding: 0 4px; + width: calc(var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 40px); + .sp_ground_line { + background-color: var(--loader__line-color); + height: inherit; + width: 100%; + } + .sp_ground_line__ends { + .sp_ground_line__end { + width: var(--loader__ground-line-size); + } + } + } + + .sp_element__wrapper { + height: calc(((var(--loader__slime__size) + (var(--loader__icon-size) * 2) + 20px) / 2) + var(--loader__slime__offset)); + overflow: hidden; + transform: translate(-50%, calc(-100% - 4px)); + .sp_elements { + animation: 10s linear infinite loader_spin; + width: inherit; + .sp_element { + width: inherit; + .sp_element__icon { + height: var(--loader__icon-size); + width: var(--loader__icon-size); + img { + width: 100%; + } + } + @for $i from 2 through 14 { + &:nth-child(#{$i}) { + transform: translateX(-50%) rotate(#{25.72deg * ($i - 1)}); + } + } + } + } + } + + .sp_loader__text { + color: $cl_geo; + font-size: 32px; + font-family: ptsans_bold, sans-serif; + left: 50%; + position: absolute; + text-align: center; + top: calc(50% + 20px); + transform: translateX(-50%); + .sp_loader__warn-text { + color: $cl_pyro; + } + } + } + + /* *** ID FRONT *** */ + #main-left-container, #main-right-container { + background-color: $cl_ui_light; + height: 100%; + overflow: visible; + position: absolute; + top: 0; + width: var(--pannel__width); + z-index: 2; + .sp_panel__header { + background-color: $cl_ui_dark; + color: #fff; + display: flex; + flex-direction: row; + flex-shrink: 0; + flex-wrap: nowrap; + height: 64px; + overflow: hidden; + padding: 0 20px; + } + .sp_panel__switch, .sp_panel__content-switch-container { + position: absolute; + } + .sp_panel__content-switch-container { + display: grid; + grid-template-columns: 1fr; + grid-row-gap: 6px; + top: 200px; + } + .sp_panel__switch, .sp_panel__content-switch { + background-color: $cl_ui_light; + cursor: pointer; + height: 50px; + overflow: hidden; + user-select: none; + width: 30px; + img { + //filter: drop-shadow(0px 0px 0px gray); + height: auto; + left: 50%; + max-width: none; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + width: 38px; + z-index: 1; + } + &:before { + content: ''; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 2; + } + } + .sp_panel__switch { + top: 100px; + img { + width: 38px; + } + .sp_panel__open { + display: initial; + } + .sp_panel__close { + display: none; + } + } + .sp_panel__content-switch { + &.sp_panel__switch-active { + img { + filter: + hue-rotate(color.hue($cl_hydro) - color.hue($cl_geo)) + saturate(100% + color.saturation($cl_geo) - (color.saturation($cl_hydro))) + brightness(100% + (color.lightness($cl_hydro) - color.lightness($cl_geo))); + } + } + } + .sp_panel__content { + flex-grow: 1; + flex-shrink: 1; + overflow-x: hidden; + overflow-y: auto; + width: 100%; + &.sp_slider { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + overflow: hidden; + } + } + .sp_slider { + .sp_slider__slide { + background-color: $cl_ui_light; + height: 100%; + left: -105%; + overflow-x: hidden; + overflow-y: auto; + position: absolute; + top: 0; + transition: left ease-in 150ms; + width: 100%; + z-index: 1; + &.sp_slider__slide-open { + left: 0; + transition: left ease-out 250ms; + z-index: 2; + } + } + } + .sp_panel__section { + display: flex; + flex-direction: column; + overflow: hidden; + padding: 10px; + width: 100%; + .sp_panel__section-title { + color: $cl_hydro; + display: flex; + flex-direction: row; + line-height: 24px; + margin-bottom: 10px; + h2, label { + font-family: ptsans_bold, sans-serif; + font-size: 20px; + margin: 0 auto 0 0; + } + button { + border: none; + background-color: transparent; + color: $cl_geo; + font-family: inherit; + font-size: 12px; + height: 14px; + margin: auto 0 6px; + } + } + } + &.sp_panel__open { + .sp_panel__switch { + .sp_panel__open { + display: none; + } + .sp_panel__close { + display: initial; + } + } + } + } + #main-left-container { + left: calc(var(--pannel__width) * (-1)); + transition: left ease-in 150ms; + .sp_panel__content-switch-container { + right: 0; + transition: right ease-in 150ms; + } + .sp_panel__switch, .sp_panel__content-switch { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } + .sp_panel__switch { + right: -30px; + .sp_panel__close { + //noinspection CssInvalidFunction + transform: translate(-50%, -50%) rotateZ(180deg); + } + } + &.sp_panel__open { + left: 0; + transition: left ease-out 250ms; + .sp_panel__content-switch-container { + right: -30px; + transition: right ease-out 250ms; + } + } + } + #main-right-container { + right: calc(var(--pannel__width) * (-1)); + transition: right 150ms; + .sp_panel__switch { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: -30px; + .sp_panel__open { + //noinspection CssInvalidFunction + transform: translate(-50%, -50%) rotateZ(180deg); + } + } + &.sp_panel__open { + right: 0; + transition: right 250ms; + } + } + #main-center-container { + z-index: 1; + &.sp_region__background-sand, &.sp_region__background-sea { + background-repeat: repeat; + } + &.sp_region__background-sand { + background-image: url('./../static/map/sand.jpg'); + } + &.sp_region__background-sea { + background-image: url('./../static/map/sea.jpg'); + } + } + #map-title { + color: white; + left: 50%; + position: fixed; + top: 50%; + transform: translate(-50%, -50%); + z-index: -1; + } + #worldmap-container { + //display: flex; + //flex-direction: column; + height: 100%; + margin: auto; + max-width: 100%; + overflow: hidden; + z-index: 1; + //.sp_grid__container { + // margin: auto 0; + // .sp_grid__row { + // margin: 0 auto; + // } + //} + &.sp_worldmap__edit { + //.sp_grid__container { + // .sp_grid__column { + // .sp_grid__node-container { + // .sp_node__item:not(#node-form-coordinate-tracker) { + // filter: grayscale(1); + // } + // &:before { + // content: ''; + // display: block; + // height: 100%; + // left: 0; + // position: absolute; + // top: 0; + // width: 100%; + // z-index: 10000; + // } + // } + // } + //} + .sp_grid__cell { + .sp_grid__node-container { + .sp_node__item:not(#node-form-coordinate-tracker) { + filter: grayscale(1); + } + &:before { + content: ''; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 10000; + } + } + } + &:not(.sp_worldmap_locked) { + //.sp_grid__container { + // .sp_grid__column { + // .sp_grid__map { + // filter: grayscale(1); + // } + // &:hover { + // filter: grayscale(0); + // .sp_grid__map { + // filter: grayscale(0); + // } + // } + // } + //} + .sp_grid__cell { + .sp_grid__map { + filter: grayscale(1); + } + &:hover { + filter: grayscale(0); + .sp_grid__map { + filter: grayscale(0); + } + } + } + } + &.sp_worldmap_locked { + //.sp_grid__container { + // .sp_grid__column { + // &:not(.sp_grid__active) { + // .sp_grid__map { + // filter: grayscale(1); + // } + // } + // } + //} + .sp_grid__cell { + &:not(.sp_grid__active) { + .sp_grid__map { + filter: grayscale(1); + } + } + } + } + } + .sp_node__item { + transform: translate(-50%, -50%); + } + } + #worldmap-filters { + .sp_panel__section { + max-height: 800px; + transition: max-height ease-in 250ms; + .sp_panel__section-title { + h2 { + span { + content: '▼'; + cursor: pointer; + height: 100%; + position: absolute; + right: -24px; + top: 0; + width: 24px; + transform: rotate(0deg); + transition: transform ease-in 250ms; + } + } + } + &.sp_panel__section-closed { + max-height: 34px; + transition: max-height ease-out 250ms; + .sp_panel__section-title { + h2 { + span { + transform: rotate(-90deg); + transition: transform ease-out 250ms; + } + } + } + } + } + .sp_worldmap-filter__section { + user-select: none; + } + .sp_form-row__radio { + max-width: unset; + width: 100%; + .sp_radio__input-wrapper { + background-color: transparent; + .sp_radio__input-icon { + left: 0; + } + .nodes_count { + bottom: 0; + font-size: 9px; + height: 9px; + line-height: 9px; + position: absolute; + left: 26px; + } + .sp_radio__input-label { + line-height: 20px; + margin: 4px 0 auto; + padding: 0 6px 0 0; + } + &:not(.sp_radio__checked) { + .nodes_count, .sp_radio__input-label { + color: $cl_gray + } + } + &.sp_radio__checked { + .nodes_count { + color: $cl_geo; + } + .sp_radio__input-label { + color: $cl_hydro; + } + } + } + } + .sp_button { + height: 24px; + margin: auto; + width: 24px; + span { + line-height: 16px; + padding: 0; + } + } + } + #node-form-coordinate-tracker { + z-index: 10001; + .sp_node__background { + opacity: 0.4; + } + } + #primogem-counter-container { + background: linear-gradient(185deg, $cl_ui_darker 20%, #2d548d 90%); + color: $cl_ui_light; + height: 64px; + display: flex; + flex-direction: column; + padding: 6px 20px; + h2 { + font-size: 16px; + line-height: 18px; + margin: 0; + } + img { + height: 32px; + margin-left: 6px; + width: 32px; + } + .sp_primogem__main-container { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + margin: auto; + > * { + display: flex; + flex-shrink: 0; + &:nth-child(1) { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + height: 32px; + > * { + &:first-child { + margin: auto 6px 0 auto; + } + } + } + &:nth-child(2) { + line-height: 18px; + height: 18px; + } + } + } + &.sp_primogem__complete { + img { + height: 48px; + margin: auto; + width: 48px; + } + .sp_primogem__main-container { + > * { + &:nth-child(1) { + height: 48px; + > * { + &:not(:last-child) { + display: none; + } + &:last-child { + + } + } + } + &:nth-child(2) { + display: none; + } + } + } + } + &:before { + background: url("./../static/stars.png") no-repeat center; + background-size: cover; + bottom: 0; + content: ''; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; + } + } + #primogem-counter { + font-family: ptsans_bold, sans-serif; + font-size: 28px; + height: 32px; + } + #grid-zoom-container { + background-color: rgba(0,0,0, 0.3); + border-radius: 10px; + display: grid; + font-size: 18px; + grid-template-columns: 20px; + grid-template-rows: 20px 160px 20px; + position: absolute; + right: 0; + top: 50%; + transform: translate(calc(-50% - 10px), -50%); + height: 200px; + width: 20px; + z-index: 2; + > span { + color: white; + display: block; + font-family: ptsans_bold, sans-serif; + height: 20px; + text-align: center; + width: 20px; + z-index: 1; + } + > input { + height: 20px; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(-90deg); + width: 160px; + z-index: 2; + } + } + + /* *** ID BACK *** */ + #main-section-container { + background-color: rgba($cl_ui_dark, 0.5); + display: flex; + flex-direction: column; + height: 100%; + margin: 20px auto; + max-width: 1000px; + padding: 16px 20px; + overflow: hidden; + width: 100%; + &.sp_section_container__horizontal { + flex-direction: row; + } + &:after { + border: 2px solid $cl_ui_light; + bottom: 0; + content: ""; + left: 0; + margin: 6px; + position: absolute; + right: 0; + top: 0; + z-index: -1; + } + } + #map-editor { + display: flex; + flex-direction: column; + height: 100%; + .sp_map_editor__header_container { + display: flex; + flex-direction: row; + > * { + display: block; + height: 38px; + line-height: 38px; + text-align: center; + img { + height: 100%; + } + &:not(:nth-child(2)) { + flex-shrink: 0; + width: 50px; + } + &:nth-child(2) { + flex-grow: 1; + &:before { + } + } + } + } + .sp_map_editor__grid_container { + height: 100%; + margin: 0 auto; + max-height: 700px; + max-width: 700px; + width: 100%; + } + .sp_grid__container { + display: grid; + grid-auto-flow: row; + grid-template-columns: repeat(var(--grid__width), 1fr); + grid-template-rows: repeat(var(--grid__height), 1fr); + //.sp_grid__row { + // display: grid; + // grid-auto-flow: column; + // grid-template-columns: repeat(var(--grid__width), 1fr); + //} + //.sp_grid__column { + // height: auto; + // padding-top: 100%; + // width: auto; + //} + } + } + + &.sp_app__is-touch-device { + .ul_nav__wrapper { + height: 64px; + .ul_nav { + flex-direction: column; + margin: 0; + padding: 0; + position: absolute; + right: 0; + top: 64px; + height: auto; + max-height: 0; + overflow-x: hidden; + overflow-y: scroll; + transition: max-height ease-out 250ms; + .ul_nav__head, .ul_nav__tail { + position: fixed; + top: 0; + z-index: 3; + &:after { + content: ''; + display: block; + position: absolute; + top: 0; + } + } + .ul_nav__head { + left: 0; + &:after { + border-top: 64px solid $cl_geo; + border-right: 16px solid $cl_ui_darker; + right: -16px; + } + } + .ul_nav__tail { + left: 96px; + &:after { + border-bottom: 64px solid $cl_geo; + border-left: 16px solid $cl_ui_darker; + left: -16px; + } + } + .ul_nav__item { + min-width: 240px; + max-width: 100vw; + width: auto; + } + > .ul_nav__item { + min-height: 64px; + max-height: unset; + height: auto; + &:nth-child(2), &:nth-last-child(2) { + > a { + &:after { + content: unset; + } + } + } + } + } + .ul_nav__sub-nav { + box-shadow: none; + max-height: unset; + transition: none; + .ul_nav__item { + } + } + &.sp_nav__nav-open { + .ul_nav { + max-height: 320px; + transition: max-height ease-in 350ms; + } + } + } + + #header-container { + padding: 0; + .sp_header__nav { + margin: 0 0 0 auto; + width: 0; + } + .sp_header__extra { + background-color: $cl_ui_darker; + border-radius: 32px; + bottom: 6px; + padding: 0 20px; + position: fixed; + right: 6px; + } + .sp_menu-btn { + position: absolute; + right: 0; + top: 0; + z-index: 100; + } + } + + &[data-device='mobile'] { + .sp_tooltip__wrapper { + max-height: 35vh; + bottom: 10px; + left: 50%; + position: fixed; + transform: translate(-50%, 0); + width: calc(100vw - 20px); + .sp_tooltip { + margin-bottom: 0; + .sp_tooltip__footer { + > .sp_tooltip__screenshot-container { + .sp_screenshot__container { + &:hover { + img { + animation: none; + } + } + } + } + } + &:before { + background: no-repeat center; + background-size: 70%; + content: ""; + filter: blur(4px); + height: 100%; + left: 0; + opacity: 0.3; + position: absolute; + top: 0; + width: 100%; + } + } + .sp_tooltip__cursor { + display: none; + } + } + + #main-left-container, #main-right-container { + width: calc(100vw - 40px); + } + #main-left-container { + &:not(.sp_panel__open) { + left: calc((100vw - 40px) * (-1)); + } + } + #main-right-container { + &:not(.sp_panel__open) { + right: calc((100vw - 40px) * (-1)); + } + } + #primogem-counter-container { + .sp_primogem__main-container { + margin: auto auto auto 0; + > * { + &:nth-child(1) { + > * { + &:first-child { + margin: auto 6px 0 0; + } + } + } + } + } + } + #grid-zoom-container { + top: 10px; + transform: translate(-50%, 0); + } + } + + &[data-device='tablet'] {} + } +} + +@keyframes loader_spin { + from { + transform: translate(-50%) rotate(0deg); + } + to { + transform: translate(-50%) rotate(360deg); + } +} + +@keyframes slime_eyes__move { + 0%, 10%, 90%, 100% { + left: 30%; + } + 40%, 60% { + left: 70%; + } +} + +@keyframes slime_eyes__blink { + 0%, 41%, 46%, 91%, 96%, 100% { + height: inherit; + } + 42%, 45%, 92%, 95% { + height: 2px; + } +} + +//noinspection CssInvalidFunction +@keyframes screenshot__rock { + 0% { + transform: scale(1.1) rotateZ(0deg); + } + 25% { + transform: scale(1.1) rotateZ(2deg); + } + 50% { + transform: scale(1.1) rotateZ(0deg); + } + 75% { + transform: scale(1.1) rotateZ(-2deg); + } + 100% { + transform: scale(1.1) rotateZ(0deg); + } +} \ No newline at end of file diff --git a/assets/font/ptsans-bold.woff b/assets/font/ptsans-bold.woff new file mode 100644 index 0000000..029e41e Binary files /dev/null and b/assets/font/ptsans-bold.woff differ diff --git a/assets/font/ptsans-bold.woff2 b/assets/font/ptsans-bold.woff2 new file mode 100644 index 0000000..d77e02f Binary files /dev/null and b/assets/font/ptsans-bold.woff2 differ diff --git a/assets/font/ptsans-bolditalic.woff b/assets/font/ptsans-bolditalic.woff new file mode 100644 index 0000000..db4be14 Binary files /dev/null and b/assets/font/ptsans-bolditalic.woff differ diff --git a/assets/font/ptsans-bolditalic.woff2 b/assets/font/ptsans-bolditalic.woff2 new file mode 100644 index 0000000..45849a6 Binary files /dev/null and b/assets/font/ptsans-bolditalic.woff2 differ diff --git a/assets/font/ptsans-italic.woff b/assets/font/ptsans-italic.woff new file mode 100644 index 0000000..bde76e0 Binary files /dev/null and b/assets/font/ptsans-italic.woff differ diff --git a/assets/font/ptsans-italic.woff2 b/assets/font/ptsans-italic.woff2 new file mode 100644 index 0000000..0c91565 Binary files /dev/null and b/assets/font/ptsans-italic.woff2 differ diff --git a/assets/font/ptsans-regular.woff b/assets/font/ptsans-regular.woff new file mode 100644 index 0000000..d2928da Binary files /dev/null and b/assets/font/ptsans-regular.woff differ diff --git a/assets/font/ptsans-regular.woff2 b/assets/font/ptsans-regular.woff2 new file mode 100644 index 0000000..8af08c1 Binary files /dev/null and b/assets/font/ptsans-regular.woff2 differ diff --git a/assets/img/background.jpg b/assets/img/background.jpg new file mode 100644 index 0000000..8aebd89 Binary files /dev/null and b/assets/img/background.jpg differ diff --git a/assets/js/Classes/Store.js b/assets/js/Classes/Store.js new file mode 100644 index 0000000..0f2660a --- /dev/null +++ b/assets/js/Classes/Store.js @@ -0,0 +1,98 @@ +export class Store { + /** @private {string} */ + #_storeName; + /** @private {boolean} */ + #_autoIncrement; + /** @private {string|Array} */ + #_keyPath; + /** @private {Object[]} */ + #_indexes; + + /** + * @param {string} storeName + * @param {boolean} autoIncrement + * @param {string|Array} keyPath + * @param {Object[]} indexes + */ + constructor(storeName, autoIncrement = true, keyPath = "id", indexes = []) { + this.#_storeName = storeName; + this.#_autoIncrement = autoIncrement; + this.#_keyPath = keyPath; + this.#_indexes = indexes; + } + + get storeName() { + return this.#_storeName; + } + + set storeName(value) { + this.#_storeName = value + } + + get autoIncrement() { + return this.#_autoIncrement; + } + + set autoIncrement(value) { + this.#_autoIncrement = value + } + + get keyPath() { + return this.#_keyPath; + } + + set keyPath(value) { + this.#_keyPath = value + } + + get indexes() { + return this.#_indexes; + } + + set indexes(value) { + this.#_indexes = value + } +} + +export class Index { + /** @private {string} */ + #_name; + /** @private {string} */ + #_keyPath; + /** @private {Object} */ + #_options = {}; + + /** + * @param {string} keyPath + * @param {boolean} isUnique + */ + constructor(keyPath, isUnique = false) { + this.#_name = keyPath; + this.#_keyPath = keyPath; + this.#_options = { unique: isUnique}; + } + + get name() { + return this.#_name; + } + + set name(value) { + this.#_name = value; + } + + get keyPath() { + return this.#_keyPath; + } + + set keyPath(value) { + this.#_keyPath = value; + } + + get options() { + return this.#_options; + } + + set options(value) { + this.#_options = value; + } +} \ No newline at end of file diff --git a/assets/js/Classes/Worldmap.js b/assets/js/Classes/Worldmap.js new file mode 100644 index 0000000..9fe6862 --- /dev/null +++ b/assets/js/Classes/Worldmap.js @@ -0,0 +1,338 @@ +export class Profile { + #__type = "class" + /** @private {string} */ + #_slug; + /** @private {string} */ + #_name; + /** @private {string} */ + #_server; + /** @private {boolean} */ + #_isActive; + + /** + * @param {string} slug + * @param {string} name + * @param {string} server + * @param {boolean} isActive + */ + constructor(slug = "", name = "", server = "eu", isActive = true) { + this.#_slug = slug; + this.#_name = name; + this.#_server = server; + this.#_isActive = isActive; + } + + get __type () { + return this.#__type; + } + + get slug() { + return this.#_slug; + } + + set slug(value) { + this.#_slug = value; + } + + get name() { + return this.#_name; + } + + set name(value) { + this.#_name = value; + } + + get server() { + return this.#_server; + } + + set server(value) { + this.#_server = value; + } + + get isActive() { + return this.#_isActive; + } + + set isActive(value) { + this.#_isActive = Boolean(value); + } + + /** + * @param {string} slug + * @param {string} name + * @param {string} server + * @param {boolean} isActive + */ + hydrate({slug, name, server, isActive}) { + this.slug = slug; + this.name = name; + this.server = server; + this.isActive = isActive; + } + + /** + * @return {{slug: string, name: string, server: string, isActive: number}} + */ + dehydrate() { + return { + slug: this.slug, + name: this.name, + server: this.server, + isActive: Number(this.isActive) + } + } +} + +export class Region { + #__type = "class"; + /** @private {string} */ + #_slug; + /** @private {string} */ + #_name; + /** @private {number} */ + #_scrollLeft; + /** @private {number} */ + #_scrollTop; + /** @private {number} */ + #_zoomLevel; + + /** + * @param {string} slug + * @param {string} name + * @param {number} scrollLeft + * @param {number} scrollTop + * @param {number} zoomLevel + */ + constructor(slug, name, scrollLeft = 50, scrollTop = 50, zoomLevel = 8) { + this.#_slug = slug; + this.#_name = name; + this.#_scrollLeft = scrollLeft; + this.#_scrollTop = scrollTop; + this.#_zoomLevel = zoomLevel; + } + + get __type () { + return this.#__type; + } + + get slug() { + return this.#_slug; + } + + set slug(value) { + this.#_slug = value; + } + + get name() { + return this.#_name; + } + + set name(value) { + this.#_name = value; + } + + get scrollLeft() { + return this.#_scrollLeft; + } + + set scrollLeft(value) { + this.#_scrollLeft = Number(value); + } + + get scrollTop() { + return this.#_scrollTop; + } + + set scrollTop(value) { + this.#_scrollTop = Number(value); + } + + get zoomLevel() { + return this.#_zoomLevel; + } + + set zoomLevel(value) { + this.#_zoomLevel = Number(value); + } + + /** + * @param {string} slug + * @param {string} name + * @param {number} scrollLeft + * @param {number} scrollTop + * @param {number} zoomLevel + */ + hydrate({slug, name, scrollLeft, scrollTop, zoomLevel}) { + this.slug = slug; + this.name = name; + this.scrollLeft = scrollLeft; + this.scrollTop = scrollTop; + this.zoomLevel = zoomLevel; + } + + /** + * @return {{slug: string, name: string, scrollLeft: number, scrollTop: number, zoomLevel: number}} + */ + dehydrate() { + return { + slug: this.slug, + name: this.name, + scrollLeft: Number(this.scrollLeft), + scrollTop: Number(this.scrollTop), + zoomLevel: Number(this.zoomLevel) + } + } +} + +export class Filter { + #__type = "class"; + /** @private {string} */ + #_region; + /** @private {string} */ + #_slug; + /** @private {boolean} */ + #_isActive; + + /** + * @param {string} region + * @param {string} slug + * @param {boolean} isActive + */ + constructor(region, slug, isActive=false) { + this.#_region = region; + this.#_slug = slug; + this.#_isActive = isActive; + } + + get __type () { + return this.#__type; + } + + get slug() { + return this.#_slug; + } + + set slug(value) { + this.#_slug = value; + } + + get region() { + return this.#_region; + } + + set region(value) { + this.#_region = value; + } + + get isActive() { + return this.#_isActive; + } + + set isActive(value) { + this.#_isActive = Boolean(value); + } + + /** + * @param {string} region + * @param {string} slug + * @param {boolean} isActive + */ + hydrate({region, slug, isActive}) { + this.region = region + this.slug = slug + this.isActive = isActive; + } + + /** + * @return {{region: string, slug: string, isActive: number}} + */ + dehydrate() { + return { + region: this.region, + slug: this.slug, + isActive: Number(this.isActive) + } + } +} + +export class Node { + #__type = "class"; + /** @private {string} */ + #_profile; + /** @private {string} */ + #_region; + /** @private {string} */ + #_domId; + /** @private {boolean} */ + #_isHidden; + + constructor(profile, id, region, isHidden) { + this.#_profile = profile; + this.#_domId = id; + this.#_region = region; + this.#_isHidden = isHidden; + + } + + get __type () { + return this.#__type; + } + + get profile() { + return this.#_profile; + } + + set profile(value) { + this.#_profile = value; + } + + get region() { + return this.#_region; + } + + set region(value) { + this.#_region = value; + } + + get domId() { + return this.#_domId; + } + + set domId(value) { + this.#_domId = value; + } + + get isHidden() { + return this.#_isHidden; + } + + set isHidden(value) { + this.#_isHidden = Boolean(value); + } + + /** + * @param {string} profile + * @param {string} domId + * @param {string} region + * @param {boolean} isHidden + */ + hydrate({profile, domId, region, isHidden}) { + this.profile = profile; + this.domId = domId; + this.region = region; + this.isHidden = isHidden; + } + + /** + * @return {{profile: string, domId: string, region: string, isHidden: number}} + */ + dehydrate() { + return { + profile: this.profile, + domId: this.domId, + region: this.region, + isHidden: Number(this.isHidden) + } + } +} \ No newline at end of file diff --git a/assets/js/idb_stores.js b/assets/js/idb_stores.js new file mode 100644 index 0000000..994558f --- /dev/null +++ b/assets/js/idb_stores.js @@ -0,0 +1,15 @@ +import {Store, Index} from "./Classes/Store"; + + +export const IDB_stores = { + ProfileStore: new Store("profile", false, "slug", [ + new Index("isActive", false) + ]), + RegionStore: new Store("region", false, "slug"), + FilterStore: new Store("filter", false, ["region", "slug"], [ + new Index("region", false) + ]), + NodeStore: new Store("node", false, ["profile", "domId"], [ + new Index("region", false) + ]), +}; \ No newline at end of file diff --git a/assets/js/statics.js b/assets/js/statics.js new file mode 100644 index 0000000..35a73fc --- /dev/null +++ b/assets/js/statics.js @@ -0,0 +1 @@ +export const STATIC_ENV = "prod"; \ No newline at end of file diff --git a/assets/js/stores.js b/assets/js/stores.js new file mode 100644 index 0000000..8d189b5 --- /dev/null +++ b/assets/js/stores.js @@ -0,0 +1,35 @@ +const WorldmapFilterStore = { + autoIncrement: false, + keyPath: "id", + storeName: "worldmapFilter", + // __construct: { + // id: "", + // filters: {}, + // }, + _filters: {}, + storeObjects: {} +}; + +const WorldmapStore = { + autoIncrement: false, + keyPath: "id", + storeName: "worldmap", + _region: { + id: "", + name: "", + scrollLeft: 50, + scrollTop: 50, + zoomLevel: 1, + } +}; + +// const NodeStore = { +// storeName: "node", +// keyPath: "id", +// autoIncrement: false +// } + +export const IDB_stores = { + WorldmapFilterStore, + WorldmapStore +}; \ No newline at end of file diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..c933dc5 --- /dev/null +++ b/bin/console @@ -0,0 +1,17 @@ +#!/usr/bin/env php +=8.4", + "ext-ctype": "*", + "ext-iconv": "*", + "ext-imagick": "*", + "doctrine/annotations": "^1.0", + "doctrine/doctrine-bundle": "^2.5", + "doctrine/doctrine-migrations-bundle": "^3.2", + "doctrine/orm": "^2.11", + "mobiledetect/mobiledetectlib": "^2.8", + "phpdocumentor/reflection-docblock": "^5.3", + "phpstan/phpdoc-parser": "^1.2", + "ramsey/uuid": "^4.2", + "sensio/framework-extra-bundle": "^6.1", + "symfony/asset": "5.4.*", + "symfony/console": "5.4.*", + "symfony/doctrine-messenger": "5.4.*", + "symfony/dotenv": "5.4.*", + "symfony/expression-language": "5.4.*", + "symfony/flex": "^1.17|^2", + "symfony/form": "5.4.*", + "symfony/framework-bundle": "5.4.*", + "symfony/http-client": "5.4.*", + "symfony/intl": "5.4.*", + "symfony/mailer": "5.4.*", + "symfony/mime": "5.4.*", + "symfony/monolog-bundle": "^3.0", + "symfony/notifier": "5.4.*", + "symfony/process": "5.4.*", + "symfony/property-access": "5.4.*", + "symfony/property-info": "5.4.*", + "symfony/proxy-manager-bridge": "5.4.*", + "symfony/runtime": "5.4.*", + "symfony/security-bundle": "5.4.*", + "symfony/serializer": "5.4.*", + "symfony/string": "5.4.*", + "symfony/translation": "5.4.*", + "symfony/twig-bundle": "5.4.*", + "symfony/validator": "5.4.*", + "symfony/web-link": "5.4.*", + "symfony/webapp-meta": "^1.0", + "symfony/webpack-encore-bundle": "^1.12", + "symfony/yaml": "5.4.*", + "twig/extra-bundle": "^2.12|^3.0", + "twig/twig": "^2.12|^3.0" + }, + "require-dev": { + "symfony/debug-bundle": "5.4.*", + "symfony/maker-bundle": "^1.0", + "symfony/stopwatch": "5.4.*", + "symfony/web-profiler-bundle": "5.4.*" + }, + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true, + "symfony/flex": true, + "symfony/runtime": true + }, + "optimize-autoloader": true, + "preferred-install": { + "*": "dist" + }, + "sort-packages": true + }, + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/" + } + }, + "replace": { + "symfony/polyfill-ctype": "*", + "symfony/polyfill-iconv": "*", + "symfony/polyfill-php72": "*" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" + }, + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ] + }, + "conflict": { + "symfony/symfony": "*" + }, + "extra": { + "symfony": { + "allow-contrib": false, + "require": "5.4.*", + "docker": false + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..05cfab7 --- /dev/null +++ b/composer.lock @@ -0,0 +1,8809 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "c68b83bd8f38a36738cba2684c2af070", + "packages": [ + { + "name": "brick/math", + "version": "0.12.3", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "6.8.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.12.3" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2025-02-28T13:11:00+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.14.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", + "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1 || ^2", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "~1.4.10 || ^1.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.14.4" + }, + "time": "2024-09-05T10:15:52+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:07:39+00:00" + }, + { + "name": "doctrine/collections", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2eb07e5953eed811ce1b309a7478a3b236f2273d", + "reference": "2eb07e5953eed811ce1b309a7478a3b236f2273d", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1", + "php": "^8.1", + "symfony/polyfill-php84": "^1.30" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/2.3.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", + "type": "tidelift" + } + ], + "time": "2025-03-22T10:17:19+00:00" + }, + { + "name": "doctrine/common", + "version": "3.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/d9ea4a54ca2586db781f0265d36bea731ac66ec5", + "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5", + "shasum": "" + }, + "require": { + "doctrine/persistence": "^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0 || ^10.0", + "doctrine/collections": "^1", + "phpstan/phpstan": "^1.4.1", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.0", + "symfony/phpunit-bridge": "^6.1", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", + "homepage": "https://www.doctrine-project.org/projects/common.html", + "keywords": [ + "common", + "doctrine", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.5.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", + "type": "tidelift" + } + ], + "time": "2025-01-01T22:12:03+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.9.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.22", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.9.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2025-01-16T08:28:55+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.13.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "aac7562c96d117e16cbadfe41bef17d2fc760f74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/aac7562c96d117e16cbadfe41bef17d2fc760f74", + "reference": "aac7562c96d117e16cbadfe41bef17d2fc760f74", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/persistence": "^2.2 || ^3", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.4 || ^8.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^5.4.46 || ~6.3.12 || ^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + }, + "conflict": { + "doctrine/annotations": ">=3.0", + "doctrine/orm": "<2.17 || >=4.0", + "twig/twig": "<1.34 || >=2.0 <2.4" + }, + "require-dev": { + "doctrine/annotations": "^1 || ^2", + "doctrine/coding-standard": "^12", + "doctrine/deprecations": "^1.0", + "doctrine/orm": "^2.17 || ^3.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^9.5.26", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/phpunit-bridge": "^6.1 || ^7.0", + "symfony/property-info": "^5.4 || ^6.0 || ^7.0", + "symfony/proxy-manager-bridge": "^5.4 || ^6.0", + "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/string": "^5.4 || ^6.0 || ^7.0", + "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/validator": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", + "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0", + "twig/twig": "^1.34 || ^2.12 || ^3.0" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "ext-pdo": "*", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2025-03-16T10:55:20+00:00" + }, + { + "name": "doctrine/doctrine-migrations-bundle", + "version": "3.4.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", + "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5a6ac7120c2924c4c070a869d08b11ccf9e277b9", + "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "^2.4", + "doctrine/migrations": "^3.2", + "php": "^7.2 || ^8.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.6 || ^3", + "phpstan/phpstan": "^1.4 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpstan/phpstan-symfony": "^1.3 || ^2", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/phpunit-bridge": "^6.3 || ^7", + "symfony/var-exporter": "^5.4 || ^6 || ^7" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\MigrationsBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineMigrationsBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "dbal", + "migrations", + "schema" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2025-03-11T17:36:26+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3 || ^1", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2022-10-12T20:51:15+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2024-02-18T20:23:39+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.1.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:35:39+00:00" + }, + { + "name": "doctrine/migrations", + "version": "3.9.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "325b61e41d032f5f7d7e2d11cbefff656eadc9ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/325b61e41d032f5f7d7e2d11cbefff656eadc9ab", + "reference": "325b61e41d032f5f7d7e2d11cbefff656eadc9ab", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.6 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", + "psr/log": "^1.1.3 || ^2 || ^3", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/var-exporter": "^6.2 || ^7.0" + }, + "conflict": { + "doctrine/orm": "<2.12 || >=4" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/orm": "^2.13 || ^3", + "doctrine/persistence": "^2 || ^3 || ^4", + "doctrine/sql-formatter": "^1.0", + "ext-pdo_sqlite": "*", + "fig/log-test": "^1", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-strict-rules": "^1.4", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpunit": "^10.3", + "symfony/cache": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "symfony/yaml": "Allows the use of yaml for migration configuration files." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Migrations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Michael Simonson", + "email": "contact@mikesimonson.com" + } + ], + "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", + "homepage": "https://www.doctrine-project.org/projects/migrations.html", + "keywords": [ + "database", + "dbal", + "migrations" + ], + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/3.9.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2025-03-26T06:48:45+00:00" + }, + { + "name": "doctrine/orm", + "version": "2.20.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "17d28b5c4cac212ca92730d9a26e32a0b1516126" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/17d28b5c4cac212ca92730d9a26e32a0b1516126", + "reference": "17d28b5c4cac212ca92730d9a26e32a0b1516126", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.12.1 || ^2.1.1", + "doctrine/collections": "^1.5 || ^2.1", + "doctrine/common": "^3.0.3", + "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", + "doctrine/inflector": "^1.4 || ^2.0", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^2 || ^3", + "doctrine/persistence": "^2.4 || ^3", + "ext-ctype": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.13 || >= 3.0" + }, + "require-dev": { + "doctrine/annotations": "^1.13 || ^2", + "doctrine/coding-standard": "^9.0.2 || ^13.0", + "phpbench/phpbench": "^0.16.10 || ^1.0", + "phpstan/extension-installer": "~1.1.0 || ^1.4", + "phpstan/phpstan": "~1.4.10 || 2.0.3", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.12.0", + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", + "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + }, + "bin": [ + "bin/doctrine" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/2.20.3" + }, + "time": "2025-05-02T17:07:53+00:00" + }, + { + "name": "doctrine/persistence", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/0ea965320cec355dba75031c1b23d4c78362e3ff", + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "doctrine/common": "<2.10" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.12.7", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5.38 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Persistence\\": "src/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/3.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2024-10-30T19:48:12+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + }, + "time": "2025-01-24T11:45:48+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "friendsofphp/proxy-manager-lts", + "version": "v1.0.18", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", + "reference": "2c8a6cffc3220e99352ad958fe7cf06bf6f7690f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/2c8a6cffc3220e99352ad958fe7cf06bf6f7690f", + "reference": "2c8a6cffc3220e99352ad958fe7cf06bf6f7690f", + "shasum": "" + }, + "require": { + "laminas/laminas-code": "~3.4.1|^4.0", + "php": ">=7.1", + "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0" + }, + "conflict": { + "laminas/laminas-stdlib": "<3.2.1", + "zendframework/zend-stdlib": "<3.2.1" + }, + "replace": { + "ocramius/proxy-manager": "^2.1" + }, + "require-dev": { + "ext-phar": "*", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/Ocramius/ProxyManager", + "name": "ocramius/proxy-manager" + } + }, + "autoload": { + "psr-4": { + "ProxyManager\\": "src/ProxyManager" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + } + ], + "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", + "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", + "keywords": [ + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" + ], + "support": { + "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.18" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2024-03-20T12:50:41+00:00" + }, + { + "name": "laminas/laminas-code", + "version": "4.16.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-code.git", + "reference": "1793e78dad4108b594084d05d1fb818b85b110af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1793e78dad4108b594084d05d1fb818b85b110af", + "reference": "1793e78dad4108b594084d05d1fb818b85b110af", + "shasum": "" + }, + "require": { + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0.1", + "ext-phar": "*", + "laminas/laminas-coding-standard": "^3.0.0", + "laminas/laminas-stdlib": "^3.18.0", + "phpunit/phpunit": "^10.5.37", + "psalm/plugin-phpunit": "^0.19.0", + "vimeo/psalm": "^5.15.0" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "laminas/laminas-stdlib": "Laminas\\Stdlib component" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Code\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", + "homepage": "https://laminas.dev", + "keywords": [ + "code", + "laminas", + "laminasframework" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-code/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-code/issues", + "rss": "https://github.com/laminas/laminas-code/releases.atom", + "source": "https://github.com/laminas/laminas-code" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2024-11-20T13:15:13+00:00" + }, + { + "name": "mobiledetect/mobiledetectlib", + "version": "2.8.45", + "source": { + "type": "git", + "url": "https://github.com/serbanghita/Mobile-Detect.git", + "reference": "96aaebcf4f50d3d2692ab81d2c5132e425bca266" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/96aaebcf4f50d3d2692ab81d2c5132e425bca266", + "reference": "96aaebcf4f50d3d2692ab81d2c5132e425bca266", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36" + }, + "type": "library", + "autoload": { + "psr-0": { + "Detection": "namespaced/" + }, + "classmap": [ + "Mobile_Detect.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Serban Ghita", + "email": "serbanghita@gmail.com", + "homepage": "http://mobiledetect.net", + "role": "Developer" + } + ], + "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.", + "homepage": "https://github.com/serbanghita/Mobile-Detect", + "keywords": [ + "detect mobile devices", + "mobile", + "mobile detect", + "mobile detector", + "php mobile detect" + ], + "support": { + "issues": "https://github.com/serbanghita/Mobile-Detect/issues", + "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.45" + }, + "funding": [ + { + "url": "https://github.com/serbanghita", + "type": "github" + } + ], + "time": "2023-11-07T21:57:25+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.38 || ^9.6.19", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-11-12T12:43:37+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", + "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" + }, + "time": "2025-04-13T19:20:35+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + }, + "time": "2024-11-09T15:12:26+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.33.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" + }, + "time": "2024-10-13T11:25:22+00:00" + }, + { + "name": "psr/cache", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", + "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/2.0.0" + }, + "time": "2021-02-03T23:23:37+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/link", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/846c25f58a1f02b93a00f2404e3626b6bf9b7807", + "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for HTTP links", + "homepage": "https://github.com/php-fig/link", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "support": { + "source": "https://github.com/php-fig/link/tree/1.1.1" + }, + "time": "2021-03-11T22:59:13+00:00" + }, + { + "name": "psr/log", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/2.0.0" + }, + "time": "2021-07-14T16:41:46+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.6", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.6" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2024-04-27T21:32:50+00:00" + }, + { + "name": "sensio/framework-extra-bundle", + "version": "v6.2.10", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/2f886f4b31f23c76496901acaedfedb6936ba61f", + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0|^2.0", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0" + }, + "conflict": { + "doctrine/doctrine-cache-bundle": "<1.3.1", + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/dbal": "^2.10|^3.0", + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.5", + "symfony/browser-kit": "^4.4|^5.0|^6.0", + "symfony/doctrine-bridge": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/monolog-bridge": "^4.0|^5.0|^6.0", + "symfony/monolog-bundle": "^3.2", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", + "symfony/security-bundle": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "6.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" + }, + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "This bundle provides a way to configure your controllers with annotations", + "keywords": [ + "annotations", + "controllers" + ], + "support": { + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.10" + }, + "abandoned": "Symfony", + "time": "2023-02-24T14:57:12+00:00" + }, + { + "name": "symfony/amqp-messenger", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/amqp-messenger.git", + "reference": "822ad5f425ef362580273a175c45aa765220fe73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/822ad5f425ef362580273a175c45aa765220fe73", + "reference": "822ad5f425ef362580273a175c45aa765220fe73", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/messenger": "^5.3|^6.0" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "type": "symfony-messenger-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Amqp\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony AMQP extension Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/amqp-messenger/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/asset", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "b7a18eaff1d717c321b4f13403413f8815bf9cb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/b7a18eaff1d717c321b4f13403413f8815bf9cb0", + "reference": "b7a18eaff1d717c321b4f13403413f8815bf9cb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/http-foundation": "<5.3" + }, + "require-dev": { + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/http-foundation": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-22T13:05:35+00:00" + }, + { + "name": "symfony/cache", + "version": "v5.4.46", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/0fe08ee32cec2748fbfea10c52d3ee02049e0f6b", + "reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.4.46" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-04T11:43:55+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e", + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/config", + "version": "v5.4.46", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "977c88a02d7d3f16904a81907531b19666a08e78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/977c88a02d7d3f16904a81907531b19666a08e78", + "reference": "977c88a02d7d3f16904a81907531b19666a08e78", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v5.4.46" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-30T07:58:02+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-06T11:30:55+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", + "reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<5.3", + "symfony/finder": "<4.4", + "symfony/proxy-manager-bridge": "<4.4", + "symfony/yaml": "<4.4.26" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0|2.0" + }, + "require-dev": { + "symfony/config": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4.26|^5.0|^6.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-20T10:51:57+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "43ed5e31c9188e4f4d3845d16986db4a86644eef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/43ed5e31c9188e4f4d3845d16986db4a86644eef", + "reference": "43ed5e31c9188e4f4d3845d16986db4a86644eef", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "~1.0", + "doctrine/persistence": "^2|^3", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.7.4", + "symfony/cache": "<5.4", + "symfony/dependency-injection": "<4.4", + "symfony/form": "<5.4.38|>=6,<6.4.6", + "symfony/http-kernel": "<5", + "symfony/messenger": "<4.4", + "symfony/property-info": "<5", + "symfony/proxy-manager-bridge": "<4.4.19", + "symfony/security-bundle": "<5", + "symfony/security-core": "<5.3", + "symfony/validator": "<5.4.25|>=6,<6.2.12|>=6.3,<6.3.1" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4|^2", + "doctrine/collections": "^1.0|^2.0", + "doctrine/data-fixtures": "^1.1|^2", + "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/orm": "^2.7.4|^3", + "psr/log": "^1|^2|^3", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/doctrine-messenger": "^5.1|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/form": "^5.4.38|^6.4.6", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/property-info": "^5.0|^6.0", + "symfony/proxy-manager-bridge": "^4.4|^5.0|^6.0", + "symfony/security-core": "^5.3|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^6.0", + "symfony/validator": "^5.4.25|~6.2.12|^6.3.1", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "doctrine/data-fixtures": "", + "doctrine/dbal": "", + "doctrine/orm": "", + "symfony/form": "", + "symfony/property-info": "", + "symfony/validator": "" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Doctrine with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-20T10:49:45+00:00" + }, + { + "name": "symfony/doctrine-messenger", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-messenger.git", + "reference": "3f5a6e1876fbf57e836ba0a02eb0a636e08c0d96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/3f5a6e1876fbf57e836ba0a02eb0a636e08c0d96", + "reference": "3f5a6e1876fbf57e836ba0a02eb0a636e08c0d96", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/messenger": "^5.1|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "doctrine/dbal": "<2.13", + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/dbal": "^2.13|^3|^4", + "doctrine/persistence": "^1.3|^2|^3", + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "type": "symfony-messenger-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Doctrine Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-messenger/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "08013403089c8a126c968179179b817a552841ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/08013403089c8a126c968179179b817a552841ab", + "reference": "08013403089c8a126c968179179b817a552841ab", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T09:33:00+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.4.46", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/d19ede7a2cafb386be9486c580649d0f9e3d0363", + "reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.4.46" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-05T14:17:06+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9", + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "a784b66edc4c151eb05076d04707906ee2c209a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/a784b66edc4c151eb05076d04707906ee2c209a9", + "reference": "a784b66edc4c151eb05076d04707906ee2c209a9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an engine that can compile and evaluate expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/expression-language/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-04T14:55:40+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54", + "reference": "57c8294ed37d4a055b77057827c67f9558c95c54", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/process": "^5.4|^6.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-22T13:05:35+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "63741784cd7b9967975eec610b256eed3ede022b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-28T13:32:08+00:00" + }, + { + "name": "symfony/flex", + "version": "v2.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "5d743b3b78fabe9f3146586d77b0a1f9292851fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/5d743b3b78fabe9f3146586d77b0a1f9292851fc", + "reference": "5d743b3b78fabe9f3146586d77b0a1f9292851fc", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.1", + "php": ">=8.0" + }, + "conflict": { + "composer/semver": "<1.7.2" + }, + "require-dev": { + "composer/composer": "^2.1", + "symfony/dotenv": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v2.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-05-23T11:41:40+00:00" + }, + { + "name": "symfony/form", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "c1974a723cdee8a273cb49ce13fada5c1667706a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/c1974a723cdee8a273cb49ce13fada5c1667706a", + "reference": "c1974a723cdee8a273cb49ce13fada5c1667706a", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/options-resolver": "^5.1|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.23", + "symfony/property-access": "^5.0.8|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/console": "<4.4", + "symfony/dependency-injection": "<4.4", + "symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7", + "symfony/error-handler": "<4.4.5", + "symfony/framework-bundle": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3", + "symfony/translation-contracts": "<1.1.7", + "symfony/twig-bridge": "<5.4.21|>=6,<6.2.7" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/security-csrf": "^4.4|^5.0|^6.0", + "symfony/translation": "^5.4.35|~6.3.12|^6.4.3", + "symfony/uid": "^5.1|^6.0", + "symfony/validator": "^4.4.17|^5.1.9|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/security-csrf": "For protecting forms against CSRF attacks.", + "symfony/twig-bridge": "For templating with Twig.", + "symfony/validator": "For form validation." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows to easily create, process and reuse HTML forms", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-08T07:27:17+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "3d70f14176422d4d8ee400b6acae4e21f7c25ca2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3d70f14176422d4d8ee400b6acae4e21f7c25ca2", + "reference": "3d70f14176422d4d8ee400b6acae4e21f7c25ca2", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/cache": "^5.2|^6.0", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^5.4.44|^6.0.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4.1|^5.0.1|^6.0", + "symfony/event-dispatcher": "^5.1|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^5.4.24|^6.2.11", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/routing": "^5.3|^6.0" + }, + "conflict": { + "doctrine/annotations": "<1.13.1", + "doctrine/cache": "<1.11", + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/asset": "<5.3", + "symfony/console": "<5.2.5|>=7.0", + "symfony/dom-crawler": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/form": "<5.2", + "symfony/http-client": "<4.4", + "symfony/lock": "<4.4", + "symfony/mailer": "<5.2", + "symfony/messenger": "<5.4", + "symfony/mime": "<4.4", + "symfony/property-access": "<5.3", + "symfony/property-info": "<4.4", + "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6", + "symfony/security-csrf": "<5.3", + "symfony/serializer": "<5.2", + "symfony/service-contracts": ">=3.0", + "symfony/stopwatch": "<4.4", + "symfony/translation": "<5.3", + "symfony/twig-bridge": "<4.4", + "symfony/twig-bundle": "<4.4", + "symfony/validator": "<5.3.11", + "symfony/web-profiler-bundle": "<4.4", + "symfony/workflow": "<5.2" + }, + "require-dev": { + "doctrine/annotations": "^1.13.1|^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/persistence": "^1.3|^2|^3", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.3|^6.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4.9|^6.0.9", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0", + "symfony/dotenv": "^5.1|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/form": "^5.2|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/mailer": "^5.2|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/notifier": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/property-info": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0", + "symfony/security-bundle": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/string": "^5.0|^6.0", + "symfony/translation": "^5.3|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "symfony/validator": "^5.3.11|^6.0", + "symfony/web-link": "^4.4|^5.0|^6.0", + "symfony/workflow": "^5.2|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", + "twig/twig": "^2.10|^3.0.4" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-22T13:05:35+00:00" + }, + { + "name": "symfony/http-client", + "version": "v5.4.49", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "d77d8e212cde7b5c4a64142bf431522f19487c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/d77d8e212cde7b5c4a64142bf431522f19487c28", + "reference": "d77d8e212cde7b5c4a64142bf431522f19487c28", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-client-contracts": "^2.5.4", + "symfony/polyfill-php73": "^1.11", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.0|^2|^3" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "2.4" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4|^2.0", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "php-http/message-factory": "^1.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v5.4.49" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-28T08:37:04+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.5.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "48ef1d0a082885877b664332b9427662065a360c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/48ef1d0a082885877b664332b9427662065a360c", + "reference": "48ef1d0a082885877b664332b9427662065a360c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-28T08:37:04+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f38b8af283b830e1363acd79e5bc3412d055341", + "reference": "3f38b8af283b830e1363acd79e5bc3412d055341", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "^1.0|^2.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-13T18:58:02+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0", + "reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/var-dumper": "^4.4.31|^5.4", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T12:43:17+00:00" + }, + { + "name": "symfony/intl", + "version": "v5.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "5258476a3ab680cd633a1d23130fcc9e8027e3ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/5258476a3ab680cd633a1d23130fcc9e8027e3ff", + "reference": "5258476a3ab680cd633a1d23130fcc9e8027e3ff", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/", + "/Resources/data/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v5.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-08T08:12:23+00:00" + }, + { + "name": "symfony/mailer", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "f732e1fafdf0f4a2d865e91f1018aaca174aeed9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f732e1fafdf0f4a2d865e91f1018aaca174aeed9", + "reference": "f732e1fafdf0f4a2d865e91f1018aaca174aeed9", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=7.2.5", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/mime": "^5.2.6|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<4.4" + }, + "require-dev": { + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/messenger", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "c21d463ba813a3fe9833f46114310fac99bd66e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/c21d463ba813a3fe9833f46114310fac99bd66e0", + "reference": "c21d463ba813a3fe9833f46114310fac99bd66e0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/amqp-messenger": "^5.1|^6.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/doctrine-messenger": "^5.1|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/redis-messenger": "^5.1|^6.0" + }, + "conflict": { + "symfony/event-dispatcher": "<4.4", + "symfony/framework-bundle": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/serializer": "<5.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/serializer": "^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/validator": "^4.4|^5.0|^6.0" + }, + "suggest": { + "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps applications send and receive messages to/from other applications or via message queues", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/8c1b9b3e5b52981551fc6044539af1d974e39064", + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4", + "symfony/serializer": "<5.4.35|>=6,<6.3.12|>=6.4,<6.4.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.4", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-23T20:18:32+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "cf7d75d4d64a41fbb1c0e92301bec404134fa84b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/cf7d75d4d64a41fbb1c0e92301bec404134fa84b", + "reference": "cf7d75d4d64a41fbb1c0e92301bec404134fa84b", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1|^2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.3|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/console": "<4.4", + "symfony/http-foundation": "<5.3" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/mailer": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/security-core": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", + "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", + "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Monolog with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-10T06:37:45+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", + "php": ">=7.2.5", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", + "symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^6.3 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony MonologBundle", + "homepage": "https://symfony.com", + "keywords": [ + "log", + "logging" + ], + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-11-06T17:08:13+00:00" + }, + { + "name": "symfony/notifier", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/notifier.git", + "reference": "d3c9c31224684ab10a4b9614aaf21985b2e0d41b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/notifier/zipball/d3c9c31224684ab10a4b9614aaf21985b2e0d41b", + "reference": "d3c9c31224684ab10a4b9614aaf21985b2e0d41b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/discord-notifier": "<5.3", + "symfony/esendex-notifier": "<5.3", + "symfony/firebase-notifier": "<5.3", + "symfony/free-mobile-notifier": "<5.3", + "symfony/google-chat-notifier": "<5.3", + "symfony/http-kernel": "<4.4", + "symfony/infobip-notifier": "<5.3", + "symfony/linked-in-notifier": "<5.3", + "symfony/mattermost-notifier": "<5.3", + "symfony/mobyt-notifier": "<5.3", + "symfony/nexmo-notifier": "<5.3", + "symfony/ovh-cloud-notifier": "<5.3", + "symfony/rocket-chat-notifier": "<5.3", + "symfony/sendinblue-notifier": "<5.3", + "symfony/sinch-notifier": "<5.3", + "symfony/slack-notifier": "<5.3", + "symfony/sms77-notifier": "<5.3", + "symfony/smsapi-notifier": "<5.3", + "symfony/telegram-notifier": "<5.3", + "symfony/twilio-notifier": "<5.3", + "symfony/zulip-notifier": "<5.3" + }, + "require-dev": { + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/http-client-contracts": "^2|^3", + "symfony/messenger": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Notifier\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Sends notifications via one or more channels (email, SMS, ...)", + "homepage": "https://symfony.com", + "keywords": [ + "notification", + "notifier" + ], + "support": { + "source": "https://github.com/symfony/notifier/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", + "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/password-hasher", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/password-hasher.git", + "reference": "6c5993b24505f98b90ca4896448012bbec54c7c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/6c5993b24505f98b90ca4896448012bbec54c7c8", + "reference": "6c5993b24505f98b90ca4896448012bbec54c7c8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/security-core": "<5.3" + }, + "require-dev": { + "symfony/console": "^5.3|^6.0", + "symfony/security-core": "^5.3|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PasswordHasher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides password hashing utilities", + "homepage": "https://symfony.com", + "keywords": [ + "hashing", + "password" + ], + "support": { + "source": "https://github.com/symfony/password-hasher/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "763d2a91fea5681509ca01acbc1c5e450d127811" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811", + "reference": "763d2a91fea5681509ca01acbc1c5e450d127811", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Icu\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-21T18:38:29+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "000df7860439609837bbe28670b0be15783b7fbf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/000df7860439609837bbe28670b0be15783b7fbf", + "reference": "000df7860439609837bbe28670b0be15783b7fbf", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.32.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-02-20T12:04:08+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d", + "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-06T11:36:42+00:00" + }, + { + "name": "symfony/property-access", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "111e7ed617509f1a9139686055d234aad6e388e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/111e7ed617509f1a9139686055d234aad6e388e0", + "reference": "111e7ed617509f1a9139686055d234aad6e388e0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/property-info": "^5.2|^6.0" + }, + "require-dev": { + "symfony/cache": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/property-info", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "a0396295ad585f95fccd690bc6a281e5bd303902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/a0396295ad585f95fccd690bc6a281e5bd303902", + "reference": "a0396295ad585f95fccd690bc6a281e5bd303902", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4|^2", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "suggest": { + "phpdocumentor/reflection-docblock": "To use the PHPDoc", + "psr/cache-implementation": "To cache results", + "symfony/doctrine-bridge": "To use Doctrine metadata", + "symfony/serializer": "To use Serializer metadata" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-25T16:14:41+00:00" + }, + { + "name": "symfony/proxy-manager-bridge", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/proxy-manager-bridge.git", + "reference": "e96cd37f3de0b75ff32f6b79c180ba77c4037eec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/e96cd37f3de0b75ff32f6b79c180ba77c4037eec", + "reference": "e96cd37f3de0b75ff32f6b79c180ba77c4037eec", + "shasum": "" + }, + "require": { + "friendsofphp/proxy-manager-lts": "^1.0.2", + "php": ">=7.2.5", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/config": "^4.4|^5.0|^6.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\ProxyManager\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for ProxyManager with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/redis-messenger", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/redis-messenger.git", + "reference": "a097e8c6529a7179a732161bd5368629c6319899" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/a097e8c6529a7179a732161bd5368629c6319899", + "reference": "a097e8c6529a7179a732161bd5368629c6319899", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/messenger": "^5.1|^6.0" + }, + "require-dev": { + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "type": "symfony-messenger-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Redis\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Redis extension Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/redis-messenger/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-13T13:58:00+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/dd08c19879a9b37ff14fd30dcbdf99a4cf045db1", + "reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-12T18:20:21+00:00" + }, + { + "name": "symfony/runtime", + "version": "v5.4.46", + "source": { + "type": "git", + "url": "https://github.com/symfony/runtime.git", + "reference": "242b4d773c004fa258e1b412f3f49fc2ac78353a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/runtime/zipball/242b4d773c004fa258e1b412f3f49fc2ac78353a", + "reference": "242b4d773c004fa258e1b412f3f49fc2ac78353a", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/dotenv": "<5.1" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "symfony/console": "^4.4.30|^5.4.9|^6.0.9", + "symfony/dotenv": "^5.1|^6.0", + "symfony/http-foundation": "^4.4.30|^5.3.7|^6.0", + "symfony/http-kernel": "^4.4.30|^5.3.7|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Enables decoupling PHP applications from global state", + "homepage": "https://symfony.com", + "keywords": [ + "runtime" + ], + "support": { + "source": "https://github.com/symfony/runtime/tree/v5.4.46" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-06T08:58:41+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "d6081d1b9118f944df90bb77444a8617eba01542" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/d6081d1b9118f944df90bb77444a8617eba01542", + "reference": "d6081d1b9118f944df90bb77444a8617eba01542", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4.43|^6.4.11", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher": "^5.1|^6.0", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/http-kernel": "^5.3|^6.0", + "symfony/password-hasher": "^5.3|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/security-core": "^5.4|^6.0", + "symfony/security-csrf": "^4.4|^5.0|^6.0", + "symfony/security-guard": "^5.3", + "symfony/security-http": "^5.4.30|^6.3.6", + "symfony/service-contracts": "^1.10|^2|^3" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/console": "<4.4", + "symfony/framework-bundle": "<4.4", + "symfony/ldap": "<5.1", + "symfony/twig-bundle": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4|^2", + "symfony/asset": "^4.4|^5.0|^6.0", + "symfony/browser-kit": "^4.4|^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/form": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^5.3|^6.0", + "symfony/ldap": "^5.3|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/twig-bridge": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "symfony/validator": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-bundle/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/security-core", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "cca947b1a74bdbc21c4d6288a4abb938d9a7eaba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/cca947b1a74bdbc21c4d6288a4abb938d9a7eaba", + "reference": "cca947b1a74bdbc21c4d6288a4abb938d9a7eaba", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^1.1|^2|^3", + "symfony/password-hasher": "^5.3|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1.6|^2|^3" + }, + "conflict": { + "symfony/event-dispatcher": "<4.4", + "symfony/http-foundation": "<5.3", + "symfony/ldap": "<4.4", + "symfony/security-guard": "<4.4", + "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3", + "symfony/validator": "<5.2" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "psr/container": "^1.0|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/ldap": "^4.4|^5.0|^6.0", + "symfony/translation": "^5.4.35|~6.3.12|^6.4.3", + "symfony/validator": "^5.2|^6.0" + }, + "suggest": { + "psr/container-implementation": "To instantiate the Security class", + "symfony/event-dispatcher": "", + "symfony/expression-language": "For using the expression voter", + "symfony/http-foundation": "", + "symfony/ldap": "For using LDAP integration", + "symfony/validator": "For using the user password constraint" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-core/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T08:58:20+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "28dcafc3220f12264bb2aabe2389a2163458c1f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/28dcafc3220f12264bb2aabe2389a2163458c1f4", + "reference": "28dcafc3220f12264bb2aabe2389a2163458c1f4", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/security-core": "^4.4|^5.0|^6.0" + }, + "conflict": { + "symfony/http-foundation": "<5.3" + }, + "require-dev": { + "symfony/http-foundation": "^5.3|^6.0" + }, + "suggest": { + "symfony/http-foundation": "For using the class SessionTokenStorage." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-csrf/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/security-guard", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-guard.git", + "reference": "f3da3dbec38aaedaf287ffeb4e3a90994af37faa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/f3da3dbec38aaedaf287ffeb4e3a90994af37faa", + "reference": "f3da3dbec38aaedaf287ffeb4e3a90994af37faa", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.15", + "symfony/security-core": "^5.0", + "symfony/security-http": "^5.3" + }, + "require-dev": { + "psr/log": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Guard\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - Guard", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-guard/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/security-http", + "version": "v5.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "cde02b002e0447075430e6a84482e38f2fd9268d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/cde02b002e0447075430e6a84482e38f2fd9268d", + "reference": "cde02b002e0447075430e6a84482e38f2fd9268d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/http-kernel": "^5.3|^6.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/security-core": "^5.4.19|~6.0.19|~6.1.11|^6.2.5", + "symfony/service-contracts": "^1.10|^2|^3" + }, + "conflict": { + "symfony/event-dispatcher": "<4.3", + "symfony/security-bundle": "<5.3", + "symfony/security-csrf": "<4.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/security-csrf": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/security-csrf": "For using tokens to protect authentication/logout attempts" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-http/tree/v5.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-07T14:12:41+00:00" + }, + { + "name": "symfony/serializer", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "460c5df9fb6c39d10d5b7f386e4feae4b6370221" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/460c5df9fb6c39d10d5b7f386e4feae4b6370221", + "reference": "460c5df9fb6c39d10d5b7f386e4feae4b6370221", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/dependency-injection": "<4.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4.24|>=6,<6.2.11", + "symfony/uid": "<5.3", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/form": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/property-access": "^5.4.26|^6.3", + "symfony/property-info": "^5.4.24|^6.2.11", + "symfony/uid": "^5.3|^6.0", + "symfony/validator": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0", + "symfony/var-exporter": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/var-exporter": "For using the metadata compiler.", + "symfony/yaml": "For using the default YAML mapping loader." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/serializer/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", + "reference": "f37b419f7aea2e9abf10abd261832cace12e3300", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb2c199cf302eb207f8c23e7ee174c1c31a5c004", + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799", + "reference": "136ca7d72f72b599f2631aca474a4f8e26719799", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-10T20:33:58+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/98f26acc99341ca4bab345fb14d7b1d7cb825bed", + "reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/console": "<5.3", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "450d4172653f38818657022252f9d81be89ee9a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/450d4172653f38818657022252f9d81be89ee9a8", + "reference": "450d4172653f38818657022252f9d81be89ee9a8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "853a0c9aa40123a9feeb335c865b659d94e49e5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/853a0c9aa40123a9feeb335c865b659d94e49e5d", + "reference": "853a0c9aa40123a9feeb335c865b659d94e49e5d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<5.3", + "symfony/form": "<5.4.21|>=6,<6.2.7", + "symfony/http-foundation": "<5.3", + "symfony/http-kernel": "<4.4", + "symfony/translation": "<5.2", + "symfony/workflow": "<5.2" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "egulias/email-validator": "^2.1.10|^3|^4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^4.4|^5.0|^6.0", + "symfony/console": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/form": "^5.4.21|^6.2.7", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^4.4|^5.0|^6.0", + "symfony/security-csrf": "^4.4|^5.0|^6.0", + "symfony/security-http": "^4.4|^5.0|^6.0", + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^5.2|^6.0", + "symfony/web-link": "^4.4|^5.0|^6.0", + "symfony/workflow": "^5.2|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-22T08:19:51+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9", + "reference": "e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/twig-bridge": "^5.3|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "symfony/dependency-injection": "<5.3", + "symfony/framework-bundle": "<5.0", + "symfony/service-contracts": ">=3.0", + "symfony/translation": "<5.0" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4|^2", + "doctrine/cache": "^1.0|^2.0", + "symfony/asset": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/form": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^5.0|^6.0", + "symfony/web-link": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/validator", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "883667679d93d6c30f1b7490d669801712d3be2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/883667679d93d6c30f1b7490d669801712d3be2f", + "reference": "883667679d93d6c30f1b7490d669801712d3be2f", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/translation-contracts": "^1.1|^2|^3" + }, + "conflict": { + "doctrine/annotations": "<1.13", + "doctrine/cache": "<1.11", + "doctrine/lexer": "<1.1", + "symfony/dependency-injection": "<4.4", + "symfony/expression-language": "<5.1", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.4", + "symfony/property-info": "<5.3", + "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.13|^2", + "doctrine/cache": "^1.11|^2.0", + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^5.1|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.3|^6.0", + "symfony/translation": "^5.4.35|~6.3.12|^6.4.3", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "egulias/email-validator": "Strict (RFC compliant) email validation", + "psr/cache-implementation": "For using the mapping cache.", + "symfony/config": "", + "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For accessing properties within comparison constraints", + "symfony/property-info": "To automatically add NotNull and Type constraints", + "symfony/translation": "For translating validation errors.", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/bin/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to validate values", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T08:58:20+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/42f18f170aa86d612c3559cfb3bd11a375df32c8", + "reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-08T15:21:10+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v6.4.21", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "717e7544aa99752c54ecba5c0e17459c48317472" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/717e7544aa99752c54ecba5c0e17459c48317472", + "reference": "717e7544aa99752c54ecba5c0e17459c48317472", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v6.4.21" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-27T21:06:26+00:00" + }, + { + "name": "symfony/web-link", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-link.git", + "reference": "5b71baea258dbbe2a3627cb11c1721e8a2216a55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-link/zipball/5b71baea258dbbe2a3627cb11c1721e8a2216a55", + "reference": "5b71baea258dbbe2a3627cb11c1721e8a2216a55", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/link": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/http-kernel": "<5.3" + }, + "provide": { + "psr/link-implementation": "1.0" + }, + "require-dev": { + "symfony/http-kernel": "^5.3|^6.0" + }, + "suggest": { + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\WebLink\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Manages links between resources", + "homepage": "https://symfony.com", + "keywords": [ + "dns-prefetch", + "http", + "http2", + "link", + "performance", + "prefetch", + "preload", + "prerender", + "psr13", + "push" + ], + "support": { + "source": "https://github.com/symfony/web-link/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/webapp-meta", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/webapp-meta.git", + "reference": "df062f539ed5203b8ba1e5cdd9b1745afa983d69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webapp-meta/zipball/df062f539ed5203b8ba1e5cdd9b1745afa983d69", + "reference": "df062f539ed5203b8ba1e5cdd9b1745afa983d69", + "shasum": "" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A meta package for the web app pack", + "support": { + "issues": "https://github.com/symfony/webapp-meta/issues", + "source": "https://github.com/symfony/webapp-meta/tree/v1.0.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "abandoned": true, + "time": "2021-10-20T16:02:05+00:00" + }, + { + "name": "symfony/webpack-encore-bundle", + "version": "v1.17.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/webpack-encore-bundle.git", + "reference": "471ebbc03072dad6e31840dc317bc634a32785f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/471ebbc03072dad6e31840dc317bc634a32785f5", + "reference": "471ebbc03072dad6e31840dc317bc634a32785f5", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/asset": "^4.4 || ^5.0 || ^6.0", + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.25.0", + "symfony/service-contracts": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.3 || ^6.0", + "symfony/twig-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/web-link": "^4.4 || ^5.0 || ^6.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/symfony/webpack-encore", + "name": "symfony/webpack-encore" + } + }, + "autoload": { + "psr-4": { + "Symfony\\WebpackEncoreBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration with your Symfony app & Webpack Encore!", + "support": { + "issues": "https://github.com/symfony/webpack-encore-bundle/issues", + "source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.17.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-09-26T14:36:28+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "a454d47278cc16a5db371fe73ae66a78a633371e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a454d47278cc16a5db371fe73ae66a78a633371e", + "reference": "a454d47278cc16a5db371fe73ae66a78a633371e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.3" + }, + "require-dev": { + "symfony/console": "^5.3|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.21.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "62d1cf47a1aa009cbd07b21045b97d3d5cb79896" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/62d1cf47a1aa009cbd07b21045b97d3d5cb79896", + "reference": "62d1cf47a1aa009cbd07b21045b97d3d5cb79896", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/framework-bundle": "^5.4|^6.4|^7.0", + "symfony/twig-bundle": "^5.4|^6.4|^7.0", + "twig/twig": "^3.2|^4.0" + }, + "require-dev": { + "league/commonmark": "^1.0|^2.0", + "symfony/phpunit-bridge": "^6.4|^7.0", + "twig/cache-extra": "^3.0", + "twig/cssinliner-extra": "^3.0", + "twig/html-extra": "^3.0", + "twig/inky-extra": "^3.0", + "twig/intl-extra": "^3.0", + "twig/markdown-extra": "^3.0", + "twig/string-extra": "^3.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Twig\\Extra\\TwigExtraBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Symfony bundle for extra Twig extensions", + "homepage": "https://twig.symfony.com", + "keywords": [ + "bundle", + "extra", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.21.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-02-19T14:29:33+00:00" + }, + { + "name": "twig/twig", + "version": "v3.21.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.21.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-05-03T07:21:55+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "nikic/php-parser", + "version": "v4.19.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.1" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" + }, + "time": "2024-09-29T15:01:53+00:00" + }, + { + "name": "symfony/debug-bundle", + "version": "v5.4.45", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "653c7629d036ef24ac5de54a157aecdc400d2570" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/653c7629d036ef24ac5de54a157aecdc400d2570", + "reference": "653c7629d036ef24ac5de54a157aecdc400d2570", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/twig-bridge": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.2" + }, + "require-dev": { + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/web-profiler-bundle": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/config": "For service container configuration", + "symfony/dependency-injection": "For using as a service from the container" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug-bundle/tree/v5.4.45" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.50.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "a1733f849b999460c308e66f6392fb09b621fa86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a1733f849b999460c308e66f6392fb09b621fa86", + "reference": "a1733f849b999460c308e66f6392fb09b621fa86", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "nikic/php-parser": "^4.11", + "php": ">=8.0", + "symfony/config": "^5.4.7|^6.0", + "symfony/console": "^5.4.7|^6.0", + "symfony/dependency-injection": "^5.4.7|^6.0", + "symfony/deprecation-contracts": "^2.2|^3", + "symfony/filesystem": "^5.4.7|^6.0", + "symfony/finder": "^5.4.3|^6.0", + "symfony/framework-bundle": "^5.4.7|^6.0", + "symfony/http-kernel": "^5.4.7|^6.0", + "symfony/process": "^5.4.7|^6.0" + }, + "conflict": { + "doctrine/doctrine-bundle": "<2.4", + "doctrine/orm": "<2.10", + "symfony/doctrine-bridge": "<5.4" + }, + "require-dev": { + "composer/semver": "^3.0", + "doctrine/doctrine-bundle": "^2.4", + "doctrine/orm": "^2.10.0", + "symfony/http-client": "^5.4.7|^6.0", + "symfony/phpunit-bridge": "^5.4.17|^6.0", + "symfony/polyfill-php80": "^1.16.0", + "symfony/security-core": "^5.4.7|^6.0", + "symfony/yaml": "^5.4.3|^6.0", + "twig/twig": "^2.0|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "dev", + "generator", + "scaffold", + "scaffolding" + ], + "support": { + "issues": "https://github.com/symfony/maker-bundle/issues", + "source": "https://github.com/symfony/maker-bundle/tree/v1.50.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-10T18:21:57+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v5.4.48", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "4afb0399456b966be92410d2bbd6146cc3ce2174" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4afb0399456b966be92410d2bbd6146cc3ce2174", + "reference": "4afb0399456b966be92410d2bbd6146cc3ce2174", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^5.3|^6.0,<6.4", + "symfony/http-kernel": "^5.3|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "conflict": { + "symfony/dependency-injection": "<5.2", + "symfony/form": "<4.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<4.4" + }, + "require-dev": { + "symfony/browser-kit": "^4.4|^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a development tool that gives detailed information about the execution of any request", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.48" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-19T09:26:40+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=7.2.5", + "ext-ctype": "*", + "ext-iconv": "*", + "ext-imagick": "*" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 0000000..de3979f --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,16 @@ + ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], +]; diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 0000000..6899b72 --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,19 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null diff --git a/config/packages/debug.yaml b/config/packages/debug.yaml new file mode 100644 index 0000000..ad874af --- /dev/null +++ b/config/packages/debug.yaml @@ -0,0 +1,5 @@ +when@dev: + debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100644 index 0000000..cc09598 --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,47 @@ +doctrine: + dbal: + url: '%env(resolve:DATABASE_URL)%' +# server_version: '8.0' + types: + tinyint: 'App\Doctrine\DBAL\Types\TinyintType' + mapping_types: + tinyiny: 'tinyint' + + # IMPORTANT: You MUST configure your server version, + # either here or in the DATABASE_URL env var (see .env file) + #server_version: '13' + orm: + auto_generate_proxy_classes: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + auto_mapping: true + mappings: + App: + is_bundle: false + dir: '%kernel.project_dir%/src/Entity' + prefix: 'App\Entity' + alias: App + +when@test: + doctrine: + dbal: + # "TEST_TOKEN" is typically set by ParaTest + dbname_suffix: '_test%env(default::TEST_TOKEN)%' + +when@prod: + doctrine: + orm: + auto_generate_proxy_classes: false + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + + framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml new file mode 100644 index 0000000..a0a17a0 --- /dev/null +++ b/config/packages/doctrine_migrations.yaml @@ -0,0 +1,6 @@ +doctrine_migrations: + migrations_paths: + # namespace is arbitrary but should be different from App\Migrations + # as migrations classes should NOT be autoloaded + 'DoctrineMigrations': '%kernel.project_dir%/migrations' + enable_profiler: '%kernel.debug%' diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 0000000..7853e9e --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,24 @@ +# see https://symfony.com/doc/current/reference/configuration/framework.html +framework: + secret: '%env(APP_SECRET)%' + #csrf_protection: true + http_method_override: false + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + storage_factory_id: session.storage.factory.native + + #esi: true + #fragments: true + php_errors: + log: true + +when@test: + framework: + test: true + session: + storage_factory_id: session.storage.factory.mock_file diff --git a/config/packages/mailer.yaml b/config/packages/mailer.yaml new file mode 100644 index 0000000..56a650d --- /dev/null +++ b/config/packages/mailer.yaml @@ -0,0 +1,3 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml new file mode 100644 index 0000000..a0e5387 --- /dev/null +++ b/config/packages/messenger.yaml @@ -0,0 +1,25 @@ +framework: + messenger: + failure_transport: failed + reset_on_message: true + + transports: + # https://symfony.com/doc/current/messenger.html#transport-configuration + async: + dsn: '%env(MESSENGER_TRANSPORT_DSN)%' + options: + use_notify: true + check_delayed_interval: 60000 + retry_strategy: + max_retries: 3 + multiplier: 2 + failed: 'doctrine://default?queue_name=failed' + # sync: 'sync://' + + routing: + Symfony\Component\Mailer\Messenger\SendEmailMessage: async + Symfony\Component\Notifier\Message\ChatMessage: async + Symfony\Component\Notifier\Message\SmsMessage: async + + # Route your messages to the transports + # 'App\Message\YourMessage': async \ No newline at end of file diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml new file mode 100644 index 0000000..8c9efa9 --- /dev/null +++ b/config/packages/monolog.yaml @@ -0,0 +1,61 @@ +monolog: + channels: + - deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists + +when@dev: + monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + # uncomment to get logging in your browser + # you may have to allow bigger header sizes in your Web server configuration + #firephp: + # type: firephp + # level: info + #chromephp: + # type: chromephp + # level: info + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] + +when@test: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + channels: ["!event"] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + +when@prod: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + buffer_size: 50 # How many messages should be saved? Prevent memory leaks + nested: + type: stream + path: php://stderr + level: debug + formatter: monolog.formatter.json + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] + deprecation: + type: stream + channels: [deprecation] + path: php://stderr diff --git a/config/packages/notifier.yaml b/config/packages/notifier.yaml new file mode 100644 index 0000000..3984a48 --- /dev/null +++ b/config/packages/notifier.yaml @@ -0,0 +1,16 @@ +framework: + notifier: + #chatter_transports: + # slack: '%env(SLACK_DSN)%' + # telegram: '%env(TELEGRAM_DSN)%' + #texter_transports: + # twilio: '%env(TWILIO_DSN)%' + # nexmo: '%env(NEXMO_DSN)%' + channel_policy: + # use chat/slack, chat/telegram, sms/twilio or sms/nexmo + urgent: ['email'] + high: ['email'] + medium: ['email'] + low: ['email'] + admin_recipients: + - { email: admin@example.com } diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 0000000..4b766ce --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,12 @@ +framework: + router: + utf8: true + + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + #default_uri: http://localhost + +when@prod: + framework: + router: + strict_requirements: null diff --git a/config/packages/security.yaml b/config/packages/security.yaml new file mode 100644 index 0000000..cae9fbf --- /dev/null +++ b/config/packages/security.yaml @@ -0,0 +1,63 @@ +security: + enable_authenticator_manager: true + # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords + password_hashers: + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' + App\Entity\User: + algorithm: auto + + role_hierarchy: + ROLE_USER: [ ] + ROLE_CONTRIBUTOR: [ ] + ROLE_SENIOR: [ ROLE_CONTRIBUTOR ] + ROLE_CBT: [ ] + ROLE_ADMIN: [ ROLE_SENIOR ] + + # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider + providers: + # used to reload user from session & other features (e.g. switch_user) + app_user_provider: + entity: + class: App\Entity\User + property: username + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + main: + lazy: true + provider: app_user_provider + custom_authenticator: App\Security\Authenticator + remember_me: + secret: '%kernel.secret%' + lifetime: 2592000 + always_remember_me: true + logout: + path: security_logout + # where to redirect after logout + # target: app_any_route + + # activate different ways to authenticate + # https://symfony.com/doc/current/security.html#the-firewall + + # https://symfony.com/doc/current/security/impersonating_user.html + # switch_user: true + + # Easy way to control access for large sections of your site + # Note: Only the *first* access control that matches will be used + access_control: + # - { path: ^/admin, roles: ROLE_ADMIN } + # - { path: ^/profile, roles: ROLE_USER } + +when@test: + security: + password_hashers: + # By default, password hashers are resource intensive and take time. This is + # important to generate secure password hashes. In tests however, secure hashes + # are not important, waste resources and increase test times. The following + # reduces the work factor to the lowest possible values. + Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: + algorithm: auto + cost: 4 # Lowest possible value for bcrypt + time_cost: 3 # Lowest possible value for argon + memory_cost: 10 # Lowest possible value for argon diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml new file mode 100644 index 0000000..1821ccc --- /dev/null +++ b/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,3 @@ +sensio_framework_extra: + router: + annotations: false diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml new file mode 100644 index 0000000..355a0e0 --- /dev/null +++ b/config/packages/translation.yaml @@ -0,0 +1,13 @@ +framework: + default_locale: '%locale%' + translator: + default_path: '%kernel.project_dir%/translations' + fallbacks: + - '%locale%' +# providers: +# crowdin: +# dsn: '%env(CROWDIN_DSN)%' +# loco: +# dsn: '%env(LOCO_DSN)%' +# lokalise: +# dsn: '%env(LOKALISE_DSN)%' diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 0000000..c1e4740 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,39 @@ +twig: + default_path: '%kernel.project_dir%/templates' + globals: + assets: + img: + _black: '/build/assets/static/_black.png' + _black_xs: '/build/assets/static/_black_xs.png' + _blank: '/build/assets/static/_blank.png' + _blank_xs: '/build/assets/static/_blank_xs.png' + delete: '/build/assets/static/delete.png' + region: '/build/assets/static/region/' + ui: '/build/assets/static/ui/' + map: + ext: ['jpg', 'jpeg'] + sand: '/build/assets/static/map/sand.jpg' + sea: '/build/assets/static/map/sea.jpg' + upload_path: '/upload/map/' + item: + ext: ['png'] + upload_path: '/upload/item/' + monster: + ext: ['png'] + upload_path: '/upload/monster/' + screenshot: + ext: ['jpg', 'jpeg', 'png'] + upload_path: '/upload/screenshot/' + thumbnail_path: '/upload/screenshot/thumbnail/' + worldmark: + ext: ['png'] + upload_path: '/upload/worldmark/' + upload: + map: + ext: ['jpg', 'jpeg'] + path: '/upload/map/' + thumbnail: '/upload/map/thumbnail/' + +when@test: + twig: + strict_variables: true diff --git a/config/packages/validator.yaml b/config/packages/validator.yaml new file mode 100644 index 0000000..0201281 --- /dev/null +++ b/config/packages/validator.yaml @@ -0,0 +1,13 @@ +framework: + validation: + email_validation_mode: html5 + + # Enables validator auto-mapping support. + # For instance, basic validation constraints will be inferred from Doctrine's metadata. + #auto_mapping: + # App\Entity\: [] + +when@test: + framework: + validation: + not_compromised_password: false diff --git a/config/packages/web_profiler.yaml b/config/packages/web_profiler.yaml new file mode 100644 index 0000000..17893da --- /dev/null +++ b/config/packages/web_profiler.yaml @@ -0,0 +1,15 @@ +when@dev: + web_profiler: + toolbar: true + intercept_redirects: false + + framework: + profiler: { only_exceptions: false } + +when@test: + web_profiler: + toolbar: false + intercept_redirects: false + + framework: + profiler: { collect: false } diff --git a/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml new file mode 100644 index 0000000..46834f0 --- /dev/null +++ b/config/packages/webpack_encore.yaml @@ -0,0 +1,49 @@ +webpack_encore: + # The path where Encore is building the assets - i.e. Encore.setOutputPath() + output_path: '%kernel.project_dir%/public/build' + # If multiple builds are defined (as shown below), you can disable the default build: + # output_path: false + + # Set attributes that will be rendered on all script and link tags + script_attributes: + defer: true + # Uncomment (also under link_attributes) if using Turbo Drive + # https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change + # 'data-turbo-track': reload + # link_attributes: + # Uncomment if using Turbo Drive + # 'data-turbo-track': reload + + # If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials') + # crossorigin: 'anonymous' + + # Preload all rendered script and link tags automatically via the HTTP/2 Link header + # preload: true + + # Throw an exception if the entrypoints.json file is missing or an entry is missing from the data + # strict_mode: false + + # If you have multiple builds: + # builds: + # pass "frontend" as the 3rg arg to the Twig functions + # {{ encore_entry_script_tags('entry1', null, 'frontend') }} + + # frontend: '%kernel.project_dir%/public/frontend/build' + + # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) + # Put in config/packages/prod/webpack_encore.yaml + # cache: true + +framework: + assets: + json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' + +#when@prod: +# webpack_encore: +# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) +# # Available in version 1.2 +# cache: true + +#when@test: +# webpack_encore: +# strict_mode: false diff --git a/config/preload.php b/config/preload.php new file mode 100644 index 0000000..5ebcdb2 --- /dev/null +++ b/config/preload.php @@ -0,0 +1,5 @@ + + + + https://genshin-world.com/mondstadt + 2022-09-28T00:00:00+00:00 + weekly + 0.80 + + + https://genshin-world.com/dragonspine + 2022-09-28T00:00:00+00:00 + weekly + 0.80 + + + + + + + + + https://genshin-world.com/liyue + 2022-09-28T00:00:00+00:00 + weekly + 0.80 + + + https://genshin-world.com/the-chasm + 2022-09-28T00:00:00+00:00 + weekly + 0.80 + + + https://genshin-world.com/underground-mines + 2022-09-28T00:00:00+00:00 + weekly + 0.90 + + + https://genshin-world.com/inazuma + 2022-09-28T00:00:00+00:00 + weekly + 0.80 + + + https://genshin-world.com/enkanomiya + 2022-09-28T00:00:00+00:00 + weekly + 0.80 + + + https://genshin-world.com/sumeru + 2022-09-28T00:00:00+00:00 + weekly + 1.00 + + \ No newline at end of file diff --git a/src/Controller/.gitignore b/src/Controller/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/src/Controller/DefaultController.php b/src/Controller/DefaultController.php new file mode 100644 index 0000000..0ae9781 --- /dev/null +++ b/src/Controller/DefaultController.php @@ -0,0 +1,19 @@ +render('_dashboard/base.html.twig'); + } + + // #[Route('/sandbox', name: 'sandbox', methods: 'GET')] + // public function sandbox(): Response { + // return $this->render('sandbox/sandbox.html.twig'); + // } +} \ No newline at end of file diff --git a/src/Controller/GridController.php b/src/Controller/GridController.php new file mode 100644 index 0000000..7e07599 --- /dev/null +++ b/src/Controller/GridController.php @@ -0,0 +1,128 @@ + 'regionId'])] +class GridController extends AbstractController { + public function __construct(private EntityManagerInterface $_em, + private FileManager $fileManager, + private GridRepository $gridRepository, + private MapRepository $mapRepository) {} + + #[Route('', name: 'bo_region_grid_index', methods: ['GET'])] + public function index(Request $request, Region $region): Response { + $version = $request->query->get('v'); + $version = !$version || !in_array(floatval($version), Kernel::SUPPORTED_GAME_VERSION) ? Kernel::GAME_VERSION : floatval($version); + + $cells = $this->gridRepository->getGridCells($region); + $maps = $this->mapRepository->getCellsMap($cells, $version); + $grid = $this->gridRepository->buildWorldmap($version, $cells, $maps, true); + + return $this->render('_dashboard/grid/index.html.twig', array( + 'region' => $region, + 'grid' => $grid, + 'version' => $version, + )); + } + + #[Route('/edit', name: 'bo_region_grid_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, Region $region): Response { + $logs=array(); + $form = $this->gridRepository->getGridForm('bo_region_grid_edit', $region); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid()) { + if(is_array($form->get('positions')->getData())) { + if(in_array('row_before', $form->get('positions')->getData())) { + $this->addRow($region, $this->gridRepository->getGridCells($region), true); + $logs[]='• Added one row before.'; + } + + if(in_array('row_after', $form->get('positions')->getData())) { + $this->addRow($region, $this->gridRepository->getGridCells($region), false); + $logs[]='• Added one row after.'; + } + + if(in_array('column_before', $form->get('positions')->getData())) { + $this->addColumn($region, $this->gridRepository->getGridCells($region), true); + $logs[]='• Added one column before.'; + } + + if(in_array('column_after', $form->get('positions')->getData())) { + $this->addColumn($region, $this->gridRepository->getGridCells($region), false); + $logs[]='• Added one column after.'; + } + + $form = $this->gridRepository->getGridForm('bo_region_grid_edit', $region); + } + } + + return $this->renderForm('_dashboard/grid/edit.html.twig', array( + 'region' => $region, + 'form' => $form, + 'logs' => $logs, + )); + } + + private function addColumn(Region $region, array $cells, bool $isBefore) { + if($isBefore) { + foreach($cells as $_cell) { + $_cell->setCol($_cell->getCol() + 1); + } + } + + for($n = 1; $n <= $region->getGridHeight(); $n++) { + $cell = new Grid(); + $cell->setRegion($region) + ->setCol($isBefore ? 1 : $region->getGridWidth() + 1) + ->setRow($n); + + $this->_em->persist($cell); + } + + $region->setGridWidth($region->getGridWidth() + 1); + + $this->_em->flush(); + } + + /** + * @param Region $region + * @param Grid[] $cells + * @param bool $isBefore + * @return void + */ + private function addRow(Region $region, array $cells, bool $isBefore) { + if($isBefore) { + foreach($cells as $_cell) { + $_cell->setRow($_cell->getRow() + 1); + } + } + + for($n = 1; $n <= $region->getGridWidth(); $n++) { + $cell = new Grid(); + $cell->setRegion($region) + ->setCol($n) + ->setRow($isBefore ? 1 : $region->getGridHeight() + 1); + + $this->_em->persist($cell); + } + + $region->setGridHeight($region->getGridHeight() + 1); + + $this->_em->flush(); + } +} diff --git a/src/Controller/ItemCategoryController.php b/src/Controller/ItemCategoryController.php new file mode 100644 index 0000000..748b696 --- /dev/null +++ b/src/Controller/ItemCategoryController.php @@ -0,0 +1,88 @@ +itemCategoryRepository->findBy(array(), array('sortOrder' => 'ASC')); + + return $this->render('_dashboard/item_category/index.html.twig', array( + 'itemsCategories' => $itemsCategories, + )); + } + + //ToDo set form to XHR for errors + #[Route('/new', name: 'bo_item_category_new', methods: ['GET', 'POST'])] + public function new(Request $request): Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + $itemCategory = new ItemCategory(); + $form = $this->itemCategoryRepository->getForm('bo_item_category_new', $itemCategory); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid()) { + $this->_em->persist($itemCategory); + $this->_em->flush(); + + return $this->redirectToRoute('bo_item_category_index', array(), Response::HTTP_SEE_OTHER); + } + + $itemsCategories=$this->itemCategoryRepository->findBy(array(), array('sortOrder'=>'ASC')); + + return $this->renderForm('_dashboard/item_category/new.html.twig', array( + 'itemsCategories'=>$itemsCategories, + 'itemCategory'=>$itemCategory, + 'form'=>$form, + )); + } + + //ToDo set form to XHR for errors + #[Route('/category-{id}', name: 'bo_item_category_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, ItemCategory $itemCategory): Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + $form = $this->itemCategoryRepository->getForm('bo_item_category_edit', $itemCategory); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid()) { + $this->_em->flush(); + + return $this->redirectToRoute('bo_item_category_index', array(), Response::HTTP_SEE_OTHER); + } + + $itemsCategories=$this->itemCategoryRepository->findBy(array(), array('sortOrder'=>'ASC')); + + return $this->renderForm('_dashboard/item_category/edit.html.twig', [ + 'itemsCategories'=>$itemsCategories, + 'itemCategory'=>$itemCategory, + 'form'=>$form, + ]); + } + + #[Route('/delete-{id}', name: 'bo_item_category_delete', methods: ['POST'])] + public function delete(Request $request, ItemCategory $itemCategory): RedirectResponse { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + if($this->isCsrfTokenValid('delete'.$itemCategory->getId(), $request->request->get('_token'))) { + $this->_em->remove($itemCategory); + $this->_em->flush(); + } + + return $this->redirectToRoute('bo_item_category_index', array(), Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Controller/ItemController.php b/src/Controller/ItemController.php new file mode 100644 index 0000000..60732b1 --- /dev/null +++ b/src/Controller/ItemController.php @@ -0,0 +1,239 @@ + 'itemCategoryId'])] +class ItemController extends AbstractController { + public function __construct(private EntityManagerInterface $_em, + private FileManager $fileManager, + private ItemCategoryRepository $itemCategoryRepository, + private ItemRepository $itemRepository) {} + + #[Route('', name: 'bo_item_index', methods: ['GET'])] + public function index(ItemCategory $itemCategory): Response { + $itemsCategories=$this->itemCategoryRepository->findBy(array(), array('sortOrder'=>'ASC')); + $items=$this->itemRepository->findBy(array('category'=>$itemCategory), array('name'=>'ASC')); + + return $this->render('_dashboard/item/index.html.twig', array( + 'itemsCategories'=>$itemsCategories, + 'itemCategory'=>$itemCategory, + 'items'=>$items, + )); + } + + #[Route('/new', name: 'bo_item_new', methods: ['GET', 'POST'])] + public function new(Request $request, ItemCategory $itemCategory): Response { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($request->isMethod('POST') && !$request->isXmlHttpRequest()) { + throw new NotFoundHttpException("Page not found"); + } + + $item=new Item(); + $item->setCategory($itemCategory); + + $form=$this->itemRepository->getForm('bo_item_new', $itemCategory, $item); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + if($item->getIcon() instanceof UploadedFile) { + $uploadedFile=$this->fileManager->uploadItemIcon($item->getIcon()); + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + $item->setIcon($uploadedFile['filename']); + } + + $this->_em->persist($item); + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'redirect', + 'params' => array( + 'url' => $this->generateUrl('bo_item_index', array('itemCategoryId' => $itemCategory->getId())), + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + $itemsCategories=$this->itemCategoryRepository->findBy(array(), array('sortOrder'=>'ASC')); + + return $this->renderForm('_dashboard/item/new.html.twig', array( + 'itemsCategories'=>$itemsCategories, + 'itemCategory'=>$itemCategory, + 'item'=>$item, + 'form'=>$form, + )); + } + + #[Route('/item-{id}', name: 'bo_item_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, WorldmarkRepository $worldmarkRepository, ItemCategory $itemCategory, Item $item): Response { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($request->isMethod('POST') && !$request->isXmlHttpRequest()) { + throw new NotFoundHttpException("Page not found"); + } + + $icon=$item->getIcon(); + + $form=$this->itemRepository->getForm('bo_item_edit', $itemCategory, $item); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + if(!$form->get('removeFile')->getData()) { + if($item->getIcon() instanceof UploadedFile) { + $uploadedFile=$this->fileManager->uploadItemIcon($item->getIcon()); + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + if($icon) { + $this->fileManager->removeItemIcon($icon); + } + + $item->setIcon($uploadedFile['filename']); + $worldmark = $worldmarkRepository->findOneBy(array('item'=>$item)); + + if($worldmark) { + $uploadedFile=$this->fileManager->getWorldmarkIconFromEntity($item); + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + if($worldmark->getIcon()) { + $this->fileManager->removeWorldmarkIcon($icon); + } + + $worldmark->setIcon($uploadedFile['filename']); + } + } else { + $item->setIcon($icon); + } + } else { + $this->fileManager->removeItemIcon($icon); + + $item->setIcon(null); + } + + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'redirect', + 'params' => array( + 'url' => $this->generateUrl('bo_item_index', array('itemCategoryId' => $itemCategory->getId())), + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + $itemsCategories=$this->itemCategoryRepository->findBy(array(), array('sortOrder'=>'ASC')); + + return $this->renderForm('_dashboard/item/edit.html.twig', [ + 'itemsCategories'=>$itemsCategories, + 'itemCategory'=>$itemCategory, + 'item'=>$item, + 'form'=>$form, + ]); + } + + #[Route('/delete-{id}', name: 'bo_item_delete', methods: ['POST'])] + public function delete(Request $request, ItemCategory $itemCategory, Item $item): RedirectResponse { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($this->isCsrfTokenValid('delete'.$item->getId(), $request->request->get('_token'))) { + if($item->getIcon()) { + $this->fileManager->removeItemIcon($item->getIcon()); + } + + $this->_em->remove($item); + $this->_em->flush(); + } + + return $this->redirectToRoute('bo_item_index', array('itemCategoryId'=>$itemCategory->getId()), Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Controller/MapController.php b/src/Controller/MapController.php new file mode 100644 index 0000000..4b7147a --- /dev/null +++ b/src/Controller/MapController.php @@ -0,0 +1,198 @@ + 'cellId'])] +class MapController extends AbstractController { + public function __construct(private EntityManagerInterface $_em, + private FileManager $fileManager, + private MapRepository $mapRepository) {} + + #[Route('/new', name: 'bo_map_new', methods: ['POST'])] + public function new(Request $request, Grid $cell): JsonResponse { + if($request->isXmlHttpRequest()) { + $map = new Map(); + $map->setGrid($cell); + + $form = $this->mapRepository->getForm('bo_map_new', $cell, $map); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + if($map->getFile() instanceof UploadedFile) { + $uploadedFile = $this->fileManager->uploadMapFile($map->getFile()); + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + $map->setFile($uploadedFile['filename']); + + $this->_em->persist($map); + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'success', + 'message' => 'Map updated', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'No file found or uploaded', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'No form submitted', + ), + ), + ), + )); + } + + throw $this->createNotFoundException(); + } + + #[Route('/map-{id}', name: 'bo_map_edit', methods: ['POST'])] + public function edit(Request $request, Grid $cell, Map $map): JsonResponse { + if($request->isXmlHttpRequest()) { + $file = $map->getFile(); + + $form = $this->mapRepository->getForm('bo_map_edit', $cell, $map); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + if($map->getFile() instanceof UploadedFile) { + $uploadedFile=$this->fileManager->uploadMapFile($map->getFile()); + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + $map->setFile($uploadedFile['filename']); + $this->fileManager->removeMapFile($file); + + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'success', + 'message' => 'Map updated', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'No file found or uploaded', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'No form submitted', + ), + ), + ), + )); + } + + throw $this->createNotFoundException(); + } +} diff --git a/src/Controller/MonsterCategoryController.php b/src/Controller/MonsterCategoryController.php new file mode 100644 index 0000000..f8eb078 --- /dev/null +++ b/src/Controller/MonsterCategoryController.php @@ -0,0 +1,85 @@ +monsterCategoryRepository->findBy(array(), array('name' => 'ASC')); + + return $this->render('_dashboard/monster_category/index.html.twig', array( + 'monstersCategories' => $monstersCategories, + )); + } + + #[Route('/new', name: 'bo_monster_category_new', methods: ['GET', 'POST'])] + public function new(Request $request): RedirectResponse|Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + $monstersCategories = $this->monsterCategoryRepository->findBy(array(), array('name' => 'ASC')); + + $monsterCategory = new MonsterCategory(); + $form = $this->monsterCategoryRepository->getForm('bo_monster_category_new', $monsterCategory); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid()) { + $this->_em->persist($monsterCategory); + $this->_em->flush(); + + return $this->redirectToRoute('bo_monster_category_index', array(), Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('_dashboard/monster_category/new.html.twig', array( + 'monstersCategories' => $monstersCategories, + 'monsterCategory' => $monsterCategory, + 'form' => $form, + )); + } + + #[Route('/category-{id}', name: 'bo_monster_category_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, MonsterCategory $monsterCategory): RedirectResponse|Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + $monstersCategories = $this->monsterCategoryRepository->findBy(array(), array('name' => 'ASC')); + + $form = $this->monsterCategoryRepository->getForm('bo_monster_category_edit', $monsterCategory); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid()) { + $this->_em->flush(); + + return $this->redirectToRoute('bo_monster_category_index', array(), Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('_dashboard/monster_category/edit.html.twig', array( + 'monstersCategories' => $monstersCategories, + 'monsterCategory' => $monsterCategory, + 'form' => $form, + )); + } + + #[Route('/delete-{id}', name: 'bo_monster_category_delete', methods: ['POST'])] + public function delete(Request $request, MonsterCategory $monsterCategory): RedirectResponse { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + if($this->isCsrfTokenValid('delete'.$monsterCategory->getId(), $request->request->get('_token'))) { + $this->_em->remove($monsterCategory); + $this->_em->flush(); + } + + return $this->redirectToRoute('bo_monster_category_index', [], Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Controller/MonsterController.php b/src/Controller/MonsterController.php new file mode 100644 index 0000000..698cf63 --- /dev/null +++ b/src/Controller/MonsterController.php @@ -0,0 +1,214 @@ + 'monsterCategoryId'])] +class MonsterController extends AbstractController { + public function __construct(private EntityManagerInterface $_em, + private FileManager $fileManager, + private MonsterCategoryRepository $monsterCategoryRepository, + private MonsterRepository $monsterRepository) {} + + #[Route('', name: 'bo_monster_index', methods: ['GET'])] + public function index(MonsterCategory $monsterCategory): Response { + $monstersCategories = $this->monsterCategoryRepository->findBy(array(), array('name' => 'ASC')); + $monsters = $this->monsterRepository->findBy(array('category' => $monsterCategory), array('name' => 'ASC')); + + return $this->render('_dashboard/monster/index.html.twig', array( + 'monstersCategories' => $monstersCategories, + 'monsterCategory' => $monsterCategory, + 'monsters' => $monsters, + )); + } + + #[Route('/new', name: 'bo_monster_new', methods: ['GET', 'POST'])] + public function new(Request $request, MonsterCategory $monsterCategory): JsonResponse|Response { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($request->isMethod('POST') && !$request->isXmlHttpRequest()) { + throw new NotFoundHttpException("Page not found"); + } + + $monstersCategories = $this->monsterCategoryRepository->findBy(array(), array('name' => 'ASC')); + + $monster = new Monster(); + $monster->setCategory($monsterCategory); + + $form = $this->monsterRepository->getForm('bo_monster_new', $monsterCategory, $monster); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + if($monster->getIcon() instanceof UploadedFile) { + $uploadedFile = $this->fileManager->uploadMonsterIcon($monster->getIcon()); + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + $monster->setIcon($uploadedFile['filename']); + } + + $this->_em->persist($monster); + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'redirect', + 'params' => array( + 'url' => $this->generateUrl('bo_monster_index', array('monsterCategoryId' => $monsterCategory->getId())), + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + return $this->renderForm('_dashboard/monster/new.html.twig', array( + 'monstersCategories' => $monstersCategories, + 'monsterCategory' => $monsterCategory, + 'monster' => $monster, + 'form' => $form, + )); + } + + #[Route('/monster-{id}', name: 'bo_monster_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, MonsterCategory $monsterCategory, Monster $monster): JsonResponse|Response { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($request->isMethod('POST') && !$request->isXmlHttpRequest()) { + throw new NotFoundHttpException("Page not found"); + } + + $monstersCategories = $this->monsterCategoryRepository->findBy(array(), array('name' => 'ASC')); + + $icon = $monster->getIcon(); + + $form = $this->monsterRepository->getForm('bo_monster_edit', $monsterCategory, $monster); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + if(!$form->get('removeFile')->getData()) { + if($monster->getIcon() instanceof UploadedFile) { + $uploadedFile = $this->fileManager->uploadMonsterIcon($monster->getIcon()); + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + if($icon) { + $this->fileManager->removeMonsterIcon($icon); + } + + $monster->setIcon($uploadedFile['filename']); + } else { + $monster->setIcon($icon); + } + } else { + $this->fileManager->removeMonsterIcon($icon); + + $monster->setIcon(null); + } + + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'redirect', + 'params' => array( + 'url' => $this->generateUrl('bo_monster_index', array('monsterCategoryId' => $monsterCategory->getId())), + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + return $this->renderForm('_dashboard/monster/edit.html.twig', array( + 'monstersCategories' => $monstersCategories, + 'monsterCategory' => $monsterCategory, + 'monster' => $monster, + 'form' => $form, + )); + } + + #[Route('/delete-{id}', name: 'bo_monster_delete', methods: ['POST'])] + public function delete(Request $request, MonsterCategory $monsterCategory, Monster $monster): RedirectResponse { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($this->isCsrfTokenValid('delete'.$monster->getId(), $request->request->get('_token'))) { + if($monster->getIcon()) { + $this->fileManager->removeMonsterIcon($monster->getIcon()); + } + + $this->_em->remove($monster); + $this->_em->flush(); + } + + return $this->redirectToRoute('bo_monster_index', array('monsterCategoryId' => $monsterCategory->getId()), Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Controller/NodeController.php b/src/Controller/NodeController.php new file mode 100644 index 0000000..007728c --- /dev/null +++ b/src/Controller/NodeController.php @@ -0,0 +1,426 @@ + 'gridId'])] +#[ParamConverter(data: 'worldmark', class: Worldmark::class, options: ['id' => 'worldmarkId'])] +class NodeController extends AbstractController { + public function __construct(private EntityManagerInterface $_em, + private FileManager $fileManager, + private NodeRepository $nodeRepository) {} + + #[Route('/new', name: 'bo_node_new', methods: ['POST'])] + public function new(Request $request, Grid $grid, Worldmark $worldmark): JsonResponse { + if($request->isXmlHttpRequest()) { + if($this->isGranted('ROLE_CONTRIBUTOR')) { + $node = new Node(); + $node->setGrid($grid) + ->setWorldmark($worldmark); + + $form = $this->nodeRepository->getForm('bo_node_new', $grid, $worldmark, $node); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + $errors = array(); + $uploadedFiles = array(); + $screenshotSetMethods = array('setScreenshotA', 'setScreenshotB', 'setScreenshotC', 'setScreenshotD', 'setScreenshotE'); + $screenshotGetMethods = array('getScreenshotA', 'getScreenshotB', 'getScreenshotC', 'getScreenshotD', 'getScreenshotE'); + + foreach($screenshotSetMethods as $key => $method) { + if(is_callable(array($node, $method)) && is_callable(array($node, $screenshotGetMethods[$key]))) { + $uploadedFiles[$method] = ($node->{$screenshotGetMethods[$key]}() instanceof UploadedFile) + ? $this->fileManager->uploadScreenshot($node->{$screenshotGetMethods[$key]}()) + : null; + } + } + + foreach($uploadedFiles as $method => $uploadedFile) { + if($uploadedFile) { + if($uploadedFile['error']) { + $errors[] = $uploadedFile['message']; + } elseif(is_callable(array($node, $method))) { + $node->$method($uploadedFile['filename']); + } + } + } + + if(count($errors)) { + $messages = array(); + + foreach($screenshotGetMethods as $method) { + if(is_callable(array($node, $method)) && is_string($node->$method())) { + $this->fileManager->removeScreenshot($node->$method()); + } + } + + foreach($errors as $error) { + $messages[] = array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $error, + ), + ); + } + + return $this->json(array('::function' => $messages)); + } + + $this->_em->persist($node); + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name'=>'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: Nodes", + 'value' => "Nodes created by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name' => 'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: {$node->getWorldmark()->getCategory()->getName()} nodes category", + 'value' => "Nodes created by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name' => 'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: {$node->getGrid()->getRegion()->getName()} nodes log", + 'value' => "[{$node->getModifiedAt()->format('Y-m-d H:i:s')}] Node {$node->getId()} was created by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name' => 'node_validateForm', + 'params' => array( + 'gridId' => $grid->getId(), + 'htmlString' => $this->renderView('woldmap/_node.html.twig', array( + 'grid' => $grid, + 'worldmark' => $worldmark, + 'node' => $node, + 'directRender'=>true, + )), + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'node_loadForm', + 'params' => array( + 'gridId' => $grid->getId(), + 'coordinate' => array('x' => '50', 'y' => '50'), + 'htmlString' => $this->renderView('_dashboard/node/_form.html.twig', array( + 'grid' => $grid, + 'worldmark' => $worldmark, + 'node' => $node, + 'form' => $form->createView(), + )), + 'nodeId' => null, + ), + ), + ), + )); + } + + return $this->json(array('error' => 'Not found'), 404); + } + + throw $this->createNotFoundException(); + } + + #[Route('/node-{id}', name: 'bo_node_edit', methods: ['POST'])] + public function edit(Request $request, Grid $grid, Worldmark $worldmark, Node $node): JsonResponse { + if($request->isXmlHttpRequest()) { + if($this->isGranted('ROLE_CONTRIBUTOR')) { + $screenshots = array( + 'ScreenshotA' => $node->getScreenshotA(), + 'ScreenshotB' => $node->getScreenshotB(), + 'ScreenshotC' => $node->getScreenshotC(), + 'ScreenshotD' => $node->getScreenshotD(), + 'ScreenshotE' => $node->getScreenshotE(), + ); + + $form = $this->nodeRepository->getForm('bo_node_edit', $grid, $worldmark, $node); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + $errors = array(); + $uploadedFiles = array(); + $screenshotSetMethods = array('setScreenshotA', 'setScreenshotB', 'setScreenshotC', 'setScreenshotD', 'setScreenshotE'); + $screenshotGetMethods = array('getScreenshotA', 'getScreenshotB', 'getScreenshotC', 'getScreenshotD', 'getScreenshotE'); + + foreach($screenshotSetMethods as $key => $method) { + if(is_callable(array($node, $method)) && is_callable(array($node, $screenshotGetMethods[$key]))) { + $uploadedFiles[$method] = ($node->{$screenshotGetMethods[$key]}() instanceof UploadedFile) + ? $this->fileManager->uploadScreenshot($node->{$screenshotGetMethods[$key]}()) + : null; + } + } + + foreach($uploadedFiles as $method => $uploadedFile) { + if($uploadedFile) { + if($uploadedFile['error']) { + $errors[] = $uploadedFile['message']; + } elseif(is_callable(array($node, $method))) { + $node->$method($uploadedFile['filename']); + } + } + } + + if(count($errors)) { + $messages = array(); + + foreach($screenshotGetMethods as $method) { + if(is_callable(array($node, $method)) && is_string($node->$method())) { + $this->fileManager->removeScreenshot($node->$method()); + } + } + + foreach($errors as $error) { + $messages[] = array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $error, + ), + ); + } + + return $this->json(array('::function' => $messages)); + } + + foreach($screenshotGetMethods as $key => $method) { + if(is_callable(array($node, $method)) + && is_callable(array($node, $screenshotSetMethods[$key])) + && $node->$method() === null) { + $node->{$screenshotSetMethods[$key]}($screenshots[substr($method, 3)]); + } + } + + $this->_em->persist($node); + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: Nodes", + 'value' => "Nodes edited by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name'=>'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: {$node->getWorldmark()->getCategory()->getName()} nodes category", + 'value' => "Nodes edited by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name' => 'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: {$node->getGrid()->getRegion()->getName()} nodes log", + 'value' => "[{$node->getModifiedAt()->format('Y-m-d H:i:s')}] Node {$node->getId()} was edited by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name' => 'node_validateForm', + 'params' => array( + 'gridId' => $grid->getId(), + 'htmlString' => $this->renderView('woldmap/_node.html.twig', array( + 'grid' => $grid, + 'worldmark' => $worldmark, + 'node' => $node, + 'directRender'=>true, + )), + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'node_loadForm', + 'params' => array( + 'gridId' => $grid->getId(), + 'coordinate' => array('x' => '50', 'y' => '50'), + 'htmlString' => $this->renderView('_dashboard/node/_form.html.twig', array( + 'grid' => $grid, + 'worldmark' => $worldmark, + 'node' => $node, + 'form' => $form->createView(), + )), + 'nodeId' => $node->getId(), + ), + ), + ), + )); + } + + return $this->json(array('error' => 'Not found'), 404); + } + + throw $this->createNotFoundException(); + } + + #[Route('/delete-{id}', name: 'bo_node_delete', methods: ['POST'])] + public function delete(Request $request, Grid $grid, Worldmark $worldmark, Node $node): JsonResponse { + if($request->isXmlHttpRequest()) { + if($this->isGranted('ROLE_CONTRIBUTOR')) { + $form = $this->nodeRepository->getForm('bo_node_delete', $grid, $worldmark, $node); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + $nodeId = $node->getId(); + + if($this->isGranted('ROLE_ADMIN')) { + $screenshotGetMethods = array('getScreenshotA', 'getScreenshotB', 'getScreenshotC', 'getScreenshotD', 'getScreenshotE'); + + foreach($screenshotGetMethods as $method) { + if(is_callable(array($node, $method)) && $node->$method() !== null) { + $this->fileManager->removeScreenshot($node->$method()); + } + } + + $this->_em->remove($node); + } + + $this->_em->flush(); + + $deleteDate=new DateTime(); + + return $this->json(array( + '::function' => array( + array( + 'name'=>'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: Nodes", + 'value' => "Nodes deleted by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name' => 'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: {$node->getWorldmark()->getCategory()->getName()} nodes category", + 'value' => "Nodes deleted by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name' => 'paq_event', + 'params' => array( + 'type' => 'trackEvent', + 'name' => "Contribution: {$node->getGrid()->getRegion()->getName()} nodes log", + 'value' => "[{$deleteDate->format('Y-m-d H:i:s')}] Node {$node->getId()} was deleted by {$this->getUser()->getUserIdentifier()}", + ), + ), + array( + 'name' => 'node_removeElement', + 'params' => array( + 'gridId' => $grid->getId(), + 'nodeId' => $nodeId, + ), + ), + array( + 'name' => 'modal_unload', + 'params' => null, + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'modal_load', + 'params' => array( + 'htmlString' => $this->renderView('_dashboard/node/_delete_form.html.twig', array( + 'grid' => $grid, + 'worldmark' => $worldmark, + 'node' => $node, + 'form' => $form->createView(), + )), + ), + ), + ), + )); + } + + return $this->json(array('error' => 'Not found'), 404); + } + + throw $this->createNotFoundException(); + } +} diff --git a/src/Controller/RegionController.php b/src/Controller/RegionController.php new file mode 100644 index 0000000..dec3c35 --- /dev/null +++ b/src/Controller/RegionController.php @@ -0,0 +1,179 @@ +redirectToRoute('fo_region_show', array('slug'=>'mondstadt'), Response::HTTP_MOVED_PERMANENTLY); + } + + #[Route('/worldmap/{slug}', name: 'fo_worldmap_redirect_b', methods: ['GET'])] + public function redirectB(Region $region): RedirectResponse { + return $this->redirectToRoute('fo_region_show', array('slug'=>$region->getSlug()), Response::HTTP_MOVED_PERMANENTLY); + } + + #[Route('/{slug}', name: 'fo_region_show', methods: ['GET'])] + public function show(Request $request, ?Region $region): Response { + $version = $request->query->get('v'); + + if(!$version + || !in_array(floatval($version), Kernel::SUPPORTED_GAME_VERSION) + || (floatval($version) < Kernel::GAME_VERSION && !$this->isGranted('ROLE_ADMIN')) + || (floatval($version) > Kernel::GAME_VERSION && !$this->isGranted('ROLE_CONTRIBUTOR'))) { + $version = Kernel::GAME_VERSION; + } else { + $version = floatval($version); + } + + if(!$region + || $region->getVersion() > $version + || !$region->getIsActive() && !$this->isGranted('ROLE_CONTRIBUTOR')) { + throw $this->createNotFoundException(); + } + + $_region = $region->getIsAlias() ? $region->getParentRegion() : $region; + + $cells = $this->gridRepository->getGridCells($_region); + $maps = $this->mapRepository->getCellsMap($cells, $version); + $grid = $this->gridRepository->buildWorldmap($version, $cells, $maps, true); + + $worldmarks = $this->worldmarkRepository->getRegionWorldmarks($_region, $version); + $nodes = $this->nodeRepository->getGridNodes($cells, $worldmarks, $version, $this->isGranted('ROLE_ADMIN')); + + $worldmarksData = array(); + foreach($worldmarks as $worldmark) { + if(!array_key_exists($worldmark->getCategory()->getSlug(), $worldmarksData)) { + $worldmarksData[$worldmark->getCategory()->getSlug()]['_data'] = $worldmark->getCategory(); + $worldmarksData[$worldmark->getCategory()->getSlug()]['_worldmarks'] = array(); + } + + $worldmarksData[$worldmark->getCategory()->getSlug()]['_worldmarks'][] = $worldmark; + } + + $nodesData = array(); + foreach($nodes as $node) { + $nodesData["grid_{$node->getGrid()->getId()}"][] = $node; + } + + return $this->render('woldmap/show.html.twig', array( + // 'title' => "Genshin Impact interactive map of {$_region->getName()}", + 'title' => "{$_region->getName()} interactive map - Genshin Impact - Genshin World", + 'region' => $_region, + 'regionSlug' => $region->getSlug(), + 'version' => $version, + 'grid' => $grid, + 'worldmarksData' => $worldmarksData, + 'nodes' => $nodesData, + 'anchor' => $region->getIsAlias() ? $region->getAnchor() : null, + 'filter'=>$request->get('filter'), + )); + } + + #[Route('/dashboard/regions', name: 'bo_region_index', methods: ['GET'])] + public function index(): Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + return $this->render('_dashboard/region/index.html.twig', array( + 'title' => "Dashboard: Regions index", + )); + } + + #[Route('/dashboard/regions/new', name: 'bo_region_new', methods: ['GET', 'POST'])] + public function new(Request $request): Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + $region = new Region(); + $form = $this->regionRepository->getForm('bo_region_new', $region); + + $form->handleRequest($request); + if($form->isSubmitted() && $form->isValid()) { + $this->_em->persist($region); + + if($region->getIsAlias()) { + $region->setGridHeight(0); + $region->setGridWidth(0); + } + + if($region->getGridHeight() > 0 && $region->getGridWidth() > 0) { + for($row = 1; $row <= $region->getGridHeight(); $row++) { + for($col = 1; $col <= $region->getGridWidth(); $col++) { + $grid = new Grid(); + + $grid->setRegion($region) + ->setRow($row) + ->setCol($col); + + $this->_em->persist($grid); + } + } + } + + $this->_em->flush(); + + return $this->redirectToRoute('bo_region_index', array(), Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('_dashboard/region/new.html.twig', array( + 'title' => "Dashboard: Create region", + 'region' => $region, + 'form' => $form, + )); + } + + #[Route('/dashboard/regions/region-{id}', name: 'bo_region_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, Region $region): Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + $form = $this->regionRepository->getForm('bo_region_edit', $region); + + $form->handleRequest($request); + if($form->isSubmitted() && $form->isValid()) { + $this->_em->flush(); + + return $this->redirectToRoute('bo_region_index', array(), Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('_dashboard/region/edit.html.twig', array( + 'title' => "Dashboard: Edit region", + 'region' => $region, + 'form' => $form, + )); + } + + #[Route('/dashboard/regions/delete-{id}', name: 'bo_region_delete', methods: ['POST'])] + public function delete(Request $request, Region $region): RedirectResponse { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + if($this->isCsrfTokenValid('delete'.$region->getId(), $request->request->get('_token'))) { + $this->_em->remove($region); + $this->_em->flush(); + } + + return $this->redirectToRoute('bo_region_index', array(), Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php new file mode 100644 index 0000000..550df6d --- /dev/null +++ b/src/Controller/SecurityController.php @@ -0,0 +1,71 @@ +userRepository->getForm('security_register', $user); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid()) { + // encode the plain password + $user->setPassword( + $this->userPasswordHasher->hashPassword( + $user, + $form->get('plainPassword')->getData() + ) + ); + + $this->_em->persist($user); + $this->_em->flush(); + + // do anything else you need here, like send an email + + return $this->redirectToRoute('security_login', array(), Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('security/register.html.twig', array( + 'form' => $form, + )); + } + + #[Route(path: '/035c7785-2c2f-11ec-aaf0-ac1f6b44f230/login', name: 'security_login')] + public function login(AuthenticationUtils $authenticationUtils): Response { + // if ($this->getUser()) { + // return $this->redirectToRoute('target_path'); + // } + + // get the login error if there is one + $error = $authenticationUtils->getLastAuthenticationError(); + // last username entered by the user + $lastUsername = $authenticationUtils->getLastUsername(); + + return $this->render('security/login.html.twig', array( + 'last_username' => $lastUsername, + 'error' => $error, + )); + } + + #[Route(path: '/035c7785-2c2f-11ec-aaf0-ac1f6b44f230/logout', name: 'security_logout')] + public function logout(): void { + // throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.'); + } +} diff --git a/src/Controller/WorldmarkCategoryController.php b/src/Controller/WorldmarkCategoryController.php new file mode 100644 index 0000000..e3c81d4 --- /dev/null +++ b/src/Controller/WorldmarkCategoryController.php @@ -0,0 +1,81 @@ +render('_dashboard/worldmark_category/index.html.twig', array( + 'worldmarksCategories' => $this->worldmarkCategoryRepository->findBy(array(), array('sortOrder' => 'ASC')) + )); + } + + //ToDo set foirm to XHR for errors + #[Route('/new', name: 'bo_worldmark_category_new', methods: ['GET', 'POST'])] + public function new(Request $request): Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + $category=new WorldmarkCategory(); + $form=$this->worldmarkCategoryRepository->getForm('bo_worldmark_category_new', $category); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid()) { + $this->_em->persist($category); + $this->_em->flush(); + + return $this->redirectToRoute('bo_worldmark_category_index', array(), Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('_dashboard/worldmark_category/new.html.twig', array( + 'worldmarksCategories' => $this->worldmarkCategoryRepository->findBy(array(), array('sortOrder' => 'ASC')), + 'worldmarkCategory'=>$category, + 'form'=>$form, + )); + } + + //ToDo set foirm to XHR for errors + #[Route('/category-{id}', name: 'bo_worldmark_category_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, WorldmarkCategory $worldmarkCategory): Response { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + $form=$this->worldmarkCategoryRepository->getForm('bo_worldmark_category_edit', $worldmarkCategory); + $form->handleRequest($request); + + if($form->isSubmitted() && $form->isValid()) { + $this->_em->flush(); + + return $this->redirectToRoute('bo_worldmark_category_index', array(), Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('_dashboard/worldmark_category/edit.html.twig', array( + 'worldmarksCategories' => $this->worldmarkCategoryRepository->findBy(array(), array('sortOrder' => 'ASC')), + 'worldmarkCategory'=>$worldmarkCategory, + 'form'=>$form, + )); + } + + #[Route('/delete-{id}', name: 'bo_worldmark_category_delete', methods: ['POST'])] + public function delete(Request $request, WorldmarkCategory $worldmarkCategory): RedirectResponse { + $this->denyAccessUnlessGranted('ROLE_ADMIN'); + + if($this->isCsrfTokenValid('delete'.$worldmarkCategory->getId(), $request->request->get('_token'))) { + $this->_em->remove($worldmarkCategory); + $this->_em->flush(); + } + + return $this->redirectToRoute('bo_worldmark_category_index', array(), Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Controller/WorldmarkController.php b/src/Controller/WorldmarkController.php new file mode 100644 index 0000000..ff3b529 --- /dev/null +++ b/src/Controller/WorldmarkController.php @@ -0,0 +1,240 @@ + 'worldmarkCategoryId'])] +class WorldmarkController extends AbstractController { + public function __construct(private EntityManagerInterface $_em, + private FileManager $fileManager, + private WorldmarkCategoryRepository $worldmarkCategoryRepository, + private ItemCategoryRepository $itemCategoryRepository, + private MonsterCategoryRepository $monsterCategoryRepository, + private WorldmarkRepository $worldmarkRepository) {} + + #[Route('', name: 'bo_worldmark_index', methods: ['GET'])] + public function index(WorldmarkCategory $worldmarkCategory): Response { + $worldmarksCategories = $this->worldmarkCategoryRepository->findBy(array(), array('sortOrder' => 'ASC')); + $worldmarks = $this->worldmarkRepository->findBy(array('category' => $worldmarkCategory), array('sortOrder' => 'ASC')); + + return $this->render('_dashboard/worldmark/index.html.twig', array( + 'worldmarksCategories' => $worldmarksCategories, + 'worldmarkCategory' => $worldmarkCategory, + 'worldmarks' => $worldmarks, + )); + } + + #[Route('/new', name: 'bo_worldmark_new', methods: ['GET', 'POST'])] + public function new(Request $request, WorldmarkCategory $worldmarkCategory): JsonResponse|Response { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($request->isMethod('POST') && !$request->isXmlHttpRequest()) { + throw new NotFoundHttpException("Page not found"); + } + + $worldmark = new Worldmark(); + $worldmark->setCategory($worldmarkCategory); + + $form = $this->worldmarkRepository->getForm('bo_worldmark_new', $worldmarkCategory, $worldmark); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + if($worldmark->getItem() || $worldmark->getMonster() || $worldmark->getIcon() instanceof UploadedFile) { + if($worldmark->getItem()) { + $uploadedFile = $this->fileManager->getWorldmarkIconFromEntity($worldmark->getItem()); + } elseif($worldmark->getMonster()) { + $uploadedFile = $this->fileManager->getWorldmarkIconFromEntity($worldmark->getMonster()); + } elseif($worldmark->getIcon() instanceof UploadedFile) { + $uploadedFile = $this->fileManager->uploadWorldmarkIcon($worldmark->getIcon()); + } else { + $uploadedFile = array( + 'error' => true, + 'filename' => null, + 'message' => 'An internal error occurred', + ); + } + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + $worldmark->setIcon($uploadedFile['filename']); + } + + $this->_em->persist($worldmark); + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'redirect', + 'params' => array( + 'url' => $this->generateUrl('bo_worldmark_index', array('worldmarkCategoryId' => $worldmarkCategory->getId())), + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + $worldmarksCategories = $this->worldmarkCategoryRepository->findBy(array(), array('sortOrder' => 'ASC')); + + return $this->renderForm('_dashboard/worldmark/new.html.twig', array( + 'worldmarksCategories' => $worldmarksCategories, + 'worldmarkCategory' => $worldmarkCategory, + 'worldmark' => $worldmark, + 'form' => $form, + )); + } + + #[Route('/worldmark-{id}', name: 'bo_worldmark_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, WorldmarkCategory $worldmarkCategory, Worldmark $worldmark): JsonResponse|Response { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($request->isMethod('POST') && !$request->isXmlHttpRequest()) { + throw new NotFoundHttpException("Page not found"); + } + + $icon = $worldmark->getIcon(); + $item = $worldmark->getItem(); + $monster = $worldmark->getMonster(); + + $form = $this->worldmarkRepository->getForm('bo_worldmark_edit', $worldmarkCategory, $worldmark); + $form->handleRequest($request); + + if($form->isSubmitted()) { + if($form->isValid()) { + if(($worldmark->getItem() && $worldmark->getItem()->getId() !== $item->getId()) + || ($worldmark->getMonster() && $worldmark->getMonster()->getId() !== $monster->getId()) + || $worldmark->getIcon() instanceof UploadedFile) { + if($worldmark->getItem()) { + $uploadedFile = $this->fileManager->getWorldmarkIconFromEntity($worldmark->getItem()); + } elseif($worldmark->getMonster()) { + $uploadedFile = $this->fileManager->getWorldmarkIconFromEntity($worldmark->getMonster()); + } elseif($worldmark->getIcon() instanceof UploadedFile) { + $uploadedFile = $this->fileManager->uploadWorldmarkIcon($worldmark->getIcon()); + } else { + $uploadedFile = array( + 'error' => true, + 'filename' => null, + 'message' => 'An internal error occurred', + ); + } + + if($uploadedFile['error']) { + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => $uploadedFile['message'], + ), + ), + ), + )); + } + + if($icon) { + $this->fileManager->removeWorldmarkIcon($icon); + } + + $worldmark->setIcon($uploadedFile['filename']); + } else { + $worldmark->setIcon($icon); + } + + $this->_em->flush(); + + return $this->json(array( + '::function' => array( + array( + 'name' => 'redirect', + 'params' => array( + 'url' => $this->generateUrl('bo_worldmark_index', array('worldmarkCategoryId' => $worldmarkCategory->getId())), + ), + ), + ), + )); + } + + return $this->json(array( + '::function' => array( + array( + 'name' => 'messageInfo', + 'params' => array( + 'type' => 'error', + 'message' => 'Invalid form', + ), + ), + ), + )); + } + + $worldmarksCategories = $this->worldmarkCategoryRepository->findBy(array(), array('sortOrder' => 'ASC')); + + return $this->renderForm('_dashboard/worldmark/edit.html.twig', array( + 'worldmarksCategories' => $worldmarksCategories, + 'worldmarkCategory' => $worldmarkCategory, + 'worldmark' => $worldmark, + 'form' => $form, + )); + } + + #[Route('/delete-{id}', name: 'bo_worldmark_delete', methods: ['POST'])] + public function delete(Request $request, WorldmarkCategory $worldmarkCategory, Worldmark $worldmark): RedirectResponse { + $this->denyAccessUnlessGranted('ROLE_SENIOR'); + + if($this->isCsrfTokenValid('delete'.$worldmark->getId(), $request->request->get('_token'))) { + if($worldmark->getIcon()) { + $this->fileManager->removeWorldmarkIcon($worldmark->getIcon()); + } + + $this->_em->remove($worldmark); + $this->_em->flush(); + } + + return $this->redirectToRoute('bo_worldmark_index', array('worldmarkCategoryId' => $worldmarkCategory->getId()), Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Doctrine/DBAL/Types/TinyintType.php b/src/Doctrine/DBAL/Types/TinyintType.php new file mode 100644 index 0000000..44a9ac0 --- /dev/null +++ b/src/Doctrine/DBAL/Types/TinyintType.php @@ -0,0 +1,67 @@ + true])] + private $id; + + #[ORM\ManyToOne(targetEntity: Region::class)] + #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] + private $region; + + #[ORM\Column(name: '`row`', type: 'tinyint')] + private $row; + + #[ORM\Column(type: 'tinyint')] + private $col; + + public function getId(): ?int { + return $this->id; + } + + public function getRegion(): ?Region { + return $this->region; + } + + public function setRegion(?Region $region): self { + $this->region=$region; + + return $this; + } + + public function getRow() { + return $this->row; + } + + public function setRow($row): self { + $this->row=$row; + + return $this; + } + + public function getCol() { + return $this->col; + } + + public function setCol($col): self { + $this->col=$col; + + return $this; + } +} diff --git a/src/Entity/Item.php b/src/Entity/Item.php new file mode 100644 index 0000000..2635de4 --- /dev/null +++ b/src/Entity/Item.php @@ -0,0 +1,106 @@ + true])] + private $id; + + #[ORM\ManyToOne(targetEntity: ItemCategory::class)] + #[ORM\JoinColumn(nullable: false)] + private $category; + + #[ORM\Column(type: 'string', length: 60)] + private $name; + + #[ORM\Column(type: 'string', length: 60, unique: true)] + private $slug; + + #[ORM\Column(type: 'text', nullable: true)] + private $description; + + #[ORM\Column(type: 'string', length: 50, nullable: true)] + private $icon; + + #[ORM\Column(type: 'float')] + private $version; + + public function __toString(): string { + return $this->getName(); + } + + public function getId(): ?int { + return $this->id; + } + + public function getCategory(): ItemCategory { + return $this->category; + } + + public function setCategory(ItemCategory $category): self { + $this->category = $category; + + return $this; + } + + public function getName(): ?string { + return $this->name; + } + + public function setName(string $name): self { + $this->name = $name; + + return $this; + } + + public function getSlug(): ?string { + return $this->slug; + } + + public function setSlug(string $slug): self { + $this->slug = $slug; + + return $this; + } + + public function getDescription(): ?string { + return $this->description; + } + + public function setDescription(?string $description): self { + $this->description = $description; + + return $this; + } + + + public function getIcon(): string|UploadedFile|null { + return $this->icon; + } + + public function setIcon(string|UploadedFile|null $icon): self { + $this->icon = $icon; + + return $this; + } + + public function getVersion(): ?float { + return $this->version; + } + + public function setVersion(float $version): self { + $this->version = $version; + + return $this; + } +} diff --git a/src/Entity/ItemCategory.php b/src/Entity/ItemCategory.php new file mode 100644 index 0000000..802f2d2 --- /dev/null +++ b/src/Entity/ItemCategory.php @@ -0,0 +1,65 @@ + true])] + private $id; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private $name; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private $slug; + + #[ORM\Column(type: 'smallint', options: ['default' => 65535, 'unsigned' => true])] + private $sortOrder; + + public function __toString(): string { + return $this->getName(); + } + + public function getId(): ?int { + return $this->id; + } + + public function getName(): ?string { + return $this->name; + } + + public function setName(string $name): self { + $this->name = $name; + + return $this; + } + + public function getSlug(): ?string { + return $this->slug; + } + + public function setSlug(string $slug): self { + $this->slug = $slug; + + return $this; + } + + public function getSortOrder(): ?int { + return $this->sortOrder; + } + + public function setSortOrder(int $sortOrder): self { + $this->sortOrder = $sortOrder; + + return $this; + } +} diff --git a/src/Entity/Map.php b/src/Entity/Map.php new file mode 100644 index 0000000..8e46bb8 --- /dev/null +++ b/src/Entity/Map.php @@ -0,0 +1,89 @@ + true])] + private $id; + + #[ORM\ManyToOne(targetEntity: Grid::class)] + #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] + private $grid; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private $file; + + #[ORM\Column(type: 'datetime')] + private $modifiedAt; + + #[ORM\Column(type: 'float')] + private $version; + + public function __toString(): string { + return $this->getFile(); + } + + #[ORM\PrePersist] + #[ORM\PreUpdate] + public function updateLifecycle() { + $this->setModifiedAt(new DateTime()); + } + + public function getId(): ?int { + return $this->id; + } + + public function getGrid(): ?Grid + { + return $this->grid; + } + + public function setGrid(?Grid $grid): self + { + $this->grid = $grid; + + return $this; + } + + public function getFile(): string|UploadedFile|null { + return $this->file; + } + + public function setFile(string|UploadedFile|null $file): self { + $this->file=$file; + + return $this; + } + + public function getModifiedAt(): ?DateTimeInterface { + return $this->modifiedAt; + } + + public function setModifiedAt(DateTimeInterface $modifiedAt): self { + $this->modifiedAt=$modifiedAt; + + return $this; + } + + public function getVersion(): ?float { + return $this->version; + } + + public function setVersion(float $version): self { + $this->version=$version; + + return $this; + } +} diff --git a/src/Entity/Monster.php b/src/Entity/Monster.php new file mode 100644 index 0000000..3a59179 --- /dev/null +++ b/src/Entity/Monster.php @@ -0,0 +1,105 @@ + true])] + private $id; + + #[ORM\ManyToOne(targetEntity: MonsterCategory::class)] + #[ORM\JoinColumn(nullable: false)] + private $category; + + #[ORM\Column(type: 'string', length: 60)] + private $name; + + #[ORM\Column(type: 'string', length: 60, unique: true)] + private $slug; + + #[ORM\Column(type: 'text', nullable: true)] + private $description; + + #[ORM\Column(type: 'string', length: 50, nullable: true)] + private $icon; + + #[ORM\Column(type: 'float')] + private $version; + + public function __toString(): string { + return $this->getName(); + } + + public function getId(): ?int { + return $this->id; + } + + public function getCategory(): MonsterCategory { + return $this->category; + } + + public function setCategory(MonsterCategory $category): self { + $this->category=$category; + + return $this; + } + + public function getName(): ?string { + return $this->name; + } + + public function setName(string $name): self { + $this->name=$name; + + return $this; + } + + public function getSlug(): ?string { + return $this->slug; + } + + public function setSlug(string $slug): self { + $this->slug=$slug; + + return $this; + } + + public function getDescription(): ?string { + return $this->description; + } + + public function setDescription(?string $description): self { + $this->description=$description; + + return $this; + } + + public function getIcon(): string|UploadedFile|null { + return $this->icon; + } + + public function setIcon(string|UploadedFile|null $icon): self { + $this->icon=$icon; + + return $this; + } + + public function getVersion(): ?float { + return $this->version; + } + + public function setVersion(float $version): self { + $this->version=$version; + + return $this; + } +} diff --git a/src/Entity/MonsterCategory.php b/src/Entity/MonsterCategory.php new file mode 100644 index 0000000..f8e2177 --- /dev/null +++ b/src/Entity/MonsterCategory.php @@ -0,0 +1,52 @@ + true])] + private $id; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private $name; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private $slug; + + public function __toString(): string { + return $this->getName(); + } + + public function getId(): ?int { + return $this->id; + } + + public function getName(): ?string { + return $this->name; + } + + public function setName(string $name): self { + $this->name=$name; + + return $this; + } + + public function getSlug(): ?string { + return $this->slug; + } + + public function setSlug(string $slug): self { + $this->slug=$slug; + + return $this; + } +} diff --git a/src/Entity/Node.php b/src/Entity/Node.php new file mode 100644 index 0000000..75a4157 --- /dev/null +++ b/src/Entity/Node.php @@ -0,0 +1,230 @@ + true])] + private ?int $id; + + #[ORM\ManyToOne(targetEntity: Grid::class)] + #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] + private ?Grid $grid; + + #[ORM\ManyToOne(targetEntity: Worldmark::class)] + #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] + private ?Worldmark $worldmark; + + #[ORM\Column(type: 'text', nullable: true)] + private ?string $description; + + #[ORM\Column(type: 'tinyint', options: ['default' => 1])] + private int $quantity; + + #[ORM\Column(type: 'smallint', options: ['default' => 0, 'unsigned' => true])] + private ?int $primogem; + + #[ORM\Column(type: 'json')] + private array $coordinate; + + #[ORM\Column(type: 'string', length: 50, nullable: true)] + private string|UploadedFile|null $screenshotA; + + #[ORM\Column(type: 'string', length: 50, nullable: true)] + private string|UploadedFile|null $screenshotB; + + #[ORM\Column(type: 'string', length: 50, nullable: true)] + private string|UploadedFile|null $screenshotC; + + #[ORM\Column(type: 'string', length: 50, nullable: true)] + private string|UploadedFile|null $screenshotD; + + #[ORM\Column(type: 'string', length: 50, nullable: true)] + private string|UploadedFile|null $screenshotE; + + #[ORM\Column(type: 'datetime')] + private ?DateTimeInterface $modifiedAt; + + #[ORM\Column(type: 'float')] + private ?float $version; + + #[ORM\Column(type: 'boolean')] + private bool $isDeleted; + + public function __construct() { + $this->id = null; + $this->description = null; + $this->quantity = 1; + $this->primogem = 0; + $this->coordinate = array( + 'x' => 50, + 'y' => 50, + ); + $this->screenshotA = null; + $this->screenshotB = null; + $this->screenshotC = null; + $this->screenshotD = null; + $this->screenshotE = null; + $this->version = null; + $this->isDeleted = false; + } + + #[ORM\PrePersist] + #[ORM\PreUpdate] + public function updateLifecycle() { + $this->setModifiedAt(new DateTime()); + } + + public function getId(): ?int { + return $this->id; + } + + public function getGrid(): ?Grid { + return $this->grid; + } + + public function setGrid(?Grid $grid): self { + $this->grid = $grid; + + return $this; + } + + public function getWorldmark(): ?Worldmark { + return $this->worldmark; + } + + public function setWorldmark(?Worldmark $worldmark): self { + $this->worldmark = $worldmark; + + return $this; + } + + public function getDescription(): ?string { + return $this->description; + } + + public function setDescription(?string $description): self { + $this->description = $description; + + return $this; + } + + public function getQuantity(): int { + return $this->quantity; + } + + public function setQuantity($quantity): self { + $this->quantity = $quantity; + + return $this; + } + + public function getPrimogem(): int { + return $this->primogem; + } + + public function setPrimogem($primogem): self { + $this->primogem = $primogem; + + return $this; + } + + public function getCoordinate(): array { + return $this->coordinate; + } + + public function setCoordinate(array $coordinate): self { + $this->coordinate = $coordinate; + + return $this; + } + + public function getScreenshotA(): string|UploadedFile|null { + return $this->screenshotA; + } + + public function setScreenshotA(string|UploadedFile|null $screenshotA): self { + $this->screenshotA = $screenshotA; + + return $this; + } + + public function getScreenshotB(): string|UploadedFile|null { + return $this->screenshotB; + } + + public function setScreenshotB(string|UploadedFile|null $screenshotB): self { + $this->screenshotB = $screenshotB; + + return $this; + } + + public function getScreenshotC(): string|UploadedFile|null { + return $this->screenshotC; + } + + public function setScreenshotC(string|UploadedFile|null $screenshotC): self { + $this->screenshotC = $screenshotC; + + return $this; + } + + public function getScreenshotD(): string|UploadedFile|null { + return $this->screenshotD; + } + + public function setScreenshotD(string|UploadedFile|null $screenshotD): self { + $this->screenshotD = $screenshotD; + + return $this; + } + + public function getScreenshotE(): string|UploadedFile|null { + return $this->screenshotE; + } + + public function setScreenshotE(string|UploadedFile|null $screenshotE): self { + $this->screenshotE = $screenshotE; + + return $this; + } + + public function getModifiedAt(): ?DateTimeInterface { + return $this->modifiedAt; + } + + public function setModifiedAt(DateTimeInterface $modifiedAt): self { + $this->modifiedAt = $modifiedAt; + + return $this; + } + + public function getVersion(): ?float { + return $this->version; + } + + public function setVersion(float $version): self { + $this->version = $version; + + return $this; + } + + public function getIsDeleted(): ?bool { + return $this->isDeleted; + } + + public function setIsDeleted(bool $isDeleted): self { + $this->isDeleted = $isDeleted; + + return $this; + } +} diff --git a/src/Entity/Region.php b/src/Entity/Region.php new file mode 100644 index 0000000..9a27eeb --- /dev/null +++ b/src/Entity/Region.php @@ -0,0 +1,234 @@ + true])] + private ?int $id; + + #[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'subRegions')] + private ?Region $parentRegion; + + #[ORM\OneToMany(mappedBy: 'parentRegion', targetEntity: self::class)] + private Collection $subRegions; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private ?string $name; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private ?string $slug; + + #[ORM\Column(type: 'boolean', options: ['default' => 0])] + private ?bool $isAlias; + + #[ORM\Column(type: 'json', length: 20, nullable: true)] + private ?string $anchor; + + #[ORM\Column(type: 'text', nullable: true)] + private ?string $description; + + #[ORM\Column(type: 'string', length: 50)] + private ?string $icon; + + #[ORM\Column(type: 'tinyint', options: ['default' => 0, 'unsigned' => true])] + private ?int $gridHeight; + + #[ORM\Column(type: 'tinyint', options: ['default' => 0, 'unsigned' => true])] + private ?int $gridWidth; + + #[ORM\Column(type: 'string', length: 50)] + private ?string $mapBackground; + + #[ORM\Column(type: 'float')] + private ?float $version; + + #[ORM\Column(type: 'smallint', options: ['default' => 65535, 'unsigned' => true])] + private ?int $sortOrder; + + #[ORM\Column(type: 'boolean', options: ['default' => 1])] + private int $isActive; + + #[ORM\ManyToMany(targetEntity: Worldmark::class, mappedBy: 'regions')] + private Collection $worldmarks; + + public function __construct() { + $this->id = null; + $this->mapBackground = null; + $this->worldmarks = new ArrayCollection(); + $this->subRegions = new ArrayCollection(); + $this->isAlias = 0; + $this->isActive = 1; + } + + public function __toString(): string { + return $this->getName(); + } + + public function getId(): ?int { + return $this->id; + } + + public function getParentRegion(): ?self { + return $this->parentRegion; + } + + public function setParentRegion(?self $parentRegion): self { + $this->parentRegion = $parentRegion; + + return $this; + } + + public function getSubRegions(): Collection { + return $this->subRegions; + } + + public function getName(): ?string { + return $this->name; + } + + public function setName(string $name): self { + $this->name=$name; + + return $this; + } + + public function getSlug(): ?string { + return $this->slug; + } + + public function setSlug(string $slug): self { + $this->slug=$slug; + + return $this; + } + + public function getIsAlias(): ?bool { + return $this->isAlias; + } + + public function setIsAlias(bool $isAlias): self { + $this->isAlias = $isAlias; + + return $this; + } + + public function getAnchor(): ?string { + return $this->anchor; + } + + public function setAnchor(?string $anchor): self { + $this->anchor = $anchor; + + return $this; + } + + public function getDescription(): ?string { + return $this->description; + } + + public function setDescription(?string $description): self { + $this->description = $description; + + return $this; + } + + public function getIcon(): ?string { + return $this->icon; + } + + public function setIcon(string $icon): self { + $this->icon=$icon; + + return $this; + } + + public function getGridHeight(): ?int { + return $this->gridHeight; + } + + public function setGridHeight(int $gridHeight): self { + $this->gridHeight=$gridHeight; + + return $this; + } + + public function getGridWidth(): ?int { + return $this->gridWidth; + } + + public function setGridWidth(int $gridWidth): self { + $this->gridWidth=$gridWidth; + + return $this; + } + + public function getMapBackground(): ?string { + return $this->mapBackground; + } + + public function setMapBackground(string $mapBackground): self { + $this->mapBackground=$mapBackground; + + return $this; + } + + public function getVersion(): ?float { + return $this->version; + } + + public function setVersion(float $version): self { + $this->version=$version; + + return $this; + } + + public function getSortOrder(): ?int { + return $this->sortOrder; + } + + public function setSortOrder(int $sortOrder): self { + $this->sortOrder=$sortOrder; + + return $this; + } + + public function getIsActive(): bool { + return $this->isActive; + } + + public function setIsActive(bool $isActive): self { + $this->isActive=$isActive; + + return $this; + } + + public function getWorldmarks(): Collection { + return $this->worldmarks; + } + + public function addWorldmark(Worldmark $worldmark): self { + if(!$this->worldmarks->contains($worldmark)) { + $this->worldmarks[]=$worldmark; + } + + return $this; + } + + public function removeWorldmark(Worldmark $worldmark): self { + $this->worldmarks->removeElement($worldmark); + + return $this; + } +} diff --git a/src/Entity/User.php b/src/Entity/User.php new file mode 100644 index 0000000..25eda57 --- /dev/null +++ b/src/Entity/User.php @@ -0,0 +1,138 @@ + true])] + private $id; + + #[ORM\Column(type: 'string', length: 180, unique: true)] + private $username; + + #[ORM\Column(type: 'string', length: 255, nullable: true)] + private $email; + + #[ORM\Column(type: 'integer', nullable: true, options: ["unsigned" => true])] + private $uid; + + #[ORM\Column(type: 'string')] + private $password; + + #[ORM\Column(type: 'json')] + private $roles = []; + + public function __toString(): string { + return $this->getUserIdentifier(); + } + + #[ORM\PrePersist] + public function setFirstRole() { + $this->setRoles(array()); + } + + public function getId(): ?int { + return $this->id; + } + + /** + * A visual identifier that represents this user. + * + * @see UserInterface + */ + public function getUserIdentifier(): string { + return (string)$this->username; + } + + /** + * @deprecated since Symfony 5.3, use getUserIdentifier instead + */ + public function getUsername(): string { + return (string)$this->username; + } + + public function setUsername(string $username): self { + $this->username = $username; + + return $this; + } + + public function getEmail(): ?string { + return $this->email; + } + + public function setEmail(?string $email): self { + $this->email = $email; + + return $this; + } + + public function getUid(): ?int { + return $this->uid; + } + + public function setUid(?int $uid): self { + $this->uid = $uid; + + return $this; + } + + /** + * @see PasswordAuthenticatedUserInterface + */ + public function getPassword(): string { + return $this->password; + } + + public function setPassword(string $password): self { + $this->password = $password; + + return $this; + } + + /** + * @see UserInterface + */ + public function getRoles(): array { + return $this->roles; + } + + public function setRoles(array $roles): self { + if(!in_array('ROLE_USER', $roles)) { + array_unshift($roles, 'ROLE_USER'); + } + + $this->roles = array_unique($roles); + + return $this; + } + + /** + * Returning a salt is only needed, if you are not using a modern + * hashing algorithm (e.g. bcrypt or sodium) in your security.yaml. + * + * @see UserInterface + */ + public function getSalt(): ?string { + return null; + } + + /** + * @see UserInterface + */ + public function eraseCredentials() { + // If you store any temporary, sensitive data on the user, clear it here + // $this->plainPassword = null; + } +} diff --git a/src/Entity/Worldmark.php b/src/Entity/Worldmark.php new file mode 100644 index 0000000..51bd465 --- /dev/null +++ b/src/Entity/Worldmark.php @@ -0,0 +1,217 @@ + true])] + private $id; + + #[ORM\ManyToOne(targetEntity: WorldmarkCategory::class)] + #[ORM\JoinColumn(nullable: false)] + private $category; + + #[ORM\ManyToOne(targetEntity: Item::class)] + private $item; + + #[ORM\ManyToOne(targetEntity: Monster::class)] + private $monster; + + #[ORM\Column(type: 'string', length: 60)] + private $name; + + #[ORM\Column(type: 'string', length: 60, unique: true)] + private $slug; + + #[ORM\Column(type: 'text', nullable: true)] + private $description; + + #[ORM\Column(type: 'tinyint', options: ['default' => 1, 'unsigned' => true])] + private $defaultQuantityValue; + + #[ORM\Column(type: 'tinyint', options: ['default' => 0, 'unsigned' => true])] + private $defaultPrimogemValue; + + #[ORM\Column(type: 'string', length: 50, nullable: true)] + private $icon; + + #[ORM\Column(type: 'boolean', options: ['default' => 1])] + private $canBeHidden; + + #[ORM\Column(type: 'float')] + private $version; + + #[ORM\Column(type: 'smallint', options: ['default' => 65535, 'unsigned' => true])] + private $sortOrder; + + #[ORM\ManyToMany(targetEntity: Region::class, inversedBy: 'worldmarks')] + #[ORM\JoinTable(name: 'region_worldmark')] + private $regions; + + public function __construct() { + $this->defaultQuantityValue = 1; + $this->defaultPrimogemValue = 0; + $this->canBeHidden = 1; + $this->regions=new ArrayCollection(); + } + + public function __toString(): string { + return $this->getName(); + } + + public function getId(): ?int { + return $this->id; + } + + public function getCategory(): WorldmarkCategory { + return $this->category; + } + + public function setCategory(WorldmarkCategory $category): self { + $this->category=$category; + + return $this; + } + + public function getItem(): ?Item { + return $this->item; + } + + public function setItem(?Item $item): self { + $this->item=$item; + + return $this; + } + + public function getMonster(): ?Monster { + return $this->monster; + } + + public function setMonster(?Monster $monster): self { + $this->monster=$monster; + + return $this; + } + + public function getName(): ?string { + return $this->name; + } + + public function setName(string $name): self { + $this->name=$name; + + return $this; + } + + public function getSlug(): ?string { + return $this->slug; + } + + public function setSlug(string $slug): self { + $this->slug=$slug; + + return $this; + } + + public function getDescription(): ?string { + return $this->description; + } + + public function setDescription(?string $description): self { + $this->description=$description; + + return $this; + } + + public function getDefaultQuantityValue() { + return $this->defaultQuantityValue; + } + + public function setDefaultQuantityValue($defaultQuantityValue): self { + $this->defaultQuantityValue = $defaultQuantityValue; + + return $this; + } + + public function getDefaultPrimogemValue() { + return $this->defaultPrimogemValue; + } + + public function setDefaultPrimogemValue($defaultPrimogemValue): self { + $this->defaultPrimogemValue = $defaultPrimogemValue; + + return $this; + } + + public function getIcon(): string|UploadedFile|null { + return $this->icon; + } + + public function setIcon(string|UploadedFile|null $icon): self { + $this->icon=$icon; + + return $this; + } + + public function getCanBeHidden(): ?bool { + return $this->canBeHidden; + } + + public function setCanBeHidden(bool $canBeHidden): self { + $this->canBeHidden=$canBeHidden; + + return $this; + } + + public function getVersion(): ?float { + return $this->version; + } + + public function setVersion(float $version): self { + $this->version=$version; + + return $this; + } + + public function getSortOrder(): ?int { + return $this->sortOrder; + } + + public function setSortOrder(int $sortOrder): self { + $this->sortOrder=$sortOrder; + + return $this; + } + + public function getRegions(): Collection { + return $this->regions; + } + + public function addRegion(Region $region): self { + if(!$this->regions->contains($region)) { + $this->regions[]=$region; + $region->addWorldmark($this); + } + + return $this; + } + + public function removeRegion(Region $region): self { + if($this->regions->removeElement($region)) { + $region->removeWorldmark($this); + } + + return $this; + } +} diff --git a/src/Entity/WorldmarkCategory.php b/src/Entity/WorldmarkCategory.php new file mode 100644 index 0000000..80b6772 --- /dev/null +++ b/src/Entity/WorldmarkCategory.php @@ -0,0 +1,65 @@ + true])] + private $id; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private $name; + + #[ORM\Column(type: 'string', length: 50, unique: true)] + private $slug; + + #[ORM\Column(type: 'smallint', options: ['default' => 65535, 'unsigned' => true])] + private $sortOrder; + + public function __toString(): string { + return $this->getName(); + } + + public function getId(): ?int { + return $this->id; + } + + public function getName(): ?string { + return $this->name; + } + + public function setName(string $name): self { + $this->name=$name; + + return $this; + } + + public function getSlug(): ?string { + return $this->slug; + } + + public function setSlug(string $slug): self { + $this->slug=$slug; + + return $this; + } + + public function getSortOrder(): ?int { + return $this->sortOrder; + } + + public function setSortOrder(int $sortOrder): self { + $this->sortOrder=$sortOrder; + + return $this; + } +} diff --git a/src/EventListener/KernelListener.php b/src/EventListener/KernelListener.php new file mode 100644 index 0000000..3b79314 --- /dev/null +++ b/src/EventListener/KernelListener.php @@ -0,0 +1,79 @@ +getRequest(); + + if(!$requestEvent->isMainRequest() || $request->isXmlHttpRequest()) { + return; + } + + if(($this->phpExtension->strStartWith($request->attributes->get('_route'), 'bo_') + && !$this->security->isGranted('ROLE_CONTRIBUTOR')) + || ($this->phpExtension->strStartWith($request->getRequestUri(), '/dev') + && (!$this->security->getUser() || !$this->security->isGranted('ROLE_ADMIN')))) { + + throw new NotFoundHttpException("Page not found"); + } + } + + + public function onKernelController(ControllerEvent $controllerEvent) { + if(!$controllerEvent->isMainRequest()) { + return; + } + + $request = $controllerEvent->getRequest(); + + $route = $request->attributes->get('_route'); + + $this->twigEnvironment->addGlobal('user', $this->security->getUser()); + $this->twigEnvironment->addGlobal('route', $route); + $this->twigEnvironment->addGlobal('locale', $request->getLocale()); + $this->twigEnvironment->addGlobal('gameVersion', Kernel::GAME_VERSION); + $this->twigEnvironment->addGlobal('supportedGameVersion', Kernel::SUPPORTED_GAME_VERSION); + $this->twigEnvironment->addGlobal('isTouchDevice', $this->isTouchDevice()); + + $regions = $this->regionRepository->getRegions(); + $this->twigEnvironment->addGlobal('regions', $regions); + } + + public function onKernelResponse(ResponseEvent $responseEvent) { + } + + public function onKernelException(ExceptionEvent $exceptionEvent) { + } + + private function isTouchDevice(): array { + $detect = new MobileDetect(); + + return array( + 'isTablet' => $detect->isTablet(), + 'isMobile' => $detect->isMobile(), + ); + } +} \ No newline at end of file diff --git a/src/Extension/PhpExtension.php b/src/Extension/PhpExtension.php new file mode 100644 index 0000000..26ad90f --- /dev/null +++ b/src/Extension/PhpExtension.php @@ -0,0 +1,49 @@ + strlen($str) || substr_compare($str, $needle, 0, strlen($needle)) !== 0) { + return false; + } else { + return true; + } + } + + public function strEndWith(string $str, string $needle): bool { + if($str === '' || $needle === '' || strlen($needle) > strlen($str) || substr_compare($str, $needle, strlen($str)-strlen($needle), strlen($needle)) !== 0) { + return false; + } else { + return true; + } + } + + public function strLike(string $str, string $needle, bool $ignoreCase = false): bool { + if($ignoreCase) { + return str_contains(strtolower($str), strtolower($needle)); + } else { + return str_contains($str, $needle); + } + } + + public function strPad(string $str, int $padLength, string $padString, string $direction='left'): string { + $strPad=null; + if($direction == 'left') { + $strPad=STR_PAD_LEFT; + } elseif($direction == 'right') { + $strPad=STR_PAD_RIGHT; + } elseif($direction == 'both') { + $strPad=STR_PAD_BOTH; + } + if($strPad !== null) { + return str_pad($str, $padLength, $padString, $strPad); + } else { + return $str; + } + } + + public function trim($input): array|string { + return !is_array($input) ? trim($input) : array_map(array($this, 'trim',), $input); + } +} \ No newline at end of file diff --git a/src/Extension/TwigExtension.php b/src/Extension/TwigExtension.php new file mode 100644 index 0000000..cd0a585 --- /dev/null +++ b/src/Extension/TwigExtension.php @@ -0,0 +1,105 @@ + + public function getUuidFunction(): string { + return Uuid::uuid1()->toString(); + } + // + + // + public function jsonDecodeFilter($json): mixed { + if($this->isJson($json)) { + return json_decode($json); + } + + return false; + } + + public function strStartWithFilter(string $str, string $needle): bool { + if($str === '' || $needle === '' || strlen($needle) > strlen($str) || substr_compare($str, $needle, 0, strlen($needle)) !== 0) { + return false; + } else { + return true; + } + } + + public function strEndWithFilter(string $str, string $needle): bool { + if($str === '' || $needle === '' || strlen($needle) > strlen($str) || substr_compare($str, $needle, strlen($str) - strlen($needle), strlen($needle)) !== 0) { + return false; + } else { + return true; + } + } + + public function strLikeFilter(string $str, string $needle, bool $ignoreCase = false): bool { + if($ignoreCase) { + return str_contains(strtolower($str), strtolower($needle)); + } else { + return str_contains($str, $needle); + } + } + + public function strPadFilter(string $str, int $padLength, string $padString, string $direction = 'left'): string { + $strPad = null; + if($direction == 'left') { + $strPad = STR_PAD_LEFT; + } elseif($direction == 'right') { + $strPad = STR_PAD_RIGHT; + } elseif($direction == 'both') { + $strPad = STR_PAD_BOTH; + } + if($strPad !== null) { + return str_pad($str, $padLength, $padString, $strPad); + } else { + return $str; + } + } + + public function trimFilter($input): array|string { + return !is_array($input) ? trim($input) : array_map(array($this, 'trim',), $input); + } + + /** + * @param array $array + * @return array + */ + public function shuffleArrayFilter(array $array): array { + shuffle($array); + + return $array; + } + + // + + private function isJson($string): bool { + json_decode($string); + + return (json_last_error() == JSON_ERROR_NONE); + } +} \ No newline at end of file diff --git a/src/Form/GridType.php b/src/Form/GridType.php new file mode 100644 index 0000000..92d1772 --- /dev/null +++ b/src/Form/GridType.php @@ -0,0 +1,37 @@ +add('row') + // ->add('col') + // ->add('region'); + $builder->add('positions', ChoiceType::class, array( + 'choices' => array( + 'Add row before' => 'row_before', + 'Add row after' => 'row_after', + 'Add column before' => 'column_before', + 'Add column after' => 'column_after', + ), + 'data'=>null, + 'mapped'=>false, + 'expanded'=>true, + 'multiple'=>true, + 'required'=>false, + )); + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class' => Grid::class, + 'data_route' => null, + )); + } +} diff --git a/src/Form/ItemCategoryType.php b/src/Form/ItemCategoryType.php new file mode 100644 index 0000000..d849431 --- /dev/null +++ b/src/Form/ItemCategoryType.php @@ -0,0 +1,33 @@ +add('name', TextType::class, array( + 'attr' => array('data-slug-target' => 'item_category_name') + )) + ->add('slug', TextType::class, array( + 'attr' => array( + 'data-slug-source' => 'item_category_name', + 'readonly' => 'readonly', + ), + )) + ->add('sortOrder', TextType::class, array( + // 'attr' => array('pattern'=>'^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$'), + )); + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class' => ItemCategory::class, + 'data_route' => null, + )); + } +} diff --git a/src/Form/ItemType.php b/src/Form/ItemType.php new file mode 100644 index 0000000..a7badbd --- /dev/null +++ b/src/Form/ItemType.php @@ -0,0 +1,56 @@ +add('name', TextType::class, array( + 'attr'=>array('data-slug-target'=>'item_name') + )) + ->add('slug', TextType::class, array( + 'attr'=>array( + 'data-slug-source'=>'item_name', + 'readonly'=>'readonly' + ) + )) + ->add('description', TextareaType::class, array( + 'required'=>false + )) + ->add('icon', FileType::class, array( + 'data'=>null, + 'required'=>false, + )) + ->add('version', ChoiceType::class, array( + 'choices'=>array_combine(Kernel::SUPPORTED_GAME_VERSION, Kernel::SUPPORTED_GAME_VERSION), + 'data'=>$this->phpExtension->strEndWith($options['data_route'], '_new') ? Kernel::GAME_VERSION : $options['data']->getVersion(), + )); + + if($this->phpExtension->strEndWith($options['data_route'], '_edit')) { + $builder->add('removeFile', CheckboxType::class, array( + 'mapped'=>false, + 'required'=>false, + )); + } + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class' => Item::class, + 'data_route' => null, + )); + } +} diff --git a/src/Form/MapFragmentType.php b/src/Form/MapFragmentType.php new file mode 100644 index 0000000..dd30b73 --- /dev/null +++ b/src/Form/MapFragmentType.php @@ -0,0 +1,51 @@ +add('row', TextType::class, array( + 'attr'=>array('pattern'=>'[0-9]'), + )) + ->add('col', TextType::class, array( + 'attr'=>array('pattern'=>'[0-9]'), + )) + ->add('fragment', FileType::class, array( + 'data_class'=>null, + 'required'=>false, + )) + ->add('version', ChoiceType::class, array( + 'choices'=>array_combine(Kernel::SUPPORTED_GAME_VERSION, Kernel::SUPPORTED_GAME_VERSION), + 'data'=>$this->phpExtension->strEndWith($options['data_route'], '_new') ? Kernel::GAME_VERSION : $options['data']->getVersion(), + )); + // ->add('modifiedAt') + // ->add('region'); + + if($this->phpExtension->strEndWith($options['data_route'], '_edit')) { + $builder->add('blank', CheckboxType::class, array( + 'mapped'=>false, + 'required'=>false, + )); + } + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults([ + 'data_class'=>Map::class, + 'data_route'=>null, + ]); + } +} diff --git a/src/Form/MapType.php b/src/Form/MapType.php new file mode 100644 index 0000000..405dc80 --- /dev/null +++ b/src/Form/MapType.php @@ -0,0 +1,33 @@ +add('file', FileType::class, array( + 'data_class'=>null, + 'required'=>false, + )); + + if($this->phpExtension->strEndWith($options['data_route'], '_new')) { + $builder->add('version', HiddenType::class); + } + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class'=>Map::class, + 'data_route'=>null, + )); + } +} diff --git a/src/Form/MonsterCategoryType.php b/src/Form/MonsterCategoryType.php new file mode 100644 index 0000000..3e53209 --- /dev/null +++ b/src/Form/MonsterCategoryType.php @@ -0,0 +1,30 @@ +add('name', TextType::class, array( + 'attr'=>array('data-slug-target'=>'monster_category_name') + )) + ->add('slug', TextType::class, array( + 'attr'=>array( + 'data-slug-source'=>'monster_category_name', + 'readonly'=>'readonly' + ) + )); + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class'=>MonsterCategory::class, + 'data_route'=>null, + )); + } +} diff --git a/src/Form/MonsterType.php b/src/Form/MonsterType.php new file mode 100644 index 0000000..0acbf55 --- /dev/null +++ b/src/Form/MonsterType.php @@ -0,0 +1,58 @@ +add('name', TextType::class, array( + 'attr'=>array( + 'data-slug-target'=>'monster_name' + ) + )) + ->add('slug', TextType::class, array( + 'attr'=>array( + 'data-slug-source'=>'monster_name', + 'readonly'=>'readonly' + ) + )) + ->add('description', TextareaType::class, array( + 'required'=>false + )) + ->add('icon', FileType::class, array( + 'data'=>null, + 'required'=>false, + )) + ->add('version', ChoiceType::class, array( + 'choices'=>array_combine(Kernel::SUPPORTED_GAME_VERSION, Kernel::SUPPORTED_GAME_VERSION), + 'data'=>$this->phpExtension->strEndWith($options['data_route'], '_new') ? Kernel::GAME_VERSION : $options['data']->getVersion(), + )); + + if($this->phpExtension->strEndWith($options['data_route'], '_edit')) { + $builder->add('removeFile', CheckboxType::class, array( + 'mapped'=>false, + 'required'=>false, + )); + } + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class'=>Monster::class, + 'data_route'=>null, + )); + } +} diff --git a/src/Form/NodeType.php b/src/Form/NodeType.php new file mode 100644 index 0000000..74415da --- /dev/null +++ b/src/Form/NodeType.php @@ -0,0 +1,126 @@ +add('isDeleted', HiddenType::class, array( + 'data'=>true, + 'required'=>true + )); + } else { + $coordinate = $node->getCoordinate(); + $versions=Kernel::SUPPORTED_GAME_VERSION; + + foreach($versions as $key=>$version) { + if($version < Kernel::GAME_VERSION) { + unset($versions[$key]); + } + } + + $builder->add('quantity', TextType::class, array( + 'attr'=>array( + 'pattern'=>'^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$', + ), + 'data' => $this->phpExtension->strEndWith($options['data_route'], '_new') ? $node->getWorldmark()->getDefaultQuantityValue() : $node->getQuantity() + )) + ->add('primogem', TextType::class, array( + 'attr'=>array( + 'pattern'=>'^([0-9]|[1-9][0-9]{1-2})$', + ), + 'data' => $this->phpExtension->strEndWith($options['data_route'], '_new') ? $node->getWorldmark()->getDefaultPrimogemValue() : $node->getPrimogem() + )) + ->add('coordinate', HiddenType::class) + ->add('coordX', NumberType::class, array( + 'attr'=>array( + 'readonly'=>true, + 'disabled'=>true, + ), + 'data'=>$coordinate['x'], + 'mapped'=>false, + )) + ->add('coordY', NumberType::class, array( + 'attr'=>array( + 'readonly'=>true, + 'disabled'=>true, + ), + 'data'=>$coordinate['y'], + 'mapped'=>false, + )) + ->add('description', TextareaType::class, array( + 'required'=>false + )) + ->add('screenshotA', FileType::class, array( + 'data'=>null, + 'required'=>false, + )) + ->add('screenshotB', FileType::class, array( + 'data'=>null, + 'required'=>false, + )) + ->add('screenshotC', FileType::class, array( + 'data'=>null, + 'required'=>false, + )) + ->add('screenshotD', FileType::class, array( + 'data'=>null, + 'required'=>false, + )) + ->add('screenshotE', FileType::class, array( + 'data'=>null, + 'required'=>false, + )) + ->add('version', ChoiceType::class, array( + 'choices' => array_combine($versions, $versions), + 'data' => $this->phpExtension->strEndWith($options['data_route'], '_new') ? Kernel::GAME_VERSION : ($options['data']->getVersion() < Kernel::GAME_VERSION ? Kernel::GAME_VERSION : $options['data']->getVersion()), + 'expanded' => true, + 'multiple' => false, + 'required' => true, + )); + // ->add('createAt') + // ->add('modifiedAt') + + // ->add('isDeleted') + // ->add('grid') + // ->add('worldmark') + + $builder->get('coordinate') + ->addModelTransformer(new CallbackTransformer( + function($array) use ($builder) { + return json_encode($array); + }, + function($string) use ($builder) { + return json_decode($string, true); + } + )); + } + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class'=>Node::class, + 'data_route'=>null, + )); + } +} diff --git a/src/Form/RegionType.php b/src/Form/RegionType.php new file mode 100644 index 0000000..f5f1825 --- /dev/null +++ b/src/Form/RegionType.php @@ -0,0 +1,107 @@ +parameters=array('assets'=>$parameterBag->get('assets')); + } + + public function buildForm(FormBuilderInterface $builder, array $options): void { + $icons=array(); + $finder=new Finder(); + $finder->files()->in($this->parameters['assets']['img']['region']) + ->name('*.png') + ->sortByName(); + + foreach($finder as $fileInfo) { + $icons[$fileInfo->getBasename()]=$fileInfo->getBasename(); + } + + $builder->add('parentRegion') + ->add('name', TextType::class, array( + 'attr'=>array( + 'data-slug-target'=>'region_name' + ) + )) + ->add('slug', TextType::class, array( + 'attr'=>array( + 'data-slug-source'=>'region_name', + 'readonly'=>'readonly' + ) + )) + ->add('isAlias', ChoiceType::class, array( + 'choices'=>array('No'=>0, 'Yes'=>1), + 'data'=>$this->phpExtension->strEndWith($options['data_route'], '_new') ? 0 : $options['data']->getIsAlias(), + 'expanded' => true, + 'multiple' => false, + 'required' => true, + )) + ->add('anchor', TextType::class, array('required' => false)) + ->add('description', TextareaType::class, array( + 'required'=>false + )) + ->add('icon', ChoiceType::class, array( + 'choices'=>$icons, + 'expanded'=>true, + 'required'=>true, + )) + ->add('mapBackground', ChoiceType::class, array( + 'choices' => array( + 'Sea' => 'sea', + 'Sand' => 'sand', + ), + 'expanded'=>true, + 'required' => true, + )) + ->add('version', ChoiceType::class, array( + 'choices'=>array_combine(Kernel::SUPPORTED_GAME_VERSION, Kernel::SUPPORTED_GAME_VERSION), + 'data'=>$this->phpExtension->strEndWith($options['data_route'], '_new') ? Kernel::GAME_VERSION : $options['data']->getVersion(), + )) + ->add('sortOrder', TextType::class, array( + // 'attr'=>array('pattern'=>'^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$'), + )) + ->add('isActive', ChoiceType::class, array( + 'choices'=>array('No'=>0, 'Yes'=>1), + 'data'=>$this->phpExtension->strEndWith($options['data_route'], '_new') ? 1 : $options['data']->getIsActive(), + 'expanded' => true, + 'multiple' => false, + 'required' => true, + )); + + if($this->phpExtension->strEndWith($options['data_route'], '_new')) { + $builder->add('gridHeight', TextType::class, array( + 'attr'=>array( + 'pattern'=>'^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$', + ), + )) + ->add('gridWidth', TextType::class, array( + 'attr'=>array( + 'pattern'=>'^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$', + ), + )); + } + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class'=>Region::class, + 'data_route'=>null, + )); + } +} diff --git a/src/Form/SecurityType.php b/src/Form/SecurityType.php new file mode 100644 index 0000000..9586123 --- /dev/null +++ b/src/Form/SecurityType.php @@ -0,0 +1,48 @@ +add('username') + ->add('plainPassword', PasswordType::class, array( + // instead of being set onto the object directly, + // this is read and encoded in the controller + 'mapped' => false, + 'attr' => array('autocomplete' => 'new-password'), + 'constraints' => array( + new NotBlank(array('message' => 'Please enter a password')), + new Length(array( + 'min' => 6, + 'minMessage' => 'Your password should be at least {{ limit }} characters', + // max length allowed by Symfony for security reasons + 'max' => 4096, + )), + ), + )) + ->add('agreeTerms', CheckboxType::class, array( + 'mapped' => false, + 'constraints' => array( + new IsTrue(array('message' => 'You should agree to our terms.')), + ), + 'label' => 'Agree non-existing terms', + )); + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class' => User::class, + 'data_route' => null, + )); + } +} diff --git a/src/Form/WorldmarkCategoryType.php b/src/Form/WorldmarkCategoryType.php new file mode 100644 index 0000000..521f722 --- /dev/null +++ b/src/Form/WorldmarkCategoryType.php @@ -0,0 +1,33 @@ +add('name', TextType::class, array( + 'attr' => array('data-slug-target' => 'worldmark_category_name'), + )) + ->add('slug', TextType::class, array( + 'attr' => array( + 'data-slug-source' => 'worldmark_category_name', + 'readonly' => 'readonly', + ), + )) + ->add('sortOrder', TextType::class, array( + // 'attr' => array('pattern'=>'^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$'), + )); + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class' => WorldmarkCategory::class, + 'data_route' => null, + )); + } +} diff --git a/src/Form/WorldmarkType.php b/src/Form/WorldmarkType.php new file mode 100644 index 0000000..0078d18 --- /dev/null +++ b/src/Form/WorldmarkType.php @@ -0,0 +1,103 @@ +add('name', TextType::class, array( + 'attr' => array('data-slug-target' => 'worldmark_name'), + )) + ->add('slug', TextType::class, array( + 'attr' => array( + 'data-slug-source' => 'worldmark_name', + // 'readonly' => 'readonly', + ), + )) + ->add('description', TextareaType::class, array( + 'required' => false, + )) + ->add('defaultQuantityValue', TextType::class, array( + 'attr' => array( + 'pattern' => '^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$', + ), + )) + ->add('defaultPrimogemValue', TextType::class, array( + 'attr' => array( + 'pattern' => '^([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$', + ), + )) + ->add('icon', FileType::class, array( + 'data' => null, + 'required' => false, + )) + ->add('canBeHidden') + ->add('item', EntityType::class, array( + 'class' => Item::class, + 'query_builder' => function(EntityRepository $er) { + $qb = $er->createQueryBuilder("item"); + + return $qb->addSelect("category") + ->join("item.category", "category") + ->orderBy("category.name") + ->addOrderBy("item.name"); + }, + 'group_by' => 'category', + 'required' => false, + )) + ->add('monster', EntityType::class, array( + 'class' => Monster::class, + 'query_builder' => function(EntityRepository $er) { + $qb = $er->createQueryBuilder("monster"); + + return $qb->addSelect("category") + ->join("monster.category", "category") + ->orderBy("category.name") + ->addOrderBy("monster.name"); + }, + 'group_by' => 'category', + 'required' => false, + )) + ->add('regions', EntityType::class, array( + 'class' => Region::class, + 'query_builder' => function(EntityRepository $er) { + $qb = $er->createQueryBuilder("regions"); + + return $qb->andWhere($qb->expr()->eq("regions.isActive", 1)); + }, + 'expanded' => true, + 'multiple' => true, + )) + ->add('version', ChoiceType::class, array( + 'choices' => array_combine(Kernel::SUPPORTED_GAME_VERSION, Kernel::SUPPORTED_GAME_VERSION), + 'data' => $this->phpExtension->strEndWith($options['data_route'], '_new') ? Kernel::GAME_VERSION : $options['data']->getVersion(), + )) + ->add('sortOrder', TextType::class, array( + // 'attr'=>array('pattern'=>'^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$'), + )); + } + + public function configureOptions(OptionsResolver $resolver): void { + $resolver->setDefaults(array( + 'data_class'=>Worldmark::class, + 'data_route'=>null, + )); + } +} diff --git a/src/Kernel.php b/src/Kernel.php new file mode 100644 index 0000000..e90efbe --- /dev/null +++ b/src/Kernel.php @@ -0,0 +1,17 @@ +getId() !== null ? array('id'=>$grid->getId()) : array(); + + return $this->formFactory->create(GridType::class, $grid, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } + + public function getGridForm(string $route, Region $region): FormInterface { + return $this->formFactory->create(GridType::class, null, array( + 'action'=>$this->router->generate($route, array('regionId'=>$region->getId())), + 'method'=>'post', + 'data_route'=>$route, + )); + } + + /** + * @param Region $region + * @return Grid[] + */ + public function getGridCells(Region $region): array { + $qb=$this->_em->createQueryBuilder(); + + $qb->select("grid") + ->from(Grid::class, "grid") + ->andWhere($qb->expr()->eq("grid.region", ":param_region")) + ->orderBy("grid.row") + ->addOrderBy("grid.col"); + + $qb->setParameter('param_region', $region->getId(), Types::INTEGER); + + return $qb->getQuery()->getResult(); + } + + public function buildWorldmap(float $version, array $cells, array $maps, bool $withForm=false): array { + $grid=array(); + + /** @var Map $map */ + foreach($maps as $key=>$map) { + if(!($map instanceof Map)) { + throw new LogicException(sprintf( + 'Variable passed must be an instance of "%s". "%s" given', + Map::class, + gettype($map) + )); + } + + $maps["cell_{$map->getGrid()->getId()}"]=array( + 'map'=>$map, + 'form'=>$withForm ? $this->mapRepository->getForm('bo_map_edit', $map->getGrid(), $map)->createView() : null + ); + + unset($maps[$key]); + } + + /** @var Grid $cell */ + foreach($cells as $cell) { + if(!($cell instanceof Grid)) { + throw new LogicException(sprintf( + 'Variable passed must be an instance of "%s". "%s" given', + Grid::class, + gettype($map) + )); + } + + if(!array_key_exists("cell_{$cell->getId()}", $maps)) { + $_map=new Map(); + $_map->setVersion($version); + + $maps["cell_{$cell->getId()}"]=array( + 'map'=>$_map, + 'form'=>$withForm ? $this->mapRepository->getForm('bo_map_new', $cell, $_map)->createView() : null + ); + } + + $grid[$cell->getRow()][$cell->getCol()]=array( + 'id'=>$cell->getId(), + 'map_data'=>$maps["cell_{$cell->getId()}"], + ); + } + + return $grid; + } +} diff --git a/src/Repository/ItemCategoryRepository.php b/src/Repository/ItemCategoryRepository.php new file mode 100644 index 0000000..e80dc66 --- /dev/null +++ b/src/Repository/ItemCategoryRepository.php @@ -0,0 +1,35 @@ +getId() !== null ? array('id'=>$itemCategory->getId()) : array(); + + return $this->formFactory->create(ItemCategoryType::class, $itemCategory, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Repository/ItemRepository.php b/src/Repository/ItemRepository.php new file mode 100644 index 0000000..ff0425a --- /dev/null +++ b/src/Repository/ItemRepository.php @@ -0,0 +1,36 @@ +getId() !== null ? array('itemCategoryId'=>$itemCategory->getId(), 'id'=>$item->getId()) : array('itemCategoryId'=>$itemCategory->getId()); + + return $this->formFactory->create(ItemType::class, $item, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Repository/MapRepository.php b/src/Repository/MapRepository.php new file mode 100644 index 0000000..d7b91d6 --- /dev/null +++ b/src/Repository/MapRepository.php @@ -0,0 +1,57 @@ +getId() !== null ? array('cellId'=>$cell->getId(), 'id'=>$map->getId()) : array('cellId'=>$cell->getId()); + + return $this->formFactory->create(MapType::class, $map, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } + + /** + * @param array $cells + * @param float $version + * @return Map[] + */ + public function getCellsMap(array $cells, float $version=Kernel::GAME_VERSION): array { + $qb=$this->_em->createQueryBuilder(); + + $qb->select("map") + ->from(Map::class, "map") + ->andWhere($qb->expr()->eq("map.version", ":param_version")) + ->andWhere($qb->expr()->in("map.grid", ":param_in")); + + $qb->setParameter('param_in', $cells) + ->setParameter("param_version", $version, Types::FLOAT); + + return $qb->getQuery()->getResult(); + } +} diff --git a/src/Repository/MonsterCategoryRepository.php b/src/Repository/MonsterCategoryRepository.php new file mode 100644 index 0000000..722288c --- /dev/null +++ b/src/Repository/MonsterCategoryRepository.php @@ -0,0 +1,35 @@ +getId() !== null ? array('id'=>$monsterCategory->getId()) : array(); + + return $this->formFactory->create(MonsterCategoryType::class, $monsterCategory, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Repository/MonsterRepository.php b/src/Repository/MonsterRepository.php new file mode 100644 index 0000000..f8f6be5 --- /dev/null +++ b/src/Repository/MonsterRepository.php @@ -0,0 +1,36 @@ +getId() !== null ? array('monsterCategoryId'=>$monsterCategory->getId(), 'id'=>$monster->getId()) : array('monsterCategoryId'=>$monsterCategory->getId()); + + return $this->formFactory->create(MonsterType::class, $monster, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Repository/NodeRepository.php b/src/Repository/NodeRepository.php new file mode 100644 index 0000000..4f23503 --- /dev/null +++ b/src/Repository/NodeRepository.php @@ -0,0 +1,77 @@ +router=$router; + $this->formFactory=$formFactory; + } + + /** + * @param Grid[] $grid + * @param Worldmark[] $worldmarks + * @param float $version + * @param bool $includeDeleted + * @return Node[] + */ + public function getGridNodes(array $grid, array $worldmarks, float $version, bool $includeDeleted = false): array { + $qb=$this->_em->createQueryBuilder(); + + $qb->select("node") + ->from(Node::class, "node") + ->andWhere($qb->expr()->in("node.grid", ":param_inGridId")) + ->andWhere($qb->expr()->in("node.worldmark", ":param_inWorldmarkId")) + ->andWhere($qb->expr()->lte("node.version", ":param_version")) + ->orderBy("node.grid"); + + $qb->setParameters(array( + 'param_inGridId' => $grid, + 'param_inWorldmarkId' => $worldmarks, + 'param_version' => $version, + )); + + if(!$includeDeleted) { + $qb->andWhere($qb->expr()->eq("node.isDeleted", 0)); + } + + return $qb->getQuery()->getResult(); + } + + public function getForm(string $route, Grid $grid, Worldmark $worldmark, Node $node): FormInterface { + $params=$node->getId() !== null ? array( + 'gridId'=>$grid->getId(), + 'worldmarkId'=>$worldmark->getId(), + 'id'=>$node->getId(), + ) : array( + 'gridId'=>$grid->getId(), + 'worldmarkId'=>$worldmark->getId(), + ); + + return $this->formFactory->create(NodeType::class, $node, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Repository/RegionRepository.php b/src/Repository/RegionRepository.php new file mode 100644 index 0000000..ef668ee --- /dev/null +++ b/src/Repository/RegionRepository.php @@ -0,0 +1,49 @@ +_em->createQueryBuilder(); + + $qb->addSelect("region") + ->addSelect("subRegions") + ->from(Region::class, "region") + ->leftJoin("region.subRegions", "subRegions") + ->andWhere($qb->expr()->isNull("region.parentRegion")) + ->orderBy("region.sortOrder"); + + return $qb->getQuery()->getResult(); + } + + public function getForm(string $route, Region $region): FormInterface { + $params=$region->getId() !== null ? array('id'=>$region->getId()) : array(); + + return $this->formFactory->create(RegionType::class, $region, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Repository/UserRepository.php b/src/Repository/UserRepository.php new file mode 100644 index 0000000..55a597a --- /dev/null +++ b/src/Repository/UserRepository.php @@ -0,0 +1,52 @@ +setPassword($newHashedPassword); + $this->_em->persist($user); + $this->_em->flush(); + } + + public function getForm(string $route, User $user): FormInterface { + $params=$user->getId() !== null ? array('id'=>$user->getId(),) : array(); + + return $this->formFactory->create(SecurityType::class, $user, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Repository/WorldmarkCategoryRepository.php b/src/Repository/WorldmarkCategoryRepository.php new file mode 100644 index 0000000..0c258e0 --- /dev/null +++ b/src/Repository/WorldmarkCategoryRepository.php @@ -0,0 +1,35 @@ +getId() !== null ? array('id'=>$worldmarkCategory->getId()) : array(); + + return $this->formFactory->create(WorldmarkCategoryType::class, $worldmarkCategory, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Repository/WorldmarkRepository.php b/src/Repository/WorldmarkRepository.php new file mode 100644 index 0000000..e1dc38f --- /dev/null +++ b/src/Repository/WorldmarkRepository.php @@ -0,0 +1,68 @@ +_em->createQueryBuilder(); + + $qb->select("worldmark") + ->addSelect("category") + ->from(Worldmark::class, "worldmark") + ->join("worldmark.regions", "regions") + ->join("worldmark.category", "category") + ->andWhere($qb->expr()->eq("regions.id", ":param_regionId")) + ->andWhere($qb->expr()->lte("worldmark.version", ":param_version")) + ->orderBy("category.sortOrder") + ->addOrderBy("worldmark.sortOrder"); + + $qb->setParameters(array( + 'param_regionId'=>$region->getId(), + 'param_version'=>$version, + )); + + return $qb->getQuery()->getResult(); + } + + public function getForm(string $route, WorldmarkCategory $worldmarkCategory, Worldmark $worldmark): FormInterface { + $params=$worldmark->getId() !== null ? array('worldmarkCategoryId'=>$worldmarkCategory->getId(), 'id'=>$worldmark->getId()) : array('worldmarkCategoryId'=>$worldmarkCategory->getId()); + + return $this->formFactory->create(WorldmarkType::class, $worldmark, array( + 'action'=>$this->router->generate($route, $params), + 'method'=>'post', + 'data_route'=>$route, + )); + } +} diff --git a/src/Security/Authenticator.php b/src/Security/Authenticator.php new file mode 100644 index 0000000..8f7fb59 --- /dev/null +++ b/src/Security/Authenticator.php @@ -0,0 +1,58 @@ +urlGenerator = $urlGenerator; + } + + public function authenticate(Request $request): Passport { + $username = $request->request->get('username', ''); + + $request->getSession()->set(Security::LAST_USERNAME, $username); + + return new Passport( + new UserBadge($username), + new PasswordCredentials($request->request->get('password', '')), + array( + new CsrfTokenBadge('authenticate', $request->request->get('_csrf_token')), + new RememberMeBadge(), + ), + ); + } + + public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response { + if($targetPath = $this->getTargetPath($request->getSession(), $firewallName)) { + return new RedirectResponse($targetPath); + } + + // For example: + //return new RedirectResponse($this->urlGenerator->generate('some_route')); + // throw new \Exception('TODO: provide a valid redirect inside '.__FILE__); + return new RedirectResponse($this->urlGenerator->generate('fo_region_show', array('slug'=>'mondstadt'))); + } + + protected function getLoginUrl(Request $request): string { + return $this->urlGenerator->generate(self::LOGIN_ROUTE); + } +} diff --git a/src/Service/FileManager.php b/src/Service/FileManager.php new file mode 100644 index 0000000..b66ef1f --- /dev/null +++ b/src/Service/FileManager.php @@ -0,0 +1,401 @@ +filesystem=new Filesystem(); + $this->parameters=array( + 'assets'=>$parameterBag->get('assets'), + 'env'=>$parameterBag->get('kernel.environment') + ); + } + + private function generateUuid(?string $directory): bool|string { + if($directory) { + $scan=scandir($directory); + if($scan) { + do { + $filename=Uuid::uuid1()->toString(); + } while(in_array($filename, $scan)); + + return $filename; + } else { + return false; + } + } else { + return Uuid::uuid1()->toString(); + } + } + + private function resizeJpeg(string $sourceFile, string $targetPath, string $filename, int $width, int $height, int $quality = 100): array { + try { + $img = new Imagick(); + $img->setResolution(72, 72); + $img->setBackgroundColor((new ImagickPixel('#1B283B'))); + $img->setInterlaceScheme(Imagick::INTERLACE_LINE); + + $img->readImage($sourceFile); + $img->setImageUnits(Imagick::RESOLUTION_PIXELSPERINCH); + $img->setImageResolution(72, 72); + + $img->setImageFormat('jpeg'); + $img->setImageCompression(Imagick::COMPRESSION_JPEG); + $img->setImageCompressionQuality($quality); + + if($img->getImageWidth() > $width) { + $img->scaleImage($width, $height, true); + } + + $img->extentImage($width, $height, (($img->getImageWidth() - $width) / 2), (($img->getImageHeight() - $height) / 2)); + + $img->stripImage(); + $img->writeImage("$targetPath/$filename.jpeg"); + $img->clear(); + $img->destroy(); + + return array( + 'error'=>false, + 'message'=>null, + ); + } catch(Exception) { + return array( + 'error'=>true, + 'message'=>'Could not write file to disk', + ); + } + } + + private function resizePng(string $sourceFile, string $targetPath, string $filename, int $width, int $height): array { + try { + $img=new Imagick(); + $img->setResolution(72, 72); + $img->setBackgroundColor((new ImagickPixel('transparent'))); + + $img->readImage($sourceFile); + $img->setImageUnits(Imagick::RESOLUTION_PIXELSPERINCH); + $img->setImageResolution(72, 72); + $img->setImageFormat('png'); + + $img->scaleImage($width, $height, true); + $img->extentImage($width, $height, (($img->getImageWidth() - $width) / 2), (($img->getImageHeight() - $height) / 2)); + + $img->stripImage(); + $img->writeImage("$targetPath/$filename.png"); + $img->clear(); + $img->destroy(); + + return array( + 'error'=>false, + 'message'=>null, + ); + } catch(Exception) { + return array( + 'error'=>true, + 'message'=>'Could not write file to disk', + ); + } + } + + private function uploadFile(UploadedFile $uploadedFile, string $type): array { + if(!in_array($type, array('map', 'screenshot', 'item', 'monster', 'worldmark'))) { + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'File could not be processed', + ); + } + + $ext=$uploadedFile->guessExtension(); + + if(!$ext) { + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'Cannot guess file extension from mimetype', + ); + } + + if(!in_array($ext, $this->parameters['assets'][$type]['ext'])) { + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>sprintf("File type not supported. Supported files types are [%s]", implode(', ', $this->parameters['assets'][$type]['ext'])), + ); + } + + $this->filesystem->mkdir($this->parameters['assets'][$type]['upload_path'], 0775); + $filename=$this->generateUuid($this->parameters['assets'][$type]['upload_path']); + + $uploadedFile->move($this->parameters['assets'][$type]['upload_path'], "$filename.$ext"); + + if(in_array($type, array('item', 'monster', 'worldmark'))) { + $imgWidth = match ($type) { + 'item', 'monster' => $imgHeight = 160, + 'worldmark' => $imgHeight = 48, + default => $imgHeight = null, + }; + + if($imgWidth === null) { + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'Could not define image dimensions', + ); + } + + $process=$this->resizePng("{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext", + $this->parameters['assets'][$type]['upload_path'], $filename, $imgWidth, $imgHeight); + + if($process['error']) { + if($type == 'item') { + $this->removeItemIcon("$filename.$ext"); + } elseif($type == 'monster') { + $this->removeMonsterIcon("$filename.$ext"); + } elseif($type == 'worldmark') { + $this->removeWorldmarkIcon("$filename.$ext"); + } + + + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'Could not write item file to disk', + ); + } + } else if($type == 'screenshot') { + $imgSizes=getimagesize("{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext"); + + if($imgSizes[0] < 1280 || $imgSizes[1] < 720) { + $this->filesystem->remove("{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext"); + + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'Screenshot must be at least 1280*720 pixels', + ); + } + + $process=$this->resizeJpeg("{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext", + $this->parameters['assets'][$type]['upload_path'], $filename, + 1280, 720); + + if($process['error']) { + $this->removeScreenshot("$filename.$ext"); + + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'Could not write screenshot file to disk', + ); + } + + if(in_array($ext, ['jpg', 'png'])) { + $this->filesystem->remove("{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext"); + $ext = 'jpeg'; + } + + $process=$this->resizeJpeg("{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext", + $this->parameters['assets'][$type]['thumbnail_path'], $filename, 320, 180, 65); + + if($process['error']) { + $this->removeScreenshot("$filename.$ext"); + + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'Could not write screenshot file to disk', + ); + } + + if($this->parameters['env'] == 'dev') { + $this->filesystem->copy("{$this->parameters['assets'][$type]['thumbnail_path']}/$filename.$ext", + str_replace("dev.genshin-world.com", + "genshin-world.com", + "{$this->parameters['assets'][$type]['thumbnail_path']}/$filename.$ext")); + } elseif($this->parameters['env'] == 'prod') { + $this->filesystem->copy("{$this->parameters['assets'][$type]['thumbnail_path']}/$filename.$ext", + str_replace("genshin-world.com", + "dev.genshin-world.com", + "{$this->parameters['assets'][$type]['thumbnail_path']}/$filename.$ext")); + } + } + + if($this->parameters['env'] == 'dev') { + $this->filesystem->copy("{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext", + str_replace("dev.genshin-world.com", + "genshin-world.com", + "{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext")); + } elseif($this->parameters['env'] == 'prod') { + $this->filesystem->copy("{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext", + str_replace("genshin-world.com", + "dev.genshin-world.com", + "{$this->parameters['assets'][$type]['upload_path']}/$filename.$ext")); + } + + return array( + 'error'=>false, + 'filename'=>"$filename.$ext", + 'message'=>null, + ); + } + + private function removeLocalFile(string $filePath) { + $this->filesystem->remove($filePath); + } + + public function uploadMapFile(UploadedFile $uploadedFile): array { + return $this->uploadFile($uploadedFile, 'map'); + } + + public function removeMapFile(string $filename) { + $this->removeLocalFile("{$this->parameters['assets']['map']['upload_path']}/$filename"); + + if($this->parameters['env'] == 'dev') { + $this->removeLocalFile(str_replace("dev.genshin-world.com", + "genshin-world.com", + "{$this->parameters['assets']['map']['upload_path']}/$filename")); + } elseif($this->parameters['env'] == 'prod') { + $this->removeLocalFile(str_replace("genshin-world.com", + "dev.genshin-world.com", + "{$this->parameters['assets']['map']['upload_path']}/$filename")); + } + } + + public function uploadItemIcon(UploadedFile $uploadedFile): array { + return $this->uploadFile($uploadedFile, 'item'); + } + + public function removeItemIcon(string $filename) { + $this->removeLocalFile("{$this->parameters['assets']['item']['upload_path']}/$filename"); + + if($this->parameters['env'] == 'dev') { + $this->removeLocalFile(str_replace("dev.genshin-world.com", + "genshin-world.com", + "{$this->parameters['assets']['item']['upload_path']}/$filename")); + } elseif($this->parameters['env'] == 'prod') { + $this->removeLocalFile(str_replace("genshin-world.com", + "dev.genshin-world.com", + "{$this->parameters['assets']['item']['upload_path']}/$filename")); + } + } + + public function uploadMonsterIcon(UploadedFile $uploadedFile): array { + return $this->uploadFile($uploadedFile, 'monster'); + } + + public function removeMonsterIcon(string $filename) { + $this->removeLocalFile("{$this->parameters['assets']['monster']['upload_path']}/$filename"); + + if($this->parameters['env'] == 'dev') { + $this->removeLocalFile(str_replace("dev.genshin-world.com", + "genshin-world.com", + "{$this->parameters['assets']['monster']['upload_path']}/$filename")); + } elseif($this->parameters['env'] == 'prod') { + $this->removeLocalFile(str_replace("genshin-world.com", + "dev.genshin-world.com", + "{$this->parameters['assets']['monster']['upload_path']}/$filename")); + } + } + + public function uploadWorldmarkIcon(UploadedFile $uploadedFile): array { + return $this->uploadFile($uploadedFile, 'worldmark'); + } + + public function getWorldmarkIconFromEntity(Item|Monster $entity): array { + $type = $entity instanceof Item ? 'item' : 'monster'; + + if(!$this->filesystem->exists("{$this->parameters['assets'][$type]['upload_path']}/{$entity->getIcon()}")) { + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'Could not find any file to copy', + ); + } + + $itemFile=new File("{$this->parameters['assets'][$type]['upload_path']}/{$entity->getIcon()}"); + $ext=$itemFile->guessExtension(); + + $filename=$this->generateUuid($this->parameters['assets']['worldmark']['upload_path']); + + $this->filesystem->mkdir($this->parameters['assets']['worldmark']['upload_path'], 0775); + $this->filesystem->copy("{$this->parameters['assets'][$type]['upload_path']}/{$entity->getIcon()}", + "{$this->parameters['assets']['worldmark']['upload_path']}/$filename.$ext"); + + $process=$this->resizePng("{$this->parameters['assets']['worldmark']['upload_path']}/$filename.$ext", + $this->parameters['assets']['worldmark']['upload_path'], $filename, 48, 48); + + if($this->parameters['env'] == 'dev') { + $this->filesystem->copy("{$this->parameters['assets']['worldmark']['upload_path']}/$filename.$ext", + str_replace("dev.genshin-world.com", + "genshin-world.com", + "{$this->parameters['assets']['worldmark']['upload_path']}/$filename.$ext")); + } elseif($this->parameters['env'] == 'prod') { + $this->filesystem->copy("{$this->parameters['assets']['worldmark']['upload_path']}/$filename.$ext", + str_replace("genshin-world.com", + "dev.genshin-world.com", + "{$this->parameters['assets']['worldmark']['upload_path']}/$filename.$ext")); + } + + if($process['error']) { + $this->removeItemIcon($filename); + + return array( + 'error'=>true, + 'filename'=>null, + 'message'=>'Could not write item icon file to disk', + ); + } + + return array( + 'error'=>false, + 'filename'=>"$filename.$ext", + 'message'=>null, + ); + } + + public function removeWorldmarkIcon(string $filename) { + $this->removeLocalFile("{$this->parameters['assets']['worldmark']['upload_path']}/$filename"); + } + + public function uploadScreenshot(UploadedFile $uploadedFile): array { + return $this->uploadFile($uploadedFile, 'screenshot'); + } + + public function removeScreenshot(string $filename) { + $this->removeLocalFile("{$this->parameters['assets']['screenshot']['upload_path']}/$filename"); + $this->removeLocalFile("{$this->parameters['assets']['screenshot']['thumbnail_path']}/$filename"); + + if($this->parameters['env'] == 'dev') { + $this->removeLocalFile(str_replace("dev.genshin-world.com", + "genshin-world.com", + "{$this->parameters['assets']['screenshot']['upload_path']}/$filename")); + + $this->removeLocalFile(str_replace("dev.genshin-world.com", + "genshin-world.com", + "{$this->parameters['assets']['screenshot']['thumbnail_path']}/$filename")); + } elseif($this->parameters['env'] == 'prod') { + $this->removeLocalFile(str_replace("genshin-world.com", + "dev.genshin-world.com", + "{$this->parameters['assets']['screenshot']['upload_path']}/$filename")); + + $this->removeLocalFile(str_replace("genshin-world.com", + "dev.genshin-world.com", + "{$this->parameters['assets']['screenshot']['thumbnail_path']}/$filename")); + } + } +} \ No newline at end of file diff --git a/symfony.lock b/symfony.lock new file mode 100644 index 0000000..fa21e8d --- /dev/null +++ b/symfony.lock @@ -0,0 +1,536 @@ +{ + "brick/math": { + "version": "0.9.3" + }, + "doctrine/annotations": { + "version": "1.13", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "a2759dd6123694c8d901d0ec80006e044c2e6457" + }, + "files": [ + "config/routes/annotations.yaml" + ] + }, + "doctrine/cache": { + "version": "2.1.1" + }, + "doctrine/collections": { + "version": "1.6.8" + }, + "doctrine/common": { + "version": "3.2.2" + }, + "doctrine/dbal": { + "version": "3.3.2" + }, + "doctrine/deprecations": { + "version": "v0.5.3" + }, + "doctrine/doctrine-bundle": { + "version": "2.5", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.4", + "ref": "ddddd8249dd55bbda16fa7a45bb7499ef6f8e90e" + }, + "files": [ + "config/packages/doctrine.yaml", + "src/Entity/.gitignore", + "src/Repository/.gitignore" + ] + }, + "doctrine/doctrine-migrations-bundle": { + "version": "3.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.1", + "ref": "ee609429c9ee23e22d6fa5728211768f51ed2818" + }, + "files": [ + "config/packages/doctrine_migrations.yaml", + "migrations/.gitignore" + ] + }, + "doctrine/event-manager": { + "version": "1.1.1" + }, + "doctrine/inflector": { + "version": "2.0.4" + }, + "doctrine/instantiator": { + "version": "1.4.1" + }, + "doctrine/lexer": { + "version": "1.2.3" + }, + "doctrine/migrations": { + "version": "3.4.1" + }, + "doctrine/orm": { + "version": "2.11.1" + }, + "doctrine/persistence": { + "version": "2.3.0" + }, + "doctrine/sql-formatter": { + "version": "1.1.2" + }, + "egulias/email-validator": { + "version": "3.1.2" + }, + "friendsofphp/proxy-manager-lts": { + "version": "v1.0.7" + }, + "laminas/laminas-code": { + "version": "4.5.1" + }, + "mobiledetect/mobiledetectlib": { + "version": "2.8.39" + }, + "monolog/monolog": { + "version": "2.3.5" + }, + "nikic/php-parser": { + "version": "v4.13.2" + }, + "phpdocumentor/reflection-common": { + "version": "2.2.0" + }, + "phpdocumentor/reflection-docblock": { + "version": "5.3.0" + }, + "phpdocumentor/type-resolver": { + "version": "1.6.0" + }, + "phpstan/phpdoc-parser": { + "version": "1.2.0" + }, + "psr/cache": { + "version": "2.0.0" + }, + "psr/container": { + "version": "1.1.2" + }, + "psr/event-dispatcher": { + "version": "1.0.0" + }, + "psr/link": { + "version": "1.1.1" + }, + "psr/log": { + "version": "2.0.0" + }, + "ramsey/collection": { + "version": "1.2.2" + }, + "ramsey/uuid": { + "version": "4.2.3" + }, + "sensio/framework-extra-bundle": { + "version": "6.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.2", + "ref": "fb7e19da7f013d0d422fa9bce16f5c510e27609b" + }, + "files": [ + "config/packages/sensio_framework_extra.yaml" + ] + }, + "symfony/amqp-messenger": { + "version": "v5.4.5" + }, + "symfony/asset": { + "version": "v5.4.3" + }, + "symfony/cache": { + "version": "v5.4.5" + }, + "symfony/cache-contracts": { + "version": "v2.5.0" + }, + "symfony/config": { + "version": "v5.4.3" + }, + "symfony/console": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "da0c8be8157600ad34f10ff0c9cc91232522e047" + }, + "files": [ + "bin/console" + ] + }, + "symfony/debug-bundle": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "5aa8aa48234c8eb6dbdd7b3cd5d791485d2cec4b" + }, + "files": [ + "config/packages/debug.yaml" + ] + }, + "symfony/dependency-injection": { + "version": "v5.4.5" + }, + "symfony/deprecation-contracts": { + "version": "v3.0.0" + }, + "symfony/doctrine-bridge": { + "version": "v5.4.5" + }, + "symfony/doctrine-messenger": { + "version": "v5.4.3" + }, + "symfony/dotenv": { + "version": "v5.4.5" + }, + "symfony/error-handler": { + "version": "v5.4.3" + }, + "symfony/event-dispatcher": { + "version": "v5.4.3" + }, + "symfony/event-dispatcher-contracts": { + "version": "v3.0.0" + }, + "symfony/expression-language": { + "version": "v5.4.3" + }, + "symfony/filesystem": { + "version": "v5.4.5" + }, + "symfony/finder": { + "version": "v5.4.3" + }, + "symfony/flex": { + "version": "2.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e" + }, + "files": [ + ".env" + ] + }, + "symfony/form": { + "version": "v5.4.5" + }, + "symfony/framework-bundle": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.4", + "ref": "3cd216a4d007b78d8554d44a5b1c0a446dab24fb" + }, + "files": [ + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/preload.php", + "config/routes/framework.yaml", + "config/services.yaml", + "public/index.php", + "src/Controller/.gitignore", + "src/Kernel.php" + ] + }, + "symfony/http-client": { + "version": "v5.4.5" + }, + "symfony/http-client-contracts": { + "version": "v2.5.0" + }, + "symfony/http-foundation": { + "version": "v5.4.5" + }, + "symfony/http-kernel": { + "version": "v5.4.5" + }, + "symfony/intl": { + "version": "v5.4.5" + }, + "symfony/mailer": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "bbfc7e27257d3a3f12a6fb0a42540a42d9623a37" + }, + "files": [ + "config/packages/mailer.yaml" + ] + }, + "symfony/maker-bundle": { + "version": "1.38", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" + } + }, + "symfony/messenger": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "25e3c964d3aee480b3acc3114ffb7940c89edfed" + }, + "files": [ + "config/packages/messenger.yaml" + ] + }, + "symfony/mime": { + "version": "v5.4.3" + }, + "symfony/monolog-bridge": { + "version": "v5.4.3" + }, + "symfony/monolog-bundle": { + "version": "3.7", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.7", + "ref": "213676c4ec929f046dfde5ea8e97625b81bc0578" + }, + "files": [ + "config/packages/monolog.yaml" + ] + }, + "symfony/notifier": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.0", + "ref": "c31585e252b32fe0e1f30b1f256af553f4a06eb9" + }, + "files": [ + "config/packages/notifier.yaml" + ] + }, + "symfony/options-resolver": { + "version": "v5.4.3" + }, + "symfony/password-hasher": { + "version": "v5.4.3" + }, + "symfony/polyfill-intl-grapheme": { + "version": "v1.25.0" + }, + "symfony/polyfill-intl-icu": { + "version": "v1.25.0" + }, + "symfony/polyfill-intl-idn": { + "version": "v1.25.0" + }, + "symfony/polyfill-intl-normalizer": { + "version": "v1.25.0" + }, + "symfony/polyfill-mbstring": { + "version": "v1.25.0" + }, + "symfony/polyfill-php73": { + "version": "v1.25.0" + }, + "symfony/polyfill-php80": { + "version": "v1.25.0" + }, + "symfony/polyfill-php81": { + "version": "v1.25.0" + }, + "symfony/process": { + "version": "v5.4.5" + }, + "symfony/property-access": { + "version": "v5.4.5" + }, + "symfony/property-info": { + "version": "v5.4.3" + }, + "symfony/proxy-manager-bridge": { + "version": "v5.4.3" + }, + "symfony/redis-messenger": { + "version": "v5.4.5" + }, + "symfony/routing": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "85de1d8ae45b284c3c84b668171d2615049e698f" + }, + "files": [ + "config/packages/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/runtime": { + "version": "v5.4.5" + }, + "symfony/security-bundle": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "98f1f2b0d635908c2b40f3675da2d23b1a069d30" + }, + "files": [ + "config/packages/security.yaml" + ] + }, + "symfony/security-core": { + "version": "v5.4.5" + }, + "symfony/security-csrf": { + "version": "v5.4.3" + }, + "symfony/security-guard": { + "version": "v5.4.3" + }, + "symfony/security-http": { + "version": "v5.4.5" + }, + "symfony/serializer": { + "version": "v5.4.5" + }, + "symfony/service-contracts": { + "version": "v2.4.1" + }, + "symfony/stopwatch": { + "version": "v5.4.5" + }, + "symfony/string": { + "version": "v5.4.3" + }, + "symfony/translation": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "da64f5a2b6d96f5dc24914517c0350a5f91dee43" + }, + "files": [ + "config/packages/translation.yaml", + "translations/.gitignore" + ] + }, + "symfony/translation-contracts": { + "version": "v2.5.0" + }, + "symfony/twig-bridge": { + "version": "v5.4.5" + }, + "symfony/twig-bundle": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.4", + "ref": "bb2178c57eee79e6be0b297aa96fc0c0def81387" + }, + "files": [ + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "symfony/validator": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "c32cfd98f714894c4f128bb99aa2530c1227603c" + }, + "files": [ + "config/packages/validator.yaml" + ] + }, + "symfony/var-dumper": { + "version": "v5.4.5" + }, + "symfony/var-exporter": { + "version": "v5.4.3" + }, + "symfony/web-link": { + "version": "v5.4.3" + }, + "symfony/web-profiler-bundle": { + "version": "5.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.3", + "ref": "24bbc3d84ef2f427f82104f766014e799eefcc3e" + }, + "files": [ + "config/packages/web_profiler.yaml", + "config/routes/web_profiler.yaml" + ] + }, + "symfony/webapp-meta": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "67cae591d131c133d63b893c5324796b88c59b34" + }, + "files": [ + "config/packages/messenger.yaml" + ] + }, + "symfony/webpack-encore-bundle": { + "version": "1.14", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.10", + "ref": "2858aeed7e1d81a45365c049eb533cc8827e380b" + }, + "files": [ + "assets/app.js", + "assets/bootstrap.js", + "assets/controllers.json", + "assets/controllers/hello_controller.js", + "assets/styles/app.css", + "config/packages/webpack_encore.yaml", + "package.json", + "webpack.config.js" + ] + }, + "symfony/yaml": { + "version": "v5.4.3" + }, + "twig/extra-bundle": { + "version": "v3.3.8" + }, + "twig/twig": { + "version": "v3.3.8" + }, + "webmozart/assert": { + "version": "1.10.0" + } +} diff --git a/templates/_dashboard/_menu.html.twig b/templates/_dashboard/_menu.html.twig new file mode 100644 index 0000000..4e87be5 --- /dev/null +++ b/templates/_dashboard/_menu.html.twig @@ -0,0 +1,64 @@ +
+ + + + + Contributors
Tracking
+
+ {% if is_granted('ROLE_ADMIN') %} + + + + + Regions + + {% endif %} + + + + + Items
Categories
+
+ {% if route|start_with('bo_item') %} + {% for _category in itemsCategories %} + + + + + {{ _category|split(' ')|join('
')|raw }}
+
+ {% endfor %} + {% endif %} + + + + + Monsters
Categories
+
+ {% if route|start_with('bo_monster') %} + {% for _category in monstersCategories %} + + + + + {{ _category|split(' ')|join('
')|raw }}
+
+ {% endfor %} + {% endif %} + + + + + Worldmarks
Categories
+
+ {% if route|start_with('bo_worldmark') %} + {% for _category in worldmarksCategories %} + + + + + {{ _category|split(' ')|join('
')|raw }}
+
+ {% endfor %} + {% endif %} +
\ No newline at end of file diff --git a/templates/_dashboard/base.html.twig b/templates/_dashboard/base.html.twig new file mode 100644 index 0000000..d479104 --- /dev/null +++ b/templates/_dashboard/base.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
+ {#Regions#} + {% include '_dashboard/_menu.html.twig' %} +
+ {% block page_content %}{% endblock %} +
+
+{% endblock %} diff --git a/templates/_dashboard/grid/._delete_form.html.twig b/templates/_dashboard/grid/._delete_form.html.twig new file mode 100644 index 0000000..c80b370 --- /dev/null +++ b/templates/_dashboard/grid/._delete_form.html.twig @@ -0,0 +1,5 @@ +
+ + + +
diff --git a/templates/_dashboard/grid/.new.html.twig b/templates/_dashboard/grid/.new.html.twig new file mode 100644 index 0000000..1596939 --- /dev/null +++ b/templates/_dashboard/grid/.new.html.twig @@ -0,0 +1,9 @@ +{% extends 'base.html.twig' %} + +{% block body %} +

Create new Grid

+ + {{ include('_dashboard/grid/_form.html.twig') }} + + back to list +{% endblock %} diff --git a/templates/_dashboard/grid/.show.html.twig b/templates/_dashboard/grid/.show.html.twig new file mode 100644 index 0000000..fa56566 --- /dev/null +++ b/templates/_dashboard/grid/.show.html.twig @@ -0,0 +1,28 @@ +{% extends 'base.html.twig' %} + +{% block body %} +

Grid

+ + + + + + + + + + + + + + + + +
Id{{ grid.id }}
Row{{ grid.row }}
Col{{ grid.col }}
+ + back to list + + edit + + {{ include('_dashboard/grid/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/grid/_form.html.twig b/templates/_dashboard/grid/_form.html.twig new file mode 100644 index 0000000..8e33925 --- /dev/null +++ b/templates/_dashboard/grid/_form.html.twig @@ -0,0 +1,28 @@ +{% for _log in logs %} +
{{ _log }}
+{% endfor %} + +{{ form_start(form) }} +
+ {{ form_label(form.positions, null, {'label_attr': {'class': 'sp_radio__main-label'}}) }} +
+ {% for key, choice in form.positions %} + + {% endfor %} + {% do form.positions.setRendered %} +
+
+ +
+ + Cancel + + +
+{{ form_end(form) }} diff --git a/templates/_dashboard/grid/edit.html.twig b/templates/_dashboard/grid/edit.html.twig new file mode 100644 index 0000000..516912f --- /dev/null +++ b/templates/_dashboard/grid/edit.html.twig @@ -0,0 +1,11 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Edit {{ region.name }}'s Grid

+ + {{ include('_dashboard/grid/_form.html.twig', {'button_label': 'Update'}) }} + + back to list + +{# {{ include('_dashboard/grid/_delete_form.html.twig') }}#} +{% endblock %} diff --git a/templates/_dashboard/grid/index.html.twig b/templates/_dashboard/grid/index.html.twig new file mode 100644 index 0000000..2aa34f4 --- /dev/null +++ b/templates/_dashboard/grid/index.html.twig @@ -0,0 +1,46 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {% set previousVersion = null %} + {% set nextVersion = null %} + + {% for _gameVersion in supportedGameVersion %} + {% if _gameVersion < version %} + {% set previousVersion = _gameVersion %} + {% endif %} + + {% if nextVersion is null and _gameVersion > version %} + {% set nextVersion = _gameVersion %} + {% endif %} + {% endfor %} + +
+
+ {% if version > supportedGameVersion|first %} + + {% else %} +
+ {% endif %} + +
Game version : {{ version }}
+ {% if version < supportedGameVersion|last %} + + {% else %} +
+ {% endif %} +
+
+ {% for row in 1..region.gridHeight %} + {% for col in 1..region.gridWidth %} +
+ {% set idHash = '_g' ~ grid[row][col]['id'] ~ '_v' ~ version %} + + {{ region.name }} + + {% include '_dashboard/map/_form.html.twig' with {'form': grid[row][col]['map_data']['form'], 'idHash': idHash} %} +
+ {% endfor %} + {% endfor %} +
+
+{% endblock %} diff --git a/templates/_dashboard/grid/index.html.twig.bak b/templates/_dashboard/grid/index.html.twig.bak new file mode 100644 index 0000000..530cfca --- /dev/null +++ b/templates/_dashboard/grid/index.html.twig.bak @@ -0,0 +1,50 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {% set previousVersion = null %} + {% set nextVersion = null %} + + {% for _gameVersion in supportedGameVersion %} + {% if _gameVersion < version %} + {% set previousVersion = _gameVersion %} + {% endif %} + + {% if nextVersion is null and _gameVersion > version %} + {% set nextVersion = _gameVersion %} + {% endif %} + {% endfor %} + +
+
+ {% if version > supportedGameVersion|first %} + + {% else %} +
+ {% endif %} + +
Game version : {{ version }}
+ {% if version < supportedGameVersion|last %} + + {% else %} +
+ {% endif %} +
+
+
+ {% for row in 1..region.gridHeight %} +
+ {% for col in 1..region.gridWidth %} +
+ {% set idHash = '_g' ~ grid[row][col]['id'] ~ '_v' ~ version %} + + {{ region.name }} + + {% include '_dashboard/map/_form.html.twig' with {'form': grid[row][col]['map_data']['form'], 'idHash': idHash} %} +
+ {% endfor %} +
+ {% endfor %} +
+
+
+{% endblock %} diff --git a/templates/_dashboard/item/_delete_form.html.twig b/templates/_dashboard/item/_delete_form.html.twig new file mode 100644 index 0000000..7a8275b --- /dev/null +++ b/templates/_dashboard/item/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/_dashboard/item/_form.html.twig b/templates/_dashboard/item/_form.html.twig new file mode 100644 index 0000000..a9c79d8 --- /dev/null +++ b/templates/_dashboard/item/_form.html.twig @@ -0,0 +1,40 @@ +{{ form_start(form, {'attr': {'class': 'sp_form__xhr'}}) }} +
+ {{ form_label(form.name) }} + {{ form_widget(form.name) }} +
+
+ {{ form_label(form.slug) }} + {{ form_widget(form.slug) }} +
+
+ {{ form_label(form.description) }} + {{ form_widget(form.description) }} +
+
+ {{ form_label(form.icon) }} + + + + + {{ form_widget(form.icon, {'attr': {'data-file-preview-target': 'item-icon-preview'}}) }} +
+
+ {{ form_label(form.version) }} + {{ form_widget(form.version) }} +
+ {% if route|end_with('_edit') %} +
+ {{ form_label(form.removeFile) }} + {{ form_widget(form.removeFile) }} +
+ {% endif %} +
+ + Cancel + + +
+{{ form_end(form) }} diff --git a/templates/_dashboard/item/edit.html.twig b/templates/_dashboard/item/edit.html.twig new file mode 100644 index 0000000..34e19d6 --- /dev/null +++ b/templates/_dashboard/item/edit.html.twig @@ -0,0 +1,11 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Edit Item

+ + {{ include('_dashboard/item/_form.html.twig', {'button_label': 'Update'}) }} + + back to list + + {{ include('_dashboard/item/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/item/index.html.twig b/templates/_dashboard/item/index.html.twig new file mode 100644 index 0000000..95f4b59 --- /dev/null +++ b/templates/_dashboard/item/index.html.twig @@ -0,0 +1,46 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {% if is_granted('ROLE_SENIOR') %} +

+ Create new +

+ {% endif %} + + + + + {##} + + + + {##} + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + + + {% for item in items %} + + {##} + + + + {##} + + {% if is_granted('ROLE_SENIOR') %} + + {% endif %} + + {% else %} + + + + {% endfor %} + +
IdNameSlugDescriptionIconVersionactions
{{ item.id }}{{ item.name }} {{ item.name }}{{ item.slug }}{{ item.description }}{{ item.icon }}{{ item.version }} + edit +
no records found
+{% endblock %} diff --git a/templates/_dashboard/item/new.html.twig b/templates/_dashboard/item/new.html.twig new file mode 100644 index 0000000..cc40dc0 --- /dev/null +++ b/templates/_dashboard/item/new.html.twig @@ -0,0 +1,7 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Create new Item

+ + {{ include('_dashboard/item/_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/item_category/_delete_form.html.twig b/templates/_dashboard/item_category/_delete_form.html.twig new file mode 100644 index 0000000..1960e47 --- /dev/null +++ b/templates/_dashboard/item_category/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/_dashboard/item_category/_form.html.twig b/templates/_dashboard/item_category/_form.html.twig new file mode 100644 index 0000000..af7a230 --- /dev/null +++ b/templates/_dashboard/item_category/_form.html.twig @@ -0,0 +1,22 @@ +{{ form_start(form) }} +
+ {{ form_label(form.name) }} + {{ form_widget(form.name) }} +
+
+ {{ form_label(form.slug) }} + {{ form_widget(form.slug) }} +
+
+ {{ form_label(form.sortOrder) }} + {{ form_widget(form.sortOrder) }} +
+
+ + Cancel + + +
+{{ form_end(form) }} diff --git a/templates/_dashboard/item_category/edit.html.twig b/templates/_dashboard/item_category/edit.html.twig new file mode 100644 index 0000000..6f4e296 --- /dev/null +++ b/templates/_dashboard/item_category/edit.html.twig @@ -0,0 +1,9 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Edit ItemCategory

+ + {{ include('_dashboard/item_category/_form.html.twig', {'button_label': 'Update'}) }} + + {{ include('_dashboard/item_category/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/item_category/index.html.twig b/templates/_dashboard/item_category/index.html.twig new file mode 100644 index 0000000..6e5a290 --- /dev/null +++ b/templates/_dashboard/item_category/index.html.twig @@ -0,0 +1,42 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {% if is_granted('ROLE_ADMIN') %} +

+ Create new +

+ {% endif %} + + + + + {##} + + + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + + + {% for _itemCategory in itemsCategories %} + + {##} + + + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + {% else %} + + + + {% endfor %} + +
IdNameSlugSortOrderactions
{{ _itemCategory.id }}{{ _itemCategory.name }}{{ _itemCategory.slug }}{{ _itemCategory.sortOrder }} + edit +
no records found
+{% endblock %} diff --git a/templates/_dashboard/item_category/new.html.twig b/templates/_dashboard/item_category/new.html.twig new file mode 100644 index 0000000..b5e2af9 --- /dev/null +++ b/templates/_dashboard/item_category/new.html.twig @@ -0,0 +1,7 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Create new ItemCategory

+ + {{ include('_dashboard/item_category/_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/map/._delete_form.html.twig b/templates/_dashboard/map/._delete_form.html.twig new file mode 100644 index 0000000..8370c54 --- /dev/null +++ b/templates/_dashboard/map/._delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/_dashboard/map/.edit.html.twig b/templates/_dashboard/map/.edit.html.twig new file mode 100644 index 0000000..22732cd --- /dev/null +++ b/templates/_dashboard/map/.edit.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block body %} +

Edit Map

+ + {{ include('map/_form.html.twig', {'button_label': 'Update'}) }} + + back to list + + {{ include('map/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/map/.index.html.twig b/templates/_dashboard/map/.index.html.twig new file mode 100644 index 0000000..2093852 --- /dev/null +++ b/templates/_dashboard/map/.index.html.twig @@ -0,0 +1,37 @@ +{% extends 'base.html.twig' %} + +{% block body %} +

Map index

+ + + + + + + + + + + + + {% for map in maps %} + + + + + + + + {% else %} + + + + {% endfor %} + +
IdFileModifiedAtVersionactions
{{ map.id }}{{ map.file }}{{ map.modifiedAt ? map.modifiedAt|date('Y-m-d H:i:s') : '' }}{{ map.version }} + {#show#} + edit +
no records found
+ + Create new +{% endblock %} diff --git a/templates/_dashboard/map/.new.html.twig b/templates/_dashboard/map/.new.html.twig new file mode 100644 index 0000000..9488c8e --- /dev/null +++ b/templates/_dashboard/map/.new.html.twig @@ -0,0 +1,9 @@ +{% extends 'base.html.twig' %} + +{% block body %} +

Create new Map

+ + {{ include('map/_form.html.twig') }} + + back to list +{% endblock %} diff --git a/templates/_dashboard/map/.show.html.twig b/templates/_dashboard/map/.show.html.twig new file mode 100644 index 0000000..d9c2068 --- /dev/null +++ b/templates/_dashboard/map/.show.html.twig @@ -0,0 +1,32 @@ +{% extends 'base.html.twig' %} + +{% block body %} +

Map

+ + + + + + + + + + + + + + + + + + + + +
Id{{ map.id }}
File{{ map.file }}
ModifiedAt{{ map.modifiedAt ? map.modifiedAt|date('Y-m-d H:i:s') : '' }}
Version{{ map.version }}
+ + back to list + + edit + + {{ include('map/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/map/_form.html.twig b/templates/_dashboard/map/_form.html.twig new file mode 100644 index 0000000..79b916e --- /dev/null +++ b/templates/_dashboard/map/_form.html.twig @@ -0,0 +1,10 @@ +{{ form_start(form, {'name': "", 'attr': {'class': 'sp_grid__map-form sp_form__xhr sp_form__onchange'}}) }} + {{ form_widget(form.file, {'id': 'map_file' ~ idHash, 'attr': {'data-file-preview-target': 'map' ~ idHash}}) }} + + {% if route|end_with('_new') %} + {{ form_widget(form.version, {'id': 'map_version' ~ idHash}) }} + {% endif %} + + {{ form_widget(form._token, {'id': 'map__token' ~ idHash}) }} + {##} +{{ form_end(form) }} diff --git a/templates/_dashboard/monster/_delete_form.html.twig b/templates/_dashboard/monster/_delete_form.html.twig new file mode 100644 index 0000000..02c2dc4 --- /dev/null +++ b/templates/_dashboard/monster/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/_dashboard/monster/_form.html.twig b/templates/_dashboard/monster/_form.html.twig new file mode 100644 index 0000000..8ad0e6e --- /dev/null +++ b/templates/_dashboard/monster/_form.html.twig @@ -0,0 +1,40 @@ +{{ form_start(form, {'attr': {'class': 'sp_form__xhr'}}) }} +
+ {{ form_label(form.name) }} + {{ form_widget(form.name) }} +
+
+ {{ form_label(form.slug) }} + {{ form_widget(form.slug) }} +
+
+ {{ form_label(form.description) }} + {{ form_widget(form.description) }} +
+
+ {{ form_label(form.icon) }} + + + + + {{ form_widget(form.icon, {'attr': {'data-file-preview-target': 'item-icon-preview'}}) }} +
+
+ {{ form_label(form.version) }} + {{ form_widget(form.version) }} +
+ {% if route|end_with('_edit') %} +
+ {{ form_label(form.removeFile) }} + {{ form_widget(form.removeFile) }} +
+ {% endif %} +
+ + Cancel + + +
+{{ form_end(form) }} diff --git a/templates/_dashboard/monster/edit.html.twig b/templates/_dashboard/monster/edit.html.twig new file mode 100644 index 0000000..1bbda14 --- /dev/null +++ b/templates/_dashboard/monster/edit.html.twig @@ -0,0 +1,11 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Edit Monster

+ + {{ include('_dashboard/monster/_form.html.twig', {'button_label': 'Update'}) }} + + back to list + + {{ include('_dashboard/monster/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/monster/index.html.twig b/templates/_dashboard/monster/index.html.twig new file mode 100644 index 0000000..6dba347 --- /dev/null +++ b/templates/_dashboard/monster/index.html.twig @@ -0,0 +1,46 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {% if is_granted('ROLE_SENIOR') %} +

+ Create new +

+ {% endif %} + + + + + {##} + + + + {##} + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + + + {% for monster in monsters %} + + {##} + + + + {##} + + {% if is_granted('ROLE_SENIOR') %} + + {% endif %} + + {% else %} + + + + {% endfor %} + +
IdNameSlugDescriptionIconVersionactions
{{ monster.id }}{{ monster.name }} {{ monster.name }}{{ monster.slug }}{{ monster.description }}{{ monster.icon }}{{ monster.version }} + edit +
no records found
+{% endblock %} diff --git a/templates/_dashboard/monster/new.html.twig b/templates/_dashboard/monster/new.html.twig new file mode 100644 index 0000000..4eb0ffb --- /dev/null +++ b/templates/_dashboard/monster/new.html.twig @@ -0,0 +1,7 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Create new Monster

+ + {{ include('_dashboard/monster/_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/monster_category/_delete_form.html.twig b/templates/_dashboard/monster_category/_delete_form.html.twig new file mode 100644 index 0000000..0bc22be --- /dev/null +++ b/templates/_dashboard/monster_category/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/_dashboard/monster_category/_form.html.twig b/templates/_dashboard/monster_category/_form.html.twig new file mode 100644 index 0000000..0a06d93 --- /dev/null +++ b/templates/_dashboard/monster_category/_form.html.twig @@ -0,0 +1,18 @@ +{{ form_start(form) }} +
+ {{ form_label(form.name) }} + {{ form_widget(form.name) }} +
+
+ {{ form_label(form.slug) }} + {{ form_widget(form.slug) }} +
+
+ + Cancel + + +
+{{ form_end(form) }} diff --git a/templates/_dashboard/monster_category/edit.html.twig b/templates/_dashboard/monster_category/edit.html.twig new file mode 100644 index 0000000..cec1548 --- /dev/null +++ b/templates/_dashboard/monster_category/edit.html.twig @@ -0,0 +1,9 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Edit MonsterCategory

+ + {{ include('_dashboard/monster_category/_form.html.twig', {'button_label': 'Update'}) }} + + {{ include('_dashboard/monster_category/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/monster_category/index.html.twig b/templates/_dashboard/monster_category/index.html.twig new file mode 100644 index 0000000..f58c9ab --- /dev/null +++ b/templates/_dashboard/monster_category/index.html.twig @@ -0,0 +1,40 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {% if is_granted('ROLE_ADMIN') %} +

+ Create new +

+ {% endif %} + + + + + {##} + + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + + + {% for monsterCategory in monstersCategories %} + + {##} + + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + {% else %} + + + + {% endfor %} + +
IdNameSlugactions
{{ monsterCategory.id }}{{ monsterCategory.name }}{{ monsterCategory.slug }} + edit +
no records found
+{% endblock %} diff --git a/templates/_dashboard/monster_category/new.html.twig b/templates/_dashboard/monster_category/new.html.twig new file mode 100644 index 0000000..e306154 --- /dev/null +++ b/templates/_dashboard/monster_category/new.html.twig @@ -0,0 +1,7 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} +

Create new MonsterCategory

+ + {{ include('_dashboard/monster_category/_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/node/_delete_form.html.twig b/templates/_dashboard/node/_delete_form.html.twig new file mode 100644 index 0000000..5d066b9 --- /dev/null +++ b/templates/_dashboard/node/_delete_form.html.twig @@ -0,0 +1,15 @@ +{{ form_start(form, {'attr': {'class': 'sp_modal sp_modal__warn sp_form__xhr'}}) }} +
+
Do you really want to delete this node?
+
This action can't be canceled.
+
+ +
+ + +
+{{ form_end(form) }} \ No newline at end of file diff --git a/templates/_dashboard/node/_form.html.twig b/templates/_dashboard/node/_form.html.twig new file mode 100644 index 0000000..16455c1 --- /dev/null +++ b/templates/_dashboard/node/_form.html.twig @@ -0,0 +1,114 @@ +{#
#} +
+ {{ form_start(form, {'attr': {'id': 'node-form', 'class': 'sp_form__xhr'}}) }} +
+
+ +
+
+
+ {{ form_label(form.coordX, 'Pos X') }} + {{ form_widget(form.coordX) }} +
+
+ {{ form_label(form.coordY, 'Pos Y') }} + {{ form_widget(form.coordY) }} +
+
+
+ +
+
+ {{ form_label(form.quantity) }} + {{ form_widget(form.quantity) }} +
+
+ +
+
+ {{ form_label(form.primogem) }} + {{ form_widget(form.primogem) }} +
+
+ +
+
+ {{ form_label(form.description) }} + {{ form_widget(form.description) }} +
+
+ +
+
+ {{ form_label(form.screenshotA, 'Screenshot 1') }} + + + + + {{ form_widget(form.screenshotA, {'attr': {'class': 'sp_input__format-screenshot', 'data-file-preview-target': 'screenshot-a-preview'}}) }} +
+
+ {{ form_label(form.screenshotB, 'Screenshot 2') }} + + + + + {{ form_widget(form.screenshotB, {'attr': {'class': 'sp_input__format-screenshot', 'data-file-preview-target': 'screenshot-b-preview'}}) }} +
+
+ {{ form_label(form.screenshotC, 'Screenshot 3') }} + + + + + {{ form_widget(form.screenshotC, {'attr': {'class': 'sp_input__format-screenshot', 'data-file-preview-target': 'screenshot-c-preview'}}) }} +
+
+ {{ form_label(form.screenshotD, 'Screenshot 4') }} + + + + + {{ form_widget(form.screenshotD, {'attr': {'class': 'sp_input__format-screenshot', 'data-file-preview-target': 'screenshot-d-preview'}}) }} +
+
+ {{ form_label(form.screenshotE, 'Screenshot 5') }} + + + + + {{ form_widget(form.screenshotE, {'attr': {'class': 'sp_input__format-screenshot', 'data-file-preview-target': 'screenshot-e-preview'}}) }} +
+
+ +
+
+ {{ form_label(form.version, null, {'label_attr': {'class': 'sp_radio__main-label'}}) }} +
+ {% for key, choice in form.version %} + + {% endfor %} + {% do form.version.setRendered %} +
+
+
+ + +
+
+ {{ form_end(form) }} + +
\ No newline at end of file diff --git a/templates/_dashboard/node/edit.html.twig b/templates/_dashboard/node/edit.html.twig new file mode 100644 index 0000000..bee209a --- /dev/null +++ b/templates/_dashboard/node/edit.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block title %}Edit Node{% endblock %} + +{% block body %} +

Edit Node

+ + {{ include('_dashboard/node/_form.html.twig', {'button_label': 'Update'}) }} + + {{ include('_dashboard/node/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/node/index.html.twig b/templates/_dashboard/node/index.html.twig new file mode 100644 index 0000000..525fde4 --- /dev/null +++ b/templates/_dashboard/node/index.html.twig @@ -0,0 +1,46 @@ +{% extends 'base.html.twig' %} + +{% block title %}Node index{% endblock %} + +{% block body %} +

Node index

+ + + + + + + + + + + + + + + + + {% for node in nodes %} + + + + + + + + + + + + {% else %} + + + + {% endfor %} + +
IdQuantityCoordinateYoutubeCreateAtModifiedAtVersionIsDeletedactions
{{ node.id }}{{ node.quantity }}{{ node.coordinate ? node.coordinate|json_encode : '' }}{{ node.youtube }}{{ node.createAt ? node.createAt|date('Y-m-d H:i:s') : '' }}{{ node.modifiedAt ? node.modifiedAt|date('Y-m-d H:i:s') : '' }}{{ node.version }}{{ node.isDeleted ? 'Yes' : 'No' }} + edit +
no records found
+ + {#Create new#} +{% endblock %} diff --git a/templates/_dashboard/node/new.html.twig b/templates/_dashboard/node/new.html.twig new file mode 100644 index 0000000..c4916d4 --- /dev/null +++ b/templates/_dashboard/node/new.html.twig @@ -0,0 +1,9 @@ +{% extends 'base.html.twig' %} + +{% block title %}New Node{% endblock %} + +{% block body %} +

Create new Node

+ + {{ include('_dashboard/node/_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/node/show.html.twig b/templates/_dashboard/node/show.html.twig new file mode 100644 index 0000000..21b8a3b --- /dev/null +++ b/templates/_dashboard/node/show.html.twig @@ -0,0 +1,48 @@ +{% extends 'base.html.twig' %} + +{% block title %}Node{% endblock %} + +{% block body %} +

Node

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Id{{ node.id }}
Quantity{{ node.quantity }}
Coordinate{{ node.coordinate ? node.coordinate|json_encode : '' }}
Youtube{{ node.youtube }}
CreateAt{{ node.createAt ? node.createAt|date('Y-m-d H:i:s') : '' }}
ModifiedAt{{ node.modifiedAt ? node.modifiedAt|date('Y-m-d H:i:s') : '' }}
Version{{ node.version }}
IsDeleted{{ node.isDeleted ? 'Yes' : 'No' }}
+ + edit + + {{ include('node/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/region/_delete_form.html.twig b/templates/_dashboard/region/_delete_form.html.twig new file mode 100644 index 0000000..6647ea8 --- /dev/null +++ b/templates/_dashboard/region/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/_dashboard/region/_form.html.twig b/templates/_dashboard/region/_form.html.twig new file mode 100644 index 0000000..7106729 --- /dev/null +++ b/templates/_dashboard/region/_form.html.twig @@ -0,0 +1,108 @@ +{{ form_start(form) }} +
+ {{ form_label(form.parentRegion) }} + {{ form_widget(form.parentRegion) }} +
+
+ {{ form_label(form.name) }} + {{ form_widget(form.name) }} +
+
+ {{ form_label(form.slug) }} + {{ form_widget(form.slug) }} +
+ +
+ {{ form_label(form.isAlias, 'Is it an alias of parent region ?', {'label_attr': {'class': 'sp_radio__main-label'}}) }} +
+ {% for key, choice in form.isAlias %} + + {% endfor %} + {% do form.isAlias.setRendered %} +
+
+
+ {{ form_label(form.anchor, 'Alias anchor') }} + {{ form_widget(form.anchor) }} +
+ +
+ {{ form_label(form.description) }} + {{ form_widget(form.description) }} +
+ +
+
+ {% for key, choice in form.icon %} + + {% endfor %} + {% do form.icon.setRendered %} +
+
+ +
+ {{ form_label(form.mapBackground, 'Is region active ?', {'label_attr': {'class': 'sp_radio__main-label'}}) }} +
+ {% for key, choice in form.mapBackground %} + + {% endfor %} + {% do form.mapBackground.setRendered %} +
+
+ + {% if route|end_with('_new') %} +
+ {{ form_label(form.gridHeight) }} + {{ form_widget(form.gridHeight) }} +
+
+ {{ form_label(form.gridWidth) }} + {{ form_widget(form.gridWidth) }} +
+ {% endif %} + +
+ {{ form_label(form.version) }} + {{ form_widget(form.version) }} +
+
+ {{ form_label(form.sortOrder) }} + {{ form_widget(form.sortOrder) }} +
+ +
+ {{ form_label(form.isActive, 'Is region active ?', {'label_attr': {'class': 'sp_radio__main-label'}}) }} +
+ {% for key, choice in form.isActive %} + + {% endfor %} + {% do form.isActive.setRendered %} +
+
+ +
+ + Cancel + + +
+{{ form_end(form) }} \ No newline at end of file diff --git a/templates/_dashboard/region/edit.html.twig b/templates/_dashboard/region/edit.html.twig new file mode 100644 index 0000000..910c72c --- /dev/null +++ b/templates/_dashboard/region/edit.html.twig @@ -0,0 +1,7 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {{ include('_dashboard/region/_form.html.twig', {'button_label': 'Update'}) }} + + {{ include('_dashboard/region/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/region/index.html.twig b/templates/_dashboard/region/index.html.twig new file mode 100644 index 0000000..601db70 --- /dev/null +++ b/templates/_dashboard/region/index.html.twig @@ -0,0 +1,69 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + + + + {##} + + {##} + {##} + {##} + + + + + + + + {% for _region in regions %} + + {##} + + {##} + {##} + {##} + + + + + + {% for _subRegion in _region.subRegions %} + + {##} + + {##} + {##} + {##} + + + + + + {% endfor %} + {% else %} + + + + {% endfor %} + +
IdNameIconGridHeightGridWidthVersionSortOrderisActiveactions
{{ region.id }} {{ _region.name }}{{ region.icon }}{{ region.gridHeight }}{{ region.gridWidth }}{{ _region.version }}{{ _region.sortOrder }}{{ _region.isActive ? 'yes' : 'no' }} +
+ Show map + Edit region + Edit grid +
+
{{ region.id }} {{ _subRegion.name }}{{ region.icon }}{{ region.gridHeight }}{{ region.gridWidth }}{{ _subRegion.version }}{{ _subRegion.sortOrder }}{{ _subRegion.isActive ? 'yes' : 'no' }} +
+ {% if _subRegion.isAlias %} + Edit region + {% else %} + Show map + Edit region + Edit grid + {% endif %} +
+
no records found
+ + Create new +{% endblock %} diff --git a/templates/_dashboard/region/new.html.twig b/templates/_dashboard/region/new.html.twig new file mode 100644 index 0000000..4d57532 --- /dev/null +++ b/templates/_dashboard/region/new.html.twig @@ -0,0 +1,5 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {{ include('_dashboard/region/_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/worldmark/_delete_form.html.twig b/templates/_dashboard/worldmark/_delete_form.html.twig new file mode 100644 index 0000000..bc602f2 --- /dev/null +++ b/templates/_dashboard/worldmark/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/_dashboard/worldmark/_form.html.twig b/templates/_dashboard/worldmark/_form.html.twig new file mode 100644 index 0000000..33e80aa --- /dev/null +++ b/templates/_dashboard/worldmark/_form.html.twig @@ -0,0 +1,82 @@ +
+ + +
+ +{{ form_start(form, {'attr': {'id': 'form__worldmark', 'class': 'sp_form__xhr', 'data-content-for': 'worldmark__content-filter', 'data-filter-values': ['item','monster', 'custom']|json_encode, 'hidden': true}}) }} + + +
+ {{ form_label(form.name) }} + {{ form_widget(form.name) }} +
+
+ {{ form_label(form.slug) }} + {{ form_widget(form.slug) }} +
+ +
+ {{ form_label(form.defaultQuantityValue) }} + {{ form_widget(form.defaultQuantityValue) }} +
+
+ {{ form_label(form.defaultPrimogemValue) }} + {{ form_widget(form.defaultPrimogemValue) }} +
+ + +
+ {{ form_label(form.regions, null, {'label_attr': {'class': 'sp_radio__main-label'}}) }} +
+ {% for key, choice in form.regions %} + + {% endfor %} + {% do form.regions.setRendered %} +
+
+
+ {{ form_row(form.canBeHidden) }} +
+
+ {{ form_label(form.version) }} + {{ form_widget(form.version) }} +
+
+ {{ form_label(form.sortOrder) }} + {{ form_widget(form.sortOrder) }} +
+
+ + Cancel + + +
+{{ form_end(form) }} diff --git a/templates/_dashboard/worldmark/edit.html.twig b/templates/_dashboard/worldmark/edit.html.twig new file mode 100644 index 0000000..4ecb058 --- /dev/null +++ b/templates/_dashboard/worldmark/edit.html.twig @@ -0,0 +1,7 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {{ include('_dashboard/worldmark/_form.html.twig', {'button_label': 'Update'}) }} + + {{ include('_dashboard/worldmark/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/worldmark/index.html.twig b/templates/_dashboard/worldmark/index.html.twig new file mode 100644 index 0000000..49c375c --- /dev/null +++ b/templates/_dashboard/worldmark/index.html.twig @@ -0,0 +1,46 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {% if is_granted('ROLE_SENIOR') %} +

+ Create new +

+ {% endif %} + + + + + {##} + + + + + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + + + {% for worldmark in worldmarks %} + + {##} + + + + + + {% if is_granted('ROLE_SENIOR') %} + + {% endif %} + + {% else %} + + + + {% endfor %} + +
IdNameSlugDescriptionSortOrderVersionactions
{{ worldmark.id }}{{ worldmark.name }} {{ worldmark.name }}{{ worldmark.slug }}{{ worldmark.description }}{{ worldmark.sortOrder }}{{ worldmark.version }} + edit +
no records found
+{% endblock %} diff --git a/templates/_dashboard/worldmark/new.html.twig b/templates/_dashboard/worldmark/new.html.twig new file mode 100644 index 0000000..0dcdae1 --- /dev/null +++ b/templates/_dashboard/worldmark/new.html.twig @@ -0,0 +1,5 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {{ include('_dashboard/worldmark/_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/worldmark_category/_delete_form.html.twig b/templates/_dashboard/worldmark_category/_delete_form.html.twig new file mode 100644 index 0000000..bcbb98e --- /dev/null +++ b/templates/_dashboard/worldmark_category/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/_dashboard/worldmark_category/_form.html.twig b/templates/_dashboard/worldmark_category/_form.html.twig new file mode 100644 index 0000000..698f97f --- /dev/null +++ b/templates/_dashboard/worldmark_category/_form.html.twig @@ -0,0 +1,22 @@ +{{ form_start(form) }} +
+ {{ form_label(form.name) }} + {{ form_widget(form.name) }} +
+
+ {{ form_label(form.slug) }} + {{ form_widget(form.slug) }} +
+
+ {{ form_label(form.sortOrder) }} + {{ form_widget(form.sortOrder) }} +
+
+ + Cancel + + +
+{{ form_end(form) }} diff --git a/templates/_dashboard/worldmark_category/edit.html.twig b/templates/_dashboard/worldmark_category/edit.html.twig new file mode 100644 index 0000000..0da6cc4 --- /dev/null +++ b/templates/_dashboard/worldmark_category/edit.html.twig @@ -0,0 +1,7 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {{ include('_dashboard/worldmark_category/_form.html.twig', {'button_label': 'Update'}) }} + + {{ include('_dashboard/worldmark_category/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/_dashboard/worldmark_category/index.html.twig b/templates/_dashboard/worldmark_category/index.html.twig new file mode 100644 index 0000000..0767df8 --- /dev/null +++ b/templates/_dashboard/worldmark_category/index.html.twig @@ -0,0 +1,42 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {% if is_granted('ROLE_ADMIN') %} +

+ Create new +

+ {% endif %} + + + + + {##} + + + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + + + {% for worldmarkCategory in worldmarksCategories %} + + {##} + + + + {% if is_granted('ROLE_ADMIN') %} + + {% endif %} + + {% else %} + + + + {% endfor %} + +
IdNameSlugSortOrderactions
{{ worldmarkCategory.id }}{{ worldmarkCategory.name }}{{ worldmarkCategory.slug }}{{ worldmarkCategory.sortOrder }} + edit +
no records found
+{% endblock %} diff --git a/templates/_dashboard/worldmark_category/new.html.twig b/templates/_dashboard/worldmark_category/new.html.twig new file mode 100644 index 0000000..50bd17d --- /dev/null +++ b/templates/_dashboard/worldmark_category/new.html.twig @@ -0,0 +1,5 @@ +{% extends '_dashboard/base.html.twig' %} + +{% block page_content %} + {{ include('_dashboard/worldmark_category/_form.html.twig') }} +{% endblock %} diff --git a/templates/_menu.html.twig b/templates/_menu.html.twig new file mode 100644 index 0000000..e03d482 --- /dev/null +++ b/templates/_menu.html.twig @@ -0,0 +1,75 @@ + \ No newline at end of file diff --git a/templates/base.html.twig b/templates/base.html.twig new file mode 100644 index 0000000..982c894 --- /dev/null +++ b/templates/base.html.twig @@ -0,0 +1,136 @@ + + + + +{# {% if app.environment == 'dev' or#} +{# route|start_with('sandbox')#} +{# or route|start_with('security_')#} +{# or route|start_with('bo_') %}#} + + +{# {% endif %}#} + + + {{ title is defined ? title : 'Genshin Impact interactive map - Genshin World' }} + {% block meta %}{% endblock %} + + + {{ encore_entry_link_tags('app') }} + + {% for script in encore_entry_js_files('app') %} + + {% endfor %} + + {% if app.environment == 'prod' + and not route|start_with('security_') + and not route|start_with('bo_') %} + + + + + {% endif %} + + + {% if is_granted('ROLE_CONTRIBUTOR') %} + + {% endif %} +
+
+
+ {% if isTouchDevice.isMobile or isTouchDevice.isTablet %} + + {% endif %} + {% include '_menu.html.twig' %} + {% if user %} +
+ {% if is_granted('ROLE_CONTRIBUTOR') %} + + + + {% endif %} + + + +
+ {% endif %} +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% set elements = ['anemo', 'cryo', 'dendro', 'electro', 'geo', 'hydro', 'pyro']|shuffle_array %} + + {% for idx in 1..2 %} + {% for _element in elements %} +
+
+ {{ _element }} +
+
+ {% endfor %} + {% endfor %} +
+
+
+
+
+
+
+
+
+ {% block leftPanel %}{% endblock %} +
+
+ {% block body %}{% endblock %} +
+
+ {% block rightPanel %}{% endblock %} +
+
+ +
+ + diff --git a/templates/security/login.html.twig b/templates/security/login.html.twig new file mode 100644 index 0000000..738a7ac --- /dev/null +++ b/templates/security/login.html.twig @@ -0,0 +1,37 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
+ {% if error %} +
{{ error.messageKey|trans(error.messageData, 'security') }}
+ {% endif %} + + {% if app.user %} +
+ You are logged in as {{ app.user.username }}, Logout +
+ {% else %} +

Please sign in

+ + + + + + + {# + Uncomment this section and add a remember_me option below your firewall to activate remember me functionality. + See https://symfony.com/doc/current/security/remember_me.html + +
+ +
+ #} + + + {% endif %} +
+{% endblock %} diff --git a/templates/security/register.html.twig b/templates/security/register.html.twig new file mode 100644 index 0000000..c76f3b7 --- /dev/null +++ b/templates/security/register.html.twig @@ -0,0 +1,20 @@ +{% extends 'base.html.twig' %} + +{% block body %} + {% for flashError in app.flashes('verify_email_error') %} + + {% endfor %} +
+

Register

+ + {{ form_start(form) }} + {{ form_row(form.username) }} + {{ form_row(form.plainPassword, { + label: 'Password' + }) }} + {{ form_row(form.agreeTerms) }} + + + {{ form_end(form) }} +
+{% endblock %} diff --git a/templates/woldmap/_leftPannel.html.twig b/templates/woldmap/_leftPannel.html.twig new file mode 100644 index 0000000..40336f4 --- /dev/null +++ b/templates/woldmap/_leftPannel.html.twig @@ -0,0 +1,130 @@ +{#
#} +
+ - + - +
+
+
+ - +
+
+ - +
+
+
+
+
+
At least
+
0
+
+ Primogem +
+
+

primogems

 left to collect
+
+
+
+ {% set leftIndex = worldmarksData|length %} +
+
+ This website is used as portfolio and is no longer maintained. While the data it provide is still accurate, it will not be updated anymore. + Credits to HoYoVerse for the icons and images. +
+ {% for _worldmarkCategory in worldmarksData %} +
+
+

{{ _worldmarkCategory._data.name }}â–¼

+ + +
+
+
+ {% set rightIndex = _worldmarkCategory._worldmarks|length %} + + {% for _worldmark in _worldmarkCategory._worldmarks %} + + + {% if is_granted('ROLE_CONTRIBUTOR') %} + + {% endif %} + + {% set rightIndex = rightIndex - 1 %} + {% endfor %} +
+
+
+ {% set leftIndex = leftIndex - 1 %} + {% endfor %} +
+
+
+
+ +
+
+ +
+ + + + + +
+
+
+ +
+ + + +
+
+
+
+
\ No newline at end of file diff --git a/templates/woldmap/_node.html.twig b/templates/woldmap/_node.html.twig new file mode 100644 index 0000000..530d085 --- /dev/null +++ b/templates/woldmap/_node.html.twig @@ -0,0 +1,31 @@ +{% set screenshots = [] %} +{% set screenshots = screenshots|merge(node.screenshotA ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotA)]: []) %} +{% set screenshots = screenshots|merge(node.screenshotB ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotB)]: []) %} +{% set screenshots = screenshots|merge(node.screenshotC ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotC)]: []) %} +{% set screenshots = screenshots|merge(node.screenshotD ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotD)]: []) %} +{% set screenshots = screenshots|merge(node.screenshotE ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotE)]: []) %} + + \ No newline at end of file diff --git a/templates/woldmap/show.html.twig b/templates/woldmap/show.html.twig new file mode 100644 index 0000000..0aca995 --- /dev/null +++ b/templates/woldmap/show.html.twig @@ -0,0 +1,115 @@ +{% extends 'base.html.twig' %} + +{% set metaRegionName = region.name %} +{% for _region in region.subRegions|filter(_region => _region.isAlias and _region.parentRegion.id == region.id) %} + {% set metaRegionName = metaRegionName ~ ' and ' ~ _region.name %} +{% endfor %} + +{% set metaTitle = title is defined ? title : 'Genshin Impact interactive map - Genshin World' %} +{#{% set metaDesc = 'Genshin Impact interactive map of ' ~ metaRegionName ~ '. Find every interest points, events, chests, monsters and materials of Teyvat. Up to date with latest patch.' %}#} +{% set metaDesc = 'Genshin Impact interactive map of ' ~ metaRegionName ~ '. Find every interest points, events, chests, monsters and materials of Teyvat.' %} + +{% block meta %} + + + + {% if not region.isActive %} + + + {% endif %} + + + + + + + + + + + + + + +{% endblock %} + +{% block leftPanel %} + {% include 'woldmap/_leftPannel.html.twig' %} +{% endblock %} + +{% block body %} +

{{ metaTitle }}

+
+ {% for row in 1..region.gridHeight %} + {% for col in 1..region.gridWidth %} +
+ {% set idHash = 'map_g' ~ grid[row][col]['id'] ~ '_v' ~ version %} + + {{ region.name }} +
+ {% if nodes['grid_' ~ grid[row][col]['id']] is defined %} + {% for _node in nodes['grid_' ~ grid[row][col]['id']] %} + + {% include 'woldmap/_node.html.twig' with {'node': _node} %} + {% endfor %} + {% endif %} +
+
+ {% endfor %} + {% endfor %} +
+
+ + + + - +
+ + {##} +{% endblock %} diff --git a/templates/woldmap/show.html.twig.bak b/templates/woldmap/show.html.twig.bak new file mode 100644 index 0000000..8a5c00f --- /dev/null +++ b/templates/woldmap/show.html.twig.bak @@ -0,0 +1,109 @@ +{% extends 'base.html.twig' %} + +{% set metaRegionName = region.name %} +{% for _region in region.subRegions|filter(_region => _region.isAlias and _region.parentRegion.id == region.id) %} + {% set metaRegionName = metaRegionName ~ ' and ' ~ _region.name %} +{% endfor %} + +{% set metaTitle = title is defined ? title ~ ' - Genshin World' : 'Genshin World' %} +{#{% set metaDesc = 'Genshin Impact interactive map of ' ~ metaRegionName ~ '. Find every interest points, events, chests, monsters and materials of Teyvat. Up to date with latest patch.' %}#} +{% set metaDesc = 'Genshin Impact interactive map of ' ~ metaRegionName ~ '. Find every interest points, events, chests, monsters and materials of Teyvat.' %} + +{% block meta %} + + + + + + + + + + + + + + + + +{% endblock %} + +{% block leftPanel %} + {% include 'woldmap/_leftPannel.html.twig' %} +{% endblock %} + +{% block body %} +

{{ metaTitle }}

+
+
+ {% for row in 1..region.gridHeight %} +
+ {% for col in 1..region.gridWidth %} +
+ {% set idHash = 'map_g' ~ grid[row][col]['id'] ~ '_v' ~ version %} + + {{ region.name }} +
+ {% if nodes['grid_' ~ grid[row][col]['id']] is defined %} + {% for _node in nodes['grid_' ~ grid[row][col]['id']] %} + + {% include 'woldmap/_node.html.twig' with {'node': _node} %} + {% endfor %} + {% endif %} +
+
+ {% endfor %} +
+ {% endfor %} +
+
+ + {##} +{% endblock %} diff --git a/translations/.gitignore b/translations/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..bf0c6ed --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,86 @@ +const Encore = require('@symfony/webpack-encore'); + +// Manually configure the runtime environment if not already configured yet by the "encore" command. +// It's useful when you use tools that rely on webpack.config.js file. +if (!Encore.isRuntimeEnvironmentConfigured()) { + Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev'); +} + +Encore + // directory where compiled assets will be stored + .setOutputPath('public/build/') + // public path used by the web server to access the output path + .setPublicPath('/build') + // only needed for CDN's or sub-directory deploy + //.setManifestKeyPrefix('build/') + + /* + * ENTRY CONFIG + * + * Each entry will result in one JavaScript file (e.g. app.js) + * and one CSS file (e.g. app.css) if your JavaScript imports CSS. + */ + .addEntry('app', './assets/app.js') + + // enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js) + // .enableStimulusBridge('./assets/controllers.json') + + // When enabled, Webpack "splits" your files into smaller pieces for greater optimization. + .splitEntryChunks() + + // will require an extra script tag for runtime.js + // but, you probably want this, unless you're building a single-page app + .enableSingleRuntimeChunk() + + /* + * FEATURE CONFIG + * + * Enable & configure other features below. For a full + * list of features, see: + * https://symfony.com/doc/current/frontend.html#adding-more-features + */ + .cleanupOutputBeforeBuild() + .enableBuildNotifications() + .enableSourceMaps(!Encore.isProduction()) + // enables hashed filenames (e.g. app.abc123.css) + .enableVersioning(Encore.isProduction()) + + .configureBabel((config) => { + config.plugins.push('@babel/plugin-proposal-class-properties'); + }) + + // enables @babel/preset-env polyfills + .configureBabelPresetEnv((config) => { + config.useBuiltIns = 'usage'; + config.corejs = 3; + }) + + // enables Sass/SCSS support + .enableSassLoader() + .configureFilenames({ + js: '[name].[contenthash].js', + css: '[name].[contenthash].css', + assets: 'assets/[name].[hash:8][ext]', + }) + .configureFontRule({ + filename: '[path][name][ext]', + }) + .configureImageRule({ + filename: "[path][name][ext]", + }) + + // uncomment if you use TypeScript + //.enableTypeScriptLoader() + + // uncomment if you use React + //.enableReactPreset() + + // uncomment to get integrity="..." attributes on your script & link tags + // requires WebpackEncoreBundle 1.4 or higher + //.enableIntegrityHashes(Encore.isProduction()) + + // uncomment if you're having problems with a jQuery plugin + //.autoProvidejQuery() +; + +module.exports = Encore.getWebpackConfig(); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..ff1e2dc --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7224 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@ampproject/remapping@npm:^2.1.0": + version: 2.1.2 + resolution: "@ampproject/remapping@npm:2.1.2" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.0" + checksum: 10c0/e02581d109eab8d0b64f50a1289ed5079cfeceb273ea1e982e42fc0163e9c3f5471c558389de49fa5b9f6eee1e292f539133d27c9831f04689cf091077136f3c + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/code-frame@npm:7.16.7" + dependencies: + "@babel/highlight": "npm:^7.16.7" + checksum: 10c0/bed53eab44e67480e67b353b94ab9bef7bce6cdea799dde591c296cfb47d872348f20cf9a3b82b0dbf8530bf67ca438b5bed3d80622ea76c7227cea3e6f04aa6 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.16.4, @babel/compat-data@npm:^7.16.8, @babel/compat-data@npm:^7.17.0": + version: 7.17.0 + resolution: "@babel/compat-data@npm:7.17.0" + checksum: 10c0/6d70a5a1362e013c43ac0fc8027944cb3766f5a173690293336340644e05070f23490e52c059423c9a412395855bcb8d884ad5db77f293518b08bfed2152fff6 + languageName: node + linkType: hard + +"@babel/core@npm:^7.7.0": + version: 7.17.5 + resolution: "@babel/core@npm:7.17.5" + dependencies: + "@ampproject/remapping": "npm:^2.1.0" + "@babel/code-frame": "npm:^7.16.7" + "@babel/generator": "npm:^7.17.3" + "@babel/helper-compilation-targets": "npm:^7.16.7" + "@babel/helper-module-transforms": "npm:^7.16.7" + "@babel/helpers": "npm:^7.17.2" + "@babel/parser": "npm:^7.17.3" + "@babel/template": "npm:^7.16.7" + "@babel/traverse": "npm:^7.17.3" + "@babel/types": "npm:^7.17.0" + convert-source-map: "npm:^1.7.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.1.2" + semver: "npm:^6.3.0" + checksum: 10c0/9caca185f2c9f32ebf3daafb1461735d457520b3166ad5eff346c5015a7e457bcf14fdde009fcc945282615b5654bf89ef6bc0bd54e09b25490a0a765fc922c1 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.17.3": + version: 7.17.3 + resolution: "@babel/generator@npm:7.17.3" + dependencies: + "@babel/types": "npm:^7.17.0" + jsesc: "npm:^2.5.1" + source-map: "npm:^0.5.0" + checksum: 10c0/876a007d769bdb9d2d86556ceb6dac6cae0d8b25cf18a87a3a284454fcaa66aa52e83ebff3f3551bd0e91358bbcc4fd43c5e6e19f86341ba0f0a8734fcde918f + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/ce0ba7e9ab86c6c61cb111240428deeded48a0c293a0fc912608875cd30d4783937beba5b303dc97b9296048c09c0156756598939fc172bb36ddbe7760e5e154 + languageName: node + linkType: hard + +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.16.7" + dependencies: + "@babel/helper-explode-assignable-expression": "npm:^7.16.7" + "@babel/types": "npm:^7.16.7" + checksum: 10c0/ea08e5491ac2edc9d7d57092abf1704835e986ac4184449940dca082b03909f8f4f672f862c582d05a2e5635acd2aaf4efcf57027cd37a027d24034d63cf0610 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-compilation-targets@npm:7.16.7" + dependencies: + "@babel/compat-data": "npm:^7.16.4" + "@babel/helper-validator-option": "npm:^7.16.7" + browserslist: "npm:^4.17.5" + semver: "npm:^6.3.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/a553394b55f1ec7a2b92ca9c9c381dd706f69074ef5404cb146e65b5221d249602f2e78aab56e5e0930f33b0641b3e6aefdd1032df532c50482a3308ec8d2810 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.16.10, @babel/helper-create-class-features-plugin@npm:^7.16.7, @babel/helper-create-class-features-plugin@npm:^7.17.6": + version: 7.17.6 + resolution: "@babel/helper-create-class-features-plugin@npm:7.17.6" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.16.7" + "@babel/helper-environment-visitor": "npm:^7.16.7" + "@babel/helper-function-name": "npm:^7.16.7" + "@babel/helper-member-expression-to-functions": "npm:^7.16.7" + "@babel/helper-optimise-call-expression": "npm:^7.16.7" + "@babel/helper-replace-supers": "npm:^7.16.7" + "@babel/helper-split-export-declaration": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/a0889c52920c98ca067e1f3eb5fe92acf04c83f02852d1a8450ec987abaf9c30778734f7225df5d5531e6715d4450f08293f9f744db25204971255349f837092 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.16.7": + version: 7.17.0 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.17.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.16.7" + regexpu-core: "npm:^5.0.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/e776449e6d6c61e0f95b836c2dadeab1e5db419a74de29946681cef137ef0ca71e0e19b5057b6239c88e99517506eb94a776adf84df80b3222f61da86899b7ac + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.3.1": + version: 0.3.1 + resolution: "@babel/helper-define-polyfill-provider@npm:0.3.1" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.13.0" + "@babel/helper-module-imports": "npm:^7.12.13" + "@babel/helper-plugin-utils": "npm:^7.13.0" + "@babel/traverse": "npm:^7.13.0" + debug: "npm:^4.1.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.14.2" + semver: "npm:^6.1.2" + peerDependencies: + "@babel/core": ^7.4.0-0 + checksum: 10c0/1daf68e594bd7d32429693c4083e3cda78f34ebc8b716f54a8bb65b5786a88653e7e0182f98099473599f7717e0da3e96afe1b7f04c420465f3a4c43b2663389 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-environment-visitor@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/d89bc719efea94c866b2fddcc349a26c98fc1e0c38e61e23c40bf7c3e34d9e0e43b6c5327bf0b0de95bda4b8ae61388cba1d477cafecf05b3a7c1a71b05a65a6 + languageName: node + linkType: hard + +"@babel/helper-explode-assignable-expression@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-explode-assignable-expression@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/f7a990743f8078f9690d4c1d8c190607b8d6acee3c6b25a261a85344a79f60a41c55809954840fd9a31f5d0a4babef1c49692f461a5957d3f193654e1ab454c7 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-function-name@npm:7.16.7" + dependencies: + "@babel/helper-get-function-arity": "npm:^7.16.7" + "@babel/template": "npm:^7.16.7" + "@babel/types": "npm:^7.16.7" + checksum: 10c0/1c6a415ee71055bd9a57c8a204ff81417be418990c1a6a5ef2a655e9b74d34658190a051a9b716f77689c292e8b66889d74720d4d69a5c272cf172887f691d0c + languageName: node + linkType: hard + +"@babel/helper-get-function-arity@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-get-function-arity@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/e1bca6793a77144f023af577e8761cab096d5945c4081c54841f58724ae9f5009c1d91603afd266f0f4d279c94bae9430cf029d04445dabd46b1f2e7bc165419 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-hoist-variables@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/20e9775db9d37bd8ba76be5fe08c80a916be794a645311a78c38382d415305690194f61337b508c23528479bf2768ab7484c133c75e8194c6ae55ab46c05bde7 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/73d81b890d322d97dc14a7b43a0fdbb52f2e0ee2bde044f4d07928efbda4f51f0814179c31b4c8ec1f0f8a3c8b47fe2d98602a039e0f48d904b1e30f34b60e47 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-module-imports@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/134e3979d822ddd6871285ead2b7eed7fb4cd8862fec64692c98bb5bd401199a149b510394d75ca39a9dad6d3ecd6f2f14b61ff1f7b8b59781cba5efeb881d04 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.16.7": + version: 7.17.6 + resolution: "@babel/helper-module-transforms@npm:7.17.6" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.16.7" + "@babel/helper-module-imports": "npm:^7.16.7" + "@babel/helper-simple-access": "npm:^7.16.7" + "@babel/helper-split-export-declaration": "npm:^7.16.7" + "@babel/helper-validator-identifier": "npm:^7.16.7" + "@babel/template": "npm:^7.16.7" + "@babel/traverse": "npm:^7.17.3" + "@babel/types": "npm:^7.17.0" + checksum: 10c0/c867b188aa5b464d9370ef54bbc603dcab422fa2d16ab6609cd4540cafb8cfc4c72b231b6195f7cfdd86cb9befa899d37c739f006367f3385f63c6867623b71b + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/8ceb6ddeaba2709fd9601157175314ec1e1e2536bc01e3a4609c5d4133b899a94f94d9cbd1549e22dce2442d0497270e97cadf796f76d29b60fa8bd0acec9c78 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.16.7 + resolution: "@babel/helper-plugin-utils@npm:7.16.7" + checksum: 10c0/14c50026d019d0ee6f8bb63fbb302323d443857a111006becf8cc65c41de1289b2c6374e48d97a6f733ddbd098ed4d2141693392d76c901b8e8cdc075b5eaf41 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.16.8": + version: 7.16.8 + resolution: "@babel/helper-remap-async-to-generator@npm:7.16.8" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.16.7" + "@babel/helper-wrap-function": "npm:^7.16.8" + "@babel/types": "npm:^7.16.8" + checksum: 10c0/b3a5e62ee58bffb745b3ab1724453c325e1fa191abaa003cbcaf59934df4b5e1d5225519676ab0e3418c8dcd847c71bfc191bd65cdc91d3a92880ce6093ffd6c + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-replace-supers@npm:7.16.7" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.16.7" + "@babel/helper-member-expression-to-functions": "npm:^7.16.7" + "@babel/helper-optimise-call-expression": "npm:^7.16.7" + "@babel/traverse": "npm:^7.16.7" + "@babel/types": "npm:^7.16.7" + checksum: 10c0/34cf10dcf113999b3cc9d06443803a0320a0fa4c1be869bbd5f57043d6d3b325374da76eed71bf8aa1d754c7aaa0ae69502cf442b68e9f4496f09a85f08d60ef + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-simple-access@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/e46265892655675cc5968ea9c9932104389146258e2b383fdb3b4aef9052acb03cd5463abc712c97745bc619de68f612b7337f0d607f57f822db91e9064605d2 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.16.0": + version: 7.16.0 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.16.0" + dependencies: + "@babel/types": "npm:^7.16.0" + checksum: 10c0/d3b8668a355e82a1c18137a1d5f3d8565ec88cff464f1c0a7c6e99c4cd0d92a77aeb51ca7fa71afa3bf8c50035bc5cf25504f46e01a94b9e6a297bdf3ac35f40 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-split-export-declaration@npm:7.16.7" + dependencies: + "@babel/types": "npm:^7.16.7" + checksum: 10c0/a710d13e67747040167064e90e9a4eb262f89cecde75ecdd0a1bd456186a7a2c4cede8ad5e28e12d2437230970f38e9ee97e878801bafcb49b2cc755a1753434 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-validator-identifier@npm:7.16.7" + checksum: 10c0/5dfeea422c375edef9bfc65c70e944091b487c937a1f4f49d473d812bf4d527c4b7730ab5542137b631b76bd6a68af37701620043d32fa42fda82d2fe064a75e + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-validator-option@npm:7.16.7" + checksum: 10c0/0088c0ff1f9a78b0956bb509bc978c58a81993f0328fe2b123f010c35b73ade2c9a6c21e6618ae7b70ba53cc1c468dbe49fe6ac50b4513e3c7fe91be8a1fe7c2 + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.16.8": + version: 7.16.8 + resolution: "@babel/helper-wrap-function@npm:7.16.8" + dependencies: + "@babel/helper-function-name": "npm:^7.16.7" + "@babel/template": "npm:^7.16.7" + "@babel/traverse": "npm:^7.16.8" + "@babel/types": "npm:^7.16.8" + checksum: 10c0/3f73620d6ea744d1dadcc3c9141bfe91ddf1cb6e09fbb750f5d5fdc615e8b1a6d27985901b7eaffa6524284c557b187589272fa3b49aa678be6a32ff84dd4b38 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.17.2": + version: 7.17.2 + resolution: "@babel/helpers@npm:7.17.2" + dependencies: + "@babel/template": "npm:^7.16.7" + "@babel/traverse": "npm:^7.17.0" + "@babel/types": "npm:^7.17.0" + checksum: 10c0/c59d4d5a072a6b00d07910499a6a758962334eef76ed687cb969ccd3c82c470b37718e2a7433de4ea0d1b7a134b20fc311775949b07955e37fc45744f8d23b39 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.16.7": + version: 7.16.10 + resolution: "@babel/highlight@npm:7.16.10" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.16.7" + chalk: "npm:^2.0.0" + js-tokens: "npm:^4.0.0" + checksum: 10c0/0ec2007a1fbd826f4433daded828a65b824fa653c65c57d7a45aea161636994099db8c071a7a4e0844c2a2cec3aeaea62359f4b8b907f9cae7e440693af65331 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.16.7, @babel/parser@npm:^7.17.3": + version: 7.17.3 + resolution: "@babel/parser@npm:7.17.3" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/677edc6607da457bbe2b4ea4622c667b521d80ae9bfb40314e99e96f235cd076e7ea721a781f330472fc39bc3cba871d00a701da691d35e1039d6b72d2d1e555 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/42b5f75ad16404802675c7b997ccf3f5a4e096eb1d55d711b10adcc2c2179b604080121bdf93302b184269abc2449601e66dc88bdc3621ad7f6db718f809ef3b + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.16.0" + "@babel/plugin-proposal-optional-chaining": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/4b365feab29261f217d324de8a20b1defc85f53f78057ca779dab2544a3cac8667ad49039c510cf5aeafe7fb6e22face09ca2aa7ea99588bc2880593d4da59bd + languageName: node + linkType: hard + +"@babel/plugin-proposal-async-generator-functions@npm:^7.16.8": + version: 7.16.8 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.16.8" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-remap-async-to-generator": "npm:^7.16.8" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/557d81220310694abcece8c33f1bba1e3fe911cd7368bd04ff3c109a8b5fd4d4d2892b60f0ed6d3e4f919dca65d65cf8bac515a4e94ada3b037f1aff3d3106a7 + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-class-properties@npm:7.16.7" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/70b7995e67800525478bf27e98ee91473c68628b1e61e262e98e06606502baaa3c5350e5afe2fbf15ae8c176b2c9472b8019faa53bded378dd2193bbdd8f54c1 + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-static-block@npm:^7.16.7": + version: 7.17.6 + resolution: "@babel/plugin-proposal-class-static-block@npm:7.17.6" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.17.6" + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/aec5aaff75587a113bfb0b053a935d235d37b73209980f041099e07491045ee615955659f1cb27c05a30e9ead102bd93ee31c702e5d21e29080bae5f5b504aa5 + languageName: node + linkType: hard + +"@babel/plugin-proposal-dynamic-import@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-dynamic-import@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1d8af47bfef56d36dd1cf8b54dcd2b52f740eccbe9530384739b0b8ed5caeb0eae366d275cf16658ff917c1cb05880e41039a497e169206c99cab49b99624e82 + languageName: node + linkType: hard + +"@babel/plugin-proposal-export-namespace-from@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/97f0746e994768834bf2138f0da69e1c75d987ce62779bacf4a22552e2bb1557634cfeecfd1413d8442a0d0893b8ecb23aae128da4749a3374887c671b866132 + languageName: node + linkType: hard + +"@babel/plugin-proposal-json-strings@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-json-strings@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a41971e27a9a87403d562604e8a4fbc4f74c5a2ad8490fb44cea69fa6baa1ce5ce46bf350c2bc2ca98f51a597aab29cbed650124627fb73fbcf143cc19bf622f + languageName: node + linkType: hard + +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/09c724facc4f3520a4e66ecc5afff26f57875d2af1bbd87d531af76dcec0fdbce450b62fe57a9cc65a8928fe5248d66bc16370df0972ea6bdeae329d11525311 + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/648065e8bfb10d6c68e4916f89a3aa368ce89139e2615dbcbc39b5d149d7d0275705e6032130fa14a38a4da04b61444a829e128ee224ffd906ccb3545c85a1fc + languageName: node + linkType: hard + +"@babel/plugin-proposal-numeric-separator@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-numeric-separator@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9f7d8223df576e9e8966c02354d9edec8c9c2edcd47162e08342693142be2fff0bc58c636d93bb83c36ab16f276cdcbc03cf68360f496153be1fe035ca72feb6 + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.16.7": + version: 7.17.3 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.17.3" + dependencies: + "@babel/compat-data": "npm:^7.17.0" + "@babel/helper-compilation-targets": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-transform-parameters": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c22a4f806b61deadfb9d4fe744cbdf532e0264433b6f572be5e8bef95aec9ac233c3e8e82af8ddeceff9db43a89c639877e385cf41fa6c3b8a92ff7078086cab + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-catch-binding@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8bfd71d663dd8e45e7bc9024d178f5046519e1d8af13ee1dd25b9a42155c7c7745eac779ed416438fb0be946d9f1da8b9dfae94c77a419e05bf4df9b4623071e + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.16.0" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7b710bb6cee4757ef7f85adb127b91217eee2876269275ccf35aa0a183296337abd9357948706337e532b279d156acb359a7eb61ce8b95f5cdfdbdb22665ecb4 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-methods@npm:^7.16.11": + version: 7.16.11 + resolution: "@babel/plugin-proposal-private-methods@npm:7.16.11" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.16.10" + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3e57910a383762414e3c96c3e29b493e75a2aa33d32ae44cb35e5a7ba2f7fea31bb2808496525724abef2c7048e0328fd1821a0c90a92f0d34325ae149ac9d96 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.16.7" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.16.7" + "@babel/helper-create-class-features-plugin": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/19a985270fbc243f049c2ac306705cd05b7b965f0a08ba48279daffb68f2565da6d3898faf960091ec2f2c85c3a337ba99e5a7389410dfd6a57447cbcd6c7992 + languageName: node + linkType: hard + +"@babel/plugin-proposal-unicode-property-regex@npm:^7.16.7, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": + version: 7.16.7 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.16.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4b0c93be393483691fc9ae85f0b386c0a50094a9a45b0bcffc5e60665f78e55832e5611243565ddf42ba596508b1dffd77a0871d78725a6b679086ff065095cb + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.12.13" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.0.0, @babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9c50927bf71adf63f60c75370e2335879402648f468d0172bc912e303c6a3876927d8eb35807331b57f415392732ed05ab9b42c68ac30a936813ab549e0246c5 + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5100d658ba563829700cd8d001ddc09f4c0187b1a13de300d729c5b3e87503f75a6d6c99c1794182f7f1a9f546ee009df4f15a0ce36376e206ed0012fa7cdc24 + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/69dce936e6684d9b3760bb2d7aefb2490db245a79b5437385da1ddfbe2ecaf673dfc0b5510aa6b871bd1b9dce1b3c2e4fdbdc8e94006f15ee2526e17e7f4af4a + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.16.8": + version: 7.16.8 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.16.8" + dependencies: + "@babel/helper-module-imports": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-remap-async-to-generator": "npm:^7.16.8" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d75d5cd8560a589578e1e33be1542da17116b1778347af17122910cd0bbb94e0f70ae92beae4f18a1b36dd8dc5251a51e68112e6940117615c667d9147f365cc + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/22069250a48e47c2818e1b5d5f81a7309792db07b1c9130faac2c47278b81d03e498ea12bed40f45ffdd5f240babc852c0cb2c65e77720b42ab6934cf2d52ea0 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-block-scoping@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8ba89b3b52f630d7e481d39d2bf71ff4a66d52442ccad00873f38169a39f847bd53a100ce84a96e29b1c38c75330812ff34ab798c265dc7547e3d5cda35f9f58 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-classes@npm:7.16.7" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.16.7" + "@babel/helper-environment-visitor": "npm:^7.16.7" + "@babel/helper-function-name": "npm:^7.16.7" + "@babel/helper-optimise-call-expression": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-replace-supers": "npm:^7.16.7" + "@babel/helper-split-export-declaration": "npm:^7.16.7" + globals: "npm:^11.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/61b13fd9308711fbf364674c5931fa50619ee98e9e26b44c081e43e8074e7aec96c470b42ddeeda287bab065005229079b39c20074a8cd592f5194b3c7434f74 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6be05be2c6d434ced8d86ccf4f98e591fc556faf7470b09eac9422dece9876b2c4b96d3f3c51d4260045a7cd2770a1de70fb3dc900e61a3132dcd69cfe8b9b5c + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.16.7": + version: 7.17.3 + resolution: "@babel/plugin-transform-destructuring@npm:7.17.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2ce7b6868b857454cd8d1f6360e59fa0fcae6041cdfb9ab15cc195269cc75d819d7fa74997f8a2f7684a2ac79aebee9aefb337d20c240232561da88ef6bd483c + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.16.7, @babel/plugin-transform-dotall-regex@npm:^7.4.4": + version: 7.16.7 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.16.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d2f6aa2dc2562c9969dbe3338f2afca7cd53f16989a14054ff7e45d0b7c5fc626e4b378904e29d13078db62ef6bd6805775644a27b3c461c0e679e590aac8d49 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3313e9a3bc7878c3d139d25891c6fb7a7ed6e23a4cdf80aaac25c6930f3a1005e5bb774f7f5dda4116e5914b2b898953b500f85d2f3d19ab77246a366117afc2 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.16.7" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8c0f3a8c51179a695592329d9fa5e6ce435d79dfb818b4069c26722d5f6f9b97c61cb45118d45218c5aed7c1ce50ca29daa6059c71532f681f54726d1bf524e4 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-for-of@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cddf6264096bea79ca662f267acf0f12cce783799f29e1b4b60a3ab543d2e426e9da2fc16b63c6f4df123d50c657bf57d58a43549bfdba28340c67f7eb67513c + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-function-name@npm:7.16.7" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.16.7" + "@babel/helper-function-name": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0f4e5af926b990c98a53caf1c4dcc215ab02588de0eaae616d658ab3e5947f5cd41140a0d84b73cae925cfa4b93b7ee9a4079cb0566cae369ede52d6d0c0a45c + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-literals@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3d3566e6ce02a2b1c7f8cf26f1b80d361b9df665c7256ddcf0177b59e411ebf3df094bdd5fd90aeef81bcb33f47e5de58e16d7e82113304bfd6eabc48cf47ca1 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/db1ccd139f6e4278a215503effd52be8c92fe689c0e6856da43689a67fc56418c10b3907bde91eba13e932ba99a3ebee08bff2b5b7b4d250e6538f308eb6d332 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-modules-amd@npm:7.16.7" + dependencies: + "@babel/helper-module-transforms": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + babel-plugin-dynamic-import-node: "npm:^2.3.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/eea74b0436124035ef1672f8181e00a4a2fca8105f4893c2464bb299cb55ab5be7530121ab68e45003279174fa3e8c357ce96baaaeae08bf2354897911ea63d0 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.16.8": + version: 7.16.8 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.16.8" + dependencies: + "@babel/helper-module-transforms": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-simple-access": "npm:^7.16.7" + babel-plugin-dynamic-import-node: "npm:^2.3.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9ace3c1ebceb4a40548939f14b53f7ac57a6648aac2fae4a65a75710579a4b92e08c0a1e2d5dfba82fb3ce2da91bc017d248a4473e9cdac7ef0f78ae3a157f22 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.16.7" + dependencies: + "@babel/helper-hoist-variables": "npm:^7.16.7" + "@babel/helper-module-transforms": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-validator-identifier": "npm:^7.16.7" + babel-plugin-dynamic-import-node: "npm:^2.3.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7a8239d7aae270c6230729c3eb8f352b150cc5d4467e9121ce4aa38593191b4f53eb8b523255b9d8bca481357f2cd666de38119cb877515dc28a1c9fd2d9e375 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-modules-umd@npm:7.16.7" + dependencies: + "@babel/helper-module-transforms": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2129af03c2e12df5267da56ce909e7164b2b644362e7c2fcc37391e9bc68d50095834b94c4f73293f1778e5234b2b82b89692bfc16ac5b27e889b82c23db0971 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.16.8": + version: 7.16.8 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.16.8" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/05467b5cef1ee5882b83aa72e09550680d291d1e01528d138e6651d0cc8dfcf696d0decbc563b4d65376785e2dca7573bac709a9fd1d21bc440ff1e21f1a7383 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-new-target@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7d2287274facc4a63224525f33fc1278871eea6d89dcfa5bf9791bae4e1f0e919a1a31bd3be783b4122fc0a883852ff59000b6689518dd1d4516d2f289d00266 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-object-super@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-replace-supers": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/641621635783251f8b42346f7359d8985aa1b821ab83a3a841f7393fddf94c71f5f1c373bd4ee8d0d39c95c29c593df004f7d379c9e552e86297f6ff174b9036 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-parameters@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3b7b350ce808a6bc858348f51329e232ef332c5326a30e9b80d927b4b43a1f68a31ddc2d791e08c8ec6f43d4878e726f46de9e84e76234213fc4fa2645660de7 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-property-literals@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7a5362389d479964af471a714e8194ba9f41ad22e1918a2878a8ed9e1375977dc61125f04a50012f1b63cf6e4afbbc785afd8b4fd9d70010def211016ae450d5 + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-regenerator@npm:7.16.7" + dependencies: + regenerator-transform: "npm:^0.14.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1b0774be99826b5c2bfb06d4d301a01b929c14d87670045f5cb347f80eca4095da9458f8288b3686ca490b1d70544035f015e24996e181a76087c932ce2e1ccd + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-reserved-words@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/fe61e3dd89b1b733a118145179552d0b31c68e40ed296f122728a13f462b29a43a3b7cf4686c367b6ad4d15670874676d04da5ea5eace41c393e81aeb66351bb + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7b873b600cfecafb701ea08e55573c784983f353ecd3c39cc5ac635d87ee508fe7ba2833835b8cfb55b70e3d1ed0a10d48b970ea1311e2886f8abbd746fb8c5f + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-spread@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.16.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/171ec5c6a873afa3999ab96acd211aafd7b8194d38ae254e0ff03148ebd2600400f7280af0aa0da78f90c1adb5d0af84a6dfc6b418cc891bc351a34065ee7cc1 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/da1d346c479c0b438eeb2fe2a993e48d19e5d1103e0c8684d56f09f0f15fec21e88e469445920b3fdd955ae6d365524f7ea3c54bd5772ecacefa65d0b94c80e0 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-template-literals@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f9e6ace71abfaad5c86197b5a6040b7b170a918000a8bccb7ca49bb4e088bf90383739cfba63513526f239f5073562e6661efd978de354ae39656d7f9fcf37e6 + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/fca9883472cc1687350b2261aa6da32dccd213a0629431f45d1501c7192947d543b320c17d892feac93e30f8965cd0c8bee460510f72a4d3e4ffa5dfbff8d29e + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/aabd933bc4c0936e45991ccd43b46b50e33e5495da36a32244693145fa5707c82a5d6d7f43e9a02f7e6df41da942707b4336461de5c7be5b82f4de2346ac7361 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.16.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ce3843c02e5e2b0007e4fd64f75282c5f69f9bd55e24574991a5fd3ee12aa2e4754304a7580ea8bb72f611b892303bce583dcfc2c4379869548413fa975ae549 + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.10.0": + version: 7.16.11 + resolution: "@babel/preset-env@npm:7.16.11" + dependencies: + "@babel/compat-data": "npm:^7.16.8" + "@babel/helper-compilation-targets": "npm:^7.16.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + "@babel/helper-validator-option": "npm:^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.16.7" + "@babel/plugin-proposal-async-generator-functions": "npm:^7.16.8" + "@babel/plugin-proposal-class-properties": "npm:^7.16.7" + "@babel/plugin-proposal-class-static-block": "npm:^7.16.7" + "@babel/plugin-proposal-dynamic-import": "npm:^7.16.7" + "@babel/plugin-proposal-export-namespace-from": "npm:^7.16.7" + "@babel/plugin-proposal-json-strings": "npm:^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators": "npm:^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.16.7" + "@babel/plugin-proposal-numeric-separator": "npm:^7.16.7" + "@babel/plugin-proposal-object-rest-spread": "npm:^7.16.7" + "@babel/plugin-proposal-optional-catch-binding": "npm:^7.16.7" + "@babel/plugin-proposal-optional-chaining": "npm:^7.16.7" + "@babel/plugin-proposal-private-methods": "npm:^7.16.11" + "@babel/plugin-proposal-private-property-in-object": "npm:^7.16.7" + "@babel/plugin-proposal-unicode-property-regex": "npm:^7.16.7" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + "@babel/plugin-transform-arrow-functions": "npm:^7.16.7" + "@babel/plugin-transform-async-to-generator": "npm:^7.16.8" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.16.7" + "@babel/plugin-transform-block-scoping": "npm:^7.16.7" + "@babel/plugin-transform-classes": "npm:^7.16.7" + "@babel/plugin-transform-computed-properties": "npm:^7.16.7" + "@babel/plugin-transform-destructuring": "npm:^7.16.7" + "@babel/plugin-transform-dotall-regex": "npm:^7.16.7" + "@babel/plugin-transform-duplicate-keys": "npm:^7.16.7" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.16.7" + "@babel/plugin-transform-for-of": "npm:^7.16.7" + "@babel/plugin-transform-function-name": "npm:^7.16.7" + "@babel/plugin-transform-literals": "npm:^7.16.7" + "@babel/plugin-transform-member-expression-literals": "npm:^7.16.7" + "@babel/plugin-transform-modules-amd": "npm:^7.16.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.16.8" + "@babel/plugin-transform-modules-systemjs": "npm:^7.16.7" + "@babel/plugin-transform-modules-umd": "npm:^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.16.8" + "@babel/plugin-transform-new-target": "npm:^7.16.7" + "@babel/plugin-transform-object-super": "npm:^7.16.7" + "@babel/plugin-transform-parameters": "npm:^7.16.7" + "@babel/plugin-transform-property-literals": "npm:^7.16.7" + "@babel/plugin-transform-regenerator": "npm:^7.16.7" + "@babel/plugin-transform-reserved-words": "npm:^7.16.7" + "@babel/plugin-transform-shorthand-properties": "npm:^7.16.7" + "@babel/plugin-transform-spread": "npm:^7.16.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.16.7" + "@babel/plugin-transform-template-literals": "npm:^7.16.7" + "@babel/plugin-transform-typeof-symbol": "npm:^7.16.7" + "@babel/plugin-transform-unicode-escapes": "npm:^7.16.7" + "@babel/plugin-transform-unicode-regex": "npm:^7.16.7" + "@babel/preset-modules": "npm:^0.1.5" + "@babel/types": "npm:^7.16.8" + babel-plugin-polyfill-corejs2: "npm:^0.3.0" + babel-plugin-polyfill-corejs3: "npm:^0.5.0" + babel-plugin-polyfill-regenerator: "npm:^0.3.0" + core-js-compat: "npm:^3.20.2" + semver: "npm:^6.3.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/69e4d82f56533e3d761d08abf066e598268b71576da64ec4a2cda10b8065f4aac4a25f7652c7bf8210df6c9eb8193ceb99141214abd69975d1fb6d583d55033e + languageName: node + linkType: hard + +"@babel/preset-modules@npm:^0.1.5": + version: 0.1.5 + resolution: "@babel/preset-modules@npm:0.1.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@babel/plugin-proposal-unicode-property-regex": "npm:^7.4.4" + "@babel/plugin-transform-dotall-regex": "npm:^7.4.4" + "@babel/types": "npm:^7.4.4" + esutils: "npm:^2.0.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bd90081d96b746c1940dc1ce056dee06ed3a128d20936aee1d1795199f789f9a61293ef738343ae10c6d53970c17285d5e147a945dded35423aacb75083b8a89 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.8.4": + version: 7.17.2 + resolution: "@babel/runtime@npm:7.17.2" + dependencies: + regenerator-runtime: "npm:^0.13.4" + checksum: 10c0/1d94b34cdcd87b61b9c76a61dc63dfbeb9bb5ef2443d7e981b8e094cde23f9c3115d633347b26179423c5bd381765b8fca74f518de98c965bb68295e78addf3b + languageName: node + linkType: hard + +"@babel/template@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/template@npm:7.16.7" + dependencies: + "@babel/code-frame": "npm:^7.16.7" + "@babel/parser": "npm:^7.16.7" + "@babel/types": "npm:^7.16.7" + checksum: 10c0/6186aa6514c26fbf6bb17bf13cf3d57d253f507c8e39603feecb9968d47875c179348de082c3c05f962159542c95614c9f0dd633f62ac0864f757cf682479a96 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.0, @babel/traverse@npm:^7.17.3": + version: 7.17.3 + resolution: "@babel/traverse@npm:7.17.3" + dependencies: + "@babel/code-frame": "npm:^7.16.7" + "@babel/generator": "npm:^7.17.3" + "@babel/helper-environment-visitor": "npm:^7.16.7" + "@babel/helper-function-name": "npm:^7.16.7" + "@babel/helper-hoist-variables": "npm:^7.16.7" + "@babel/helper-split-export-declaration": "npm:^7.16.7" + "@babel/parser": "npm:^7.17.3" + "@babel/types": "npm:^7.17.0" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: 10c0/284ee68ec035c1f4f1b7b2f04932fa53490f4fa056f0cd4255e3f782e0e539f7c0d300cab835a4958b546b2b808dd574887079b2654450b35a29d4656af92219 + languageName: node + linkType: hard + +"@babel/types@npm:^7.16.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0, @babel/types@npm:^7.4.4": + version: 7.17.0 + resolution: "@babel/types@npm:7.17.0" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.16.7" + to-fast-properties: "npm:^2.0.0" + checksum: 10c0/ad09224272b40fedb00b262677d12b6838f5b5df5c47d67059ba1181bd4805439993393a8de32459dae137b536d60ebfcaf39ae84d8b3873f1e81cc75f5aeae8 + languageName: node + linkType: hard + +"@babel/types@npm:^7.8.3": + version: 7.27.3 + resolution: "@babel/types@npm:7.27.3" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/bafdfc98e722a6b91a783b6f24388f478fd775f0c0652e92220e08be2cc33e02d42088542f1953ac5e5ece2ac052172b3dadedf12bec9aae57899e92fb9a9757 + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.5.0": + version: 0.5.6 + resolution: "@discoveryjs/json-ext@npm:0.5.6" + checksum: 10c0/4bcaae126686b3b6f472d79aae47868f934f3fecc337f11e5ac289f6f776d139fe2bdcfe325af2bc526312495bc96975306e29f8316150c1ac7483b95d80035b + languageName: node + linkType: hard + +"@hotwired/stimulus-webpack-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "@hotwired/stimulus-webpack-helpers@npm:1.0.1" + peerDependencies: + "@hotwired/stimulus": ">= 3.0" + checksum: 10c0/2575b44cf625df2d6853996d0c0f39527114875f81184d078886f603a5652331894a84fb6ded1bd7ff3e18667e955d6388794ae912ce61d2682c5079f9dd1950 + languageName: node + linkType: hard + +"@hotwired/stimulus@npm:^3.0.0": + version: 3.0.1 + resolution: "@hotwired/stimulus@npm:3.0.1" + checksum: 10c0/eee923555a067ecbe8266e5459591f181d4d41aa7b5590292610f62405151ed5b0998c77facb42994af65cf983e3beef1d9c892c4e819ddbfb9e82ad50bc876a + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.0.5 + resolution: "@jridgewell/resolve-uri@npm:3.0.5" + checksum: 10c0/00e27376be6dcfccca1666326328ba47c4614002fb20b9c4f7a47d25ecf0b99061f201362109bf4ce547e8f246aaac35db67b3ab6bf07c3e0e3edabccd4bdb31 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.11 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.11" + checksum: 10c0/92f81c79a268cb1cd8ec29831a69838b7af98e020d4c80a37dd5aa3b6c7868f9e97fa75c18c9100e3879b47472654fa013d44a79c280d7f2229bbfd64e3dd169 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.0": + version: 0.3.4 + resolution: "@jridgewell/trace-mapping@npm:0.3.4" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10c0/ee62b4d810e417f81eb27c9385089172b40286329d9a81fcff999fede883ae95ca75bcaf58793cae0a3981d17302f223656d72ed9bbd1d5a96c170b2dfdc5259 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@nuxt/friendly-errors-webpack-plugin@npm:^2.5.1": + version: 2.5.2 + resolution: "@nuxt/friendly-errors-webpack-plugin@npm:2.5.2" + dependencies: + chalk: "npm:^2.3.2" + consola: "npm:^2.6.0" + error-stack-parser: "npm:^2.0.0" + string-width: "npm:^4.2.3" + peerDependencies: + webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + checksum: 10c0/2f08075cb27e3e7a3fd3c424ea3663d347376663b48847a99d70c3cdbd369ad43e3f1b1fed0959c016603a186f5759d7abc7b60c145bbdede0efb635d848eec0 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@symfony/stimulus-bridge@npm:^3.0.0": + version: 3.0.0 + resolution: "@symfony/stimulus-bridge@npm:3.0.0" + dependencies: + "@hotwired/stimulus-webpack-helpers": "npm:^1.0.1" + acorn: "npm:^8.0.5" + loader-utils: "npm:^2.0.0" + schema-utils: "npm:^3.0.0" + peerDependencies: + "@hotwired/stimulus": ^3.0 + checksum: 10c0/b0e1c2df350889aa3fcb5bc75c818b94f9566615b68d59a0e5a88aa36c948d216e182cb141f3019859b68e42a25fd7423dcb87f14998754d9c42bbb8b38fc620 + languageName: node + linkType: hard + +"@symfony/webpack-encore@npm:^1.7.0": + version: 1.8.1 + resolution: "@symfony/webpack-encore@npm:1.8.1" + dependencies: + "@babel/core": "npm:^7.7.0" + "@babel/plugin-syntax-dynamic-import": "npm:^7.0.0" + "@babel/preset-env": "npm:^7.10.0" + "@nuxt/friendly-errors-webpack-plugin": "npm:^2.5.1" + assets-webpack-plugin: "npm:7.0.*" + babel-loader: "npm:^8.2.2" + chalk: "npm:^4.0.0" + clean-webpack-plugin: "npm:^3.0.0" + css-loader: "npm:^5.2.4" + css-minimizer-webpack-plugin: "npm:^2.0.0" + fast-levenshtein: "npm:^3.0.0" + loader-utils: "npm:^2.0.0" + mini-css-extract-plugin: "npm:^1.5.0" + pkg-up: "npm:^3.1.0" + pretty-error: "npm:^3.0.3" + resolve-url-loader: "npm:^3.1.2" + semver: "npm:^7.3.2" + style-loader: "npm:^2.0.0" + sync-rpc: "npm:^1.3.6" + terser-webpack-plugin: "npm:^5.1.1" + tmp: "npm:^0.2.1" + webpack: "npm:^5.35" + webpack-cli: "npm:^4.9.1" + webpack-dev-server: "npm:^4.0.0" + yargs-parser: "npm:^20.2.4" + bin: + encore: bin/encore.js + checksum: 10c0/6e3c740773d371e620d9612f5ef8e82fe8b2af75f8ebd6a7a730c35d9c551b9a20271cdd1c40501ce96223a47a035cc8aa6d22aba8e48ba5d9b152107ff03900 + languageName: node + linkType: hard + +"@trysound/sax@npm:0.2.0": + version: 0.2.0 + resolution: "@trysound/sax@npm:0.2.0" + checksum: 10c0/44907308549ce775a41c38a815f747009ac45929a45d642b836aa6b0a536e4978d30b8d7d680bbd116e9dd73b7dbe2ef0d1369dcfc2d09e83ba381e485ecbe12 + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.2 + resolution: "@types/body-parser@npm:1.19.2" + dependencies: + "@types/connect": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/c2dd533e1d4af958d656bdba7f376df68437d8dfb7e4522c88b6f3e6f827549e4be5bf0be68a5f1878accf5752ea37fba7e8a4b6dda53d0d122d77e27b69c750 + languageName: node + linkType: hard + +"@types/bonjour@npm:^3.5.9": + version: 3.5.10 + resolution: "@types/bonjour@npm:3.5.10" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/5a3d70695a8dfe79c020579fcbf18d7dbb89b8f061dd388c76b68c4797c0fccd71f3e8a9e2bea00afffdb9b37a49dd0ac0a192829d5b655a5b49c66f313a7be8 + languageName: node + linkType: hard + +"@types/connect-history-api-fallback@npm:^1.3.5": + version: 1.3.5 + resolution: "@types/connect-history-api-fallback@npm:1.3.5" + dependencies: + "@types/express-serve-static-core": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/06217360db2665fe31351f98d95c1efdbf3919403e748d3a6b4377a79704ef524765ba2ccf499daa9b30fcbe5ef9d08988aee773e89a4998cf47e3800c95b635 + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.35 + resolution: "@types/connect@npm:3.4.35" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/f11a1ccfed540723dddd7cb496543ad40a2f663f22ff825e9b220f0bae86db8b1ced2184ee41d3fb358b019ad6519e39481b06386db91ebb859003ad1d54fe6a + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.3": + version: 3.7.3 + resolution: "@types/eslint-scope@npm:3.7.3" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/3084e2619be57ca318dfddc2557fef855d63ea378d42b6b355216ea3e3aed82ce6adbfa6b620bff1d67aefa95245c5b41e998338bc307c948f8cbf08840b9bb2 + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 8.4.1 + resolution: "@types/eslint@npm:8.4.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/3ba1ddb8d2362316bafe65f90aa41ce23f923f8ae6a131e382540a7c0d8ad5f04117e6aba788392717a616bd6e2589a1d954630c49edb364d28dc8eeb5214890 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^0.0.51": + version: 0.0.51 + resolution: "@types/estree@npm:0.0.51" + checksum: 10c0/a70c60d5e634e752fcd45b58c9c046ef22ad59ede4bc93ad5193c7e3b736ebd6bcd788ade59d9c3b7da6eeb0939235f011d4c59bb4fc04d8c346b76035099dd1 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18": + version: 4.17.28 + resolution: "@types/express-serve-static-core@npm:4.17.28" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + "@types/range-parser": "npm:*" + checksum: 10c0/4485e5c0c87b868d04c92160a4b5d488641a3dfd518254a96657bcedb284a54ab39ca7d0ed86b41626afd529ebe11900a25c27536e7b5307bd0fd0f604423c08 + languageName: node + linkType: hard + +"@types/express@npm:*, @types/express@npm:^4.17.13": + version: 4.17.13 + resolution: "@types/express@npm:4.17.13" + dependencies: + "@types/body-parser": "npm:*" + "@types/express-serve-static-core": "npm:^4.17.18" + "@types/qs": "npm:*" + "@types/serve-static": "npm:*" + checksum: 10c0/2387977093ac8b8e5f837b3ff27e8e28bb389058e6a2d8f66ce6818a0c486a07491aae5def3926d730c30b623d10d758b5bb3909816442e9a5bd1b058cfc3bd5 + languageName: node + linkType: hard + +"@types/glob@npm:^7.1.1": + version: 7.2.0 + resolution: "@types/glob@npm:7.2.0" + dependencies: + "@types/minimatch": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/a8eb5d5cb5c48fc58c7ca3ff1e1ddf771ee07ca5043da6e4871e6757b4472e2e73b4cfef2644c38983174a4bc728c73f8da02845c28a1212f98cabd293ecae98 + languageName: node + linkType: hard + +"@types/http-proxy@npm:^1.17.8": + version: 1.17.8 + resolution: "@types/http-proxy@npm:1.17.8" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/3a423534960443e98f7e6f7a1b2ad56f2f93d6e9e927298e683a58ac3e1add4066288dfc3afa80724aee58133ab5272ed58321c11bf0925b7237c010c05f2ced + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.9 + resolution: "@types/json-schema@npm:7.0.9" + checksum: 10c0/46a9e92b7922495a50f55632d802f7e7ab2dffd76b3f894baf7b28012e73983df832977bedd748aa9a2bc8400c6e8659ca39faf6ccd93d71d41d5b0293338a0e + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.2 + resolution: "@types/mime@npm:1.3.2" + checksum: 10c0/61d144e5170c6cdf6de334ec0ee4bb499b1a0fb0233834a9e8cec6d289b0e3042bedf35cbc1c995d71a247635770dae3f13a9ddae69098bb54b933429bc08d35 + languageName: node + linkType: hard + +"@types/minimatch@npm:*": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: 10c0/a1a19ba342d6f39b569510f621ae4bbe972dc9378d15e9a5e47904c440ee60744f5b09225bc73be1c6490e3a9c938eee69eb53debf55ce1f15761201aa965f97 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 17.0.21 + resolution: "@types/node@npm:17.0.21" + checksum: 10c0/57a9ce212da7878fddd4e9ef3f83c0f395e1e71c032b3112f4163f357a87b949c392dd9280ae806bca7edfbea335da1cd248fd316c615632b746c87ba1b2ab6e + languageName: node + linkType: hard + +"@types/qs@npm:*": + version: 6.9.7 + resolution: "@types/qs@npm:6.9.7" + checksum: 10c0/157eb05f4c75790b0ebdcf7b0547ff117feabc8cda03c3cac3d3ea82bb19a1912e76a411df3eb0bdd01026a9770f07bc0e7e3fbe39ebb31c1be4564c16be35f1 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.4 + resolution: "@types/range-parser@npm:1.2.4" + checksum: 10c0/8e3c3cda88675efd9145241bcb454449715b7d015a7fb80d018dcb3d441fa1938b302242cc0dfa6b02c5d014dd8bc082ae90091e62b1e816cae3ec36c2a7dbcb + languageName: node + linkType: hard + +"@types/retry@npm:^0.12.0": + version: 0.12.1 + resolution: "@types/retry@npm:0.12.1" + checksum: 10c0/d2d08393973693826fc947fb09596c34bd65863201e2f6d7e9d7a02d504199d6a2bab13eba56f6366ee0fd45434c699a9fdcfff3311e63bf2fad7a4cf34bacfd + languageName: node + linkType: hard + +"@types/serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "@types/serve-index@npm:1.9.1" + dependencies: + "@types/express": "npm:*" + checksum: 10c0/ed1ac8407101a787ebf09164a81bc24248ccf9d9789cd4eaa360a9a06163e5d2168c46ab0ddf2007e47b455182ecaa7632a886639919d9d409a27f7aef4e847a + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.13.10 + resolution: "@types/serve-static@npm:1.13.10" + dependencies: + "@types/mime": "npm:^1" + "@types/node": "npm:*" + checksum: 10c0/7f3de245cbb11f3a9d7977b6e763585c6022ebfc079fa746f8d824411bb6b343521c1cff5407edc0d5196f4b7d6fea431fb36455843f4a6717d295c235065cf2 + languageName: node + linkType: hard + +"@types/sockjs@npm:^0.3.33": + version: 0.3.33 + resolution: "@types/sockjs@npm:0.3.33" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/75b9b2839970ebab3e557955b9e2b1091d87cefabee1023e566bccc093411acc4a1402f3da4fde18aca44f5b9c42fe0626afd073a2140002b9b53eb71a084e4d + languageName: node + linkType: hard + +"@types/source-list-map@npm:*": + version: 0.1.2 + resolution: "@types/source-list-map@npm:0.1.2" + checksum: 10c0/0538ce317294febf40ed3fc3a2e483fa4aee8ba85584a66e5ed9c0af9ea48a348960bc467076643cb56aeafdd7d2252e90c75e68ef664c0477ec87ea0554ffdc + languageName: node + linkType: hard + +"@types/tapable@npm:^1": + version: 1.0.8 + resolution: "@types/tapable@npm:1.0.8" + checksum: 10c0/01f77d47bac8aaeee7ed298e8e74eb012a28f920106c3c359e1f2730512cd810f2c6165cd2cd769422ae1064e2bf1072778b27fb5ec1973e18c35e2cc1ed5c8d + languageName: node + linkType: hard + +"@types/uglify-js@npm:*": + version: 3.13.1 + resolution: "@types/uglify-js@npm:3.13.1" + dependencies: + source-map: "npm:^0.6.1" + checksum: 10c0/a1e21ef98b6eb5d8e4d87a64313d6b7d566367dcd07ae38159bb2b23cd8ca236aaf5b5deabd3c18241b84fe45a72fb8b9bc9cfa1ffb785a6812e6fb013ea216a + languageName: node + linkType: hard + +"@types/webpack-sources@npm:*": + version: 3.2.0 + resolution: "@types/webpack-sources@npm:3.2.0" + dependencies: + "@types/node": "npm:*" + "@types/source-list-map": "npm:*" + source-map: "npm:^0.7.3" + checksum: 10c0/17716e9f03fa63362f92d510bb9119313bac3a7985321e0fe9326dc30ebe598cb2c85b8c7cdc4f4d34d783c4c45e74e3ec08e209f9c9dab27bf188c3def32706 + languageName: node + linkType: hard + +"@types/webpack@npm:^4.4.31": + version: 4.41.32 + resolution: "@types/webpack@npm:4.41.32" + dependencies: + "@types/node": "npm:*" + "@types/tapable": "npm:^1" + "@types/uglify-js": "npm:*" + "@types/webpack-sources": "npm:*" + anymatch: "npm:^3.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/7ebb64fe22eb436b42a89761b1bd67998769dfe26a6f371ac3733859414cea2f4cc743121f2dce638a280053fbd478747c9c15e8fa22644788cdc002e5a567f8 + languageName: node + linkType: hard + +"@types/ws@npm:^8.2.2": + version: 8.5.2 + resolution: "@types/ws@npm:8.5.2" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/da39e105961f0e227a7e8e5dfd71079558a32962c36d1ff5b636b83000d0ea128f3f941513cf66d1739969ab6f4541088a5438c0b8d52e79ccbe17691fb3f03a + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/ast@npm:1.11.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.11.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1" + checksum: 10c0/6f75b09f17a29e704d2343967c53128cda7c84af2d192a3146de1b53cafaedfe568eca0804bd6c1acc72e1269477ae22d772de1dcf605cdb0adf9768f31d88d7 + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1" + checksum: 10c0/9644d9f7163d25aa301cf3be246e35cca9c472b70feda0593b1a43f30525c68d70bfb4b7f24624cd8e259579f1dee32ef28670adaeb3ab1314ffb52a25b831d5 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.1" + checksum: 10c0/23e6f24100eb21779cd4dcc7c4231fd511622545a7638b195098bcfee79decb54a7e2b3295a12056c3042af7a5d8d62d4023a9194c9cba0311acb304ea20a292 + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.11.1" + checksum: 10c0/ab662fc94a017538c538836387492567ed9f23fe4485a86de1834d61834e4327c24659830e1ecd2eea7690ce031a148b59c4724873dc5d3c0bdb71605c7d01af + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.1" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.11.1" + "@webassemblyjs/helper-api-error": "npm:1.11.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8cc7ced66dad8f968a68fbad551ba50562993cefa1add67b31ca6462bb986f7b21b5d7c6444c05dd39312126e10ac48def025dec6277ce0734665191e05acde7 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1" + checksum: 10c0/f14e2bd836fed1420fe7507919767de16346a013bbac97b6b6794993594f37b5f0591d824866a7b32f47524cef8a4a300e5f914952ff2b0ff28659714400c793 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": "npm:1.11.1" + "@webassemblyjs/helper-buffer": "npm:1.11.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1" + "@webassemblyjs/wasm-gen": "npm:1.11.1" + checksum: 10c0/e2da4192a843e96c8bf5156cea23193c9dbe12a1440c9c109d3393828f46753faab75fac78ecfe965aa7988723ad9b0b12f3ca0b9e4de75294980e67515460af + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/ieee754@npm:1.11.1" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/13d6a6ca2e9f35265f10b549cb8354f31a307a7480bbf76c0f4bc8b02e13d5556fb29456cef3815db490effc602c59f98cb0505090ca9e29d7dc61539762a065 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/leb128@npm:1.11.1" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/e505edb5de61f13c6c66c57380ae16e95db9d7c43a41ac132e298426bcead9c90622e3d3035fb63df09d0eeabafd471be35ba583fca72ac2e776ab537dda6883 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/utf8@npm:1.11.1" + checksum: 10c0/a7c13c7c82d525fe774f51a4fc1da058b0e2c73345eed9e2d6fbeb96ba50c1942daf97e0ff394e7a4d0f26b705f9587cb14681870086d51f02abc78ff6ce3703 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": "npm:1.11.1" + "@webassemblyjs/helper-buffer": "npm:1.11.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1" + "@webassemblyjs/helper-wasm-section": "npm:1.11.1" + "@webassemblyjs/wasm-gen": "npm:1.11.1" + "@webassemblyjs/wasm-opt": "npm:1.11.1" + "@webassemblyjs/wasm-parser": "npm:1.11.1" + "@webassemblyjs/wast-printer": "npm:1.11.1" + checksum: 10c0/10bef22579f96f8c0934aa9fbf6f0d9110563f9c1a510100a84fdfa3dbd9126fdc10bfc12e7ce3ace0ba081e6789eac533c81698faab75859b3a41e97b5ab3bc + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": "npm:1.11.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1" + "@webassemblyjs/ieee754": "npm:1.11.1" + "@webassemblyjs/leb128": "npm:1.11.1" + "@webassemblyjs/utf8": "npm:1.11.1" + checksum: 10c0/4e49a19e302e19a2a2438e87ae85805acf39a7d93f9ac0ab65620ae395894937ceb762fa328acbe259d2e60d252cbb87a40ec2b4c088f3149be23fa69ddbf855 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": "npm:1.11.1" + "@webassemblyjs/helper-buffer": "npm:1.11.1" + "@webassemblyjs/wasm-gen": "npm:1.11.1" + "@webassemblyjs/wasm-parser": "npm:1.11.1" + checksum: 10c0/af7fd6bcb942baafda3b8cc1e574062d01c582aaa12d4f0ea62ff8e83ce1317f06a79c16313a3bc98625e1226d0fc49ba90edac18c21a64c75e9cd114306f07a + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": "npm:1.11.1" + "@webassemblyjs/helper-api-error": "npm:1.11.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1" + "@webassemblyjs/ieee754": "npm:1.11.1" + "@webassemblyjs/leb128": "npm:1.11.1" + "@webassemblyjs/utf8": "npm:1.11.1" + checksum: 10c0/5a7e8ad36176347f3bc9aee15860a7002b608c181012128ea3e5a1199649d6722e05e029fdf2a73485f2ab3e2f7386b3e0dce46ff9cfd1918417a4ee1151f21e + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.11.1": + version: 1.11.1 + resolution: "@webassemblyjs/wast-printer@npm:1.11.1" + dependencies: + "@webassemblyjs/ast": "npm:1.11.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/cede13c53a176198f949e7f0edf921047c524472b2e4c99edfe829d20e168b4037395479325635b4a3662ea7b4b59be4555ea3bb6050c61b823c68abdb435c74 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^1.1.1": + version: 1.1.1 + resolution: "@webpack-cli/configtest@npm:1.1.1" + peerDependencies: + webpack: 4.x.x || 5.x.x + webpack-cli: 4.x.x + checksum: 10c0/905e86d4075ac93411e1e7673060373b4a9770426a6d476aa99842399d4b6cc1a0cc3380a811a5285c012fd48ba2ee9d2153a650d842c0f3085e997e3608412d + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^1.4.1": + version: 1.4.1 + resolution: "@webpack-cli/info@npm:1.4.1" + dependencies: + envinfo: "npm:^7.7.3" + peerDependencies: + webpack-cli: 4.x.x + checksum: 10c0/1381c7f8ffacc80414648a5fe38f222a27501d31f5463042ff5e9ffb24100330ea736d307502d5fcad7fecf1019691e5b4a417cda18b329d4b4327500bc6c4af + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^1.6.1": + version: 1.6.1 + resolution: "@webpack-cli/serve@npm:1.6.1" + peerDependencies: + webpack-cli: 4.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 10c0/0aca33a1a590d580a1bda87d6b9794db8725fbf5a7731997733a221e57d25bb70499429e8837755ff7c578674665fd970dde124c8e26fba41c398ad200deb816 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf + languageName: node + linkType: hard + +"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: "npm:~2.1.34" + negotiator: "npm:0.6.3" + checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 + languageName: node + linkType: hard + +"acorn-import-assertions@npm:^1.7.6": + version: 1.8.0 + resolution: "acorn-import-assertions@npm:1.8.0" + peerDependencies: + acorn: ^8 + checksum: 10c0/ad8e177a177dcda35a91cca2dc54a7cf6958211c14af2b48e4685a5e752d4782779d367e1d5e275700ad5767834d0063edf2ba85aeafb98d7398f8ebf957e7f5 + languageName: node + linkType: hard + +"acorn@npm:^8.0.5, acorn@npm:^8.4.1, acorn@npm:^8.5.0": + version: 8.7.0 + resolution: "acorn@npm:8.7.0" + bin: + acorn: bin/acorn + checksum: 10c0/8168e567c2f0b9fb7a418d2651b4b614326a0814b4937ebddee0f5e5e25ddd6320aec0c20d3a67efd97a02d836cc7f9e5c84befe3daeeea68ed89a48ee8f7a5d + languageName: node + linkType: hard + +"adjust-sourcemap-loader@npm:3.0.0": + version: 3.0.0 + resolution: "adjust-sourcemap-loader@npm:3.0.0" + dependencies: + loader-utils: "npm:^2.0.0" + regex-parser: "npm:^2.2.11" + checksum: 10c0/928363c7b5d4f61c34c661d1f5ee2a74850c6ca0b8ccdaa88f69f9e294e06a273ec9d8e1c5de3fdf742f2e5e7a78943276bb4d954ac7e801f2a001291315cb22 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 10c0/0c57a47cbd656e8cdfd99d7c2264de5868918ffa207c8d7a72a7f63379d4333254b2ba03d69e3c035e996a3fd3eb6d5725d7a1597cca10694296e32510546360 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.0.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + peerDependencies: + ajv: ^8.8.2 + checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4, ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.8.0": + version: 8.10.0 + resolution: "ajv@npm:8.10.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: 10c0/cc2c02a89289420ea96720f728d39d4d19dbcb2c1d0363481d0a9973282b69d94c8c1a02f4c424a89a1bd888e6049f87d0f82d21b5d056546cdbb364dd043f23 + languageName: node + linkType: hard + +"ansi-html-community@npm:^0.0.8": + version: 0.0.8 + resolution: "ansi-html-community@npm:0.0.8" + bin: + ansi-html: bin/ansi-html + checksum: 10c0/45d3a6f0b4f10b04fdd44bef62972e2470bfd917bf00439471fa7473d92d7cbe31369c73db863cc45dda115cb42527f39e232e9256115534b8ee5806b0caeed4 + languageName: node + linkType: hard + +"ansi-regex@npm:^2.0.0": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anymatch@npm:^3.0.0, anymatch@npm:~3.1.2": + version: 3.1.2 + resolution: "anymatch@npm:3.1.2" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/900645535aee46ed7958f4f5b5e38abcbf474b5230406e913de15fc9a1310f0d5322775deb609688efe31010fa57831e55d36040b19826c22ce61d537e9b9759 + languageName: node + linkType: hard + +"arity-n@npm:^1.0.4": + version: 1.0.4 + resolution: "arity-n@npm:1.0.4" + checksum: 10c0/31c390104bf3b9275574c9d59df67b8a2684981b93ca728a99c4f92241b71b8089b1e99b732f889891e78087887b49a59c885167e2185303449bece83e8d7f9c + languageName: node + linkType: hard + +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: 10c0/806966c8abb2f858b08f5324d9d18d7737480610f3bd5d3498aaae6eb5efdc501a884ba019c9b4a8f02ff67002058749d05548fd42fa8643f02c9c7f22198b91 + languageName: node + linkType: hard + +"array-flatten@npm:^2.1.0": + version: 2.1.2 + resolution: "array-flatten@npm:2.1.2" + checksum: 10c0/bdc1cee68e41bec9cfc1161408734e2269428ef371445606bce4e6241001e138a94b9a617cc9a5b4b7fe6a3a51e3d5a942646975ce82a2e202ccf3e9b478c82f + languageName: node + linkType: hard + +"array-union@npm:^1.0.1": + version: 1.0.2 + resolution: "array-union@npm:1.0.2" + dependencies: + array-uniq: "npm:^1.0.1" + checksum: 10c0/18686767c0cfdae8dc4acf5ac119b0f0eacad82b7fcc0aa62cc41f93c5ad406d494b6a6e53d85e52e8f0349b67a4fec815feeb537e95c02510d747bc9a4157c7 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"array-uniq@npm:^1.0.1": + version: 1.0.3 + resolution: "array-uniq@npm:1.0.3" + checksum: 10c0/3acbaf9e6d5faeb1010e2db04ab171b8d265889e46c61762e502979bdc5e55656013726e9a61507de3c82d329a0dc1e8072630a3454b4f2b881cb19ba7fd8aa6 + languageName: node + linkType: hard + +"assets-webpack-plugin@npm:7.0.*": + version: 7.0.0 + resolution: "assets-webpack-plugin@npm:7.0.0" + dependencies: + camelcase: "npm:^6.0.0" + escape-string-regexp: "npm:^4.0.0" + lodash: "npm:^4.17.20" + peerDependencies: + webpack: ">=5.0.0" + checksum: 10c0/5934bc003979a0841473943210eb89d8aab2aff15a6020b7302195e5cfc155f2af3daa0af2122a093ab9c7bb8cb0b49647ed15d183ed4095729e8e8c34f959ee + languageName: node + linkType: hard + +"async@npm:^2.6.2": + version: 2.6.3 + resolution: "async@npm:2.6.3" + dependencies: + lodash: "npm:^4.17.14" + checksum: 10c0/06c917c74a55f9036ff79dedfc51dfc9c52c2dee2f80866b600495d2fd3037251dbcfde6592f23fc47398c44d844174004e0ee532f94c32a888bb89fd1cf0f25 + languageName: node + linkType: hard + +"atob@npm:^2.1.2": + version: 2.1.2 + resolution: "atob@npm:2.1.2" + bin: + atob: bin/atob.js + checksum: 10c0/ada635b519dc0c576bb0b3ca63a73b50eefacf390abb3f062558342a8d68f2db91d0c8db54ce81b0d89de3b0f000de71f3ae7d761fd7d8cc624278fe443d6c7e + languageName: node + linkType: hard + +"babel-loader@npm:^8.2.2": + version: 8.2.3 + resolution: "babel-loader@npm:8.2.3" + dependencies: + find-cache-dir: "npm:^3.3.1" + loader-utils: "npm:^1.4.0" + make-dir: "npm:^3.1.0" + schema-utils: "npm:^2.6.5" + peerDependencies: + "@babel/core": ^7.0.0 + webpack: ">=2" + checksum: 10c0/2457fca8d97ea0ff966b3dabe5abeaa4c2430af3e917ccf163067daf5ae3329adebb97baa78033215b40940a1ad03050aef34f6b468af4583c00ab9853fc6c6c + languageName: node + linkType: hard + +"babel-plugin-dynamic-import-node@npm:^2.3.3": + version: 2.3.3 + resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" + dependencies: + object.assign: "npm:^4.1.0" + checksum: 10c0/1bd80df981e1fc1aff0cd4e390cf27aaa34f95f7620cd14dff07ba3bad56d168c098233a7d2deb2c9b1dc13643e596a6b94fc608a3412ee3c56e74a25cd2167e + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.3.0": + version: 0.3.1 + resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" + dependencies: + "@babel/compat-data": "npm:^7.13.11" + "@babel/helper-define-polyfill-provider": "npm:^0.3.1" + semver: "npm:^6.1.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/55b9394c954eed189b43b2c92c8fa1a0f811bcfced63aee741d26e9df8c8f4e18ec278a5353015afb66b47833d2dd2597e5e1c54310774416ebc67ec34ae8410 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.5.0": + version: 0.5.2 + resolution: "babel-plugin-polyfill-corejs3@npm:0.5.2" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.3.1" + core-js-compat: "npm:^3.21.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4b6c36934e1b80629abcb35a8b2e0749e9f3df5ba911447a1726b30ff6eeb76e5858b83477e844abf33fea25da2220e820a1d7a10035d88f63c98544d1d66723 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.3.0": + version: 0.3.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.3.1" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/88f7b488bbb29636370954c048f08bdf61c5f1ffbee0b627817bf80e99a46b06660f54266cff93affb8ab5831d8edcaab271f9a80b8a090d4fd409a13023a61d + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"batch@npm:0.6.1": + version: 0.6.1 + resolution: "batch@npm:0.6.1" + checksum: 10c0/925a13897b4db80d4211082fe287bcf96d297af38e26448c857cee3e095c9792e3b8f26b37d268812e7f38a589f694609de8534a018b1937d7dc9f84e6b387c5 + languageName: node + linkType: hard + +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: 10c0/230520f1ff920b2d2ce3e372d77a33faa4fa60d802fe01ca4ffbc321ee06023fe9a741ac02793ee778040a16b7e497f7d60c504d1c402b8fdab6f03bb785a25f + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: 10c0/d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d + languageName: node + linkType: hard + +"body-parser@npm:1.19.2": + version: 1.19.2 + resolution: "body-parser@npm:1.19.2" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.4" + debug: "npm:2.6.9" + depd: "npm:~1.1.2" + http-errors: "npm:1.8.1" + iconv-lite: "npm:0.4.24" + on-finished: "npm:~2.3.0" + qs: "npm:6.9.7" + raw-body: "npm:2.4.3" + type-is: "npm:~1.6.18" + checksum: 10c0/02158280b090d0ad99dfdc795b7d580762601283e4bcbd29409c11b34d5cfd737f632447a073bc2e79492d303827bd155fef2d63a333cdec18a87846221cee5e + languageName: node + linkType: hard + +"bonjour@npm:^3.5.0": + version: 3.5.0 + resolution: "bonjour@npm:3.5.0" + dependencies: + array-flatten: "npm:^2.1.0" + deep-equal: "npm:^1.0.1" + dns-equal: "npm:^1.0.0" + dns-txt: "npm:^2.0.2" + multicast-dns: "npm:^6.0.1" + multicast-dns-service-types: "npm:^1.1.0" + checksum: 10c0/0be7c4cd96df563571973706226e750f6feeacd81d01c1ade11247eb3a7e14846af49cffe397ab970059b828dd89f694f456e22bca4ca315a7f0326e9303e241 + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.1, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: "npm:^7.0.1" + checksum: 10c0/321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381 + languageName: node + linkType: hard + +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.17.5, browserslist@npm:^4.19.1": + version: 4.19.3 + resolution: "browserslist@npm:4.19.3" + dependencies: + caniuse-lite: "npm:^1.0.30001312" + electron-to-chromium: "npm:^1.4.71" + escalade: "npm:^3.1.1" + node-releases: "npm:^2.0.2" + picocolors: "npm:^1.0.0" + bin: + browserslist: cli.js + checksum: 10c0/82eab71efff9deed3a28f43fc102bdecf95459af1ce24598b050e42ddc8876f9042222899cabc9d533fa651db6f18a45a4e275e447f45f43dd8bd21524f6becd + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"buffer-indexof@npm:^1.0.0": + version: 1.1.1 + resolution: "buffer-indexof@npm:1.1.1" + checksum: 10c0/67906b0a9892854e24ac717ef823c3b19790c653a8b1902835bbf3c3c46ea8d99f0680a92f7394fc5acbbecb3385775ccd504ea00587d2d67d8dfaadd460eeae + languageName: node + linkType: hard + +"bytes@npm:3.0.0": + version: 3.0.0 + resolution: "bytes@npm:3.0.0" + checksum: 10c0/91d42c38601c76460519ffef88371caacaea483a354c8e4b8808e7b027574436a5713337c003ea3de63ee4991c2a9a637884fdfe7f761760d746929d9e8fec60 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: "npm:^1.1.1" + get-intrinsic: "npm:^1.0.2" + checksum: 10c0/74ba3f31e715456e22e451d8d098779b861eba3c7cac0d9b510049aced70d75c231ba05071f97e1812c98e34e2bee734c0c6126653e0088c2d9819ca047f4073 + languageName: node + linkType: hard + +"camelcase@npm:5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 + languageName: node + linkType: hard + +"camelcase@npm:^6.0.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + +"caniuse-api@npm:^3.0.0": + version: 3.0.0 + resolution: "caniuse-api@npm:3.0.0" + dependencies: + browserslist: "npm:^4.0.0" + caniuse-lite: "npm:^1.0.0" + lodash.memoize: "npm:^4.1.2" + lodash.uniq: "npm:^4.5.0" + checksum: 10c0/60f9e85a3331e6d761b1b03eec71ca38ef7d74146bece34694853033292156b815696573ed734b65583acf493e88163618eda915c6c826d46a024c71a9572b4c + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001312": + version: 1.0.30001313 + resolution: "caniuse-lite@npm:1.0.30001313" + checksum: 10c0/6943921f085f747951ea32b67f24290c72f0728e009a306b010bf0e6cc9a7bc7637991ce684dd490ffb460094b484a2703ebfdfb6a87a3650232b0af9a8c8397 + languageName: node + linkType: hard + +"chalk@npm:^2.0.0, chalk@npm:^2.3.2, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.5.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: 10c0/080ce2d20c2b9e0f8461a380e9585686caa768b1c834a464470c9dc74cda07f27611c7b727a2cd768a9cecd033297fdec4ce01f1e58b62227882c1059dec321c + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"clean-webpack-plugin@npm:^3.0.0": + version: 3.0.0 + resolution: "clean-webpack-plugin@npm:3.0.0" + dependencies: + "@types/webpack": "npm:^4.4.31" + del: "npm:^4.1.1" + peerDependencies: + webpack: "*" + checksum: 10c0/780c87d3730544c56c779f5e422eee3c438446e3120724f5c4d1aab88dca5eedd7a1890c49785c19b048e77c519cf21a17f9c8550a97514ef88fed1d02dbe243 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"colord@npm:^2.9.1": + version: 2.9.2 + resolution: "colord@npm:2.9.2" + checksum: 10c0/ff2de0fa956526abfc6d08ddb5696b09659fac26dc40917e7eed006689cc5181447fad819ccef3b8e73cbe1be056074b1422a2a84831515678022cbc49cc699c + languageName: node + linkType: hard + +"colorette@npm:^2.0.10, colorette@npm:^2.0.14": + version: 2.0.16 + resolution: "colorette@npm:2.0.16" + checksum: 10c0/7430bd996545347f262ae9716bfc8ca3776606e9db854279082004f3141b15a64ad2ee0e4f10cacba5a07cc92ca3edc2d01cbe73fd2843ccd80e98d0e3a8e79b + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"commander@npm:^7.0.0, commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + +"compose-function@npm:3.0.3": + version: 3.0.3 + resolution: "compose-function@npm:3.0.3" + dependencies: + arity-n: "npm:^1.0.4" + checksum: 10c0/2b3b8a785e4d5431c0be2ab04e9de29451f3721136bef27ce6973c1971193ed9d7887ec82175b3d3e1fc00c8af6040a5841532c763a63e1ea8aeeeb128ad26fa + languageName: node + linkType: hard + +"compressible@npm:~2.0.16": + version: 2.0.18 + resolution: "compressible@npm:2.0.18" + dependencies: + mime-db: "npm:>= 1.43.0 < 2" + checksum: 10c0/8a03712bc9f5b9fe530cc5a79e164e665550d5171a64575d7dcf3e0395d7b4afa2d79ab176c61b5b596e28228b350dd07c1a2a6ead12fd81d1b6cd632af2fef7 + languageName: node + linkType: hard + +"compression@npm:^1.7.4": + version: 1.7.4 + resolution: "compression@npm:1.7.4" + dependencies: + accepts: "npm:~1.3.5" + bytes: "npm:3.0.0" + compressible: "npm:~2.0.16" + debug: "npm:2.6.9" + on-headers: "npm:~1.0.2" + safe-buffer: "npm:5.1.2" + vary: "npm:~1.1.2" + checksum: 10c0/138db836202a406d8a14156a5564fb1700632a76b6e7d1546939472895a5304f2b23c80d7a22bf44c767e87a26e070dbc342ea63bb45ee9c863354fa5556bbbc + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"connect-history-api-fallback@npm:^1.6.0": + version: 1.6.0 + resolution: "connect-history-api-fallback@npm:1.6.0" + checksum: 10c0/6d59c68070fcb2f6d981992f88d050d7544e8e1af6600c23ad680d955e316216794a742a1669d1f14ed5171fc628b916f8a4e15c5a1e55bffc8ccc60bfeb0b2c + languageName: node + linkType: hard + +"consola@npm:^2.6.0": + version: 2.15.3 + resolution: "consola@npm:2.15.3" + checksum: 10c0/34a337e6b4a1349ee4d7b4c568484344418da8fdb829d7d71bfefcd724f608f273987633b6eef465e8de510929907a092e13cb7a28a5d3acb3be446fcc79fd5e + languageName: node + linkType: hard + +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: "npm:5.2.1" + checksum: 10c0/bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb + languageName: node + linkType: hard + +"content-type@npm:~1.0.4": + version: 1.0.4 + resolution: "content-type@npm:1.0.4" + checksum: 10c0/19e08f406f9ae3f80fb4607c75fbde1f22546647877e8047c9fa0b1c61e38f3ede853f51e915c95fd499c2e1c7478cb23c35cfb804d0e8e0495e8db88cfaed75 + languageName: node + linkType: hard + +"convert-source-map@npm:1.7.0": + version: 1.7.0 + resolution: "convert-source-map@npm:1.7.0" + dependencies: + safe-buffer: "npm:~5.1.1" + checksum: 10c0/e58240044fa2ca34943a450c9af1f2c739a053dc91a97543dd73df666b7e28d9687285926081883950fcc7cb409aad7254d05afbbaf4e2e47491bbf9fad8b952 + languageName: node + linkType: hard + +"convert-source-map@npm:^0.3.3": + version: 0.3.5 + resolution: "convert-source-map@npm:0.3.5" + checksum: 10c0/2fcb42750476916528df41416d8849a0a3764ed0bc3ea0a5ce4f673b70a85adf76a4819ccfbae8b5cba5d7100f86a81adbd5696ad9a60c774a4d002d12450b92 + languageName: node + linkType: hard + +"convert-source-map@npm:^1.7.0": + version: 1.8.0 + resolution: "convert-source-map@npm:1.8.0" + dependencies: + safe-buffer: "npm:~5.1.1" + checksum: 10c0/da4649990b633c070c0dab1680b89a67b9315dd2b1168d143536f667214c97e4eb4a49e5b7ff912f0196fe303e31fc16a529457436d25b2b5a89613eaf4f27fa + languageName: node + linkType: hard + +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: 10c0/b36fd0d4e3fef8456915fcf7742e58fbfcc12a17a018e0eb9501c9d5ef6893b596466f03b0564b81af29ff2538fd0aa4b9d54fe5ccbfb4c90ea50ad29fe2d221 + languageName: node + linkType: hard + +"cookie@npm:0.4.2": + version: 0.4.2 + resolution: "cookie@npm:0.4.2" + checksum: 10c0/beab41fbd7c20175e3a2799ba948c1dcc71ef69f23fe14eeeff59fc09f50c517b0f77098db87dbb4c55da802f9d86ee86cdc1cd3efd87760341551838d53fca2 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.20.2, core-js-compat@npm:^3.21.0": + version: 3.21.1 + resolution: "core-js-compat@npm:3.21.1" + dependencies: + browserslist: "npm:^4.19.1" + semver: "npm:7.0.0" + checksum: 10c0/a7671c8b83e7db88650ff6d8ad6fe57f59b814de170f0635d2759c071c63b1585b1b24ddcc6befe99b6fe38362c513ce1753a2d8efc0b8fbcae372d146308419 + languageName: node + linkType: hard + +"core-js@npm:^3.0.0": + version: 3.21.1 + resolution: "core-js@npm:3.21.1" + checksum: 10c0/8791de72e2c87a9f1d33166c8974f2b8decfa3287c1418befc193459826a671660694d7f96e3301ae982e35c12d4cfe09b53d6e268512e5be25c57988e112179 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"css-declaration-sorter@npm:^6.0.3": + version: 6.1.4 + resolution: "css-declaration-sorter@npm:6.1.4" + dependencies: + timsort: "npm:^0.3.0" + peerDependencies: + postcss: ^8.0.9 + checksum: 10c0/f111eb0f2c553e8b9194f744869b98bcde389d2df21571ba5aeebd2bd338856700b381af1e0eb2c532e8c52184a6e52467901ef8459a9f20b6e6643f61a3d6c2 + languageName: node + linkType: hard + +"css-loader@npm:^5.2.4": + version: 5.2.7 + resolution: "css-loader@npm:5.2.7" + dependencies: + icss-utils: "npm:^5.1.0" + loader-utils: "npm:^2.0.0" + postcss: "npm:^8.2.15" + postcss-modules-extract-imports: "npm:^3.0.0" + postcss-modules-local-by-default: "npm:^4.0.0" + postcss-modules-scope: "npm:^3.0.0" + postcss-modules-values: "npm:^4.0.0" + postcss-value-parser: "npm:^4.1.0" + schema-utils: "npm:^3.0.0" + semver: "npm:^7.3.5" + peerDependencies: + webpack: ^4.27.0 || ^5.0.0 + checksum: 10c0/02fbdb0dca92e4a4d2aa27b2817ea51d0af3d662d3295c61f2aa37537b29f9a46a9c2e87d8f5e40a1a97159f35d5c7b9a325f27761b59a38c8e15e8ca3988d2b + languageName: node + linkType: hard + +"css-minimizer-webpack-plugin@npm:^2.0.0": + version: 2.0.0 + resolution: "css-minimizer-webpack-plugin@npm:2.0.0" + dependencies: + cssnano: "npm:^5.0.0" + jest-worker: "npm:^26.3.0" + p-limit: "npm:^3.0.2" + postcss: "npm:^8.2.9" + schema-utils: "npm:^3.0.0" + serialize-javascript: "npm:^5.0.1" + source-map: "npm:^0.6.1" + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + clean-css: + optional: true + csso: + optional: true + checksum: 10c0/c255bf74cd5c4472cdb2f38533ebc4930d20ecd1b467ea5f3ec3e45837e6ca622f79fee4f055a2345e1b6e0bdab7e768da1944a3369f5720bab944b59991e098 + languageName: node + linkType: hard + +"css-select@npm:^4.1.3": + version: 4.2.1 + resolution: "css-select@npm:4.2.1" + dependencies: + boolbase: "npm:^1.0.0" + css-what: "npm:^5.1.0" + domhandler: "npm:^4.3.0" + domutils: "npm:^2.8.0" + nth-check: "npm:^2.0.1" + checksum: 10c0/4d9b1f3b3df9785daaac0a87ebd196b8c0a046252fdc2f6f879bf25c648c5cf2b13f4b039326f7f74362314f53ec499f555a418dbf4917a9e2311b27a8ae37f5 + languageName: node + linkType: hard + +"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: "npm:2.0.14" + source-map: "npm:^0.6.1" + checksum: 10c0/499a507bfa39b8b2128f49736882c0dd636b0cd3370f2c69f4558ec86d269113286b7df469afc955de6a68b0dba00bc533e40022a73698081d600072d5d83c1c + languageName: node + linkType: hard + +"css-what@npm:^5.1.0": + version: 5.1.0 + resolution: "css-what@npm:5.1.0" + checksum: 10c0/e6e4eacc9aa8773b4150af23b13c84e349adb697ef7e222e71bd03d3792b3562ea8d0ad579cc56c6cea37a7541e80547d292ea150ccaa8719b969f63d459fb34 + languageName: node + linkType: hard + +"css@npm:^2.0.0": + version: 2.2.4 + resolution: "css@npm:2.2.4" + dependencies: + inherits: "npm:^2.0.3" + source-map: "npm:^0.6.1" + source-map-resolve: "npm:^0.5.2" + urix: "npm:^0.1.0" + checksum: 10c0/496fa66568ebd9e51b3153817dd36ec004a45780da6f818e13117e3c4e50b774af41fff70a6ff2fa03777b239c4028ff655fe571b20964b90e886441cd141569 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + +"cssnano-preset-default@npm:^5.2.0": + version: 5.2.0 + resolution: "cssnano-preset-default@npm:5.2.0" + dependencies: + css-declaration-sorter: "npm:^6.0.3" + cssnano-utils: "npm:^3.1.0" + postcss-calc: "npm:^8.2.3" + postcss-colormin: "npm:^5.3.0" + postcss-convert-values: "npm:^5.1.0" + postcss-discard-comments: "npm:^5.1.0" + postcss-discard-duplicates: "npm:^5.1.0" + postcss-discard-empty: "npm:^5.1.0" + postcss-discard-overridden: "npm:^5.1.0" + postcss-merge-longhand: "npm:^5.1.0" + postcss-merge-rules: "npm:^5.1.0" + postcss-minify-font-values: "npm:^5.1.0" + postcss-minify-gradients: "npm:^5.1.0" + postcss-minify-params: "npm:^5.1.0" + postcss-minify-selectors: "npm:^5.2.0" + postcss-normalize-charset: "npm:^5.1.0" + postcss-normalize-display-values: "npm:^5.1.0" + postcss-normalize-positions: "npm:^5.1.0" + postcss-normalize-repeat-style: "npm:^5.1.0" + postcss-normalize-string: "npm:^5.1.0" + postcss-normalize-timing-functions: "npm:^5.1.0" + postcss-normalize-unicode: "npm:^5.1.0" + postcss-normalize-url: "npm:^5.1.0" + postcss-normalize-whitespace: "npm:^5.1.0" + postcss-ordered-values: "npm:^5.1.0" + postcss-reduce-initial: "npm:^5.1.0" + postcss-reduce-transforms: "npm:^5.1.0" + postcss-svgo: "npm:^5.1.0" + postcss-unique-selectors: "npm:^5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/f634467ee68e3dddfb259dec4b020cb65dceb6650051f3bf67c96974189013a1626cec2e59f974789f34bdbcadfad3f2a5f6065b27c05d8fefb0dae230aacb6c + languageName: node + linkType: hard + +"cssnano-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "cssnano-utils@npm:3.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/057508645a3e7584decede1045daa5b362dbfa2f5df96c3527c7d52e41e787a3442a56a8ea0c0af6a757f518e79a459ee580a35c323ad0d0eec912afd67d7630 + languageName: node + linkType: hard + +"cssnano@npm:^5.0.0": + version: 5.1.0 + resolution: "cssnano@npm:5.1.0" + dependencies: + cssnano-preset-default: "npm:^5.2.0" + lilconfig: "npm:^2.0.3" + yaml: "npm:^1.10.2" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/bbd867f058fe27f2bf05081a04dabf2245382670e664cec1acdf1df61b0f607f66d825e20e4f48976f281cba341c4f562142d84c23428d56d7cacba4c3c756c9 + languageName: node + linkType: hard + +"csso@npm:^4.2.0": + version: 4.2.0 + resolution: "csso@npm:4.2.0" + dependencies: + css-tree: "npm:^1.1.2" + checksum: 10c0/f8c6b1300efaa0f8855a7905ae3794a29c6496e7f16a71dec31eb6ca7cfb1f058a4b03fd39b66c4deac6cb06bf6b4ba86da7b67d7320389cb9994d52b924b903 + languageName: node + linkType: hard + +"d@npm:1, d@npm:^1.0.1": + version: 1.0.1 + resolution: "d@npm:1.0.1" + dependencies: + es5-ext: "npm:^0.10.50" + type: "npm:^1.0.1" + checksum: 10c0/1fedcb3b956a461f64d86b94b347441beff5cef8910b6ac4ec509a2c67eeaa7093660a98b26601ac91f91260238add73bdf25867a9c0cb783774642bc4c1523f + languageName: node + linkType: hard + +"debug@npm:2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: "npm:2.0.0" + checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.4": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 + languageName: node + linkType: hard + +"debug@npm:^3.1.1": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"debug@npm:^4.1.0, debug@npm:^4.1.1": + version: 4.3.3 + resolution: "debug@npm:4.3.3" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/31873df69ff7036ce4f4158dcd6f71cd399b834ab1efbf23383f660822d28c7e29442fa83d34ccdd2f5201ff69eb494f0c7e8c01ecd314f0207bb631bb048ac0 + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.0": + version: 0.2.0 + resolution: "decode-uri-component@npm:0.2.0" + checksum: 10c0/dbc3c72e4a740703f76fb3f51e35bb81546aa3e8c7897e015b8bc289813d3044ad6eaa6048fbb43f6b7b34ef005527b7511da50399caa78b91ee39266a341822 + languageName: node + linkType: hard + +"deep-equal@npm:^1.0.1": + version: 1.1.1 + resolution: "deep-equal@npm:1.1.1" + dependencies: + is-arguments: "npm:^1.0.4" + is-date-object: "npm:^1.0.1" + is-regex: "npm:^1.0.4" + object-is: "npm:^1.0.1" + object-keys: "npm:^1.1.1" + regexp.prototype.flags: "npm:^1.2.0" + checksum: 10c0/473d5dd1d707afd5ad3068864765590591b049d0e0d9a01931599dbbd820e35f09d0a42faa6e4644deb7cf6b7dc90f7bfdf5559f42279d67f714209b62036212 + languageName: node + linkType: hard + +"default-gateway@npm:^6.0.3": + version: 6.0.3 + resolution: "default-gateway@npm:6.0.3" + dependencies: + execa: "npm:^5.0.0" + checksum: 10c0/5184f9e6e105d24fb44ade9e8741efa54bb75e84625c1ea78c4ef8b81dff09ca52d6dbdd1185cf0dc655bb6b282a64fffaf7ed2dd561b8d9ad6f322b1f039aba + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3": + version: 1.1.3 + resolution: "define-properties@npm:1.1.3" + dependencies: + object-keys: "npm:^1.0.12" + checksum: 10c0/a2fa03d97ee44bb7c679bac7c3b3e63431a2efd83c12c0d61c7f5adf4fa1cf0a669c77afd274babbc5400926bdc2befb25679e4bf687140b078c0fe14f782e4f + languageName: node + linkType: hard + +"del@npm:^4.1.1": + version: 4.1.1 + resolution: "del@npm:4.1.1" + dependencies: + "@types/glob": "npm:^7.1.1" + globby: "npm:^6.1.0" + is-path-cwd: "npm:^2.0.0" + is-path-in-cwd: "npm:^2.0.0" + p-map: "npm:^2.0.0" + pify: "npm:^4.0.1" + rimraf: "npm:^2.6.3" + checksum: 10c0/ed3233e86e39c0a6a7ea85d8ad0ebc00603078ad408b9c34b4742f707c20028c5731dce2e8aa9a6eb5ae6bee30ccc5405cf7b5d457306520e37c92d0410b6061 + languageName: node + linkType: hard + +"del@npm:^6.0.0": + version: 6.0.0 + resolution: "del@npm:6.0.0" + dependencies: + globby: "npm:^11.0.1" + graceful-fs: "npm:^4.2.4" + is-glob: "npm:^4.0.1" + is-path-cwd: "npm:^2.2.0" + is-path-inside: "npm:^3.0.2" + p-map: "npm:^4.0.0" + rimraf: "npm:^3.0.2" + slash: "npm:^3.0.0" + checksum: 10c0/c803f6b8a7633cb28ac2feb581175af829ac2fcd1ab3f59aa1f012800898b84e8a4368243850a1590666a55f567347628cf44048bf12aba2e37debde6d589c1a + languageName: node + linkType: hard + +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 10c0/acb24aaf936ef9a227b6be6d495f0d2eb20108a9a6ad40585c5bda1a897031512fef6484e4fdbb80bd249fdaa82841fa1039f416ece03188e677ba11bcfda249 + languageName: node + linkType: hard + +"destroy@npm:~1.0.4": + version: 1.0.4 + resolution: "destroy@npm:1.0.4" + checksum: 10c0/eab493808ba17a1fa22c71ef1a4e68d2c4c5222a38040606c966d2ab09117f3a7f3e05c39bffbe41a697f9de552039e43c30e46f0c3eab3faa9f82e800e172a0 + languageName: node + linkType: hard + +"detect-node@npm:^2.0.4": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 10c0/f039f601790f2e9d4654e499913259a798b1f5246ae24f86ab5e8bd4aaf3bce50484234c494f11fb00aecb0c6e2733aa7b1cf3f530865640b65fbbd65b2c4e09 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"dns-equal@npm:^1.0.0": + version: 1.0.0 + resolution: "dns-equal@npm:1.0.0" + checksum: 10c0/da966e5275ac50546e108af6bc29aaae2164d2ae96d60601b333c4a3aff91f50b6ca14929cf91f20a9cad1587b356323e300cea3ff6588a6a816988485f445f1 + languageName: node + linkType: hard + +"dns-packet@npm:^1.3.1": + version: 1.3.4 + resolution: "dns-packet@npm:1.3.4" + dependencies: + ip: "npm:^1.1.0" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/ee06478da192f9014ab43c7e9118c77b9e353a8d5c06b0d2cba367b3501dd7453bcfed89354a8890cf740491379dcf4b28153d064d051e55c30cfbdf92b88608 + languageName: node + linkType: hard + +"dns-txt@npm:^2.0.2": + version: 2.0.2 + resolution: "dns-txt@npm:2.0.2" + dependencies: + buffer-indexof: "npm:^1.0.0" + checksum: 10c0/71703e65156a2d626216157e6c4fddd844e7e790b6cd3cec830ef8eed80e7ea2697e5f4f2f3eb3aae809be3c91e370cad7a5d91b05ce6b6fcd5e191e7e3d31ca + languageName: node + linkType: hard + +"dom-converter@npm:^0.2.0": + version: 0.2.0 + resolution: "dom-converter@npm:0.2.0" + dependencies: + utila: "npm:~0.4" + checksum: 10c0/e96aa63bd8c6ee3cd9ce19c3aecfc2c42e50a460e8087114794d4f5ecf3a4f052b34ea3bf2d73b5d80b4da619073b49905e6d7d788ceb7814ca4c29be5354a11 + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.3.2 + resolution: "dom-serializer@npm:1.3.2" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.0" + entities: "npm:^2.0.0" + checksum: 10c0/0a39ff0634da807b0e7b4e28d20305658e366d920050296ea6a306c29eb4094a1bf942a72ec2e51145f01efcff93e98eaa1eef4c299ca398e326a2e1c4641220 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.2.0 + resolution: "domelementtype@npm:2.2.0" + checksum: 10c0/0e3824e21fb9ff2cda9579ad04ef0068c58cc1746cf723560e1b4cb73ccae324062d468b25a576948459df7dd99e42d8a100b7fcfc6e05c8eefa2e6fed3f8f7d + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.0": + version: 4.3.0 + resolution: "domhandler@npm:4.3.0" + dependencies: + domelementtype: "npm:^2.2.0" + checksum: 10c0/c3de81c50d8e017dcfc404914ca29d30b4c646536ab52f133134ddc64b9e9987d9f11602c5beb08b435ec95cf5543f2d300daa56e9841e4c73c3f4f69f269c19 + languageName: node + linkType: hard + +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: "npm:^1.0.1" + domelementtype: "npm:^2.2.0" + domhandler: "npm:^4.2.0" + checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.71": + version: 1.4.75 + resolution: "electron-to-chromium@npm:1.4.75" + checksum: 10c0/49afc3d6f710842efa46c3dfb1c7aefc292703b9c0a83e9ba0136f3432e658683120a62cbc62208f1d4c42a5d89596cb9ce14020741699b2b66c7940a19be23a + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"emojis-list@npm:^2.0.0": + version: 2.1.0 + resolution: "emojis-list@npm:2.1.0" + checksum: 10c0/bbb941223bfb3e38054cb52ed1b3098a8dac0a90fdd2699eb8a3af3b2172cdc4af0932e05c3edd52e814997c8f45cf1d7f5e86e9ecdcd4e2390a0f27e6914db5 + languageName: node + linkType: hard + +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: 10c0/7dc4394b7b910444910ad64b812392159a21e1a7ecc637c775a440227dcb4f80eff7fe61f4453a7d7603fa23d23d30cc93fe9e4b5ed985b88d6441cd4a35117b + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.9.2": + version: 5.9.2 + resolution: "enhanced-resolve@npm:5.9.2" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/0732469279b1ee1b4a46bacb84298d179e9285a6365f83f5076da5841f1213eeb8556b0761bf3a8c4b194e54f1fa7c4c6adbb294a34b8ef0334ab18d1b22554e + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"envinfo@npm:^7.7.3": + version: 7.8.1 + resolution: "envinfo@npm:7.8.1" + bin: + envinfo: dist/cli.js + checksum: 10c0/01efe7fcf55d4b84a146bc638ef89a89a70b610957db64636ac7cc4247d627eeb1c808ed79d3cfbe3d4fed5e8ba3d61db79c1ca1a3fea9f38639561eefd68733 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-stack-parser@npm:^2.0.0": + version: 2.0.7 + resolution: "error-stack-parser@npm:2.0.7" + dependencies: + stackframe: "npm:^1.1.1" + checksum: 10c0/3cb82dbc0832d4767e1e3cca5c297ddaa2d8675733d342edadc481c914be8d28a2e0b138143e5682edc5b85792b18ac0441f5be4af727528ed612ca18e47e766 + languageName: node + linkType: hard + +"es-module-lexer@npm:^0.9.0": + version: 0.9.3 + resolution: "es-module-lexer@npm:0.9.3" + checksum: 10c0/be77d73aee709fdc68d22b9938da81dfee3bc45e8d601629258643fe5bfdab253d6e2540035e035cfa8cf52a96366c1c19b46bcc23b4507b1d44e5907d2e7f6c + languageName: node + linkType: hard + +"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50": + version: 0.10.53 + resolution: "es5-ext@npm:0.10.53" + dependencies: + es6-iterator: "npm:~2.0.3" + es6-symbol: "npm:~3.1.3" + next-tick: "npm:~1.0.0" + checksum: 10c0/02989b89e777264756696baf64b6daf54e0be631b09870dfab8473e81129303c2791a001bf1f06bb38bf008403a0daad02e8001cb419ad8e4430452400ecd771 + languageName: node + linkType: hard + +"es6-iterator@npm:2.0.3, es6-iterator@npm:~2.0.3": + version: 2.0.3 + resolution: "es6-iterator@npm:2.0.3" + dependencies: + d: "npm:1" + es5-ext: "npm:^0.10.35" + es6-symbol: "npm:^3.1.1" + checksum: 10c0/91f20b799dba28fb05bf623c31857fc1524a0f1c444903beccaf8929ad196c8c9ded233e5ac7214fc63a92b3f25b64b7f2737fcca8b1f92d2d96cf3ac902f5d8 + languageName: node + linkType: hard + +"es6-symbol@npm:^3.1.1, es6-symbol@npm:~3.1.3": + version: 3.1.3 + resolution: "es6-symbol@npm:3.1.3" + dependencies: + d: "npm:^1.0.1" + ext: "npm:^1.1.2" + checksum: 10c0/22982f815f00df553a89f4fb74c5048fed85df598482b4bd38dbd173174247949c72982a7d7132a58b147525398400e5f182db59b0916cb49f1e245fb0e22233 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: 10c0/afd02e6ca91ffa813e1108b5e7756566173d6bc0d1eb951cb44d6b21702ec17c1cf116cfe75d4a2b02e05acb0b808a7a9387d0d1ca5cf9c04ad03a8445c3e46d + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844 + languageName: node + linkType: hard + +"express@npm:^4.17.1": + version: 4.17.3 + resolution: "express@npm:4.17.3" + dependencies: + accepts: "npm:~1.3.8" + array-flatten: "npm:1.1.1" + body-parser: "npm:1.19.2" + content-disposition: "npm:0.5.4" + content-type: "npm:~1.0.4" + cookie: "npm:0.4.2" + cookie-signature: "npm:1.0.6" + debug: "npm:2.6.9" + depd: "npm:~1.1.2" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + finalhandler: "npm:~1.1.2" + fresh: "npm:0.5.2" + merge-descriptors: "npm:1.0.1" + methods: "npm:~1.1.2" + on-finished: "npm:~2.3.0" + parseurl: "npm:~1.3.3" + path-to-regexp: "npm:0.1.7" + proxy-addr: "npm:~2.0.7" + qs: "npm:6.9.7" + range-parser: "npm:~1.2.1" + safe-buffer: "npm:5.2.1" + send: "npm:0.17.2" + serve-static: "npm:1.14.2" + setprototypeof: "npm:1.2.0" + statuses: "npm:~1.5.0" + type-is: "npm:~1.6.18" + utils-merge: "npm:1.0.1" + vary: "npm:~1.1.2" + checksum: 10c0/8fa8a8ae26bd11082b575ddfecdfe51ca535e048ebcf58455e3f813aacc1712e09a297a511efb0e4843e2d2a413cb8c1cd6b81f79371e50d7b8efb1aa6b8d5af + languageName: node + linkType: hard + +"ext@npm:^1.1.2": + version: 1.6.0 + resolution: "ext@npm:1.6.0" + dependencies: + type: "npm:^2.5.0" + checksum: 10c0/d6ff29ca86fbe4e69743d10702ece124e0239faa435a6c3b2833282787b9eace2c8cbf5d8439d0c85312255d5472d251bf3cd4c4d1b9de8f8a8090e6b43db948 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.2.11 + resolution: "fast-glob@npm:3.2.11" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 10c0/f726d4d6545ae9ade242eba78ae418cd8beac6c9291cdc36fc6b3b4e54f04fa0ecde5767256f2a600d6e14dc49a841adb3aa4b5f3f0c06b35dd4f3954965443d + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^3.0.0": + version: 3.0.0 + resolution: "fast-levenshtein@npm:3.0.0" + dependencies: + fastest-levenshtein: "npm:^1.0.7" + checksum: 10c0/9e147c682bd0ca54474f1cbf906f6c45262fd2e7c051d2caf2cc92729dcf66949dc809f2392de6adbe1c8716fdf012f91ce38c9422aef63b5732fc688eee4046 + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12, fastest-levenshtein@npm:^1.0.7": + version: 1.0.12 + resolution: "fastest-levenshtein@npm:1.0.12" + checksum: 10c0/1755f98942952d5acd773eef03f9f9f046d95c447b10d1ef672df65a40f9a4d3f176ef60ae93e465f1c2bae127b7eb047d4df7e0dce492805bda76aff325dc88 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.13.0 + resolution: "fastq@npm:1.13.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/76c7b5dafb93c7e74359a3e6de834ce7a7c2e3a3184050ed4cb652661de55cf8d4895178d8d3ccd23069395056c7bb15450660d38fb382ca88c142b22694d7c9 + languageName: node + linkType: hard + +"faye-websocket@npm:^0.11.3": + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" + dependencies: + websocket-driver: "npm:>=0.5.1" + checksum: 10c0/c6052a0bb322778ce9f89af92890f6f4ce00d5ec92418a35e5f4c6864a4fe736fec0bcebd47eac7c0f0e979b01530746b1c85c83cb04bae789271abf19737420 + languageName: node + linkType: hard + +"fdir@npm:^6.4.4": + version: 6.4.4 + resolution: "fdir@npm:6.4.4" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f + languageName: node + linkType: hard + +"finalhandler@npm:~1.1.2": + version: 1.1.2 + resolution: "finalhandler@npm:1.1.2" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + on-finished: "npm:~2.3.0" + parseurl: "npm:~1.3.3" + statuses: "npm:~1.5.0" + unpipe: "npm:~1.0.0" + checksum: 10c0/6a96e1f5caab085628c11d9fdceb82ba608d5e426c6913d4d918409baa271037a47f28fbba73279e8ad614f0b8fa71ea791d265e408d760793829edd8c2f4584 + languageName: node + linkType: hard + +"find-cache-dir@npm:^3.3.1": + version: 3.3.2 + resolution: "find-cache-dir@npm:3.3.2" + dependencies: + commondir: "npm:^1.0.1" + make-dir: "npm:^3.0.2" + pkg-dir: "npm:^4.1.0" + checksum: 10c0/92747cda42bff47a0266b06014610981cfbb71f55d60f2c8216bc3108c83d9745507fb0b14ecf6ab71112bed29cd6fb1a137ee7436179ea36e11287e3159e587 + languageName: node + linkType: hard + +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: "npm:^3.0.0" + checksum: 10c0/2c2e7d0a26db858e2f624f39038c74739e38306dee42b45f404f770db357947be9d0d587f1cac72d20c114deb38aa57316e879eb0a78b17b46da7dab0a3bd6e3 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0": + version: 1.14.9 + resolution: "follow-redirects@npm:1.14.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/08c465c17cbf3011ad16516609ee476abffa8fd1ff78c2082f1ff43614cb06586a0ccc8e99e5ebe13da06d064367cb269789e3ca0e93e2ad5b24fdc30b4294b6 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: 10c0/9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs-monkey@npm:1.0.3": + version: 1.0.3 + resolution: "fs-monkey@npm:1.0.3" + checksum: 10c0/197fd276d224d54a27c6267c69887ec29ccd4bedd83d72b5050abf3b6c6ef83d7b86a85a87f615c24a4e6f9a4888fd151c9f16a37ffb23e37c4c2d14c1da6275 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: 10c0/60b74b2407e1942e1ed7f8c284f8ef714d0689dcfce5319985a5b7da3fc727f40b4a59ec72dc55aa83365ad7b8fa4fac3a30d93c850a2b452f29ae03dbc10a1e + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2": + version: 1.1.1 + resolution: "get-intrinsic@npm:1.1.1" + dependencies: + function-bind: "npm:^1.1.1" + has: "npm:^1.0.3" + has-symbols: "npm:^1.0.1" + checksum: 10c0/c01055578e9b8da37a7779b18b732436c55d93e5ffa56b0fc4d3da8468ad89a25ce2343ba1945f20c0e78119bc7bb296fb59a0da521b6e43fd632de73376e040 + languageName: node + linkType: hard + +"get-port@npm:^3.1.0": + version: 3.2.0 + resolution: "get-port@npm:3.2.0" + checksum: 10c0/1b6c3fe89074be3753d9ddf3d67126ea351ab9890537fe53fefebc2912d1d66fdc112451bbc76d33ae5ceb6ca70be2a91017944e3ee8fb0814ac9b295bf2a5b8 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^7.0.3, glob@npm:^7.1.3": + version: 7.2.0 + resolution: "glob@npm:7.2.0" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.0.4" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/478b40e38be5a3d514e64950e1e07e0ac120585add6a37c98d0ed24d72d9127d734d2a125786073c8deb687096e84ae82b641c441a869ada3a9cc91b68978632 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globby@npm:^11.0.1": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"globby@npm:^6.1.0": + version: 6.1.0 + resolution: "globby@npm:6.1.0" + dependencies: + array-union: "npm:^1.0.1" + glob: "npm:^7.0.3" + object-assign: "npm:^4.0.1" + pify: "npm:^2.0.0" + pinkie-promise: "npm:^2.0.0" + checksum: 10c0/656ad1f0d02c6ef378c07589519ed3ec27fe988ea177195c05b8aff280320f3d67b91fa0baa6f7e49288f9bf1f92fc84f783a79ac3ed66278f3fa082e627ed84 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.9 + resolution: "graceful-fs@npm:4.2.9" + checksum: 10c0/2a66760ce6677ca18a24a1ef15d440cfd970086446af1e78c9e9de083c48122d8bd9c3fdc37f8f80f34aae833fa0d9dd52725e75a1c3f433ddd34eece39e7376 + languageName: node + linkType: hard + +"growly@npm:^1.3.0": + version: 1.3.0 + resolution: "growly@npm:1.3.0" + checksum: 10c0/3043bd5c064e87f89e8c9b66894ed09fd882c7fa645621a543b45b72f040c7241e25061207a858ab191be2fbdac34795ff57c2a40962b154a6b2908a5e509252 + languageName: node + linkType: hard + +"handle-thing@npm:^2.0.0": + version: 2.0.1 + resolution: "handle-thing@npm:2.0.1" + checksum: 10c0/7ae34ba286a3434f1993ebd1cc9c9e6b6d8ea672182db28b1afc0a7119229552fa7031e3e5f3cd32a76430ece4e94b7da6f12af2eb39d6239a7693e4bd63a998 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-tostringtag@npm:1.0.0" + dependencies: + has-symbols: "npm:^1.0.2" + checksum: 10c0/1cdba76b7d13f65198a92b8ca1560ba40edfa09e85d182bf436d928f3588a9ebd260451d569f0ed1b849c4bf54f49c862aa0d0a77f9552b1855bb6deb526c011 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: "npm:^1.1.1" + checksum: 10c0/e1da0d2bd109f116b632f27782cf23182b42f14972ca9540e4c5aa7e52647407a0a4a76937334fddcb56befe94a3494825ec22b19b51f5e5507c3153fd1a5e1b + languageName: node + linkType: hard + +"hpack.js@npm:^2.1.6": + version: 2.1.6 + resolution: "hpack.js@npm:2.1.6" + dependencies: + inherits: "npm:^2.0.1" + obuf: "npm:^1.0.0" + readable-stream: "npm:^2.0.1" + wbuf: "npm:^1.1.0" + checksum: 10c0/55b9e824430bab82a19d079cb6e33042d7d0640325678c9917fcc020c61d8a08ca671b6c942c7f0aae9bb6e4b67ffb50734a72f9e21d66407c3138c1983b70f0 + languageName: node + linkType: hard + +"html-entities@npm:^2.3.2": + version: 2.3.2 + resolution: "html-entities@npm:2.3.2" + checksum: 10c0/69b50d032435e02765175d40ac3d94ceeb19b3ee32b869f79804f24f8efadf7928a1c3c4eddb85273809f95f7cffa416d05ca43e88d219575e8c5f6dd75bfc8d + languageName: node + linkType: hard + +"htmlparser2@npm:^6.1.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.0.0" + domutils: "npm:^2.5.2" + entities: "npm:^2.0.0" + checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-deceiver@npm:^1.2.7": + version: 1.2.7 + resolution: "http-deceiver@npm:1.2.7" + checksum: 10c0/8bb9b716f5fc55f54a451da7f49b9c695c3e45498a789634daec26b61e4add7c85613a4a9e53726c39d09de7a163891ecd6eb5809adb64500a840fd86fe81d03 + languageName: node + linkType: hard + +"http-errors@npm:1.8.1": + version: 1.8.1 + resolution: "http-errors@npm:1.8.1" + dependencies: + depd: "npm:~1.1.2" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:>= 1.5.0 < 2" + toidentifier: "npm:1.0.1" + checksum: 10c0/f01aeecd76260a6fe7f08e192fcbe9b2f39ed20fc717b852669a69930167053b01790998275c6297d44f435cf0e30edd50c05223d1bec9bc484e6cf35b2d6f43 + languageName: node + linkType: hard + +"http-errors@npm:~1.6.2": + version: 1.6.3 + resolution: "http-errors@npm:1.6.3" + dependencies: + depd: "npm:~1.1.2" + inherits: "npm:2.0.3" + setprototypeof: "npm:1.1.0" + statuses: "npm:>= 1.4.0 < 2" + checksum: 10c0/17ec4046ee974477778bfdd525936c254b872054703ec2caa4d6f099566b8adade636ae6aeeacb39302c5cd6e28fb407ebd937f500f5010d0b6850750414ff78 + languageName: node + linkType: hard + +"http-parser-js@npm:>=0.5.1": + version: 0.5.5 + resolution: "http-parser-js@npm:0.5.5" + checksum: 10c0/fd8888b4b61bd1de9a9d3cfe6d606f4a6e3d17c8fe02cbec34c7fb6dda1b9a3ab267e94570a861b785166db72256c49327c79ca9ca03058b922d1dffde5fda7b + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"http-proxy-middleware@npm:^2.0.0": + version: 2.0.3 + resolution: "http-proxy-middleware@npm:2.0.3" + dependencies: + "@types/http-proxy": "npm:^1.17.8" + http-proxy: "npm:^1.18.1" + is-glob: "npm:^4.0.1" + is-plain-obj: "npm:^3.0.0" + micromatch: "npm:^4.0.2" + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 10c0/477e07aa91b8e12303a1f75cc481a5ee3224886a87a81d6f6c430979cb2dc0ce28616fdd5c42f5b9500c82ae6569d261fcce64e2d669161450d230358fdab113 + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: "npm:^4.0.0" + follow-redirects: "npm:^1.0.0" + requires-port: "npm:^1.0.0" + checksum: 10c0/148dfa700a03fb421e383aaaf88ac1d94521dfc34072f6c59770528c65250983c2e4ec996f2f03aa9f3fe46cd1270a593126068319311e3e8d9e610a37533e94 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/39c92936fabd23169c8611d2b5cc39e39d10b19b0d223352f20a7579f75b39d5f786114a6b8fc62bee8c5fed59ba9e0d38f7219a4db383e324fb3061664b043d + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.2.0 + resolution: "ignore@npm:5.2.0" + checksum: 10c0/7fb7b4c4c52c2555113ff968f8a83b8ac21b076282bfcb3f468c3fb429be69bd56222306c31de95dd452c647fc6ae24339b8047ebe3ef34c02591abfec58da01 + languageName: node + linkType: hard + +"immutable@npm:^4.0.0": + version: 4.0.0 + resolution: "immutable@npm:4.0.0" + checksum: 10c0/964b51a559e026f38835985b892599964e9915a77967b549784878e29b1f95331518b3f64d100faa11054ae5d43a6b1af28e6a7f5bba5463b0ae68a30aa2b1b4 + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 10c0/6e56402373149ea076a434072671f9982f5fad030c7662be0332122fe6c0fa490acb3cc1010d90b6eff8d640b1167d77674add52dfd1bb85d545cf29e80e73e7 + languageName: node + linkType: hard + +"interpret@npm:^2.2.0": + version: 2.2.0 + resolution: "interpret@npm:2.2.0" + checksum: 10c0/c0ef90daec6c4120bb7a226fa09a9511f6b5618aa9c94cf4641472f486948e643bb3b36efbd0136bbffdee876435af9fdf7bbb4622f5a16778eed5397f8a1946 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"ip@npm:^1.1.0": + version: 1.1.5 + resolution: "ip@npm:1.1.5" + checksum: 10c0/877e98d676cd8d0ca01fee8282d11b91fb97be7dd9d0b2d6d98e161db2d4277954f5b55db7cfc8556fe6841cb100d13526a74f50ab0d83d6b130fe8445040175 + languageName: node + linkType: hard + +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: 10c0/0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.0.1": + version: 2.0.1 + resolution: "ipaddr.js@npm:2.0.1" + checksum: 10c0/0034dfd7a83e82bec6a569549f42c56eb47d051842e10ff0400d97b18f517131834d7c054893a31900cf9d54cf4d974eed97923e5e5965c298d004849f5f0ac9 + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/5ff1f341ee4475350adfc14b2328b38962564b7c2076be2f5bac7bd9b61779efba99b9f844a7b82ba7654adccf8e8eb19d1bb0cc6d1c1a085e498f6793d4328f + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-core-module@npm:^2.8.1": + version: 2.8.1 + resolution: "is-core-module@npm:2.8.1" + dependencies: + has: "npm:^1.0.3" + checksum: 10c0/f1139970deb2ec159c54be154d35cd17d71b9b56c60221ff7c8c328ca7efe20b6d676cef43d08c21966e162bfd5068dcd0ce23e64c77b76a19824563ecd82e0e + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-path-cwd@npm:^2.0.0, is-path-cwd@npm:^2.2.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 10c0/afce71533a427a759cd0329301c18950333d7589533c2c90205bd3fdcf7b91eb92d1940493190567a433134d2128ec9325de2fd281e05be1920fbee9edd22e0a + languageName: node + linkType: hard + +"is-path-in-cwd@npm:^2.0.0": + version: 2.1.0 + resolution: "is-path-in-cwd@npm:2.1.0" + dependencies: + is-path-inside: "npm:^2.1.0" + checksum: 10c0/674a4282fb3732cf4b4e9ea31e06380d8b074fb8106c4c1742a9f0f3d5650bf059b2c45e5c4cfa7abe847ca88474de63abec323a7fe1eb14f8ec4de2fa951d3a + languageName: node + linkType: hard + +"is-path-inside@npm:^2.1.0": + version: 2.1.0 + resolution: "is-path-inside@npm:2.1.0" + dependencies: + path-is-inside: "npm:^1.0.2" + checksum: 10c0/50272b9aa301964c0bc4032d5c968e63c516d15bd7800cd06845df97bee637451fcd92a8001b37e309563eff2dffae5fa6d635a0c1d162dc257489c86b1fda51 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"is-plain-obj@npm:^3.0.0": + version: 3.0.0 + resolution: "is-plain-obj@npm:3.0.0" + checksum: 10c0/8e6483bfb051d42ec9c704c0ede051a821c6b6f9a6c7a3e3b55aa855e00981b0580c8f3b1f5e2e62649b39179b1abfee35d6f8086d999bfaa32c1908d29b07bc + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"is-regex@npm:^1.0.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jest-worker@npm:^26.3.0": + version: 26.6.2 + resolution: "jest-worker@npm:26.6.2" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^7.0.0" + checksum: 10c0/07e4dba650381604cda253ab6d5837fe0279c8d68c25884995b45bfe149a7a1e1b5a97f304b4518f257dac2a9ddc1808d57d650649c3ab855e9e60cf824d2970 + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"jsesc@npm:~0.5.0": + version: 0.5.0 + resolution: "jsesc@npm:0.5.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/f93792440ae1d80f091b65f8ceddf8e55c4bb7f1a09dee5dcbdb0db5612c55c0f6045625aa6b7e8edb2e0a4feabd80ee48616dbe2d37055573a84db3d24f96d9 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.2": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json5@npm:^1.0.1": + version: 1.0.1 + resolution: "json5@npm:1.0.1" + dependencies: + minimist: "npm:^1.2.0" + bin: + json5: lib/cli.js + checksum: 10c0/7f75dd797151680a4e14c4224c1343b32a43272aa6e6333ddec2b0822df4ea116971689b251879a1248592da24f7929902c13f83d7390c3f3d44f18e8e9719f5 + languageName: node + linkType: hard + +"json5@npm:^2.1.2": + version: 2.2.0 + resolution: "json5@npm:2.2.0" + dependencies: + minimist: "npm:^1.2.5" + bin: + json5: lib/cli.js + checksum: 10c0/fbe021f69fa100f0a863e5ab9105ead3971ad5141e7c0dc5134c6148545dae98a69602fb8f9f4dd65af0db7ca00887bf5b35af60be34c10f58fb5fc1f2366a4e + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"klona@npm:^2.0.4": + version: 2.0.5 + resolution: "klona@npm:2.0.5" + checksum: 10c0/5b752c11ca8e2996612386699f52cc5aed802aa4116663d26239ac0b054fae25191dacb95587ecf1a167b039daa9fc3fa2da17dfd5d0821f3037de3821d9a9e5 + languageName: node + linkType: hard + +"lilconfig@npm:^2.0.3": + version: 2.0.4 + resolution: "lilconfig@npm:2.0.4" + checksum: 10c0/bdd3d4bd82c6381a3e600962cfc285610564888f126e2cec3cd0fdc41a1892266fa17f32f372a4a6c9c57c265d377ab58a36e2b68a91eedd377389b41334f112 + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.2.0 + resolution: "loader-runner@npm:4.2.0" + checksum: 10c0/907dee8c4d5841962005e22bf2fa10f7ea5849356243b43e443227641fa202f5edf1c996e5b36697e027533013d35554a46e75d3db8183731f11b5f38db565ea + languageName: node + linkType: hard + +"loader-utils@npm:1.2.3": + version: 1.2.3 + resolution: "loader-utils@npm:1.2.3" + dependencies: + big.js: "npm:^5.2.2" + emojis-list: "npm:^2.0.0" + json5: "npm:^1.0.1" + checksum: 10c0/b4242988adf5d50e7a3dd7b2f0c7b6534ea580a27ae4f8ba226aea3219d8a72ffb6d1a9b200fc8e0435e38a22bce740b094f57be8d0142a3f1a75e610159235b + languageName: node + linkType: hard + +"loader-utils@npm:^1.4.0": + version: 1.4.0 + resolution: "loader-utils@npm:1.4.0" + dependencies: + big.js: "npm:^5.2.2" + emojis-list: "npm:^3.0.0" + json5: "npm:^1.0.1" + checksum: 10c0/b3f383612c23c0adf535d61709fb3eaf864afa54dae45608e3831156b89b4b05a0a4ddc6db7d742071babe872750ba3f4f9ce89326d94f6e096dbed978fa424e + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.2 + resolution: "loader-utils@npm:2.0.2" + dependencies: + big.js: "npm:^5.2.2" + emojis-list: "npm:^3.0.0" + json5: "npm:^2.1.2" + checksum: 10c0/332ae8db3d4d3fac7e5bbed82da9230857d3f85b3ccf6d3f2e286fa2431887aa9e46965928b2c77a93f5f721cec037539c0cfc718164f0287c5c90f5dce07ad9 + languageName: node + linkType: hard + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: "npm:^3.0.0" + path-exists: "npm:^3.0.0" + checksum: 10c0/3db394b7829a7fe2f4fbdd25d3c4689b85f003c318c5da4052c7e56eed697da8f1bce5294f685c69ff76e32cba7a33629d94396976f6d05fb7f4c755c5e2ae8b + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + +"lodash.memoize@npm:^4.1.2": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 + languageName: node + linkType: hard + +"lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: 10c0/262d400bb0952f112162a320cc4a75dea4f66078b9e7e3075ffbc9c6aa30b3e9df3cf20e7da7d566105e1ccf7804e4fbd7d804eee0b53de05d83f16ffbf41c5e + languageName: node + linkType: hard + +"lodash@npm:^4.17.14, lodash@npm:^4.17.20, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 10c0/67241f8708c1e665a061d2b042d2d243366e93e5bf1f917693007f6d55111588b952dcbfd3ea9c2d0969fb754aad81b30fdcfdcc24546495fc3b24336b28d4bd + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 + languageName: node + linkType: hard + +"memfs@npm:^3.4.1": + version: 3.4.1 + resolution: "memfs@npm:3.4.1" + dependencies: + fs-monkey: "npm:1.0.3" + checksum: 10c0/d8f73f0903c7802027fea07b5cc39fc984f0fdff528214a0ef2937001fec88e11d755675a725e83a2b14a7c96c054c903bf7d1774d5133116597f201c37f6a5e + languageName: node + linkType: hard + +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 10c0/b67d07bd44cfc45cebdec349bb6e1f7b077ee2fd5beb15d1f7af073849208cb6f144fe403e29a36571baf3f4e86469ac39acf13c318381e958e186b2766f54ec + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": + version: 4.0.4 + resolution: "micromatch@npm:4.0.4" + dependencies: + braces: "npm:^3.0.1" + picomatch: "npm:^2.2.3" + checksum: 10c0/87bc95e3e52ebe413dbadd43c96e797c736bf238f154e3b546859493e83781b6f7fa4dfa54e423034fb9aeea65259ee6480551581271c348d8e19214910a5a64 + languageName: node + linkType: hard + +"mime-db@npm:1.51.0": + version: 1.51.0 + resolution: "mime-db@npm:1.51.0" + checksum: 10c0/0019c731d3967b62e4aefa1d416709386649305cc5a94dd13d315960c8111a0a9c4d1dc542545e69a476e316df4fc03de18dbc83a82e97aefdb046267649a548 + languageName: node + linkType: hard + +"mime-db@npm:>= 1.43.0 < 2": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.34 + resolution: "mime-types@npm:2.1.34" + dependencies: + mime-db: "npm:1.51.0" + checksum: 10c0/7cb55d499f67fbaa9b4e5da552c54ae5c9ac1d57df93f89e2af185d2f3e7a3e6f2030b5b248fec2130f659ebcd9a40e51f63f91006b3ea876b3cadf4755ea410 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"mini-css-extract-plugin@npm:^1.5.0": + version: 1.6.2 + resolution: "mini-css-extract-plugin@npm:1.6.2" + dependencies: + loader-utils: "npm:^2.0.0" + schema-utils: "npm:^3.0.0" + webpack-sources: "npm:^1.1.0" + peerDependencies: + webpack: ^4.4.0 || ^5.0.0 + checksum: 10c0/138c008f8a510012266d2834227e75181feeffd09e89e9cde0a63f17be3d64ea3ddbba01036aac9c8a969462c0142285659a20c294e8d01ba948aa1124affdc2 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5": + version: 1.2.5 + resolution: "minimist@npm:1.2.5" + checksum: 10c0/c143b0c199af4df7a55c7a37b6465cdd438acdc6a3a345ba0fe9d94dfcc2042263f650879bc73be607c843deeaeaadf39c864e55bc6d80b36a025eca1a062ee7 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.5": + version: 0.5.5 + resolution: "mkdirp@npm:0.5.5" + dependencies: + minimist: "npm:^1.2.5" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/4469faeeba703bc46b7cdbe3097d6373747a581eb8b556ce41c8fd25a826eb3254466c6522ba823c2edb0b6f0da7beb91cf71f040bc4e361534a3e67f0994bd0 + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"multicast-dns-service-types@npm:^1.1.0": + version: 1.1.0 + resolution: "multicast-dns-service-types@npm:1.1.0" + checksum: 10c0/25abc0e9ee509f38d874e22b03d563b16009d3976760d29bed25bf70ea992cfe30b0403743f49342279c67178a03311d31ecc1ec54bf79af2e6fe55f11af2660 + languageName: node + linkType: hard + +"multicast-dns@npm:^6.0.1": + version: 6.2.3 + resolution: "multicast-dns@npm:6.2.3" + dependencies: + dns-packet: "npm:^1.3.1" + thunky: "npm:^1.0.2" + bin: + multicast-dns: cli.js + checksum: 10c0/972fc50869e922d80d66eeb91ad39fd2e107241e0c791fc914e76578e4f7f3dfe3bf007020dd4d7ed4d0ffd69d9aa2238a9f8bbb4d160bd6eb3f35dde0c2c513 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.1": + version: 3.3.1 + resolution: "nanoid@npm:3.3.1" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/1034d71e438490e620bfc2419bb203e7dccbc122fd2e62a6101227b50d08992fdc114de197e77604c419dbcf4f41b142e6ff61d0516db4d24cd32f9bbc390f6b + languageName: node + linkType: hard + +"negotiator@npm:0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"next-tick@npm:~1.0.0": + version: 1.0.0 + resolution: "next-tick@npm:1.0.0" + checksum: 10c0/851058d7af979a94743ae0ae4c71f0257662a2b7129e0a159273d13782401823c154ee2e49a790e979e5b92126dbc2b5eb522eaff631b997ddf95903e7c5e9cc + languageName: node + linkType: hard + +"node-forge@npm:^1.2.0": + version: 1.2.1 + resolution: "node-forge@npm:1.2.1" + checksum: 10c0/0563bef5c6abfd031018ebd9cae41432811faef0b25ca7651489fb5f946250c3f8c433f42e76e9fd98f0d7617c12b700f8cbea134a1d284df84f8104c79127c0 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9 + languageName: node + linkType: hard + +"node-notifier@npm:^9.0.0": + version: 9.0.1 + resolution: "node-notifier@npm:9.0.1" + dependencies: + growly: "npm:^1.3.0" + is-wsl: "npm:^2.2.0" + semver: "npm:^7.3.2" + shellwords: "npm:^0.1.1" + uuid: "npm:^8.3.0" + which: "npm:^2.0.2" + checksum: 10c0/216bae952332d6549782d9b0003a4bcf53c9a8d93fd29414a2b4f14b828ad00e397bae2f4757c716c78bad723842af4597a4cb93d15ed8a13593c2bbb94b97f2 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.2": + version: 2.0.2 + resolution: "node-releases@npm:2.0.2" + checksum: 10c0/d4f0f090670c02c3537b38c43ff39216be0addd75908cd7027bfff30a3ce8ac9b1db0c802c60756d1e79c33b8154dd0c9f2e5bbfb0deaaf39563299d52458ae9 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 10c0/95d948f9bdd2cfde91aa786d1816ae40f8262946e13700bf6628105994fe0ff361662c20af3961161c38a119dc977adeb41fc0b41b1745eb77edaaf9cb22db23 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + +"nth-check@npm:^2.0.1": + version: 2.0.1 + resolution: "nth-check@npm:2.0.1" + dependencies: + boolbase: "npm:^1.0.0" + checksum: 10c0/ff003b22f1119b2f3a67820b4f11c7e512a612ae4a1cf2591461904e6c443c391477b14910b4778db844ab19b95567b6d01d3337f691156c0f40649c43ca2229 + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-is@npm:^1.0.1": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.1.3" + checksum: 10c0/8c263fb03fc28f1ffb54b44b9147235c5e233dc1ca23768e7d2569740b5d860154d7cc29a30220fe28ed6d8008e2422aefdebfe987c103e1c5d190cf02d9d886 + languageName: node + linkType: hard + +"object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.0": + version: 4.1.2 + resolution: "object.assign@npm:4.1.2" + dependencies: + call-bind: "npm:^1.0.0" + define-properties: "npm:^1.1.3" + has-symbols: "npm:^1.0.1" + object-keys: "npm:^1.1.1" + checksum: 10c0/ee0e796fad8952f05644d11632f046dc4b424f9a41d3816e11a612163b12a873c800456be9acdaec6221b72590ab5267e5fe4bf4cf1c67f88b05f82f133ac829 + languageName: node + linkType: hard + +"obuf@npm:^1.0.0, obuf@npm:^1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 10c0/520aaac7ea701618eacf000fc96ae458e20e13b0569845800fc582f81b386731ab22d55354b4915d58171db00e79cfcd09c1638c02f89577ef092b38c65b7d81 + languageName: node + linkType: hard + +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/c904f9e518b11941eb60279a3cbfaf1289bd0001f600a950255b1dede9fe3df8cd74f38483550b3bb9485165166acb5db500c3b4c4337aec2815c88c96fcc2ea + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"open@npm:^8.0.9": + version: 8.4.0 + resolution: "open@npm:8.4.0" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: 10c0/585596580226cbeb7262f36b5acc7eed05211dc26980020a2527f829336b8b07fd79cdc4240f4d995b5615f635e0a59ebb0261c4419fef91edd5d4604c463f18 + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: "npm:^2.0.0" + checksum: 10c0/7b7f06f718f19e989ce6280ed4396fb3c34dabdee0df948376483032f9d5ec22fdf7077ec942143a75827bb85b11da72016497fc10dac1106c837ed593969ee8 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"p-retry@npm:^4.5.0": + version: 4.6.1 + resolution: "p-retry@npm:4.6.1" + dependencies: + "@types/retry": "npm:^0.12.0" + retry: "npm:^0.13.1" + checksum: 10c0/0d2d7c29409181001d39a8088070009dc97fbe86d6a2a5d8dcb13be8a20e8f5bb056d06592050d6f45ebd088acb98abf4375b681040de2e11561cb0df886f94f + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-is-inside@npm:^1.0.2": + version: 1.0.2 + resolution: "path-is-inside@npm:1.0.2" + checksum: 10c0/7fdd4b41672c70461cce734fc222b33e7b447fa489c7c4377c95e7e6852d83d69741f307d88ec0cc3b385b41cb4accc6efac3c7c511cd18512e95424f5fa980c + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 10c0/50a1ddb1af41a9e68bd67ca8e331a705899d16fb720a1ea3a41e310480948387daf603abb14d7b0826c58f10146d49050a1291ba6a82b78a382d1c02c0b8f905 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: 10c0/20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pify@npm:^2.0.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf + languageName: node + linkType: hard + +"pinkie-promise@npm:^2.0.0": + version: 2.0.1 + resolution: "pinkie-promise@npm:2.0.1" + dependencies: + pinkie: "npm:^2.0.0" + checksum: 10c0/11b5e5ce2b090c573f8fad7b517cbca1bb9a247587306f05ae71aef6f9b2cd2b923c304aa9663c2409cfde27b367286179f1379bc4ec18a3fbf2bb0d473b160a + languageName: node + linkType: hard + +"pinkie@npm:^2.0.0": + version: 2.0.4 + resolution: "pinkie@npm:2.0.4" + checksum: 10c0/25228b08b5597da42dc384221aa0ce56ee0fbf32965db12ba838e2a9ca0193c2f0609c45551ee077ccd2060bf109137fdb185b00c6d7e0ed7e35006d20fdcbc6 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"pkg-up@npm:^3.1.0": + version: 3.1.0 + resolution: "pkg-up@npm:3.1.0" + dependencies: + find-up: "npm:^3.0.0" + checksum: 10c0/ecb60e1f8e1f611c0bdf1a0b6a474d6dfb51185567dc6f29cdef37c8d480ecba5362e006606bb290519bbb6f49526c403fabea93c3090c20368d98bb90c999ab + languageName: node + linkType: hard + +"portfinder@npm:^1.0.28": + version: 1.0.28 + resolution: "portfinder@npm:1.0.28" + dependencies: + async: "npm:^2.6.2" + debug: "npm:^3.1.1" + mkdirp: "npm:^0.5.5" + checksum: 10c0/fefd3d65a6464b498e0e9b4a4b82f29489441bb1892a3350403cfdf6e591e583d9e75bac1c6ae8ca2cdf1a942ae18890831a0a855bb1bb977678acdf9e5a560f + languageName: node + linkType: hard + +"postcss-calc@npm:^8.2.3": + version: 8.2.4 + resolution: "postcss-calc@npm:8.2.4" + dependencies: + postcss-selector-parser: "npm:^6.0.9" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.2 + checksum: 10c0/8518a429488c3283ff1560c83a511f6f772329bc61d88875eb7c83e13a8683b7ccbdccaa9946024cf1553da3eacd2f40fcbcebf1095f7fdeb432bf86bc6ba6ba + languageName: node + linkType: hard + +"postcss-colormin@npm:^5.3.0": + version: 5.3.0 + resolution: "postcss-colormin@npm:5.3.0" + dependencies: + browserslist: "npm:^4.16.6" + caniuse-api: "npm:^3.0.0" + colord: "npm:^2.9.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/ac03b47b1d76f46fa3621d9b066217e92105869af6e57245b85b304d1e866ded2818c8dc92891b84e9099f4f31f3555a5344d000beedcb2aa766faf0d52844b6 + languageName: node + linkType: hard + +"postcss-convert-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-convert-values@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/1934ff229accd5587413bc75ff6692238042b927d538b5d1923849908847b81aff1d7b92b38af82bcae538bc8e1c5cf2fb6ad6d44913f08260c52bbe97de62a0 + languageName: node + linkType: hard + +"postcss-discard-comments@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-comments@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/44e267e13342115a82ecf4f28565cd1bd35fef629fc85f681a997076d448d24a92acc0dd375ea715202fc1ea43169a6c60694173776821f8393028624a57f6e2 + languageName: node + linkType: hard + +"postcss-discard-duplicates@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-duplicates@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/3d3a49536c56097c06b4f085412e0cda0854fac1c559563ccb922d9fab6305ff13058cd6fee422aa66c1d7e466add4e7672d7ae2ff551a4af6f1a8d2142d471f + languageName: node + linkType: hard + +"postcss-discard-empty@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-empty@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/0d47321d3aeff2ed033373f9311dfd3375c2c0db07aa817426a7510128c6888ebe51e6e2dbd8ea97c1f7e8d6c8651c8078dd101d06245a7e202ad8f90e329567 + languageName: node + linkType: hard + +"postcss-discard-overridden@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-overridden@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/7d3fc0b0d90599606fc083327a7c24390f90270a94a0119af4b74815d518948581579281f63b9bfa62e2644edf59bc9e725dc04ea5ba213f697804f3fb4dd8dc + languageName: node + linkType: hard + +"postcss-merge-longhand@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-merge-longhand@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + stylehacks: "npm:^5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/fdd57db0e7e48ac63ae93e2ea478896ecf59382629d2ba6da914a2706dd2761cd93aa61e571d29dcaf3e42d0ce8ec889c8d974bec6ae87e641c54de7b2b5ee7b + languageName: node + linkType: hard + +"postcss-merge-rules@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-merge-rules@npm:5.1.0" + dependencies: + browserslist: "npm:^4.16.6" + caniuse-api: "npm:^3.0.0" + cssnano-utils: "npm:^3.1.0" + postcss-selector-parser: "npm:^6.0.5" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/df0e012335cab2f7a93f3a703cf586d6e088d9472954a5f18e9a342710966c6e8656cc690c21ad6decfae08c5282a48eb5ab75029b1f28d5fd66f61e02265275 + languageName: node + linkType: hard + +"postcss-minify-font-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-font-values@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/7aa4f93a853b657f79a8b28d0e924cafce3720086d9da02ce04b8b2f8de42e18ce32c8f7f1078390fb5ec82468e2d8e771614387cea3563f05fd9fa1798e1c59 + languageName: node + linkType: hard + +"postcss-minify-gradients@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-gradients@npm:5.1.0" + dependencies: + colord: "npm:^2.9.1" + cssnano-utils: "npm:^3.1.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/0829e08b202031825449d644a3fa497dfe142353c53d60fb7c1a1f9dea0933b44b5f680fd46e194eaac14f273bacf49dd736fcce380942df817d0f94dc917bd6 + languageName: node + linkType: hard + +"postcss-minify-params@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-params@npm:5.1.0" + dependencies: + browserslist: "npm:^4.16.6" + cssnano-utils: "npm:^3.1.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/6c27848a58dc9f8a48dba87a76ca6d0f9514cdb09775858a6eed0d1a509c83b09c6cc4b482d66ec399d540654366a0aa66792f6becaa1529ecc18081ffa54003 + languageName: node + linkType: hard + +"postcss-minify-selectors@npm:^5.2.0": + version: 5.2.0 + resolution: "postcss-minify-selectors@npm:5.2.0" + dependencies: + postcss-selector-parser: "npm:^6.0.5" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/f684d8c461fd64fe33db87ef5cc810b3ac8e5e68f0e479b27ae2304624e2d2933e84d7def777d2179c562f5e7a7ecc0003d3284f7d89d2ee06b15b1539da6e6d + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-extract-imports@npm:3.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/f8879d66d8162fb7a3fcd916d37574006c584ea509107b1cfb798a5e090175ef9470f601e46f0a305070d8ff2500e07489a5c1ac381c29a1dc1120e827ca7943 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-local-by-default@npm:4.0.0" + dependencies: + icss-utils: "npm:^5.0.0" + postcss-selector-parser: "npm:^6.0.2" + postcss-value-parser: "npm:^4.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/8ee9c0d9918fd838854d434731371874b25c412dde135df981cc28d37d0660496389b0f8653dbcdbb6ee81f2bec90cb5b14668f6208f6f517400ac064e234c5a + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-scope@npm:3.0.0" + dependencies: + postcss-selector-parser: "npm:^6.0.4" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/60af503910363689568c2c3701cb019a61b58b3d739391145185eec211bea5d50ccb6ecbe6955b39d856088072fd50ea002e40a52b50e33b181ff5c41da0308a + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: "npm:^5.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/dd18d7631b5619fb9921b198c86847a2a075f32e0c162e0428d2647685e318c487a2566cc8cc669fc2077ef38115cde7a068e321f46fb38be3ad49646b639dbc + languageName: node + linkType: hard + +"postcss-normalize-charset@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-charset@npm:5.1.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/aa481584d4db48e0dbf820f992fa235e6c41ff3d4701a62d349f33c1ad4c5c7dcdea3096db9ff2a5c9497e9bed2186d594ccdb1b42d57b30f58affba5829ad9c + languageName: node + linkType: hard + +"postcss-normalize-display-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-display-values@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/70b164fda885c097c02c98914fba4cd19b2382ff5f85f77e5315d88a1d477b4803f0f271d95a38e044e2a6c3b781c5c9bfb83222fc577199f2aeb0b8f4254e2f + languageName: node + linkType: hard + +"postcss-normalize-positions@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-positions@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/c17c28c3b6562672fe99058f138210e4c91145eec0f76bda3685fd46072710f3da7090588d6d6007e6ab40db1e7b402b54fe0ad664c53b50951e3015a347b141 + languageName: node + linkType: hard + +"postcss-normalize-repeat-style@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-repeat-style@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/9cfb63dc6c382b7bf27b7032fe14ec92a84bba37a25d2b819f9bea734078381fe659213a3f676970365e51ba3f05fe40e39925463dbf3d2b92f1bc32f3aebe65 + languageName: node + linkType: hard + +"postcss-normalize-string@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-string@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/a5e9979998f478d385ddff865bdd8a4870af69fa8c91c9398572a299ff39b39a6bda922a48fab0d2cddc639f30159c39baaed880ed7d13cd27cc64eaa9400b3b + languageName: node + linkType: hard + +"postcss-normalize-timing-functions@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-timing-functions@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/afb34d8e313004ae8cd92910bf1a6eb9885f29ae803cd9032b6dfe7b67a9ad93f800976f10e55170b2b08fe9484825e9272629971186812c2764c73843268237 + languageName: node + linkType: hard + +"postcss-normalize-unicode@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-unicode@npm:5.1.0" + dependencies: + browserslist: "npm:^4.16.6" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/422d05542b186bb731ed220d10e435422998732ed0638cca3382052e876c6bec4809cdbd8854db7f2f6e7006bf9eda8349677d1691a0eb948fb60a1f2011f64e + languageName: node + linkType: hard + +"postcss-normalize-url@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-url@npm:5.1.0" + dependencies: + normalize-url: "npm:^6.0.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/a016cefd1ef80f74ef9dbed50593d3b533101e93aaadfc292896fddd8d6c3eb732a9fc5cb2e0d27f79c1f60f0fdfc40b045a494b514451e9610c6acf9392eb98 + languageName: node + linkType: hard + +"postcss-normalize-whitespace@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-whitespace@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/f087f215b7e9eff53c186a55f6a8ffc0df5ce6d76e2837931d078b941324781a178ca50597fb6b8e990a1e11e16757ad1898521d45dc1879da556abba1ba8abc + languageName: node + linkType: hard + +"postcss-ordered-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-ordered-values@npm:5.1.0" + dependencies: + cssnano-utils: "npm:^3.1.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/540c7cac89bbfc12a5426e118b414203bcba7980ed156e4d0b5fb8a4bae604ef00f2765eff80f7614abab18e9da6778bb5623c2f39f1b7c08136a3cd29c71cfc + languageName: node + linkType: hard + +"postcss-reduce-initial@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-reduce-initial@npm:5.1.0" + dependencies: + browserslist: "npm:^4.16.6" + caniuse-api: "npm:^3.0.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/c97abb0747798eb924a621b9ccb27c34353570624c3bcd2444413e410f9e80123dd58644ccf30c4a14378693356f3923e5f4abaf090c3605a486e296a05ae66a + languageName: node + linkType: hard + +"postcss-reduce-transforms@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-reduce-transforms@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/caefaeb78652ad8701b94e91500e38551255e4899fa298a7357519a36cbeebae088eab4535e00f17675a1230f448c4a7077045639d496da4614a46bc41df4add + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": + version: 6.0.9 + resolution: "postcss-selector-parser@npm:6.0.9" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/07acc7b6565561b5ed65ed35fa27565e09c92b80278d933bf89c8cdcf59473d128d75320c720b184e80a617b122bb64957e7c60f99691dceabd587e2591f784e + languageName: node + linkType: hard + +"postcss-svgo@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-svgo@npm:5.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + svgo: "npm:^2.7.0" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/309634a587e38fef244648bc9cd1817e12144868d24f1173d87b1edc14a4a7fca614962b2cb9d93f4801e11bd8d676083986ad40ebab4438cb84731ce1571994 + languageName: node + linkType: hard + +"postcss-unique-selectors@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-unique-selectors@npm:5.1.0" + dependencies: + postcss-selector-parser: "npm:^6.0.5" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/7246f542a088f9720492de674f11c169c37e90afc8d051d34ca2b76ce0c4d30d749b34338e5b5a40ddd8df94b24c09a4ef5b75476fab047a18de6f923cfb7398 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 + languageName: node + linkType: hard + +"postcss@npm:7.0.36": + version: 7.0.36 + resolution: "postcss@npm:7.0.36" + dependencies: + chalk: "npm:^2.4.2" + source-map: "npm:^0.6.1" + supports-color: "npm:^6.1.0" + checksum: 10c0/8e5dcaf9adf875a3ad9444227391979043958fc08f5a848a58bb716e41d1f7a1618cc3f884a7a19328d7ae341bbaa4f5a75063195dd43da168659688dffecbe1 + languageName: node + linkType: hard + +"postcss@npm:^8.2.15, postcss@npm:^8.2.9": + version: 8.4.7 + resolution: "postcss@npm:8.4.7" + dependencies: + nanoid: "npm:^3.3.1" + picocolors: "npm:^1.0.0" + source-map-js: "npm:^1.0.2" + checksum: 10c0/46d7d85f2c63f52ce28f6cca47afb2d232b6ec7a0f3da401ce631ea46606874c26939cb152395b1d3bec683d62fc126941d3b3d163a8f27ddcda2f8938f8a179 + languageName: node + linkType: hard + +"pretty-error@npm:^3.0.3": + version: 3.0.4 + resolution: "pretty-error@npm:3.0.4" + dependencies: + lodash: "npm:^4.17.20" + renderkid: "npm:^2.0.6" + checksum: 10c0/220292b66a32a595f5a046201685d4b72e3e368a0c1ed1ce59e4f7319cc49db3c9f95b3ceaa1eb1ed51ea990f70595cb1fba15a26b1a3530943c77ee80c3eec0 + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: "npm:0.2.0" + ipaddr.js: "npm:1.9.1" + checksum: 10c0/c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.1.1 + resolution: "punycode@npm:2.1.1" + checksum: 10c0/83815ca9b9177f055771f31980cbec7ffaef10257d50a95ab99b4a30f0404846e85fa6887ee1bbc0aaddb7bad6d96e2fa150a016051ff0f6b92be4ad613ddca8 + languageName: node + linkType: hard + +"qs@npm:6.9.7": + version: 6.9.7 + resolution: "qs@npm:6.9.7" + checksum: 10c0/d0274b3c2daa9e7b350fb695fc4b5f7a1e65e266d5798a07936975f0848bdca6d7ad41cded19ad4af6a6253b97e43b497e988e728eab7a286f277b6dddfbade4 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 + languageName: node + linkType: hard + +"raw-body@npm:2.4.3": + version: 2.4.3 + resolution: "raw-body@npm:2.4.3" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:1.8.1" + iconv-lite: "npm:0.4.24" + unpipe: "npm:1.0.0" + checksum: 10c0/e25ac143c0638dac75b7228de378f60d9438dd1a9b83ffcc6935d5a1e2d599ad3cdc9d24e80eb8cf07a7ec4f5d57a692d243abdcb2449cf11605ef9e5fe6af06 + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.1": + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10c0/1708755e6cf9daff6ff60fa5b4575636472289c5b95d38058a91f94732b8d024a940a0d4d955639195ce42c22cab16973ee8fea8deedd24b5fec3dd596465f86 + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.6": + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/937bedd29ac8a68331666291922bea892fa2be1a33269e582de9f844a2002f146cf831e39cd49fe6a378d3f0c27358f259ed0e20d20f0bdc6a3f8fc21fce42dc + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"rechoir@npm:^0.7.0": + version: 0.7.1 + resolution: "rechoir@npm:0.7.1" + dependencies: + resolve: "npm:^1.9.0" + checksum: 10c0/22c565f89845f8b9a0574d8bbc157fe489612d2882d036b5520640d4395dc837a997225de535513a847c5fcc47b7e0530b8c84e0ca51fa17dff44a83f41b2568 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.0.1": + version: 10.0.1 + resolution: "regenerate-unicode-properties@npm:10.0.1" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/2ac39799588f81003b0b406611067c738ae63f876e8e66b1299b4d1c658ed435bf20007e08f45f1f49a7871510fc2d12cace283724cd4c6907a19adf6d5850a5 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.2, regenerator-runtime@npm:^0.13.4": + version: 0.13.9 + resolution: "regenerator-runtime@npm:0.13.9" + checksum: 10c0/b0f26612204f061a84064d2f3361629eae09993939112b9ffc3680bb369ecd125764d6654eace9ef11b36b44282ee52b988dda946ea52d372e7599a30eea73ee + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.14.2": + version: 0.14.5 + resolution: "regenerator-transform@npm:0.14.5" + dependencies: + "@babel/runtime": "npm:^7.8.4" + checksum: 10c0/d3005b61a4fca820cd5091af689e94e57d5d5d7581368bad9c1881edf6987a2a5a7f0a9e177cd23f1d8ab7eda00c749a1eb5d4c73cabb27d8711c0e83c6c29d9 + languageName: node + linkType: hard + +"regex-parser@npm:^2.2.11": + version: 2.2.11 + resolution: "regex-parser@npm:2.2.11" + checksum: 10c0/6572acbd46b5444215a73cf164f3c6fdbd73b8a2cde6a31a97307e514d20f5cbb8609f9e4994a7744207f2d1bf9e6fca4bbc0c9854f2b3da77ae0063efdc3f98 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.2.0": + version: 1.4.1 + resolution: "regexp.prototype.flags@npm:1.4.1" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.1.3" + checksum: 10c0/9f9ee0b5ad7a831290e55ff55581e8ad8d22eac64879821740f42be4d129f6c3f33ab831c6dd1134a12c2b06a8cc39bcab26a071a48ab1834023403be4921b24 + languageName: node + linkType: hard + +"regexpu-core@npm:^5.0.1": + version: 5.0.1 + resolution: "regexpu-core@npm:5.0.1" + dependencies: + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.0.1" + regjsgen: "npm:^0.6.0" + regjsparser: "npm:^0.8.2" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.0.0" + checksum: 10c0/a4ea0af1391e3e02301de37bee244400d4efabe14125c3540e7c156bf803748154983b2cfb6477cfcab41db5c0909d6bda077fd73523bc89d4694db2359aabc2 + languageName: node + linkType: hard + +"regjsgen@npm:^0.6.0": + version: 0.6.0 + resolution: "regjsgen@npm:0.6.0" + checksum: 10c0/e06ef822a4ab9a2faddbdc7f58c294939f9a22c02ca56b404f07f1f9c6bd51dc345ab8b5e2d3267f274a1f77ba4c56d9741e1c53b494bf12da6842c70fe35edc + languageName: node + linkType: hard + +"regjsparser@npm:^0.8.2": + version: 0.8.4 + resolution: "regjsparser@npm:0.8.4" + dependencies: + jsesc: "npm:~0.5.0" + bin: + regjsparser: bin/parser + checksum: 10c0/d7658e0b59f16f55f2a50d8d2f731165e85d7b22b7c7a08e70b080b0e49b893b0e282caff4b00b35336aaa66851a2faa1b0cb53094e71da1dcefd837a3b202ec + languageName: node + linkType: hard + +"renderkid@npm:^2.0.6": + version: 2.0.7 + resolution: "renderkid@npm:2.0.7" + dependencies: + css-select: "npm:^4.1.3" + dom-converter: "npm:^0.2.0" + htmlparser2: "npm:^6.1.0" + lodash: "npm:^4.17.21" + strip-ansi: "npm:^3.0.1" + checksum: 10c0/05e19c8861e0f9f3d379a175fbb52e3be3c957022acf52d19d36b23f99bb401b6bc3c493d43213f4d76efb08cb2f13e66df38c9a487249cb8dad1f6170da6a14 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: 10c0/b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-url-loader@npm:^3.1.2": + version: 3.1.4 + resolution: "resolve-url-loader@npm:3.1.4" + dependencies: + adjust-sourcemap-loader: "npm:3.0.0" + camelcase: "npm:5.3.1" + compose-function: "npm:3.0.3" + convert-source-map: "npm:1.7.0" + es6-iterator: "npm:2.0.3" + loader-utils: "npm:1.2.3" + postcss: "npm:7.0.36" + rework: "npm:1.0.1" + rework-visit: "npm:1.0.0" + source-map: "npm:0.6.1" + checksum: 10c0/b82a9153a24c823b266fa9e89fac03a3044fb062e846035b65d3d26cd91e57ee9a483cc95dbb09a143e73808086e8247cae89eee3b4f1b7dd67bd3d30406eade + languageName: node + linkType: hard + +"resolve-url@npm:^0.2.1": + version: 0.2.1 + resolution: "resolve-url@npm:0.2.1" + checksum: 10c0/c285182cfcddea13a12af92129ce0569be27fb0074ffaefbd3ba3da2eac2acecdfc996d435c4982a9fa2b4708640e52837c9153a5ab9255886a00b0b9e8d2a54 + languageName: node + linkType: hard + +"resolve@npm:^1.14.2, resolve@npm:^1.9.0": + version: 1.22.0 + resolution: "resolve@npm:1.22.0" + dependencies: + is-core-module: "npm:^2.8.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/efe07a7cd69015a95a5f4e6cc3d372354b93d67a70410ec686413b2054dfa0d5ef16ff52c057a83634debb17f278b99db6dbc60367a4475ae01dda29c6eaa6e4 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.9.0#optional!builtin": + version: 1.22.0 + resolution: "resolve@patch:resolve@npm%3A1.22.0#optional!builtin::version=1.22.0&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.8.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/ef8061e81f40c39070748e8e263c8767d8fcc7c34e9ee85211b29fbc2aedb1ae7cda7d735c2cdbe9367060e9f85ec11c2694e370c121c6bcbb472a7bd0b19555 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 10c0/9ae822ee19db2163497e074ea919780b1efa00431d197c7afdb950e42bf109196774b92a49fc9821f0b8b328a98eea6017410bfc5e8a0fc19c85c6d11adb3772 + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rework-visit@npm:1.0.0": + version: 1.0.0 + resolution: "rework-visit@npm:1.0.0" + checksum: 10c0/bd0f8c8cdc6e2bf961227f1ed763e38d27f3fc6a4e246860930486eb2526fa7b71e68c345df90858b346f03f59c7967dce2c199adee0f30d803cf61c67f4649f + languageName: node + linkType: hard + +"rework@npm:1.0.1": + version: 1.0.1 + resolution: "rework@npm:1.0.1" + dependencies: + convert-source-map: "npm:^0.3.3" + css: "npm:^2.0.0" + checksum: 10c0/6007bc68a5ab2a22035fd93b1eb27cb0f247ff99a86e8a9e4a02ff9d474bf19ab3f405973878a8501a990e74215f950e7f4165b5f53b9d4b2a0424364848132d + languageName: node + linkType: hard + +"rimraf@npm:^2.6.3": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"root-workspace-0b6124@workspace:.": + version: 0.0.0-use.local + resolution: "root-workspace-0b6124@workspace:." + dependencies: + "@hotwired/stimulus": "npm:^3.0.0" + "@symfony/stimulus-bridge": "npm:^3.0.0" + "@symfony/webpack-encore": "npm:^1.7.0" + core-js: "npm:^3.0.0" + regenerator-runtime: "npm:^0.13.2" + sass: "npm:^1.49.9" + sass-loader: "npm:^12.6.0" + webpack-notifier: "npm:^1.6.0" + languageName: unknown + linkType: soft + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"sass-loader@npm:^12.6.0": + version: 12.6.0 + resolution: "sass-loader@npm:12.6.0" + dependencies: + klona: "npm:^2.0.4" + neo-async: "npm:^2.6.2" + peerDependencies: + fibers: ">= 3.1.0" + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: "*" + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + checksum: 10c0/e1ef655f3898cc4c45f02b3c627f8baf998139993a9a79c524153a80814282bfe20d8d8d703b8cf1d05457c1930940b65e2156d11285ed0861f9a1016f993e53 + languageName: node + linkType: hard + +"sass@npm:^1.49.9": + version: 1.49.9 + resolution: "sass@npm:1.49.9" + dependencies: + chokidar: "npm:>=3.0.0 <4.0.0" + immutable: "npm:^4.0.0" + source-map-js: "npm:>=0.6.2 <2.0.0" + bin: + sass: sass.js + checksum: 10c0/d9e923cb34e54096d6a89f9a4a09231e24cf1ee224089fefa0c302278384a4a4a6a962dae65cc823e1d7a0a35553a212ab37869cbb1b88944481a9d877b8cf47 + languageName: node + linkType: hard + +"schema-utils@npm:^2.6.5": + version: 2.7.1 + resolution: "schema-utils@npm:2.7.1" + dependencies: + "@types/json-schema": "npm:^7.0.5" + ajv: "npm:^6.12.4" + ajv-keywords: "npm:^3.5.2" + checksum: 10c0/f484f34464edd8758712d5d3ba25a306e367dac988aecaf4ce112e99baae73f33a807b5cf869240bb6648c80720b36af2d7d72be3a27faa49a2d4fc63fa3f85f + languageName: node + linkType: hard + +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": + version: 3.1.1 + resolution: "schema-utils@npm:3.1.1" + dependencies: + "@types/json-schema": "npm:^7.0.8" + ajv: "npm:^6.12.5" + ajv-keywords: "npm:^3.5.2" + checksum: 10c0/55a8da802a5f8f0ce6f68b6a139f3261cb423bd23795766da866a0f5738fc40303370fbe0c3eeba60b2a91c569ad7ce5318fea455f8fe866098c5a3a6b9050b0 + languageName: node + linkType: hard + +"schema-utils@npm:^4.0.0": + version: 4.0.0 + resolution: "schema-utils@npm:4.0.0" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.8.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.0.0" + checksum: 10c0/d76f1b0724fb74fa9da19d4f98ebe89c2703d8d28df9dc44d66ab9a9cbca869b434181a36a2bc00ec53980f27e8fabe143759bdc8754692bbf7ef614fc6e9da4 + languageName: node + linkType: hard + +"select-hose@npm:^2.0.0": + version: 2.0.0 + resolution: "select-hose@npm:2.0.0" + checksum: 10c0/01cc52edd29feddaf379efb4328aededa633f0ac43c64b11a8abd075ff34f05b0d280882c4fbcbdf1a0658202c9cd2ea8d5985174dcf9a2dac7e3a4996fa9b67 + languageName: node + linkType: hard + +"selfsigned@npm:^2.0.0": + version: 2.0.0 + resolution: "selfsigned@npm:2.0.0" + dependencies: + node-forge: "npm:^1.2.0" + checksum: 10c0/159e3a18e107f587c5f29ec908458dc315b45f6aada702645d7cb0f59865086443f898c96cc96aab6d57f62e948ef0cd0c131971fbde43777ed52fd154121d3d + languageName: node + linkType: hard + +"semver@npm:7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/7fd341680a967a0abfd66f3a7d36ba44e52ff5d3e799e9a6cdb01a68160b64ef09be82b4af05459effeecdd836f002c2462555d2821cd890dfdfe36a0d9f56a5 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 10c0/1f4959e15bcfbaf727e964a4920f9260141bb8805b399793160da4e7de128e42a7d1f79c1b7d5cd21a6073fba0d55feb9966f5fef3e5ccb8e1d7ead3d7527458 + languageName: node + linkType: hard + +"semver@npm:^7.3.2, semver@npm:^7.3.5": + version: 7.3.5 + resolution: "semver@npm:7.3.5" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/d450455b2601396dbc7d9f058a6709b1c0b99d74a911f9436c77887600ffcdb5f63d5adffa0c3b8f0092937d8a41cc61c6437bcba375ef4151cb1335ebe4f1f9 + languageName: node + linkType: hard + +"send@npm:0.17.2": + version: 0.17.2 + resolution: "send@npm:0.17.2" + dependencies: + debug: "npm:2.6.9" + depd: "npm:~1.1.2" + destroy: "npm:~1.0.4" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:1.8.1" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:~2.3.0" + range-parser: "npm:~1.2.1" + statuses: "npm:~1.5.0" + checksum: 10c0/0f92f0fcd298fcdd759dc7d501bfab79635f549ec3b885e26e4a62b3094420b355d73f2d59749b6004019a4c91db983fb1715378aa622f4bf4e21b0b79853e5c + languageName: node + linkType: hard + +"serialize-javascript@npm:^5.0.1": + version: 5.0.1 + resolution: "serialize-javascript@npm:5.0.1" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 10c0/646bd92a8298d764d38316f3006bce0b0def6d0e254791396ac34403847654d9346b0b6ed7865efd799d93d4c47d900e08a8fa7a6f7f8d2dbaebab5444c3b431 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.0": + version: 6.0.0 + resolution: "serialize-javascript@npm:6.0.0" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 10c0/73104922ef0a919064346eea21caab99de1a019a1f5fb54a7daa7fcabc39e83b387a2a363e52a889598c3b1bcf507c4b2a7b26df76e991a310657af20eea2e7c + languageName: node + linkType: hard + +"serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "serve-index@npm:1.9.1" + dependencies: + accepts: "npm:~1.3.4" + batch: "npm:0.6.1" + debug: "npm:2.6.9" + escape-html: "npm:~1.0.3" + http-errors: "npm:~1.6.2" + mime-types: "npm:~2.1.17" + parseurl: "npm:~1.3.2" + checksum: 10c0/a666471a24196f74371edf2c3c7bcdd82adbac52f600804508754b5296c3567588bf694258b19e0cb23a567acfa20d9721bfdaed3286007b81f9741ada8a3a9c + languageName: node + linkType: hard + +"serve-static@npm:1.14.2": + version: 1.14.2 + resolution: "serve-static@npm:1.14.2" + dependencies: + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.17.2" + checksum: 10c0/4583f8bec8daa74df58fd7415e6f58039223becbb6c7ac0e6386c4fbe5c825195df92c73f999a1404487ae1d1bd1d20dd7ae11bc19f8788225770d1960bbeaea + languageName: node + linkType: hard + +"setprototypeof@npm:1.1.0": + version: 1.1.0 + resolution: "setprototypeof@npm:1.1.0" + checksum: 10c0/a77b20876689c6a89c3b42f0c3596a9cae02f90fc902570cbd97198e9e8240382086c9303ad043e88cee10f61eae19f1004e51d885395a1e9bf49f9ebed12872 + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"shellwords@npm:^0.1.1": + version: 0.1.1 + resolution: "shellwords@npm:0.1.1" + checksum: 10c0/7d66b28927e0b524b71b2e185651fcd88a70473a077dd230fbf86188380e948ffb36cea00832d78fc13c93cd15f6f52286fb05f2746b7580623ca1ec619eb004 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.3": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"sockjs@npm:^0.3.21": + version: 0.3.24 + resolution: "sockjs@npm:0.3.24" + dependencies: + faye-websocket: "npm:^0.11.3" + uuid: "npm:^8.3.2" + websocket-driver: "npm:^0.7.4" + checksum: 10c0/aa102c7d921bf430215754511c81ea7248f2dcdf268fbdb18e4d8183493a86b8793b164c636c52f474a886f747447c962741df2373888823271efdb9d2594f33 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.4 + resolution: "socks@npm:2.8.4" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/00c3271e233ccf1fb83a3dd2060b94cc37817e0f797a93c560b9a7a86c4a0ec2961fb31263bdd24a3c28945e24868b5f063cd98744171d9e942c513454b50ae5 + languageName: node + linkType: hard + +"source-list-map@npm:^2.0.0": + version: 2.0.1 + resolution: "source-list-map@npm:2.0.1" + checksum: 10c0/2e5e421b185dcd857f46c3c70e2e711a65d717b78c5f795e2e248c9d67757882ea989b80ebc08cf164eeeda5f4be8aa95d3b990225070b2daaaf3257c5958149 + languageName: node + linkType: hard + +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: 10c0/32f2dfd1e9b7168f9a9715eb1b4e21905850f3b50cf02cf476e47e4eebe8e6b762b63a64357896aa29b37e24922b4282df0f492e0d2ace572b43d15525976ff8 + languageName: node + linkType: hard + +"source-map-resolve@npm:^0.5.2": + version: 0.5.3 + resolution: "source-map-resolve@npm:0.5.3" + dependencies: + atob: "npm:^2.1.2" + decode-uri-component: "npm:^0.2.0" + resolve-url: "npm:^0.2.1" + source-map-url: "npm:^0.4.0" + urix: "npm:^0.1.0" + checksum: 10c0/410acbe93882e058858d4c1297be61da3e1533f95f25b95903edddc1fb719654e705663644677542d1fb78a66390238fad1a57115fc958a0724cf9bb509caf57 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map-url@npm:^0.4.0": + version: 0.4.1 + resolution: "source-map-url@npm:0.4.1" + checksum: 10c0/f8af0678500d536c7f643e32094d6718a4070ab4ca2d2326532512cfbe2d5d25a45849b4b385879326f2d7523bb3b686d0360dd347a3cda09fd89a5c28d4bc58 + languageName: node + linkType: hard + +"source-map@npm:0.6.1, source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + +"source-map@npm:^0.7.3, source-map@npm:~0.7.2": + version: 0.7.3 + resolution: "source-map@npm:0.7.3" + checksum: 10c0/7d2ddb51f3d2451847692a9ac7808da2b2b3bf7aef92ece33128919040a7e74d9a5edfde7a781f035c974deff876afaf83f2e30484faffffb86484e7408f5d7c + languageName: node + linkType: hard + +"spdy-transport@npm:^3.0.0": + version: 3.0.0 + resolution: "spdy-transport@npm:3.0.0" + dependencies: + debug: "npm:^4.1.0" + detect-node: "npm:^2.0.4" + hpack.js: "npm:^2.1.6" + obuf: "npm:^1.1.2" + readable-stream: "npm:^3.0.6" + wbuf: "npm:^1.7.3" + checksum: 10c0/eaf7440fa90724fffc813c386d4a8a7427d967d6e46d7c51d8f8a533d1a6911b9823ea9218703debbae755337e85f110185d7a00ae22ec5c847077b908ce71bb + languageName: node + linkType: hard + +"spdy@npm:^4.0.2": + version: 4.0.2 + resolution: "spdy@npm:4.0.2" + dependencies: + debug: "npm:^4.1.0" + handle-thing: "npm:^2.0.0" + http-deceiver: "npm:^1.2.7" + select-hose: "npm:^2.0.0" + spdy-transport: "npm:^3.0.0" + checksum: 10c0/983509c0be9d06fd00bb9dff713c5b5d35d3ffd720db869acdd5ad7aa6fc0e02c2318b58f75328957d8ff772acdf1f7d19382b6047df342044ff3e2d6805ccdf + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + +"stable@npm:^0.1.8": + version: 0.1.8 + resolution: "stable@npm:0.1.8" + checksum: 10c0/df74b5883075076e78f8e365e4068ecd977af6c09da510cfc3148a303d4b87bc9aa8f7c48feb67ed4ef970b6140bd9eabba2129e28024aa88df5ea0114cba39d + languageName: node + linkType: hard + +"stackframe@npm:^1.1.1": + version: 1.2.1 + resolution: "stackframe@npm:1.2.1" + checksum: 10c0/b6b1a516c3e89a9f18dc3ae70178a0140046afb64a0c7f4c1caa87fb5d697828145bdbef13a01f7d76b497e3ce1007b5a4d16dfa95e8224f9aa35e8e727cfe20 + languageName: node + linkType: hard + +"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: 10c0/e433900956357b3efd79b1c547da4d291799ac836960c016d10a98f6a810b1b5c0dcc13b5a7aa609a58239b5190e1ea176ad9221c2157d2fd1c747393e6b2940 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "strip-ansi@npm:3.0.1" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.0": + version: 7.0.1 + resolution: "strip-ansi@npm:7.0.1" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a94805f54caefae6cf4870ee6acfe50cff69d90a37994bf02c096042d9939ee211e1568f34b9fa5efa03c7d7fea79cb3ac8a4e517ceb848284ae300da06ca7e9 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + +"style-loader@npm:^2.0.0": + version: 2.0.0 + resolution: "style-loader@npm:2.0.0" + dependencies: + loader-utils: "npm:^2.0.0" + schema-utils: "npm:^3.0.0" + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 10c0/6febd1809b4f67a722e4e366fa3b3f8e1083425f7214b7a8962cf53aa7cc9c522623fb55a5e64049e46d637bbbda3b29ebbe14ec9f7652b27345450fcef6ea80 + languageName: node + linkType: hard + +"stylehacks@npm:^5.1.0": + version: 5.1.0 + resolution: "stylehacks@npm:5.1.0" + dependencies: + browserslist: "npm:^4.16.6" + postcss-selector-parser: "npm:^6.0.4" + peerDependencies: + postcss: ^8.2.15 + checksum: 10c0/2c46413f9c21617f2537522ee89bd88416cf0dd1d4a7998da4445666cbd01364ec371ae326c2978df36ea020d1f161aa478feb70c7bb32e8085b0857e552c603 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^6.1.0": + version: 6.1.0 + resolution: "supports-color@npm:6.1.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/ebf2befe41b55932c6d77192b91775f1403c389440ce2dab6f72663cf32ee87a1d9dea3512131a18e45ccac91424a8873b266142828489d0206d65ee93d224b6 + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"svgo@npm:^2.7.0": + version: 2.8.0 + resolution: "svgo@npm:2.8.0" + dependencies: + "@trysound/sax": "npm:0.2.0" + commander: "npm:^7.2.0" + css-select: "npm:^4.1.3" + css-tree: "npm:^1.1.3" + csso: "npm:^4.2.0" + picocolors: "npm:^1.0.0" + stable: "npm:^0.1.8" + bin: + svgo: bin/svgo + checksum: 10c0/0741f5d5cad63111a90a0ce7a1a5a9013f6d293e871b75efe39addb57f29a263e45294e485a4d2ff9cc260a5d142c8b5937b2234b4ef05efdd2706fb2d360ecc + languageName: node + linkType: hard + +"sync-rpc@npm:^1.3.6": + version: 1.3.6 + resolution: "sync-rpc@npm:1.3.6" + dependencies: + get-port: "npm:^3.1.0" + checksum: 10c0/2abaa0e6482fe8b72e29af1f7d5f484fac5a8ea0132969bf370f59b044c4f2eb109f95b222cb06e037f89b42b374a2918e5f90aff5fb7cf3e146d8088c56f6db + languageName: node + linkType: hard + +"tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.1.1, terser-webpack-plugin@npm:^5.1.3": + version: 5.3.1 + resolution: "terser-webpack-plugin@npm:5.3.1" + dependencies: + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^3.1.1" + serialize-javascript: "npm:^6.0.0" + source-map: "npm:^0.6.1" + terser: "npm:^5.7.2" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/e23d849d40b1f062c839ba56b2c8af4837d8edf57fc8cbe2ebce7983476d20c687bdb201d38f1f001c3e40c800f7d7826397434ea36aab4f0fad671218902b6c + languageName: node + linkType: hard + +"terser@npm:^5.7.2": + version: 5.12.0 + resolution: "terser@npm:5.12.0" + dependencies: + acorn: "npm:^8.5.0" + commander: "npm:^2.20.0" + source-map: "npm:~0.7.2" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/9994e971a3691fe3c581577f81dbe78c674cbb0f6b81759ef43a1994be00ac1a520e145c7989cbbefadc449fe8225d5e00644eef95861d6d9ed6fae19077c7fb + languageName: node + linkType: hard + +"thunky@npm:^1.0.2": + version: 1.1.0 + resolution: "thunky@npm:1.1.0" + checksum: 10c0/369764f39de1ce1de2ba2fa922db4a3f92e9c7f33bcc9a713241bc1f4a5238b484c17e0d36d1d533c625efb00e9e82c3e45f80b47586945557b45abb890156d2 + languageName: node + linkType: hard + +"timsort@npm:^0.3.0": + version: 0.3.0 + resolution: "timsort@npm:0.3.0" + checksum: 10c0/571b2054a0db3cf80eb255f8609a1f798cae9176f9ec6e3fbd03d64186c015cc9e1e75b88ba38e1d71aebcc03a931352522c7387dcb90caeb148375c7bc106f4 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 + languageName: node + linkType: hard + +"tmp@npm:^0.2.1": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: "npm:^3.0.0" + checksum: 10c0/67607aa012059c9ce697bee820ee51bc0f39b29a8766def4f92d3f764d67c7cf9205d537d24e0cb1ce9685c40d4c628ead010910118ea18348666b5c46ed9123 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: "npm:0.3.0" + mime-types: "npm:~2.1.24" + checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d + languageName: node + linkType: hard + +"type@npm:^1.0.1": + version: 1.2.0 + resolution: "type@npm:1.2.0" + checksum: 10c0/444660849aaebef8cbb9bc43b28ec2068952064cfce6a646f88db97aaa2e2d6570c5629cd79238b71ba23aa3f75146a0b96e24e198210ee0089715a6f8889bf7 + languageName: node + linkType: hard + +"type@npm:^2.5.0": + version: 2.6.0 + resolution: "type@npm:2.6.0" + checksum: 10c0/d08063a1c3415140d0b6fd17ede55f373cdd6c5503776693ad5ead574a06404823374d62d6233e43bc30ec22f596b790cbb8661429bed75a75dab986b506ac60 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" + checksum: 10c0/0fe812641bcfa3ae433025178a64afb5d9afebc21a922dafa7cba971deebb5e4a37350423890750132a85c936c290fb988146d0b1bd86838ad4897f4fc5bd0de + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: "npm:^2.0.0" + unicode-property-aliases-ecmascript: "npm:^2.0.0" + checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.0.0" + checksum: 10c0/01de52b5ab875a695e0ff7b87671197e39dcca497ef3c11f1c04d958933352a91d56c280e3908a76a1a0468d37d0227e5450a7956073591ce157d52603b45953 + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.0.0" + checksum: 10c0/db7f7ae188ce1a59b133a2c97021aebe30acc18a55f41074d126dcce5ac9d789dbd3ce7947e391b23db27f969251037b6ae05871d036aaa6cc0a6510c429aa1c + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"urix@npm:^0.1.0": + version: 0.1.0 + resolution: "urix@npm:0.1.0" + checksum: 10c0/264f1b29360c33c0aec5fb9819d7e28f15d1a3b83175d2bcc9131efe8583f459f07364957ae3527f1478659ec5b2d0f1ad401dfb625f73e4d424b3ae35fc5fc0 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"utila@npm:~0.4": + version: 0.4.0 + resolution: "utila@npm:0.4.0" + checksum: 10c0/2791604e09ca4f77ae314df83e80d1805f867eb5c7e13e7413caee01273c278cf2c9a3670d8d25c889a877f7b149d892fe61b0181a81654b425e9622ab23d42e + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: 10c0/02ba649de1b7ca8854bfe20a82f1dfbdda3fb57a22ab4a8972a63a34553cf7aa51bc9081cf7e001b035b88186d23689d69e71b510e610a09a4c66f68aa95b672 + languageName: node + linkType: hard + +"uuid@npm:^8.3.0, uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + languageName: node + linkType: hard + +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f + languageName: node + linkType: hard + +"watchpack@npm:^2.3.1": + version: 2.3.1 + resolution: "watchpack@npm:2.3.1" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/00e44f5cc6ca299dd1ff52bf926a70a23ae1aeb6b399b7e32569d6d31ef1fc9bc3f5570ade6fef220dd6d74ee70259c9621b79cf487552caf1ea2727aa40f984 + languageName: node + linkType: hard + +"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": + version: 1.7.3 + resolution: "wbuf@npm:1.7.3" + dependencies: + minimalistic-assert: "npm:^1.0.0" + checksum: 10c0/56edcc5ef2b3d30913ba8f1f5cccc364d180670b24d5f3f8849c1e6fb514e5c7e3a87548ae61227a82859eba6269c11393ae24ce12a2ea1ecb9b465718ddced7 + languageName: node + linkType: hard + +"webpack-cli@npm:^4.9.1": + version: 4.9.2 + resolution: "webpack-cli@npm:4.9.2" + dependencies: + "@discoveryjs/json-ext": "npm:^0.5.0" + "@webpack-cli/configtest": "npm:^1.1.1" + "@webpack-cli/info": "npm:^1.4.1" + "@webpack-cli/serve": "npm:^1.6.1" + colorette: "npm:^2.0.14" + commander: "npm:^7.0.0" + execa: "npm:^5.0.0" + fastest-levenshtein: "npm:^1.0.12" + import-local: "npm:^3.0.2" + interpret: "npm:^2.2.0" + rechoir: "npm:^0.7.0" + webpack-merge: "npm:^5.7.3" + peerDependencies: + webpack: 4.x.x || 5.x.x + peerDependenciesMeta: + "@webpack-cli/generators": + optional: true + "@webpack-cli/migrate": + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: bin/cli.js + checksum: 10c0/42666e258bd44f0f0374de0bff696ee7d87dbc31fb7c17fd24aab44d99ab278aafb888a3f62953362436c2d8c37274dc19e2ef36cfac00d3887ac77f92e72656 + languageName: node + linkType: hard + +"webpack-dev-middleware@npm:^5.3.1": + version: 5.3.1 + resolution: "webpack-dev-middleware@npm:5.3.1" + dependencies: + colorette: "npm:^2.0.10" + memfs: "npm:^3.4.1" + mime-types: "npm:^2.1.31" + range-parser: "npm:^1.2.1" + schema-utils: "npm:^4.0.0" + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 10c0/705553c7af45eae6d8f93c5d8e6a6254085d7e1a7a789c58b1aec1c6c6c8f4bb65d5663a7c34c793920351d3c580cf566690d4fd5776a198d39a3b2c708e6ca5 + languageName: node + linkType: hard + +"webpack-dev-server@npm:^4.0.0": + version: 4.7.4 + resolution: "webpack-dev-server@npm:4.7.4" + dependencies: + "@types/bonjour": "npm:^3.5.9" + "@types/connect-history-api-fallback": "npm:^1.3.5" + "@types/express": "npm:^4.17.13" + "@types/serve-index": "npm:^1.9.1" + "@types/sockjs": "npm:^0.3.33" + "@types/ws": "npm:^8.2.2" + ansi-html-community: "npm:^0.0.8" + bonjour: "npm:^3.5.0" + chokidar: "npm:^3.5.3" + colorette: "npm:^2.0.10" + compression: "npm:^1.7.4" + connect-history-api-fallback: "npm:^1.6.0" + default-gateway: "npm:^6.0.3" + del: "npm:^6.0.0" + express: "npm:^4.17.1" + graceful-fs: "npm:^4.2.6" + html-entities: "npm:^2.3.2" + http-proxy-middleware: "npm:^2.0.0" + ipaddr.js: "npm:^2.0.1" + open: "npm:^8.0.9" + p-retry: "npm:^4.5.0" + portfinder: "npm:^1.0.28" + schema-utils: "npm:^4.0.0" + selfsigned: "npm:^2.0.0" + serve-index: "npm:^1.9.1" + sockjs: "npm:^0.3.21" + spdy: "npm:^4.0.2" + strip-ansi: "npm:^7.0.0" + webpack-dev-middleware: "npm:^5.3.1" + ws: "npm:^8.4.2" + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: 10c0/6c5b3c55aaca50a9ed7700f0813bd0cf42caabade2dfaf254fb9aa0866cf6d2084e9386b627c8256d3921b99cd2149a0022d69e6f9608d37550afa49f61b9ad5 + languageName: node + linkType: hard + +"webpack-merge@npm:^5.7.3": + version: 5.8.0 + resolution: "webpack-merge@npm:5.8.0" + dependencies: + clone-deep: "npm:^4.0.1" + wildcard: "npm:^2.0.0" + checksum: 10c0/400eaaba69d2240d51dc7a4427dde37849a8f2fdf93731be6a8aad34d70d55bb38cb10c5001c7b339fc91f8c8547e782ecbd79eff24ad861e21e6a4c5dc959fb + languageName: node + linkType: hard + +"webpack-notifier@npm:^1.6.0": + version: 1.15.0 + resolution: "webpack-notifier@npm:1.15.0" + dependencies: + node-notifier: "npm:^9.0.0" + strip-ansi: "npm:^6.0.0" + peerDependencies: + "@types/webpack": ">4.41.31" + peerDependenciesMeta: + "@types/webpack": + optional: true + checksum: 10c0/9ecb94c76e73e96bb4d0b9224fe9c0e717cd2129185f0927ebc5e633a0fc404ee0512882aa73bba7dc2be2bfe654002e212f4f4895f79e95c76b84170035a1c9 + languageName: node + linkType: hard + +"webpack-sources@npm:^1.1.0": + version: 1.4.3 + resolution: "webpack-sources@npm:1.4.3" + dependencies: + source-list-map: "npm:^2.0.0" + source-map: "npm:~0.6.1" + checksum: 10c0/78dafb3e1e297d3f4eb6204311e8c64d28cd028f82887ba33aaf03fffc82482d8e1fdf6de25a60f4dde621d3565f4c3b1bfb350f09add8f4e54e00279ff3db5e + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 10c0/2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e + languageName: node + linkType: hard + +"webpack@npm:^5.35": + version: 5.70.0 + resolution: "webpack@npm:5.70.0" + dependencies: + "@types/eslint-scope": "npm:^3.7.3" + "@types/estree": "npm:^0.0.51" + "@webassemblyjs/ast": "npm:1.11.1" + "@webassemblyjs/wasm-edit": "npm:1.11.1" + "@webassemblyjs/wasm-parser": "npm:1.11.1" + acorn: "npm:^8.4.1" + acorn-import-assertions: "npm:^1.7.6" + browserslist: "npm:^4.14.5" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.9.2" + es-module-lexer: "npm:^0.9.0" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.9" + json-parse-better-errors: "npm:^1.0.2" + loader-runner: "npm:^4.2.0" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^3.1.0" + tapable: "npm:^2.1.1" + terser-webpack-plugin: "npm:^5.1.3" + watchpack: "npm:^2.3.1" + webpack-sources: "npm:^3.2.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/35daf94ac734f7c456a5065161e3cf2420bbf99c71369bec9d4f9045bd4e8aac7ff6568e1aa90da9e7af421f4ea695ca17a52c063e61b1b056441da884efde16 + languageName: node + linkType: hard + +"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": + version: 0.7.4 + resolution: "websocket-driver@npm:0.7.4" + dependencies: + http-parser-js: "npm:>=0.5.1" + safe-buffer: "npm:>=5.1.0" + websocket-extensions: "npm:>=0.1.1" + checksum: 10c0/5f09547912b27bdc57bac17b7b6527d8993aa4ac8a2d10588bb74aebaf785fdcf64fea034aae0c359b7adff2044dd66f3d03866e4685571f81b13e548f9021f1 + languageName: node + linkType: hard + +"websocket-extensions@npm:>=0.1.1": + version: 0.1.4 + resolution: "websocket-extensions@npm:0.1.4" + checksum: 10c0/bbc8c233388a0eb8a40786ee2e30d35935cacbfe26ab188b3e020987e85d519c2009fe07cfc37b7f718b85afdba7e54654c9153e6697301f72561bfe429177e0 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + +"wildcard@npm:^2.0.0": + version: 2.0.0 + resolution: "wildcard@npm:2.0.0" + checksum: 10c0/4e22a45f4fa7f0f0d3e11860ee9ce9225246d41af6ec507e6a7d64c2692afb40d695b92c8f801deda8d3536007c2ec07981079fd0c8bb38b8521de072b33ab7a + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"ws@npm:^8.4.2": + version: 8.5.0 + resolution: "ws@npm:8.5.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/0baeee03e97865accda8fad51e8e5fa17d19b8e264529efdf662bbba2acc1c7f1de8316287e6df5cb639231a96009e6d5234b57e6ff36ee2d04e49a0995fec2f + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^1.10.2": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.4": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard